2017-03-23  Andreas Kling  <akling@apple.com>

        Let the UI process do memory kills and replace crashes with diagnostic logging.
        <https://webkit.org/b/170016>
        <rdar://problem/31091292>

        Reviewed by Chris Dumez.

        Have the WebProcess memory kill callback send a notification to the UI process
        instead of outright crashing. The UI process then sends a diagnostic logging message
        before carefully taking down the web process.

        Also add drive-by diagnostic logging for background CPU limit kills.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::simulateProcessCrash):
        (WebKit::WebProcessProxy::didExceedActiveMemoryLimit):
        (WebKit::WebProcessProxy::didExceedInactiveMemoryLimit):
        (WebKit::WebProcessProxy::didExceedBackgroundCPULimit):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2017-03-23  Tim Horton  <timothy_horton@apple.com>

        Test DataDetectors supported schemes in lowercase
        https://bugs.webkit.org/show_bug.cgi?id=169994
        <rdar://problem/30788920>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _actionForLongPress]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        Lower-case the scheme before looking in tapAndHoldSchemes, which is
        guaranteed to be in lower-case. WebCore already does this in places
        that it confers with tapAndHoldSchemes.

2017-03-22  Andy Estes  <aestes@apple.com>

        [Cocoa] Add an option to exclude overflow when snapshotting a WKWebProcessPlugInNodeHandle
        https://bugs.webkit.org/show_bug.cgi?id=169991
        <rdar://problem/30141083>

        Reviewed by Tim Horton.

        When snapshotting an element using -[WKWebProcessPlugInNodeHandle renderedImageWithOptions:],
        the image is sized to encompass all descendants, even if the element is styled with
        overflow:hidden. This patch adds a WKSnapshotOption to exclude overflow, resulting in an
        image that's always sized to the node's bounding box.

        * Shared/API/c/WKImage.h: Defined kWKSnapshotOptionsExcludeOverflow.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle renderedImageWithOptions:]): Converted the
        WKSnapshotOptions argument to a SnapshotOptions using toSnapshotOptions(), and called
        InjectedBundleNodeHandle::renderedImage() with shouldExcludeOverflow set to true if the
        WKSnapshotOptions included kWKSnapshotOptionsExcludeOverflow.
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCopySnapshotWithOptions): Ditto.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::renderedImage): If shouldExcludeOverflow is true, use
        RenderObject::absoluteBoundingBoxRectIgnoringTransforms() as the paintingRect for
        imageForRect().
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2017-03-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKScrollView should not require data interaction gestures to fail before panning
        https://bugs.webkit.org/show_bug.cgi?id=169986

        Reviewed by Tim Horton.

        This workaround is no longer needed.

        * UIProcess/ios/WKScrollView.mm:

2017-03-22  Andreas Kling  <akling@apple.com>

        Let MemoryPressureHandler track whether the process is active or inactive.
        <https://webkit.org/b/169990>

        Reviewed by Antti Koivisto.

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

2017-03-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for showing the platform data interaction caret
        https://bugs.webkit.org/show_bug.cgi?id=169898
        <rdar://problem/31146295>

        Reviewed by Beth Dakin.

        Add support for showing the caret rect when data interacting over an editable target. To do this, we add
        boilerplate plumbing to inform the WKContentView whenever the WebPageProxy's current caret rect changes.

        * Platform/spi/ios/UIKitSPI.h:

        Define IPI to retrieve the default insertion caret color.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        (WebKit::WebPageProxy::dragEnded):
        (WebKit::WebPageProxy::didEndDragging):
        (WebKit::WebPageProxy::resetCurrentDragInformation):
        (WebKit::WebPageProxy::setDragCaretRect):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didChangeDataInteractionCaretRect):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView insertionPointColor]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dragEnded):

2017-03-22  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Fix partitioning bug for client-side cookie access
        https://bugs.webkit.org/show_bug.cgi?id=169906
        <rdar://problem/31164456>

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
            This function no longer asks the NetworkStorageSession
            whether it should partition or not. That decision is
            now made as part of
            WebCore::NetworkStorageSession::cookieStoragePartition().
            The empty partition signals no partitioning.

2017-03-22  Andy Estes  <aestes@apple.com>

        [QuickLook] Rename QuickLookHandle to PreviewLoader
        https://bugs.webkit.org/show_bug.cgi?id=169961

        Reviewed by Andreas Kling.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::createPreviewLoaderClient):
        (WebKit::WebFrameLoaderClient::createQuickLookHandleClient): Deleted.
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp: Renamed from Source/WebKit2/WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.cpp.
        (WebKit::WebPreviewLoaderClient::WebPreviewLoaderClient):
        (WebKit::WebPreviewLoaderClient::~WebPreviewLoaderClient):
        (WebKit::WebPreviewLoaderClient::didReceiveDataArray):
        (WebKit::WebPreviewLoaderClient::didFinishLoading):
        (WebKit::WebPreviewLoaderClient::didFail):
        (WebKit::WebPreviewLoaderClient::didRequestPassword):
        (WebKit::WebPreviewLoaderClient::didReceivePassword):
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h: Renamed from Source/WebKit2/WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.h.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didReceivePasswordForQuickLookDocument):

2017-03-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add SPI to notify clients when data interaction is beginning or ending
        https://bugs.webkit.org/show_bug.cgi?id=169952
        <rdar://problem/31187804>

        Reviewed by Beth Dakin.

        Adds two new UI delegate SPI hooks.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

2017-03-21  Sergio Villar Senin  <svillar@igalia.com>

        [Soup] "Only from websites I visit" cookie policy is broken
        https://bugs.webkit.org/show_bug.cgi?id=168912

        Reviewed by Carlos Garcia Campos.

        Do not reset the first party for cookies on redirects. That's properly done for the main
        resource in DocumentLoader::willSendRequest and, in the case of subresources, is absolutely
        wrong (which is what we were doing since r143931).

        The most notable effect was that subresources loaded via redirects were effectively
        bypassing the "no third party" policy for cookies.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):

2017-03-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Teach TextIndicator to estimate the background color of the given Range
        https://bugs.webkit.org/show_bug.cgi?id=169869
        <rdar://problem/31127272>

        Reviewed by Anders Carlsson and Simon Fraser.

        Send the estimated background color over XPC, and adopt TextIndicatorOptionComputeEstimatedBackgroundColor when
        snapshotting after performing an edit data interaction.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didConcludeEditDataInteraction):

2017-03-21  Chris Dumez  <cdumez@apple.com>

        [WK2] Call processDidCrash() right away when terminating a process that exceeded background CPU limit
        https://bugs.webkit.org/show_bug.cgi?id=169573
        <rdar://problem/30960968>

        Reviewed by Andreas Kling.

        Call processDidCrash() right away when terminating a process that exceeded background CPU limit
        and let the client decide when to reload the content.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::terminateProcess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didExceedBackgroundCPULimit):

2017-03-21  Aidan Holm  <aidanholm+webkit@gmail.com>

        [GTK] Add function webkit_dom_element_get_bounding_client_rect
        https://bugs.webkit.org/show_bug.cgi?id=163892

        Reviewed by Carlos Garcia Campos.

        Wrap WebCore::ClientRect as WebKitDOMClientRect.
        Wrap WebCore::ClientRectList as WebKitDOMClientRectList.
        Implement webkit_dom_element_get_bounding_client_rect().
        Implement webkit_dom_element_get_client_rects().

        * PlatformGTK.cmake:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRect.cpp: Added.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.cpp: Added.
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapClientRect):
        (webkit_dom_client_rect_finalize):
        (webkit_dom_client_rect_get_property):
        (webkit_dom_client_rect_constructed):
        (webkit_dom_client_rect_class_init):
        (webkit_dom_client_rect_init):
        (webkit_dom_client_rect_get_top):
        (webkit_dom_client_rect_get_right):
        (webkit_dom_client_rect_get_bottom):
        (webkit_dom_client_rect_get_left):
        (webkit_dom_client_rect_get_width):
        (webkit_dom_client_rect_get_height):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRect.h: Added.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectPrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.h: Added.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectListPrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
        (webkit_dom_element_get_property):
        (webkit_dom_element_class_init):
        (webkit_dom_element_get_scroll_height):
        (webkit_dom_element_get_bounding_client_rect):
        (webkit_dom_element_get_client_rects):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/docs/webkitdomgtk-4.0-sections.txt:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdom.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdomautocleanups.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdomdefines.h:

2017-03-20  Alex Christensen  <achristensen@webkit.org>

        WebPageProxy DecidePolicyForNavigationAction and DecidePolicyForResponseSync should be Delayed reply messages
        https://bugs.webkit.org/show_bug.cgi?id=167183
        <rdar://problem/30203539>

        Reviewed by Andy Estes.

        Before this patch, the WKNavigationDelegate's decidePolicyForNavigationAction must synchronously call the decisionHandler.
        If it stores the decisionHandler and calls it after decidePolicyForNavigationAction returns, we can get incorrect behavior.
        This can be seen when the _WKWebsitePolicies given to the decisionHandler had no effect.
        Now, we will have the WebProcess waiting on the UIProcess to respond to the Delayed reply before continuing.
        This will not be a regression because currently everybody is either calling the decisionHandler immediately or getting incorrect behavior,
        and the behavior will be the same if the decisionHandler is called immediately. It is possible that we could make the WebProcess
        not wait on the response, but we would need to make WebCore's loading truly asynchronous first
        (getting rid of ResourceHandleClient's synchronous methods).

        Covered by making an API test asynchronously call the decisionHandler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponseSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2017-03-20  Alex Christensen  <achristensen@webkit.org>

        Fix GTK build after r214190
        https://bugs.webkit.org/show_bug.cgi?id=169885

        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendWebSocketMessage):
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        (WebKit::WebSocketServerConnection::sendRawData):
        Finish renaming send to sendData.

2017-03-20  Anders Carlsson  <andersca@apple.com>

        Fix a paste-o in WebPaymentCoordinatorProxy::platformCompletePaymentSession
        https://bugs.webkit.org/show_bug.cgi?id=169881
        rdar://problem/31030944

        Reviewed by Dan Bernstein.

        Don't always pass PKPaymentAuthorizationStatusFailure to the completion handler.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentSession):

2017-03-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        TextIndicator should support a mode where selection rects are used to size the snapshot
        https://bugs.webkit.org/show_bug.cgi?id=169845
        <rdar://problem/31127818>

        Reviewed by Beth Dakin.

        Adopt the new TextIndicatorOptionUseSelectionRectForSizing flag when generating an edit data interaction snapshot.

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

2017-03-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add missing types to WebKitAutocleanups.

        * UIProcess/API/gtk/WebKitAutocleanups.h:

2017-03-19  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Automation: non-sticky virtual keys like 'left arrow' don't work properly
        https://bugs.webkit.org/show_bug.cgi?id=169733
        <rdar://problem/30162608>

        Reviewed by Joseph Pecoraro.

        There were several issues that caused certain virtual keys to not work correctly.
        When a virtual key like 'left arrow' was dispatched as a keydown event, it was
        ultimately being translated into an insertText: command instead of moveLeft:.

         - The automation browser window was not properly made key window and active, so
           AppKit never tried to match the NSEvent as a key equivalent. That code path
           must be taken in this case, as it translates arrow keys into command selectors.

         - AppKit relies on its own private use area (PUA) unicode characters to encode
           control keys that do not affect key modifier state, like the arrow keys.
           Since these PUA characters were not being used as the 'characters' of the
           NSEvents we synthesize, the events are treated as unknown and AppKit falls
           back to inserting the codepoint as uninterpreted text.

         - The Mac implementation of platformSimulateKeyStroke did not allow non-sticky
           virtual keys to use the 'InsertByKey' interaction which sends keydown+keyup.
           This is a programming mistake that causes such inputs to assert in debug builds
           and bail out to do nothing in non-debug builds.

         - A few simulated virtual keys that are matched to key equivalents did not properly set
           'charactersIgnoringModifiers' on NSEvents, which may use the wrong editing command.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        Fix this guard so that we actually call into key event synthesis code for iOS.

        * UIProcess/Automation/WebAutomationSession.h: Add declarations.

        * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::charCodeForVirtualKey): Moved from iOS implementation.
        (WebKit::WebAutomationSession::charCodeIgnoringModifiersForVirtualKey): Added.
        There are only a few special cases for now. We will probably need to hardcode
        the decomposition for other ASCII characters so the expected DOM events are fired
        when entering a shifted character (i.e., 'A' should be 'Shift'+'a', not 'A').

        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyStroke):
        Use charCodeIgnoringModifiersForVirtualKey().

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage): use -becomeKeyWindow.
        (WebKit::keyHasStickyModifier): Added.
        (WebKit::keyCodeForVirtualKey): Added.
        (WebKit::eventModifierFlagsForVirtualKey):Added.
        (WebKit::WebAutomationSession::platformSimulateKeyStroke):
        Separately compute key stickiness, keyCode, event modifier, and charCode for
        the simulated keystroke. The code to compute charCode is now shared between
        iOS and macOS since the PUA characters are the same for both AppKit and UIKit.

2017-03-17  Brady Eidson  <beidson@apple.com>

        Make HTTPCookieStorage operate in the UIProcess in absence of a WebProcessPool.
        <rdar://problem/31102330> and https://bugs.webkit.org/show_bug.cgi?id=169797

        Reviewed by Alex Christensen.

        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::~HTTPCookieStore):
        (API::HTTPCookieStore::cookies):
        (API::HTTPCookieStore::setCookie):
        (API::HTTPCookieStore::deleteCookie):
        (API::HTTPCookieStore::registerObserver):
        (API::HTTPCookieStore::unregisterObserver):
        (API::HTTPCookieStore::cookieManagerDestroyed):
        (API::HTTPCookieStore::registerForNewProcessPoolNotifications):
        * UIProcess/API/APIHTTPCookieStore.h:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::create):
        (WebKit::WebProcessPool::notifyThisWebProcessPoolWasCreated):
        (WebKit::m_hiddenPageThrottlingTimer):
        * UIProcess/WebProcessPool.h:

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::processPoolForCookieStorageOperations):
        (WebKit::WebsiteDataStore::processPoolForCookieStorageNotifications): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2017-03-17  Chris Dumez  <cdumez@apple.com>

        [WK2] Disable background tab responsiveness detection on iOS
        https://bugs.webkit.org/show_bug.cgi?id=169824
        <rdar://problem/30913776>

        Reviewed by Dan Bernstein.

        Disable background tab responsiveness detection on iOS where background tabs
        often get suspended. This feature was not tested or meant to be enabled on
        iOS, this was an oversight on my part.

        * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
        (WebKit::BackgroundProcessResponsivenessTimer::shouldBeActive):

2017-03-17  Michael Saboff  <msaboff@apple.com>

        Use USE_INTERNAL_SDK to compute ENABLE_FAST_JIT_PERMISSIONS instead of HAVE_INTERNAL_SDK
        https://bugs.webkit.org/show_bug.cgi?id=169817

        Reviewed by Filip Pizlo.

        * Configurations/FeatureDefines.xcconfig:

2017-03-17  Antti Koivisto  <antti@apple.com>

        Add a reload policy where only expired subresources are revalidated
        https://bugs.webkit.org/show_bug.cgi?id=169756

        Reviewed by Andreas Kling.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageReload):
        (WKPageReloadWithoutContentBlockers):
        (WKPageReloadFromOrigin):
        (WKPageReloadExpiredOnly):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController reload]):
        (-[WKBrowsingContextController reloadFromOrigin]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        (-[WKWebView _reloadWithoutContentBlockers]):
        (-[WKWebView _reloadExpiredOnly]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::reloadBrowsingContext):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didHandleContentFilterUnblockNavigation):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reload):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reload):
        (WebKit::shouldReuseCommittedSandboxExtension):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2017-03-16  Alex Christensen  <achristensen@webkit.org>

        Use completion handlers instead of return values for sending websocket data
        https://bugs.webkit.org/show_bug.cgi?id=169802

        Reviewed by Carlos Garcia Campos.

        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendWebSocketMessage):
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        (WebKit::WebSocketServerConnection::sendRawData):

2017-03-17  Tomas Popela  <tpopela@redhat.com>

        Fix uninitialized public members in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=169604

        Reviewed by Michael Catanzaro.

        Found by Coverity scan.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePluginX11::NetscapePluginX11):

2017-03-17  Tomas Popela  <tpopela@redhat.com>

        Fix uninitialized public members in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=169598

        Reviewed by Alex Christensen.

        Found by Coverity scan.

        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:

2017-03-16  Alex Christensen  <achristensen@webkit.org>

        Fix GTK build.

        * UIProcess/InspectorServer/WebSocketServerConnection.h:

2017-03-16  Alex Christensen  <achristensen@webkit.org>

        Fix GTK build.

        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::didReceiveSocketStreamData):
        * UIProcess/InspectorServer/WebSocketServerConnection.h:

2017-03-16  Michael Saboff  <msaboff@apple.com>

        Turn off JavaScript Configuration File processing for Debug builds
        https://bugs.webkit.org/show_bug.cgi?id=169799

        Reviewed by Dean Jackson.

        Change the default value for m_javaScriptConfigurationFileEnabled for Debug
        builds to be the same as a Release build, that is false (off).

        * UIProcess/WebProcessPool.h:

2017-03-16  Simon Fraser  <simon.fraser@apple.com>

        Improve the system tracing points
        https://bugs.webkit.org/show_bug.cgi?id=169790

        Reviewed by Zalan Bujtas.

        Use a more cohesive set of system trace points that give a good overview of what
        WebKit is doing. Added points for resource loading, render tree building, sync messages
        to the web process, async image decode, WASM and fetching cookies.

        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::sendSync):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::buildTransaction):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::flush):

2017-03-16  Youenn Fablet  <youenn@apple.com>

        Wrap legacy WebRTC API in runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=169646

        Reviewed by Alex Christensen.

        Adding preference to legacy API.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebRTCLegacyAPIEnabled):
        (WKPreferencesGetWebRTCLegacyAPIEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-03-16  Brady Eidson  <beidson@apple.com>

        Update the WKHTTPCookieStore API to be simpler and add observers.
        <rdar://problem/31096000> and https://bugs.webkit.org/show_bug.cgi?id=169776

        Reviewed by Alex Christensen.
        
        When reviewing the API internally we realized the NSHTTPCookieStorage model doesn't
        necessarily fit perfectly, and that to handle partitioned cookies going forward we
        need to be much simpler right now.
        
        We also realized that we should implement the "cookie store changed" observer for
        any clients that might be providing a cookie viewing API.
        
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::~HTTPCookieStore):
        (API::HTTPCookieStore::deleteCookie):
        (API::APIWebCookieManagerProxyObserver::APIWebCookieManagerProxyObserver):
        (API::HTTPCookieStore::registerObserver):
        (API::HTTPCookieStore::unregisterObserver):
        (API::HTTPCookieStore::cookiesDidChange):
        (API::HTTPCookieStore::cookieManagerDestroyed):
        (API::HTTPCookieStore::registerForNewProcessPoolNotifications):
        (API::HTTPCookieStore::unregisterForNewProcessPoolNotifications):
        (API::HTTPCookieStore::setCookies): Deleted.
        (API::HTTPCookieStore::removeCookiesSinceDate): Deleted.
        (API::HTTPCookieStore::setHTTPCookieAcceptPolicy): Deleted.
        (API::HTTPCookieStore::getHTTPCookieAcceptPolicy): Deleted.
        * UIProcess/API/APIHTTPCookieStore.h:
        
        * UIProcess/API/Cocoa/WKHTTPCookieStore.h:
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
        (WKHTTPCookieStoreObserver::WKHTTPCookieStoreObserver):
        (-[WKHTTPCookieStore dealloc]):
        (-[WKHTTPCookieStore allCookies:]):
        (-[WKHTTPCookieStore addObserver:]):
        (-[WKHTTPCookieStore removeObserver:]):
        (-[WKHTTPCookieStore fetchCookies:]): Deleted.
        (-[WKHTTPCookieStore fetchCookiesForURL:completionHandler:]): Deleted.
        (-[WKHTTPCookieStore setCookies:forURL:mainDocumentURL:completionHandler:]): Deleted.
        (-[WKHTTPCookieStore removeCookiesSinceDate:completionHandler:]): Deleted.
        (-[WKHTTPCookieStore setCookieAcceptPolicy:completionHandler:]): Deleted.
        (kitCookiePolicyToNSCookiePolicy): Deleted.
        (-[WKHTTPCookieStore fetchCookieAcceptPolicy:]): Deleted.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::~WebCookieManagerProxy):
        (WebKit::WebCookieManagerProxy::processPoolDestroyed):
        (WebKit::WebCookieManagerProxy::registerObserver):
        (WebKit::WebCookieManagerProxy::unregisterObserver):
        (WebKit::WebCookieManagerProxy::cookiesDidChange):
        (WebKit::WebCookieManagerProxy::setCookieObserverCallback): Deleted.
        * UIProcess/WebCookieManagerProxy.h:
        (WebKit::WebCookieManagerProxy::Observer::~Observer):

        Add the ability for interested clients to listen for the creation of new WebProcessPools,
        which is needed by APIHTTPCookieStore:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::generateListenerIdentifier):
        (WebKit::processPoolCreationListenerFunctionMap):
        (WebKit::WebProcessPool::registerProcessPoolCreationListener):
        (WebKit::WebProcessPool::unregisterProcessPoolCreationListener):
        (WebKit::WebProcessPool::create):
        * UIProcess/WebProcessPool.h:

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::processPoolForCookieStorageNotifications):
        (WebKit::WebsiteDataStore::isAssociatedProcessPool):
        (WebKit::WebsiteDataStore::processPools):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2017-03-16  Brian Burg  <bburg@apple.com>

        [iOS WK2] Web Automation: implement platform methods for simulating keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=169487
        <rdar://problem/28360564>

        Reviewed by Joseph Pecoraro.

        Reimplement platformSimulateKey{Stroke, Sequence} to simulate events coming from UIKit.
        These events are sent directly into WebCore without going through the keyboard system,
        since we don't need to show the keyboard when simulating keystrokes. For example, the
        keystrokes may not be representable given the current keyboard layout and system language.

        * UIProcess/Automation/WebAutomationSession.cpp:
        * UIProcess/Automation/WebAutomationSession.h:
        Un-stub implementations that now exist for iOS.

        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm: Added.

        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage): Added.
        This is similar to the Mac version, but it sends events directly into WebPageProxy
        instead of sending them to the NSWindow containing the WebView.

        (WebKit::WebAutomationSession::platformSimulateKeyStroke):
        Use a somewhat different strategy for determining the charCode/keyCode since we cannot
        rely on the system keyboard / input manager to generate and deliver real key events.
        Compared to the Mac platform method, this requires setting up fewer fields and does
        not use AppKit's current modifier state to determine the effect of sticky modifiers.

        (WebKit::WebAutomationSession::platformSimulateKeySequence):
        This is almost verbatim from the Mac platform method but uses a different event class.

        * WebKit2.xcodeproj/project.pbxproj: Add new file.

2017-03-16  Youenn Fablet  <youenn@apple.com>

        [mac-wk2 debug] LayoutTest webrtc/video-mute.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=169758

        Reviewed by Eric Carlson.

        Test is timing out due to the UIProcess requesting to disable/enable ICE candidate filtering
        on a page whose preference is set to not enabling ICE candidate filtering.
        Current fix is to act upon what UI process asks if the page preference is to enable ICE candidate filtering.
        If ICE candidate filtering preference is disable for that page (WebKitTestRunner case), no disabling/enabling is done at all. 

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::endedCaptureSession):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_backgroundCPULimit):
        (WebKit::m_backgroundCPULimit):
        (WebKit::WebPage::disableICECandidateFiltering):
        (WebKit::WebPage::enableICECandidateFiltering):
        * WebProcess/WebPage/WebPage.h:

2017-03-16  Alex Christensen  <achristensen@webkit.org>

        Clean up WKContentExtension API
        https://bugs.webkit.org/show_bug.cgi?id=169772

        Reviewed by Geoffrey Garen.

        Based on feedback I have decided to do the following:
        1. Rename lookup to lookUp because look and up are two words.
        2. Change the parameter of removeContentExtension to a WKContentExtension* to match addContentExtension.
        3. Add an identifier property accessor to WKContentExtension.
        4. Change the order of the new error types.  This wasn't exactly based on any feedback, but they look more organized now.

        * UIProcess/API/Cocoa/WKContentExtension.h:
        * UIProcess/API/Cocoa/WKContentExtension.mm:
        (-[WKContentExtension identifier]):
        * UIProcess/API/Cocoa/WKContentExtensionStore.h:
        * UIProcess/API/Cocoa/WKContentExtensionStore.mm:
        (toWKErrorCode):
        (-[WKContentExtensionStore lookUpContentExtensionForIdentifier:completionHandler:]):
        (-[WKContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKError.mm:
        (localizedDescriptionForErrorCode):
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController removeContentExtension:]):
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (toUserContentExtensionStoreError):
        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):

2017-03-16  Tomas Popela  <tpopela@redhat.com>

        Fix uninitialized public members in Webkit2/UIProcess/API/gtk
        https://bugs.webkit.org/show_bug.cgi?id=169602

        Reviewed by Michael Catanzaro.

        Found by Coverity scan.

        * UIProcess/API/gtk/WebKitMimeInfo.cpp:
        * UIProcess/API/gtk/WebKitSettings.cpp:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:

2017-03-16  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r213787. Move the DatabaseProcess build targets
        to the top of WebKit2_SOURCES list in order to maintain the alphabetical
        order.

        * CMakeLists.txt:

2017-03-15  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-03-15  Jer Noble  <jer.noble@apple.com>

        Optionally capture audio in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=169609

        Reviewed by Alex Christensen.

        Add a new class pair, UserMediaCaptureManager/Proxy, to allow a RealtimeMediaSource
        requested in a WebProcess to be created in the UIProcess and push its audio data across the
        process boundary to its clients in the WebProcess. Because these classes are clients of the
        RealtimeMediaSourceCenter::singleton(), they must be a singleton in the WebProcess as well,
        so they are attached to the WebProcess class in the web process and to WebProcessProxy in
        the UIProcess.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Added.
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::source):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::description):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::numberOfFrames):
        (WebKit::UserMediaCaptureManagerProxy::UserMediaCaptureManagerProxy):
        (WebKit::UserMediaCaptureManagerProxy::~UserMediaCaptureManagerProxy):
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManagerProxy::startProducingData):
        (WebKit::UserMediaCaptureManagerProxy::stopProducingData):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        (WebKit::UserMediaCaptureManagerProxy::process):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in: Added.
        * WebProcess/cocoa/UserMediaCaptureManager.cpp: Added.
        (WebKit::nextSessionID):
        (WebKit::UserMediaCaptureManager::Source::Source):
        (WebKit::UserMediaCaptureManager::Source::~Source):
        (WebKit::UserMediaCaptureManager::Source::setCapabilities):
        (WebKit::UserMediaCaptureManager::Source::setSettings):
        (WebKit::UserMediaCaptureManager::Source::description):
        (WebKit::UserMediaCaptureManager::Source::setStorage):
        (WebKit::UserMediaCaptureManager::Source::setRingBufferFrameBounds):
        (WebKit::UserMediaCaptureManager::Source::audioSamplesAvailable):
        (WebKit::UserMediaCaptureManager::UserMediaCaptureManager):
        (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):
        (WebKit::UserMediaCaptureManager::supplementName):
        (WebKit::UserMediaCaptureManager::initialize):
        (WebKit::UserMediaCaptureManager::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManager::sourceStopped):
        (WebKit::UserMediaCaptureManager::sourceMutedChanged):
        (WebKit::UserMediaCaptureManager::sourceEnabledChanged):
        (WebKit::UserMediaCaptureManager::sourceSettingsChanged):
        (WebKit::UserMediaCaptureManager::storageChanged):
        (WebKit::UserMediaCaptureManager::ringBufferFrameBoundsChanged):
        (WebKit::UserMediaCaptureManager::audioSamplesAvailable):
        (WebKit::UserMediaCaptureManager::startProducingData):
        (WebKit::UserMediaCaptureManager::stopProducingData):
        * WebProcess/cocoa/UserMediaCaptureManager.h: Added.
        * WebProcess/cocoa/UserMediaCaptureManager.messages.in: Added.

        Initialize UserMediaCaptureManager/Proxy:

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):

        WebUserMediaClientMac is no longer necessary now that the UserMediaCaptureManager overrides
        the factories:

        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::WebUserMediaClient):
        (WebKit::WebUserMediaClient::initializeFactories): Deleted.

        Add a new preference and WebProcessCreationParameters member to control whether
        capturing is done in the UIProcess:

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

        Add new files to the project:

        * DerivedSources.make:
        * WebKit2.xcodeproj/project.pbxproj:

2017-03-15  Tim Horton  <timothy_horton@apple.com>

        Null deref under callAfterNextPresentationUpdate
        https://bugs.webkit.org/show_bug.cgi?id=169710
        <rdar://problem/30987863>

        Reviewed by Simon Fraser.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::callAfterNextPresentationUpdate):
        Call the callback with an error if we don't have a web process or drawing area.

2017-03-15  Chris Dumez  <cdumez@apple.com>

        Document state (e.g. form data) is lost after a tab is terminated in the background for power reasons
        https://bugs.webkit.org/show_bug.cgi?id=169635
        <rdar://problem/31046729>

        Reviewed by Andreas Kling.

        Document state (e.g. form data) was lost after a tab was terminated in the background for power
        reasons. To address the issue, we now save the document state whenever a page is backgrounded.
        This document state automatically gets restored when reloading the page after termination.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::visibilityDidChange):
        (WebKit::WebPage::setActivityState):
        * WebProcess/WebPage/WebPage.h:

2017-03-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebContent crash due to bad variant access in WebKit: WebKit::WebPage::expandedRangeFromHandle
        https://bugs.webkit.org/show_bug.cgi?id=169657
        <rdar://problem/30631070>

        Reviewed by Tim Horton.

        In WebPageIOS.mm, the call to unionDOMRanges from WebPage::expandedRangeFromHandle invokes
        Range::compareBoundaryPoints, assuming that the return value is not an exception, and then attempts to perform
        integer comparison on the result. This is one speculative cause of the web content crash in the radar.

        There isn't a known way to reproduce this crash.

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

2017-03-15  Tim Horton  <timothy_horton@apple.com>

        Un-deprecate the original PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=169655

        Reviewed by Anders Carlsson.

        * Shared/mac/PDFKitImports.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/DeprecatedPDFLayerControllerSPI.h: Removed.
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h: Removed.
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: Removed.
        * WebProcess/Plugins/PDF/PDFLayerControllerSPI.h:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        The transition to the non-deprecated PDFPlugin never happened,
        and we have a very different plan now.

2017-03-15  Alex Christensen  <achristensen@webkit.org>

        Compiled content extensions should include the JSON source
        https://bugs.webkit.org/show_bug.cgi?id=169643

        Reviewed by Geoffrey Garen.

        * UIProcess/API/APIContentExtensionStore.cpp:
        (API::ContentExtensionStore::ContentExtensionStore):
        (API::ContentExtensionMetaData::fileSize):
        (API::encodeContentExtensionMetaData):
        (API::decodeContentExtensionMetaData):
        (API::compiledToFile):
        (API::createExtension):
        (API::ContentExtensionStore::getContentExtensionSource):
        * UIProcess/API/APIContentExtensionStore.h:
        * UIProcess/API/Cocoa/WKContentExtensionStore.mm:
        (toWKErrorCode):
        (-[WKContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[WKContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):
        (-[WKContentExtensionStore _getContentExtensionSourceForIdentifier:completionHandler:]):
        * UIProcess/API/Cocoa/WKContentExtensionStorePrivate.h:
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (toUserContentExtensionStoreError):
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):

2017-03-15  Dean Jackson  <dino@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=169669

        Reviewed by Antoine Quint.

        * WebKit2.xcodeproj/project.pbxproj:

2017-03-14  Andy Estes  <aestes@apple.com>

        [iOS] -[WKWebView _dataForDisplayedPDF] returns nil when called before an encrypted PDF has been unlocked
        https://bugs.webkit.org/show_bug.cgi?id=169653
        <rdar://problem/24137675>

        Reviewed by Tim Horton.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView pdfDocument]): Changed to return _cgPDFDocument directly instead of via the
        UIPDFDocument, which is only created after the PDF has been unlocked.

2017-03-14  Tim Horton  <timothy_horton@apple.com>

        Let PDFLayerController drive cursor updates so that it's correct more often
        https://bugs.webkit.org/show_bug.cgi?id=169626
        <rdar://problem/30762943>

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PDF/DeprecatedPDFLayerControllerSPI.h:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate setMouseCursor:]):
        (WebKit::PDFPlugin::handleMouseEvent):
        (WebKit::PDFPlugin::handleMouseEnterEvent):
        (WebKit::pdfLayerControllerCursorTypeToCursor):
        (WebKit::PDFPlugin::notifyCursorChanged):
        Disable updateCursor and use the setMouseCursor delegate method when possible.

2017-03-14  Andrew Gold  <agold@apple.com>

        Extend WKPreferences to include preferences for testing MediaCapture.
        https://bugs.webkit.org/show_bug.cgi?id=169560

        Reviewed by Youenn Fablet.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _mockCaptureDevicesEnabled]):
        (-[WKPreferences _setMockCaptureDevicesEnabled:]):
        (-[WKPreferences _mediaCaptureRequiresSecureConnection]):
        (-[WKPreferences _setMediaCaptureRequiresSecureConnection:]):
        (-[WKPreferences _enumeratingAllNetworkInterfacesEnabled]):
        (-[WKPreferences _setEnumeratingAllNetworkInterfacesEnabled:]):
        (-[WKPreferences _iceCandidateFiltertingEnabled]):
        (-[WKPreferences _setICECandidateFilteringEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2017-03-14  Brady Eidson  <beidson@apple.com>

        Rename WKHTTPCookieStorage to WKHTTPCookieStore.
        https://bugs.webkit.org/show_bug.cgi?id=169630

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        
        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        
        * UIProcess/API/APIHTTPCookieStore.cpp: Renamed from Source/WebKit2/UIProcess/API/APIHTTPCookieStorage.cpp.
        (API::HTTPCookieStore::HTTPCookieStore):
        (API::HTTPCookieStore::~HTTPCookieStore):
        (API::HTTPCookieStore::cookies):
        (API::HTTPCookieStore::setCookie):
        (API::HTTPCookieStore::setCookies):
        (API::HTTPCookieStore::deleteCookie):
        (API::HTTPCookieStore::removeCookiesSinceDate):
        (API::HTTPCookieStore::setHTTPCookieAcceptPolicy):
        (API::HTTPCookieStore::getHTTPCookieAcceptPolicy):
        * UIProcess/API/APIHTTPCookieStore.h: Renamed from Source/WebKit2/UIProcess/API/APIHTTPCookieStorage.h.
        
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::httpCookieStore):
        (API::WebsiteDataStore::httpCookieStorage): Deleted.
        * UIProcess/API/APIWebsiteDataStore.h:
        
        * UIProcess/API/Cocoa/WKHTTPCookieStore.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKHTTPCookieStorage.h.
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKHTTPCookieStorage.mm.
        (coreCookiesToNSCookies):
        (-[WKHTTPCookieStore dealloc]):
        (-[WKHTTPCookieStore fetchCookies:]):
        (-[WKHTTPCookieStore fetchCookiesForURL:completionHandler:]):
        (-[WKHTTPCookieStore setCookie:completionHandler:]):
        (-[WKHTTPCookieStore deleteCookie:completionHandler:]):
        (-[WKHTTPCookieStore setCookies:forURL:mainDocumentURL:completionHandler:]):
        (-[WKHTTPCookieStore removeCookiesSinceDate:completionHandler:]):
        (-[WKHTTPCookieStore setCookieAcceptPolicy:completionHandler:]):
        (kitCookiePolicyToNSCookiePolicy):
        (-[WKHTTPCookieStore fetchCookieAcceptPolicy:]):
        (-[WKHTTPCookieStore _apiObject]):
        * UIProcess/API/Cocoa/WKHTTPCookieStoreInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKHTTPCookieStorageInternal.h.
        (WebKit::wrapper):
        
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _httpCookieStore]):
        (-[WKWebsiteDataStore _httpCookieStorage]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:
        
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::processPoolForCookieStorageOperations):
        
        * WebKit2.xcodeproj/project.pbxproj:

2017-03-14  Anders Carlsson  <andersca@apple.com>

        Propagate PassKit errors
        https://bugs.webkit.org/show_bug.cgi?id=169633
        rdar://problem/31043392

        Reviewed by Dean Jackson.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toNSError):

2017-03-06  Jer Noble  <jer.noble@apple.com>

        Refactor: Allow WebKit2 to override the creation of RealtimeMediaSources
        https://bugs.webkit.org/show_bug.cgi?id=169227

        Reviewed by Eric Carlson.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::WebUserMediaClient):
        (WebKit::WebUserMediaClient::initializeFactories): Add empty non-Cocoa implementation.
        * WebProcess/WebCoreSupport/WebUserMediaClient.h:
        * WebProcess/WebCoreSupport/cocoa/WebUserMediaClientMac.mm: Added.
        (WebKit::WebUserMediaClient::initializeFactories): Initialize a (for now) pass-through factory.

2017-03-14  Dean Jackson  <dino@apple.com>

        Rename LayerTypeWebGLLayer and use it for both WebGL and WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=169628
        <rdar://problems/31047025>

        Reviewed by Simon Fraser.

        Rename LayerTypeWebGLLayer to LayerTypeContentsProvidedLayer
        and use it for both WebGLLayer and WebGPULayer, to avoid
        code duplication.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::description):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        (WebKit::PlatformCALayerRemoteCustom::clone):

2017-03-13  Jer Noble  <jer.noble@apple.com>

        Make classes used by Media Stream encode/decode friendly
        https://bugs.webkit.org/show_bug.cgi?id=169567

        Reviewed by Eric Carlson.

        Make the encoder and decoder for MediaConstraintsData a little less wordy.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MediaConstraintsData>::encode):
        (IPC::ArgumentCoder<MediaConstraintsData>::decode):

2017-03-14  Jer Noble  <jer.noble@apple.com>

        Adapt CARingBuffer to be usable across processes
        https://bugs.webkit.org/show_bug.cgi?id=169591

        Reviewed by Alex Christensen.

        Add a new class which wraps a SharedMemory object and uses that shared memory as the
        backing store of a CARingBuffer. This backing store can be set to "read only", which
        prevents the backing from being de- or re-allocated.

        * WebKit2.xcodeproj/project.pbxproj:
        * Shared/Cocoa/SharedRingBufferStorage.cpp: Added.
        (WebKit::SharedRingBufferStorage::setStorage):
        (WebKit::SharedRingBufferStorage::setReadOnly):
        (WebKit::SharedRingBufferStorage::allocate):
        (WebKit::SharedRingBufferStorage::deallocate):
        (WebKit::SharedRingBufferStorage::data):
        * Shared/Cocoa/SharedRingBufferStorage.h: Added.
        (WebKit::SharedRingBufferStorage::SharedRingBufferStorage):
        (WebKit::SharedRingBufferStorage::invalidate):
        (WebKit::SharedRingBufferStorage::storage):
        (WebKit::SharedRingBufferStorage::readOnly):

2017-03-14  Eric Carlson  <eric.carlson@apple.com>

        [iOS] The web process should inherit application state from UI process
        https://bugs.webkit.org/show_bug.cgi?id=169156
        <rdar://problem/30845473>

        Reviewed by Brady Eidson.
        
        Move PID proxy setup to platformInitializeWebProcess as suggested in 
        post-landing feedback.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2017-03-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r213915.

        Caused WK2 LayoutTests to exit early with timeouts.

        Reverted changeset:

        "Fix uninitialized public members in NetworkProcess"
        https://bugs.webkit.org/show_bug.cgi?id=169598
        http://trac.webkit.org/changeset/213915

2017-03-14  Brady Eidson  <beidson@apple.com>

        REGRESSION (r213877): WebKit2.CookieManager fails.
        https://bugs.webkit.org/show_bug.cgi?id=169581

        Reviewed by Tim Horton.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::processPoolDestroyed): Invalidate the new sets of callbacks.
        (WebKit::WebCookieManagerProxy::processDidClose): Ditto.

2017-03-14  Tomas Popela  <tpopela@redhat.com>

        Fix uninitialized public members in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=169598

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2017-03-10  Ada Chan  <adachan@apple.com>

        [Mac] Add API to get the NSURLProtectionSpace from WKProtectionSpaceRef
        https://bugs.webkit.org/show_bug.cgi?id=169494
        <rdar://problem/11872163>

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/mac/WKProtectionSpaceNS.h: Added.
        * UIProcess/API/C/mac/WKProtectionSpaceNS.mm: Added.
        (WKProtectionSpaceCopyNSURLProtectionSpace):
        * WebKit2.xcodeproj/project.pbxproj:

2017-03-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Adopt updated data operation interfaces for data interaction
        https://bugs.webkit.org/show_bug.cgi?id=169414
        <rdar://problem/30948186>

        Reviewed by Tim Horton.

        Plumb additional information about the data interaction caret over to the UI process after handling a data
        interaction action in the web process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        (WebKit::WebPageProxy::resetCurrentDragInformation):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::currentDragCaretRect):
        (WebKit::WebPageProxy::resetCurrentDragInformation): Deleted.
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

2017-03-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Data interaction tests occasionally hit assertions in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=169002
        <rdar://problem/30994806>

        Reviewed by Tim Horton.

        Renames setIgnoreCompositionSelectionChange to setIgnoreSelectionChanges. See WebCore ChangeLog for more details.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::editorStateChanged):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        (WebKit::WebPage::performDragControllerAction):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::setSelectionChangeUpdatesEnabledInAllFrames):
        (WebKit::FindController::willFindString):
        (WebKit::FindController::didFailToFindString):
        (WebKit::FindController::didHideFindIndicator):
        (WebKit::setCompositionSelectionChangeEnabledInAllFrames): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateSelectionAppearance):
        (WebKit::WebPage::replaceSelectedText):
        (WebKit::WebPage::replaceDictatedText):

2017-03-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix syntax error in GTK+ API docs.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):

2017-03-13  Brady Eidson  <beidson@apple.com>

        WKWebView provides no access to cookies.
        https://bugs.webkit.org/show_bug.cgi?id=140191

        Reviewed by Tim Horton.

        This adds a new WKHTTPCookieManager SPI.
        It follows the NSHTTPCookieStorage API but asynchronous (with completion handlers).
        
        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):

        * UIProcess/API/APIHTTPCookieStorage.cpp: Added.
        (API::HTTPCookieStorage::HTTPCookieStorage):
        (API::HTTPCookieStorage::~HTTPCookieStorage):
        (API::HTTPCookieStorage::cookies):
        (API::HTTPCookieStorage::setCookie):
        (API::HTTPCookieStorage::setCookies):
        (API::HTTPCookieStorage::deleteCookie):
        (API::HTTPCookieStorage::removeCookiesSinceDate):
        (API::HTTPCookieStorage::setHTTPCookieAcceptPolicy):
        (API::HTTPCookieStorage::getHTTPCookieAcceptPolicy):
        * UIProcess/API/APIHTTPCookieStorage.h: Added.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultDataStore):
        (API::WebsiteDataStore::httpCookieStorage):
        * UIProcess/API/APIWebsiteDataStore.h:

        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerDeleteAllCookiesModifiedAfterDate):
        (WKCookieManagerSetHTTPCookieAcceptPolicy):
        (WKCookieManagerGetHTTPCookieAcceptPolicy):

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreGetDefaultDataStore):

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setCookieAcceptPolicy:]):

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore defaultDataStore]):
        (-[WKWebsiteDataStore _httpCookieStorage]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        
        * UIProcess/API/Cocoa/WKHTTPCookieStorage.h:
        * UIProcess/API/Cocoa/WKHTTPCookieStorage.mm: Added.
        (coreCookiesToNSCookies):
        (-[WKHTTPCookieStorage dealloc]):
        (-[WKHTTPCookieStorage fetchCookies:]):
        (-[WKHTTPCookieStorage fetchCookiesForURL:completionHandler:]):
        (-[WKHTTPCookieStorage setCookie:completionHandler:]):
        (-[WKHTTPCookieStorage deleteCookie:completionHandler:]):
        (-[WKHTTPCookieStorage setCookies:forURL:mainDocumentURL:completionHandler:]):
        (-[WKHTTPCookieStorage removeCookiesSinceDate:completionHandler:]):
        (-[WKHTTPCookieStorage setCookieAcceptPolicy:completionHandler:]):
        (kitCookiePolicyToNSCookiePolicy):
        (-[WKHTTPCookieStorage fetchCookieAcceptPolicy:]):
        (-[WKHTTPCookieStorage _apiObject]):
        * UIProcess/API/Cocoa/WKHTTPCookieStorageInternal.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h.
        (WebKit::wrapper):

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::addSingleCookie):

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
        (WebKit::WebCookieManagerProxy::deleteAllCookies):
        (WebKit::WebCookieManagerProxy::deleteCookie):
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManagerProxy::setCookie):
        (WebKit::WebCookieManagerProxy::setCookies):
        (WebKit::WebCookieManagerProxy::getAllCookies):
        (WebKit::WebCookieManagerProxy::getCookies):
        (WebKit::WebCookieManagerProxy::didSetCookies):
        (WebKit::WebCookieManagerProxy::didGetCookies):
        (WebKit::WebCookieManagerProxy::didDeleteCookies):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::setCookieObserverCallback):
        (WebKit::WebCookieManagerProxy::cookiesDidChange):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::didSetHTTPCookieAcceptPolicy):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.messages.in:

        * UIProcess/WebFrameProxy.h:
        
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:
        
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::processPoolForCookieStorageOperations):
        (WebKit::WebsiteDataStore::processPools):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::deleteCookie):
        (WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManager::getAllCookies):
        (WebKit::WebCookieManager::getCookies):
        (WebKit::WebCookieManager::setCookie):
        (WebKit::WebCookieManager::setCookies):
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:

2017-03-13  John Wilander  <wilander@apple.com>

        Resource Load Statistics: More efficient network process messaging + Fix bug in user interaction reporting
        https://bugs.webkit.org/show_bug.cgi?id=169506

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::shouldPartitionCookiesForTopPrivatelyOwnedDomains):
            Now takes two vectors – domainsToRemove and domainsToAdd.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
            The message now takes two vectors – domainsToRemove and domainsToAdd.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::shouldPartitionCookiesForTopPrivatelyOwnedDomains):
            Now takes two vectors – domainsToRemove and domainsToAdd.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
            The message now takes two vectors – domainsToRemove and domainsToAdd.
        * UIProcess/WebResourceLoadStatisticsManager.cpp:
        (WebKit::WebResourceLoadStatisticsManager::fireShouldPartitionCookiesHandler):
            Now converts to the two vectors needed by
            WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler().
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::classifyResource):
            No longer explicitly calls ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler().
        (WebKit::WebResourceLoadStatisticsStore::removeDataRecords):
            Changed the order of two blocks to not build a vector if we are to return early.
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
            Now calls WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler().
        (WebKit::WebResourceLoadStatisticsStore::registerSharedResourceLoadObserver):
            Now takes a handler with two vectors – domainsToRemove and domainsToAdd.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::shouldPartitionCookiesForTopPrivatelyOwnedDomains):
            Now takes two vectors – domainsToRemove and domainsToAdd.
        (WebKit::WebsiteDataStore::registerSharedResourceLoadObserver):
            Now submits a handler that takes two vectors – domainsToRemove and domainsToAdd.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2017-03-13  Dean Jackson  <dino@apple.com>

        Respect the runtime flag for WebGPU, default feature to off, and print a warning
        https://bugs.webkit.org/show_bug.cgi?id=169564
        <rdar://problems/31018864>

        Reviewed by Tim Horton.

        Make sure WebGPU respects its runtime feature flag. Also, since
        this implementation doesn't validate content, it should default
        to being disabled.

        * Shared/WebPreferencesDefinitions.h:

2017-03-13  Anders Carlsson  <andersca@apple.com>

        Fix more build warnings.

        * UIProcess/mac/WKWebInspectorWKWebView.mm:
        (WebKit::runOpenPanel):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformSave):

2017-03-13  Anders Carlsson  <andersca@apple.com>

        Fix build warnings.

        * UIProcess/mac/RemoteWebInspectorProxyMac.mm:
        (WebKit::RemoteWebInspectorProxy::platformSave):

2017-03-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up RunLoop and WorkQueue with Seconds and Function
        https://bugs.webkit.org/show_bug.cgi?id=169537

        Reviewed by Sam Weinig.

        * Shared/ChildProcess.cpp:
        (WebKit::didCloseOnConnectionWorkQueue):
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
        (WebKit::AcceleratedSurfaceX11::resize):

2017-03-13  Chris Dumez  <cdumez@apple.com>

        Allow termination of background WebProcesses that go over a given CPU usage threshold
        https://bugs.webkit.org/show_bug.cgi?id=169456
        <rdar://problem/30960968>

        Reviewed by Andreas Kling.

        Allow termination of background WebProcesses that go over a given CPU usage threshold.
        This can be enabled client side via the WKPageConfigurationSetBackgroundCPULimit()
        SPI. The client provides the actual CPU threshold it wants to use at page level.

        If such limit is set, whenever a WebContent process has no visible pages, we start
        monitoring its CPU usage over 15 minutes periods. At the end of each period, we
        check if the process' average CPU usage over this period was greater than the
        background CPU limit. If it greater, the WebContent process send an IPC message to
        the UIProcess letting it know that it exceeded the CPU limit. The UI process will
        then log a message and terminate the process unless it has any audio playing.

        Once a WebProcess has been terminated, we do not let the client know until one of its
        pages becomes visible again. When this happens, we call the processDidCrash
        delegate and Safari will take care of reloading the tab and showing the crash
        banner then. This is done because we do not want to reload content that is
        using a lot of CPU while in the background.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Add backgroundCPULimit to WebPageCreationParameters.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::backgroundCPULimit):
        (API::PageConfiguration::setBackgroundCPULimit):
        Add backgroundCPULimit to APIPageConfiguration.

        * UIProcess/API/C/WKPageConfigurationRef.cpp:
        (WKPageConfigurationSetBackgroundCPULimit):
        * UIProcess/API/C/WKPageConfigurationRef.h:
        Add SPI to set background CPU limit.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        Reset m_wasTerminatedDueToResourceExhaustionWhileInBackground flag
        as the process was restarted.

        (WebKit::WebPageProxy::dispatchActivityStateChange):
        When the visibility state changes for a page that was terminated
        while in the background due to exceeded CPU limit, notify the
        client that the process crashed via the processDidCrash delegate.
        Safari will use this delegate to reload the tab and show the crash
        banner.

        (WebKit::WebPageProxy::terminateProcess):
        Add parameter to terminateProcess() to provide the reason. If the
        page was terminated due to reaching CPU limit, set a flag so we
        can delay calling processDidCrash until the page becomes visible
        again.

        (WebKit::WebPageProxy::creationParameters):
        Set backgroundCPULimit on the WebPageCreationParameters.

        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::pagesCopy):
        Add utility function to copy the list of pages to a Vector.

        (WebKit::WebProcessProxy::didExceedBackgroundCPULimit):
        When we get an IPC message from a WebContent process to let us
        know that the process exceeded the background CPU limit, we log
        a message and we terminate it if it has no audio playing.

        * UIProcess/WebProcessProxy.h:

        * UIProcess/WebProcessProxy.messages.in:
        Add DidExceedBackgroundCPULimit IPC message so the WebContent process
        can let us know when it goes over the background CPU limit.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_backgroundCPULimit):
        (WebKit::WebPage::setActivityState):
        Notify the WebProcess whenever the activity state of a WebPage changes.
        The WebProcess currently uses this information to determine when the
        visibility of a page changes. This is needed as we only want to monitor
        CPU usage of *background* WebContent processes (processes that have no
        visible WebPage).

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::backgroundCPULimit):

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::removeWebPage):
        Call updateBackgroundCPULimit() whenever a WebPage is added or removed
        since the limit is per page.

        (WebKit::WebProcess::updateBackgroundCPULimit):
        (WebKit::WebProcess::updateBackgroundCPUMonitorState):
        No-ops on other platforms than Mac at the moment.

        (WebKit::WebProcess::pageActivityStateDidChange):
        Call updateBackgroundCPUMonitorState() whenever the visibility of the
        WebPage changes as we only monitor the CPU usage of *background* WebContent
        processes.

        (WebKit::WebProcess::hasVisibleWebPage):
        Add utility function to determine if there is any visible WebPage in this
        WebContent process. If the function returns false, then we consider the
        WebContent process to be a *background* WebContent process.

        * WebProcess/WebProcess.h:

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateBackgroundCPULimit):
        Compute the WebProcess' background CPU limit given the limit set for each
        of its WebPages. We use the largest (i.e. most permissive) background CPU
        limit among all the pages.

        (WebKit::WebProcess::updateBackgroundCPUMonitorState):
        Update the state of the background CPU monitor. This is called whenever
        the background CPU limit of the process changes or whenever the visibility
        of a WebPage changes.

2017-03-13  Michael Saboff  <msaboff@apple.com>

        Add iOS plumbing to WebProcess to enable JavaScriptCore configuration and logging
        https://bugs.webkit.org/show_bug.cgi?id=169489

        Reviewed by Geoffrey Garen.

        Added new preference for enabling the use of a JavaScript configuration file
        in iOS builds.  The preference is used to enable the processing of the
        configuration file.

        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        (API::WebsiteDataStore::tempDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::setJavaScriptConfigurationFileEnabledFromDefaults):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        * UIProcess/WebProcessPool.h:

2017-03-13  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Move AcceleratedSurface files under WebProcess/WebPage/CoordinatedGraphics
        https://bugs.webkit.org/show_bug.cgi?id=169348

        Reviewed by Carlos Garcia Campos.

        Move the AcceleratedSurface header and implementation files under the
        WebProcess/WebPage directory since that class is not specific to the
        GTK+ port.

        * PlatformGTK.cmake:
        * WebProcess/WebPage/AcceleratedSurface.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/gtk/AcceleratedSurface.cpp.
        (WebKit::AcceleratedSurface::create):
        (WebKit::AcceleratedSurface::AcceleratedSurface):
        (WebKit::AcceleratedSurface::resize):
        * WebProcess/WebPage/AcceleratedSurface.h: Renamed from Source/WebKit2/WebProcess/WebPage/gtk/AcceleratedSurface.h.
        (WebKit::AcceleratedSurface::window):
        (WebKit::AcceleratedSurface::surfaceID):
        (WebKit::AcceleratedSurface::shouldPaintMirrored):

2017-03-13  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] [WK2] Guard flags intended for GCC-like compilers with COMPILER_IS_GCC_OR_CLANG
        https://bugs.webkit.org/show_bug.cgi?id=169551

        Reviewed by Yusuke Suzuki.

        This change allows building WK2 code with MSVC.

        * CMakeLists.txt:

2017-03-13  Chris Dumez  <cdumez@apple.com>

        [WK2] Only report background WebProcesses as unresponsive in the background after 90 seconds
        https://bugs.webkit.org/show_bug.cgi?id=169425
        <rdar://problem/30954003>

        Reviewed by Andreas Kling.

        The background responsiveness checking was previously relying on the
        isResponsive(std::function<void(bool)>) API which uses the ResponsivenessTimer
        and has a timeout of 3 seconds. We believe this is too aggressive for background
        tabs. Update BackgroundResponsiveTimer to stop relying on ResponsivenessTimer
        and have its own timeout Timer which a delay of 90 seconds instead.

        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (-[WKObservablePageState _webProcessIsResponsive]):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _webProcessIsResponsive]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webProcessIsResponsive]):
        * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
        (WebKit::BackgroundProcessResponsivenessTimer::BackgroundProcessResponsivenessTimer):
        (WebKit::BackgroundProcessResponsivenessTimer::~BackgroundProcessResponsivenessTimer):
        (WebKit::BackgroundProcessResponsivenessTimer::updateState):
        (WebKit::BackgroundProcessResponsivenessTimer::didReceiveBackgroundResponsivenessPong):
        (WebKit::BackgroundProcessResponsivenessTimer::invalidate):
        (WebKit::BackgroundProcessResponsivenessTimer::processTerminated):
        (WebKit::BackgroundProcessResponsivenessTimer::responsivenessCheckTimerFired):
        (WebKit::BackgroundProcessResponsivenessTimer::timeoutTimerFired):
        (WebKit::BackgroundProcessResponsivenessTimer::setResponsive):
        (WebKit::BackgroundProcessResponsivenessTimer::shouldBeActive):
        (WebKit::BackgroundProcessResponsivenessTimer::scheduleNextResponsivenessCheck):
        (WebKit::BackgroundProcessResponsivenessTimer::client):
        * UIProcess/BackgroundProcessResponsivenessTimer.h:
        (WebKit::BackgroundProcessResponsivenessTimer::isResponsive):
        * UIProcess/ResponsivenessTimer.h:
        (WebKit::ResponsivenessTimer::isResponsive):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::isResponsive):
        (WebKit::WebProcessProxy::didReceiveBackgroundResponsivenessPing):
        (WebKit::WebProcessProxy::processTerminated):
        (WebKit::WebProcessProxy::updateBackgroundResponsivenessTimer):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::backgroundResponsivenessPing):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2017-03-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Web Automation: automation commands hang when trying to navigate go/back and it's not possible
        https://bugs.webkit.org/show_bug.cgi?id=169407

        Reviewed by Michael Catanzaro.

        Trying to navigate back or forward when there are no back/forward items makes the automation commands to hang, because
        navigation callback is never called. WebPageProxy returns nullptr to indicate no navigation will take place. In
        that case we can consider that the operation succeeded.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::goBackInBrowsingContext):
        (WebKit::WebAutomationSession::goForwardInBrowsingContext):

2017-03-13  Zan Dobersek  <zdobersek@igalia.com>

        [WK2][CMake] Remove the intermediate NetworkProcess_COMMON_SOURCES variable
        https://bugs.webkit.org/show_bug.cgi?id=169524

        Reviewed by Michael Catanzaro.

        The NetworkProcess-specific source files listed in the
        NetworkProcess_COMMON_SOURCES variable definition should be directly
        inlined into the list with which the WebKit2_SOURCE variable is defined.
        The NetworkProcess_COMMON_SOURCES variable is appended to the
        WebKit2_SOURCES variable anyway, and is not used anywhere else. The
        separate variable was previously use to support configurations that
        allowed disabling NetworkProcess.

        * CMakeLists.txt:

2017-03-13  Dean Jackson  <dino@apple.com>

        WebGPU remote layer hosting
        https://bugs.webkit.org/show_bug.cgi?id=169539
        <rdar://problem/31005380>

        Reviewed by Jon Lee.

        Implement the host-side part of WebGPULayer.

        * Shared/mac/RemoteLayerBackingStore.mm: Add support for LayerTypeWebGPULayer.
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * Shared/mac/RemoteLayerTreeTransaction.mm: Ditto.
        (WebKit::RemoteLayerTreeTransaction::description):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm: Ditto.
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm: Ditto.
        (WebKit::RemoteLayerTreeHost::createLayer):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm: Ditto.
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        (WebKit::PlatformCALayerRemoteCustom::clone):

2017-03-13  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK+ build fix. Use WTF::Function<> for the
        WebPageProxy::getContentsAsMHTMLData() parameter, fixing
        configurations that support enabling ENABLE(MHTML).

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

2017-03-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Incorrect availability annotations in WKUserContentController.h
        https://bugs.webkit.org/show_bug.cgi?id=169536

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/Cocoa/WKUserContentController.h: Use WK_MAC_TBA for macOS availability.

2017-03-12  Brady Eidson  <beidson@apple.com>

        Transition GenericCallback from std::function to WTF::Function.
        https://bugs.webkit.org/show_bug.cgi?id=169530

        Reviewed by Dean Jackson.

        * UIProcess/GenericCallback.h:
        (WebKit::GenericCallback::create):
        (WebKit::GenericCallback::performCallbackWithReturnValue):
        (WebKit::GenericCallback::GenericCallback):
        (WebKit::CallbackMap::put):

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebCookieManagerProxy.h:

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::getWebArchive):
        (WebKit::WebFrameProxy::getMainResourceData):
        (WebKit::WebFrameProxy::getResourceData):
        * UIProcess/WebFrameProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getStatistics):
        * UIProcess/WebProcessPool.h:

2017-03-12  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Unbreak build with GTK+ >=3.20 after r213772
        https://bugs.webkit.org/show_bug.cgi?id=169533

        Reviewed by Michael Catanzaro.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRunFileChooser): Add missing cast.

2017-03-12  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] File choosers should run as modal by default if possible
        https://bugs.webkit.org/show_bug.cgi?id=169526

        Reviewed by Michael Catanzaro.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRunFileChooser): If a top-level window containing the web view is found, call
        gtk_native_dialog_set_modal() to configure the dialog accordingly.

2017-03-12  Dan Bernstein  <mitz@apple.com>

        [iOS] Some more -respondsToSelector: checks are unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=169525

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h: Moved redeclarations of methods that are declared in the
          Apple internal SDK into the #if !USE(APPLE_INTERNAL_SDK) section.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Replaced unnecessary -respondsToSelector:
          check with compile-time check for the deployment target.
        (-[WKWebView _computedContentInset]): Ditto.
        (activeMinimumLayoutSize): Ditto.
        (-[WKWebView safeAreaInsetsDidChange]): Ditto.

2017-03-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Enable async image decoding for large images
        https://bugs.webkit.org/show_bug.cgi?id=165039

        Reviewed by Simon Fraser.

        Add WK2 preferences for setting/getting LargeImageAsyncDecoding and
        AnimatedImageAsyncDecoding.
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetLargeImageAsyncDecodingEnabled):
        (WKPreferencesGetLargeImageAsyncDecodingEnabled):
        (WKPreferencesSetAnimatedImageAsyncDecodingEnabled):
        (WKPreferencesGetAnimatedImageAsyncDecodingEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2017-03-11  Alex Christensen  <achristensen@webkit.org>

        Rollout r213746
        https://bugs.webkit.org/show_bug.cgi?id=169497

        That change broke a bunch of tests in storage/indexeddb.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp: Copied from WebKit2/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp.
        * PlatformGTK.cmake:

2017-03-11  Brady Eidson  <beidson@apple.com>

        Cleanup "addCookie" and its sole user.
        https://bugs.webkit.org/show_bug.cgi?id=169486

        Reviewed by Brian Burg.

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

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Cookie>::encode): Deleted.
        (IPC::ArgumentCoder<Cookie>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::addSingleCookie):

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setCookies):
        (WebKit::WebCookieManagerProxy::addCookie): Deleted.
        * UIProcess/WebCookieManagerProxy.h:

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::setCookies):
        (WebKit::WebCookieManager::addCookie): Deleted.
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:

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

2017-03-10  Alex Christensen  <achristensen@webkit.org>

        Fix watch and tv builds after r213294
        https://bugs.webkit.org/show_bug.cgi?id=169508

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2017-03-10  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set NSURLSessionConfiguration.allowsCellularAccess from _WKProcessPoolConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=169500
        <rdar://problem/29599569>

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::globalAllowsCellularAccess):
        (WebKit::NetworkSessionCocoa::setAllowsCellularAccess):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration allowsCellularAccess]):
        (-[_WKProcessPoolConfiguration setAllowsCellularAccess:]):

2017-03-10  Alex Christensen  <achristensen@webkit.org>

        Don't compile RemoteNetworkingContext when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=169497

        Reviewed by Andy Estes.

        RemoteNetworkingContext is only really used because PingHandle requires a NetworkingContext.
        When using NetworkSession, we use PingLoad instead of PingHandle, so there's no reason to 
        ensure there's a RemoteNetworkingContext corresponding to new private sessions when they're never used.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp: Removed.
        * PlatformGTK.cmake:
        GTK only uses NetworkSession, so RemoteNetworkingContextSoup is no longer necessary.

2017-03-10  Brent Fulgham  <bfulgham@apple.com>

        [WebRTC][WK2][iOS] Support com.apple.coremedia.compressionsession for more WebRTC Cases
        https://bugs.webkit.org/show_bug.cgi?id=169480
        <rdar://problem/30978577>

        Reviewed by Youenn Fablet.

        Always allow 'com.apple.coremedia.compressionsession' since it is also needed when sending
        canvas data across a peer connection.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2017-03-10  Andy Estes  <aestes@apple.com>

        [QuickLook] Add WKNavigationDelegate SPI to notify when a password is requested
        https://bugs.webkit.org/show_bug.cgi?id=169459
        <rdar://problem/30621913>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::didRequestPasswordForQuickLookDocument):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestPasswordForQuickLookDocument):

2017-03-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Layer content blurry with nested perspective and transforms
        https://bugs.webkit.org/show_bug.cgi?id=169457
        rdar://problem/29879484

        Reviewed by Tim Horton.
        
        We set rasterizationScale on CALayers to the same values as contentsScale, to
        avoid blurry layers when CA rasterizes, which often happens with nested perspective
        transforms.
        
        However, in UI-side compositing, if the page is not zoomed, we never applied the
        rasterizationScale in the UI process. This happened because the PlatformCALayerRemote
        constructor set m_properties.contentsScale, but did not set the dirty bit that
        triggers the application of contentsScale and rasterizationScale in RemoteLayerTreePropertyApplier.
        The fix is to set this dirty bit.
        
        The rest of the changes are for testing. Internals now exposes layerIDForElement()
        for returns an internal (non-stable-across-loads) layerID, which can be passed
        to UIScriptController.propertiesOfLayerWithID() in the UI process, which inspects
        the built layer (UIView) hierarchy. propertiesOfLayerWithID() returns a dictionary
        which the test can dump as JSON, or pull values out of.
        
        A few #pragma once cleanups also.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _propertiesOfLayerWithID:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::layerWithIDForTesting):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::layerWithIDForTesting):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::PlatformCALayerRemote):

2017-03-10  Commit Queue  <commit-queue@webkit.org>

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

        Suspect this is the cause of a large memory regression
        (Requested by jonlee_ on #webkit).

        Reverted changeset:

        "Enable async image decoding for large images"
        https://bugs.webkit.org/show_bug.cgi?id=165039
        http://trac.webkit.org/changeset/213618

2017-03-10  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Guard GLib-specific typedefs in InjectedBundle.h with USE(GLIB)
        https://bugs.webkit.org/show_bug.cgi?id=169464

        Reviewed by Carlos Garcia Campos.

        * WebProcess/InjectedBundle/InjectedBundle.h: Use the more appropriate
        USE(GLIB) guard for the two typedefs revolving around GModule, instead
        of the PLATFORM(GTK) guard.

2017-03-09  Tomas Popela  <tpopela@redhat.com>

        Unreviewed, fix documentation typos

        * UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:
        * UIProcess/API/gtk/WebKitContextMenuActions.h:
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkitDownloadNotifyProgress):
        * UIProcess/API/gtk/WebKitEditorState.cpp:
        * UIProcess/API/gtk/WebKitEditorState.h:
        * UIProcess/API/gtk/WebKitError.h:
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        * UIProcess/API/gtk/WebKitFindController.cpp:
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp:
        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        * UIProcess/API/gtk/WebKitPolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitPrintOperation.h:
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitSecurityManager.cpp:
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_class_init):
        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp:
        (webkitUserMediaPermissionRequestAllow):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        (webkit_web_inspector_class_init):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkit_web_page_class_init):

2017-03-09  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build

        * PlatformMac.cmake:

2017-03-09  Alex Christensen  <achristensen@webkit.org>

        Fix GTK build after r213696

        * CMakeLists.txt:
        * PlatformMac.cmake:

2017-03-09  Brian Nicholson  <bnicholson@mozilla.com> and Alex Christensen  <achristensen@webkit.org>

        Expose public APIs for content filters
        https://bugs.webkit.org/show_bug.cgi?id=150479

        Reviewed by Brady Eidson and Geoff Garen.

        This takes _WKUserContentExtensionStore and _WKUserContentFilter and turns them into the consistently-named public API
        WKContentExtensionStore and WKContentExtension respectively with the same design and functionaly of the original SPI.
        We also added public functions to WKUserContentController corresponding to existing private functions.

        The old SPI ObjC classes are now just wrappers around the new ObjC classes, which are wrappers around C++ objects in the API namespace.
        
        The peak-memory-reducing optimization of having NS_RELEASES_ARGUMENT in _compileContentExtensionForIdentifier is kept for Safari,
        but the public API doesn't need such an optimization.  The public compileContentExtensionForIdentifier will not deallocate the input
        NSString during compiling.
        
        We moved the error codes into the WKErrorDomain, which requires changing the values of the error codes and domain, but source
        compiled that uses the SPI before and after should still work.  Using new applications with old frameworks or vice versa will
        have unexpected error codes, though.

        * Shared/API/APIObject.h:
        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPageGroupAddUserContentFilter):
        (WKPageGroupRemoveUserContentFilter):
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/APIContentExtension.cpp: Copied from UIProcess/API/APIUserContentExtension.cpp.
        (API::ContentExtension::ContentExtension):
        (API::ContentExtension::~ContentExtension):
        (API::UserContentExtension::UserContentExtension): Deleted.
        (API::UserContentExtension::~UserContentExtension): Deleted.
        * UIProcess/API/APIContentExtension.h: Copied from UIProcess/API/APIUserContentExtension.h.
        * UIProcess/API/APIContentExtensionStore.cpp: Copied from UIProcess/API/APIUserContentExtensionStore.cpp.
        (API::ContentExtensionStore::defaultStore):
        (API::ContentExtensionStore::storeWithPath):
        (API::ContentExtensionStore::ContentExtensionStore):
        (API::ContentExtensionStore::~ContentExtensionStore):
        (API::compiledToFile):
        (API::createExtension):
        (API::ContentExtensionStore::lookupContentExtension):
        (API::ContentExtensionStore::compileContentExtension):
        (API::ContentExtensionStore::removeContentExtension):
        (API::ContentExtensionStore::synchronousRemoveAllContentExtensions):
        (API::ContentExtensionStore::invalidateContentExtensionVersion):
        (API::contentExtensionStoreErrorCategory):
        (API::UserContentExtensionStore::defaultStore): Deleted.
        (API::UserContentExtensionStore::storeWithPath): Deleted.
        (API::UserContentExtensionStore::UserContentExtensionStore): Deleted.
        (API::UserContentExtensionStore::~UserContentExtensionStore): Deleted.
        (API::UserContentExtensionStore::lookupContentExtension): Deleted.
        (API::UserContentExtensionStore::compileContentExtension): Deleted.
        (API::UserContentExtensionStore::removeContentExtension): Deleted.
        (API::UserContentExtensionStore::synchronousRemoveAllContentExtensions): Deleted.
        (API::UserContentExtensionStore::invalidateContentExtensionVersion): Deleted.
        (API::userContentExtensionStoreErrorCategory): Deleted.
        * UIProcess/API/APIContentExtensionStore.h: Copied from UIProcess/API/APIUserContentExtensionStore.h.
        (API::make_error_code):
        * UIProcess/API/APIUserContentExtension.cpp: Removed.
        * UIProcess/API/APIUserContentExtension.h: Removed.
        * UIProcess/API/APIUserContentExtensionStore.cpp: Removed.
        * UIProcess/API/APIUserContentExtensionStore.h: Removed.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPageGroup.cpp:
        * UIProcess/API/C/WKUserContentControllerRef.cpp:
        (WKUserContentControllerAddUserContentFilter):
        (WKUserContentControllerRemoveAllUserContentFilters):
        * UIProcess/API/C/WKUserContentExtensionStoreRef.cpp:
        (WKUserContentExtensionStoreGetTypeID):
        * UIProcess/API/Cocoa/APIUserContentExtensionStoreCocoa.mm:
        (API::ContentExtensionStore::defaultStorePath):
        (API::UserContentExtensionStore::defaultStorePath): Deleted.
        * UIProcess/API/Cocoa/WKContentExtension.h: Copied from UIProcess/API/Cocoa/_WKUserContentFilter.h.
        * UIProcess/API/Cocoa/WKContentExtension.mm: Copied from UIProcess/API/Cocoa/_WKUserContentFilter.mm.
        (-[WKContentExtension dealloc]):
        (-[WKContentExtension _apiObject]):
        (-[_WKUserContentFilter dealloc]): Deleted.
        (-[_WKUserContentFilter _apiObject]): Deleted.
        * UIProcess/API/Cocoa/WKContentExtensionInternal.h: Copied from UIProcess/API/Cocoa/_WKUserContentFilterInternal.h.
        (WebKit::wrapper):
        * UIProcess/API/Cocoa/WKContentExtensionStore.h: Copied from UIProcess/API/Cocoa/_WKUserContentExtensionStore.h.
        * UIProcess/API/Cocoa/WKContentExtensionStore.mm: Copied from UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm.
        (-[WKContentExtensionStore dealloc]):
        (+[WKContentExtensionStore defaultStore]):
        (+[WKContentExtensionStore storeWithURL:]):
        (-[WKContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        (-[WKContentExtensionStore _compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:releasesArgument:]):
        (-[WKContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[WKContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):
        (-[WKContentExtensionStore _apiObject]):
        (-[WKContentExtensionStore _removeAllContentExtensions]):
        (-[WKContentExtensionStore _invalidateContentExtensionVersionForIdentifier:]):
        (-[WKContentExtensionStore _compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        (-[_WKUserContentExtensionStore dealloc]): Deleted.
        (+[_WKUserContentExtensionStore defaultStore]): Deleted.
        (+[_WKUserContentExtensionStore storeWithURL:]): Deleted.
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]): Deleted.
        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]): Deleted.
        (-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]): Deleted.
        (-[_WKUserContentExtensionStore _apiObject]): Deleted.
        (-[_WKUserContentExtensionStore _removeAllContentExtensions]): Deleted.
        (-[_WKUserContentExtensionStore _invalidateContentExtensionVersionForIdentifier:]): Deleted.
        * UIProcess/API/Cocoa/WKContentExtensionStoreInternal.h: Copied from UIProcess/API/Cocoa/_WKUserContentExtensionStoreInternal.h.
        (WebKit::wrapper):
        * UIProcess/API/Cocoa/WKContentExtensionStorePrivate.h: Copied from UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h.
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKError.mm:
        (localizedDescriptionForErrorCode):
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController addContentExtension:]):
        (-[WKUserContentController removeContentExtension:]):
        (-[WKUserContentController removeAllContentExtensions]):
        (-[WKUserContentController _addUserContentFilter:]):
        (-[WKUserContentController _removeUserContentFilter:]):
        (-[WKUserContentController _removeAllUserContentFilters]):
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (+[_WKUserContentExtensionStore defaultStore]):
        (+[_WKUserContentExtensionStore storeWithURL:]):
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore _apiObject]):
        (-[_WKUserContentExtensionStore _removeAllContentExtensions]):
        (-[_WKUserContentExtensionStore _invalidateContentExtensionVersionForIdentifier:]):
        (-[_WKUserContentExtensionStore _initWithWKContentExtensionStore:]):
        (-[_WKUserContentExtensionStore dealloc]): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentExtensionStoreInternal.h:
        (WebKit::wrapper): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter _apiObject]):
        (-[_WKUserContentFilter _initWithWKContentExtension:]):
        (-[_WKUserContentFilter dealloc]): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentFilterInternal.h:
        (WebKit::wrapper): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h: Added.
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addContentExtension):
        (WebKit::WebUserContentControllerProxy::removeContentExtension):
        (WebKit::WebUserContentControllerProxy::removeAllContentExtensions):
        (WebKit::WebUserContentControllerProxy::addUserContentExtension): Deleted.
        (WebKit::WebUserContentControllerProxy::removeUserContentExtension): Deleted.
        (WebKit::WebUserContentControllerProxy::removeAllUserContentExtensions): Deleted.
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/WebPageGroup.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addContentExtensions):
        (WebKit::WebUserContentController::removeContentExtension):
        (WebKit::WebUserContentController::removeAllContentExtensions):
        (WebKit::WebUserContentController::addUserContentExtensions): Deleted.
        (WebKit::WebUserContentController::removeUserContentExtension): Deleted.
        (WebKit::WebUserContentController::removeAllUserContentExtensions): Deleted.
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::blockedByContentFilterError):

2017-03-09  Brady Eidson  <beidson@apple.com>

        Fix some debug builds after r213686

        Unreviewed.

        * UIProcess/Cocoa/WebURLSchemeHandlerCocoa.mm:
        (WebKit::WebURLSchemeHandlerCocoa::WebURLSchemeHandlerCocoa): Remove the 32-bit NOT_REACHED protection for now.

2017-03-09  Keith Miller  <keith_miller@apple.com>

        WebAssembly: Enable fast memory for WK2
        https://bugs.webkit.org/show_bug.cgi?id=169437

        Reviewed by Tim Horton.

        I forgot to do this when I enabled implemented fast memory
        for wasm.

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

2017-03-09  Michael Saboff  <msaboff@apple.com>

        Add plumbing to WebProcess to enable JavaScriptCore configuration and logging
        https://bugs.webkit.org/show_bug.cgi?id=169387

        Reviewed by Filip Pizlo.

        Added a path and sandbox extension for JavaScript configuration directory.
        These are sent to the Web process on startup along with other parameters.
        When JavaScript configuration file processing is enabled, the WebProcess
        will look for the file WebContent.config in that directory and configure
        JavaScriptCore with its contents.

        The directory location is for Mac is ~/Library/WebKit/JavaScriptConfig and
        the location on iOS is <process-container-path>/Library/WebKit/JavaScriptConfig.
        JavaScript configuration file processing is controlled via a boolean kept in
        the WebProcess pool.  For Debug builds, config file processing is enabled.
        For Release builds it is disabled.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextJavaScriptConfigurationFileEnabled):
        (WKContextSetJavaScriptConfigurationFileEnabled):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory):
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::setJavaScriptConfigurationFileEnabled):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::resolvedJavaScriptConfigurationDirectory):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2017-03-09  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove statistics data as part of full website data removal
        https://bugs.webkit.org/show_bug.cgi?id=169448

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKResourceLoadStatisticsManager.cpp:
        (WKResourceLoadStatisticsManagerClearInMemoryAndPersistentStore):
            Infrastructure for test.
        * UIProcess/API/C/WKResourceLoadStatisticsManager.h:
        * UIProcess/WebResourceLoadStatisticsManager.cpp:
        (WebKit::WebResourceLoadStatisticsManager::clearInMemoryAndPersistentStore):
            Infrastructure for test.
        * UIProcess/WebResourceLoadStatisticsManager.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::processStatisticsAndDataRecords):
            Change due to the break-out of
            WebResourceLoadStatisticsStore::writeStoreToDisk().
        (WebKit::WebResourceLoadStatisticsStore::registerSharedResourceLoadObserver):
            Now sets m_writePersistentStoreHandler in
            WebCore::ResourceLoadStatisticsStore.
        (WebKit::WebResourceLoadStatisticsStore::writeStoreToDisk):
            Separated out this function to make it available for the function set as
            m_writePersistentStoreHandler in WebCore::ResourceLoadStatisticsStore.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
            Both WebsiteDataStore::removeData() functions now cover resource load
            statistics.

2017-03-09  Brady Eidson  <beidson@apple.com>

        Add WKURLSchemeHandler API for handling custom protocols.
        https://bugs.webkit.org/show_bug.cgi?id=169422

        Reviewed by Tim Horton.

        This introduces two new protocols to the WK2 API surface:
        - WKURLSchemeHandler
        - WKURLSchemeHandlerTask
        
        By registering an object that conforms to the WKURLSchemeHandler protocol with a WKWebViewConfiguration an application will
        be handed an object conforming to WKURLSchemeHandlerTask for each resource load in that WKWebView with a custom URL scheme.
        
        Using that id <WKURLSchemeHandlerTask>, the application can communicate the data for the resource back to WebKit.
        
        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):

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

        * UIProcess/API/APIURLSchemeHandlerTask.cpp: 
        (API::URLSchemeHandlerTask::create):
        (API::URLSchemeHandlerTask::URLSchemeHandlerTask):
        * UIProcess/API/APIURLSchemeHandlerTask.h: 

        Add the WKURLSchemeHandler @protocol:
        * UIProcess/API/Cocoa/WKURLSchemeHandler.h: Added.

        Add the WKURLSchemeHandlerTask @protocol, as well as WebKit's concrete implementation of it:
        * UIProcess/API/Cocoa/WKURLSchemeHandlerTask.h: Added.
        * UIProcess/API/Cocoa/WKURLSchemeHandlerTask.mm: Added.
        (raiseExceptionIfNecessary):
        (-[WKURLSchemeHandlerTaskImpl request]):
        (-[WKURLSchemeHandlerTaskImpl didReceiveResponse:]):
        (-[WKURLSchemeHandlerTaskImpl didReceiveData:]):
        (-[WKURLSchemeHandlerTaskImpl didFinish]):
        (-[WKURLSchemeHandlerTaskImpl didFailWithError:]):
        (-[WKURLSchemeHandlerTaskImpl _apiObject]):
        * UIProcess/API/Cocoa/WKURLSchemeHandlerTaskInternal.h: 
        (WebKit::wrapper):

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView urlSchemeHandlerForURLScheme:]):
        (+[WKWebView handlesURLScheme:]):

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]):
        (-[WKWebViewConfiguration urlSchemeHandlerForURLScheme:]):
        (-[WKWebViewConfiguration _urlSchemeHandlers]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h:

        * UIProcess/Cocoa/WebURLSchemeHandlerCocoa.h: 
        (WebKit::WebURLSchemeHandlerCocoa::apiHandler):
        * UIProcess/Cocoa/WebURLSchemeHandlerCocoa.mm: Added.
        (WebKit::WebURLSchemeHandlerCocoa::create):
        (WebKit::WebURLSchemeHandlerCocoa::WebURLSchemeHandlerCocoa):
        (WebKit::WebURLSchemeHandlerCocoa::platformStartTask):
        (WebKit::WebURLSchemeHandlerCocoa::platformStopTask):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setURLSchemeHandlerForScheme):
        (WebKit::WebPageProxy::urlSchemeHandlerForScheme):
        (WebKit::WebPageProxy::startURLSchemeHandlerTask):
        (WebKit::WebPageProxy::stopURLSchemeHandlerTask):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/WebURLSchemeHandler.cpp: 
        (WebKit::generateWebURLSchemeHandlerIdentifier):
        (WebKit::WebURLSchemeHandler::WebURLSchemeHandler):
        (WebKit::WebURLSchemeHandler::~WebURLSchemeHandler):
        (WebKit::WebURLSchemeHandler::startTask):
        (WebKit::WebURLSchemeHandler::stopTask):
        * UIProcess/WebURLSchemeHandler.h: 
        (WebKit::WebURLSchemeHandler::identifier):

        * UIProcess/WebURLSchemeHandlerTask.cpp: Added.
        (WebKit::WebURLSchemeHandlerTask::create):
        (WebKit::WebURLSchemeHandlerTask::WebURLSchemeHandlerTask):
        (WebKit::WebURLSchemeHandlerTask::didReceiveResponse):
        (WebKit::WebURLSchemeHandlerTask::didReceiveData):
        (WebKit::WebURLSchemeHandlerTask::didComplete):
        (WebKit::WebURLSchemeHandlerTask::pageDestroyed):
        (WebKit::WebURLSchemeHandlerTask::stop):
        * UIProcess/WebURLSchemeHandlerTask.h: Added.
        (WebKit::WebURLSchemeHandlerTask::identifier):
        (WebKit::WebURLSchemeHandlerTask::request):

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::remove):
        * WebProcess/Network/WebLoaderStrategy.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::urlSchemeHandlerForScheme):
        (WebKit::WebPage::registerURLSchemeHandler):
        (WebKit::WebPage::urlSchemeHandlerTaskDidReceiveResponse):
        (WebKit::WebPage::urlSchemeHandlerTaskDidReceiveData):
        (WebKit::WebPage::urlSchemeHandlerTaskDidComplete):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp: Added.
        (WebKit::WebURLSchemeHandlerProxy::WebURLSchemeHandlerProxy):
        (WebKit::WebURLSchemeHandlerProxy::~WebURLSchemeHandlerProxy):
        (WebKit::WebURLSchemeHandlerProxy::startNewTask):
        (WebKit::WebURLSchemeHandlerProxy::taskDidReceiveResponse):
        (WebKit::WebURLSchemeHandlerProxy::taskDidReceiveData):
        (WebKit::WebURLSchemeHandlerProxy::taskDidComplete):
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.h:
        (WebKit::WebURLSchemeHandlerProxy::identifier):
        (WebKit::WebURLSchemeHandlerProxy::page):

        * WebProcess/WebPage/WebURLSchemeHandlerTaskProxy.cpp: Added.
        (WebKit::WebURLSchemeHandlerTaskProxy::WebURLSchemeHandlerTaskProxy):
        (WebKit::WebURLSchemeHandlerTaskProxy::startLoading):
        (WebKit::WebURLSchemeHandlerTaskProxy::stopLoading):
        (WebKit::WebURLSchemeHandlerTaskProxy::didReceiveResponse):
        (WebKit::WebURLSchemeHandlerTaskProxy::didReceiveData):
        (WebKit::WebURLSchemeHandlerTaskProxy::didComplete):
        * WebProcess/WebPage/WebURLSchemeHandlerTaskProxy.h:
        (WebKit::WebURLSchemeHandlerTaskProxy::request):

        * WebKit2.xcodeproj/project.pbxproj:
        * CMakeLists.txt:

2017-03-09  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed follow-up to r213682.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        Forward declare SPIs to address possible build errors.

2017-03-09  Andrew Gold  <agold@apple.com>

        WKWebView should provide a way for clients to know the specific media state.
        https://bugs.webkit.org/show_bug.cgi?id=169140
        <rdar://problem/30838285>

        Reviewed by Alex Christensen.

        Instead of notifying the UIDelegate only when a capture begins and ends, 
        we now notify the UIDelegate of any change in capture state.

        * UIProcess/API/APIUIClient.h:

        (API::UIClient::mediaCaptureStateDidChange):
        (API::UIClient::didBeginCaptureSession): Deleted.
        (API::UIClient::didEndCaptureSession): Deleted.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::mediaCaptureStateDidChange):
        (WebKit::UIDelegate::UIClient::didBeginCaptureSession): Deleted.
        (WebKit::UIDelegate::UIClient::didEndCaptureSession): Deleted.

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

2017-03-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show HTTP protocol version and other Network Load Metrics (IP Address, Priority, Connection ID)
        https://bugs.webkit.org/show_bug.cgi?id=29687
        <rdar://problem/19281586>

        Reviewed by Matt Baker and Brian Burg.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNetworkLoadPriority):
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        * Shared/WebCoreArgumentCoders.h:
        Additional optional metrics on NetworkLoadMetrics.

2017-03-09  Daniel Bates  <dabates@apple.com>

        Guard Credential Management implementation behind a runtime enabled feature flag
        https://bugs.webkit.org/show_bug.cgi?id=169364
        <rdar://problem/30957425>

        Reviewed by Brent Fulgham.

        Add WebKit2 preference for Credential Management (disabled by default).

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCredentialManagementEnabled): Added.
        (WKPreferencesGetCredentialManagementEnabled): Added.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-03-09  Andy Estes  <aestes@apple.com>

        [iOS] Add SPI to print to a single tall PDF page
        https://bugs.webkit.org/show_bug.cgi?id=169439
        <rdar://problem/30120532>

        Reviewed by Tim Horton.

        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode): Encoded snapshotFirstPage.
        (WebKit::PrintInfo::decode): Decoded snapshotFirstPage.
        (WebKit::PrintInfo::PrintInfo): Deleted.
        * Shared/PrintInfo.h: Initialized member variables in place instead of in a default ctor.
        * UIProcess/_WKWebViewPrintFormatter.h: Declared BOOL property snapshotFirstPage.
        * UIProcess/_WKWebViewPrintFormatter.mm:
        (-[_WKWebViewPrintFormatter _setSnapshotPaperRect:]): Added to set a custom paper size.
        (-[_WKWebViewPrintFormatter rectForPageAtIndex:]): Returned the custom paper rect if
        snapshotFirstPage is true.
        * UIProcess/_WKWebViewPrintFormatterInternal.h: 
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _wk_pageCountForPrintFormatter:]): Computed the custom paper size to be the
        smaller of the document height and the maximum PDF page height.
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _wk_pageCountForPrintFormatter:]): Changed to return a maximum page size of 1
        if snapshotFirstPage is true.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingAndDrawToPDF): Ditto.

2017-03-09  Anders Carlsson  <andersca@apple.com>

        Add delegate support to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=169427
        Part of rdar://problem/28880714.

        Reviewed by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:
        Add feature define.

2017-03-09  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Introduce if-top-url and unless-top-url
        https://bugs.webkit.org/show_bug.cgi?id=169433

        Reviewed by Brady Eidson.

        Rename conditionedFilters to topURLFilters to reflect the fact that they are the filters
        that are run on the top URL, and possibly just the domain of the top url.
        I was a bit too aggressive when renaming domain* to condition* in r213533.

        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::conditionsApplyOnlyToDomain):
        (WebKit::WebCompiledContentExtension::topURLFiltersBytecode):
        (WebKit::WebCompiledContentExtension::topURLFiltersBytecodeLength):
        (WebKit::WebCompiledContentExtension::conditionedFiltersBytecode): Deleted.
        (WebKit::WebCompiledContentExtension::conditionedFiltersBytecodeLength): Deleted.
        * Shared/WebCompiledContentExtension.h:
        * Shared/WebCompiledContentExtensionData.cpp:
        (WebKit::WebCompiledContentExtensionData::encode):
        (WebKit::WebCompiledContentExtensionData::decode):
        * Shared/WebCompiledContentExtensionData.h:
        (WebKit::WebCompiledContentExtensionData::WebCompiledContentExtensionData):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::encodeContentExtensionMetaData):
        (API::decodeContentExtensionMetaData):
        (API::compiledToFile):
        (API::createExtension):
        (API::UserContentExtensionStore::invalidateContentExtensionVersion):
        (API::userContentExtensionStoreErrorCategory):
        * UIProcess/API/APIUserContentExtensionStore.h:
        Increment CurrentContentExtensionFileVersion because we have changed the format of the binary on disk.
        We only added 4 bytes, but that's binary incompatible and requires re-compiling any existing content extensions.

2017-03-09  Brent Fulgham  <bfulgham@apple.com>

        [WK2][iOS] Extend WebProcess sandbox to support audio and video compression/decompression
        https://bugs.webkit.org/show_bug.cgi?id=169431
        <rdar://problem/30844650>

        Reviewed by Youenn Fablet.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2017-03-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add a UI delegate hook for custom handling of data interaction operations
        https://bugs.webkit.org/show_bug.cgi?id=169430
        <rdar://problem/30954654>

        Reviewed by Tim Horton.

        Introduce a new SPI method on the UI delegate for clients who need to override data interaction operation behaviors.
        Note that implementing this delegate method and returning YES will not propagate a `drop` event to the page.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

2017-03-08  Matt Rajca  <mrajca@apple.com>

        Let clients control autoplay quirks with website policies.
        https://bugs.webkit.org/show_bug.cgi?id=169390

        Reviewed by Wenson Hsieh.
        
        Many sites incorrectly assume media will start off playing and display a pause button from the
        start. We can trick many of these sites into updating their controls by sending a "pause"
        event when we prevent a media element from playing.

        We don't want this to become standard web behavior, however, since ultimately sites should adapt
        to the new behavior. This patch lets clients decide which limited set of sites gets to use auto-play
        quirks.

        * Shared/WebsitePolicies.h:
        (WebKit::WebsitePolicies::encode):
        (WebKit::WebsitePolicies::decode):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesSetAllowsAutoplayQuirks):
        (WKWebsitePoliciesGetAllowsAutoplayQuirks):
        * UIProcess/API/C/WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setAllowsAutoplayQuirks:]):
        (-[_WKWebsitePolicies allowsAutoplayQuirks]):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateWebsitePolicies):

2017-03-09  Chris Dumez  <cdumez@apple.com>

        [WK2] Prevent app nap for the active tab
        https://bugs.webkit.org/show_bug.cgi?id=169417
        <rdar://problem/30876965>

        Reviewed by Gavin Barraclough.

        Prevent app nap for the active tab to minimize the risks of breakage.

        From the AppNap documentation [1], the app is only a candidate for app nap if it not the
        foreground app. However, in the Safari case, the foreground app is Safari (UIProcess) and
        the same policy does not apply to our foreground WebContent process unless we explicitly
        make it so. This patch addresses the issue by taking a UserActivity when the tab is
        active to prevent app nap.

        [1] https://developer.apple.com/library/content/documentation/Performance/Conceptual/power_efficiency_guidelines_osx/AppNap.html

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

2017-03-08  Anders Carlsson  <andersca@apple.com>

        Add new delegate methods
        https://bugs.webkit.org/show_bug.cgi?id=169394
        Part of rdar://problem/28880714.

        Reviewed by Tim Horton.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (-[WKPaymentAuthorizationViewControllerDelegate invalidate]):
        (toShippingMethod):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didAuthorizePayment:handler:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectPaymentMethod:handler:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingMethod:handler:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingContact:handler:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didAuthorizePayment:completion:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingMethod:completion:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingContact:completion:]):
        (WebKit::toPKPaymentAuthorizationStatus):
        (WebKit::toPKPaymentErrorCode):
        (WebKit::toNSError):
        (WebKit::toNSErrors):
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentSession):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingMethodSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingContactSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentMethodSelection):

2017-03-09  Tim Horton  <timothy_horton@apple.com>

        WKWebView should automatically respect insets from the view controller hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=169398
        <rdar://problem/30617593>

        Reviewed by Dean Jackson.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _computedContentInset]):
        (activeMinimumLayoutSize):
        (-[WKWebView _frameOrBoundsChanged]):
        Factor insets from above us in the view controller hierarchy into our
        content insets (and layout size) automatically.

2017-03-09  Tomas Popela  <tpopela@redhat.com>

        Correctly process the return value of gdk_drag_context_get_selected_action()

        Reviewed by Carlos Garcia Campos.

        It returns the action itself and not the bitmask.

        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::drop):

2017-03-09  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Use GtkFileChooserNative for open/save dialogs
        https://bugs.webkit.org/show_bug.cgi?id=169278

        Reviewed by Carlos Garcia Campos.

        When building with GTK+ 3.20.0 or newer, use GtkFileChooserNative instead of GtkFileChooserDialog to allow for
        better integration with the runtime environment and use native open/save dialogs. This also makes WebKitGTK+ use
        portal-based load/save dialogs when running inside the Flatpak sandbox.

        The existing GtkFileChooserDialog implementation will still be used when building against older versions of
        GTK+, so this change does not require a new version of the toolkit.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (fileChooserDialogResponseCallback):
        (webkitWebViewRunFileChooser):

2017-03-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add plumbing for WebCore to notify WebKit2 when an edit drag has concluded
        https://bugs.webkit.org/show_bug.cgi?id=169392
        <rdar://problem/30882974>

        Reviewed by Tim Horton.

        Add boilerplate plumbing for didConcludeEditDataInteraction from the web process to the UI process. Also makes
        some minor tweaks to WKContentView along the way.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didConcludeEditDataInteraction):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:

        Bail out of zooming to the focus rect when performing a data interaction operation. This needs to eventually
        work, but is not high priority at the moment.

        (-[WKContentView becomeFirstResponderForWebView]):
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView useSelectionAssistantWithMode:]):
        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView suppressAssistantSelectionView]):
        (-[WKContentView setSuppressAssistantSelectionView:]):

        Add a mechanism for suppressing the text interaction assistant's selection view. If the text interaction
        assistant exists while beginning or ending suppression, the selection will be deactivated or activated. If there
        is not text interaction assistant, then we instead remember whether or not we should be suppressing the
        selection, and bail out of activating the selection if so.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didConcludeEditDataInteraction):
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::didConcludeEditDrag):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didConcludeEditDataInteraction):

2017-03-08  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Communicate to the network process which domains to partition
        https://bugs.webkit.org/show_bug.cgi?id=169322
        <rdar://problem/30768921>

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::shouldPartitionCookiesForTopPrivatelyOwnedDomains):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
            Now consults WebCore::NetworkStorageSession::shouldPartitionCookiesForHost()
            to decide whether partitioning should be applied or not.
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerSetCookieStoragePartitioningEnabled):
            To allow TestRunner to configure cookie partitioning.
        * UIProcess/API/C/WKCookieManager.h:
        * UIProcess/API/C/WKResourceLoadStatisticsManager.cpp:
        (WKResourceLoadStatisticsManagerFireShouldPartitionCookiesHandler):
            To allow TestRunner to set a domain for which
            partitioning should be applied.
        * UIProcess/API/C/WKResourceLoadStatisticsManager.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::shouldPartitionCookiesForTopPrivatelyOwnedDomains):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setCookieStoragePartitioningEnabled):
            To allow TestRunner to configure cookie partitioning.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebResourceLoadStatisticsManager.cpp:
        (WebKit::WebResourceLoadStatisticsManager::fireShouldPartitionCookiesHandler):
            To allow TestRunner to set a domain for which
            partitioning should be applied.
        * UIProcess/WebResourceLoadStatisticsManager.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::classifyResource):
            Now tells the network process as soon as a domain
            has been classified as prevalent.
        (WebKit::WebResourceLoadStatisticsStore::registerSharedResourceLoadObserver):
            Overloaded function to allow injection of handlers for communication with the
            network process.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::shouldPartitionCookiesForTopPrivatelyOwnedDomains):
        (WebKit::WebsiteDataStore::registerSharedResourceLoadObserver):
            Now sets two callback handlers for communication with the network process.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2017-03-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix -Wattributes warning spam
        https://bugs.webkit.org/show_bug.cgi?id=169243

        Reviewed by Alexey Proskuryakov.

        * Shared/API/c/WKDeclarationSpecifiers.h: Add WK_UNAVAILABLE macro.
        * UIProcess/API/C/WKPageGroup.h: Use it.

2017-03-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Enable async image decoding for large images
        https://bugs.webkit.org/show_bug.cgi?id=165039

        Reviewed by Simon Fraser.

        Add WK2 preferences for setting/getting LargeImageAsyncDecoding and
        AnimatedImageAsyncDecoding.
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetLargeImageAsyncDecodingEnabled):
        (WKPreferencesGetLargeImageAsyncDecodingEnabled):
        (WKPreferencesSetAnimatedImageAsyncDecodingEnabled):
        (WKPreferencesGetAnimatedImageAsyncDecodingEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2017-03-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add TextIndicator support for providing a snapshot excluding selected content
        https://bugs.webkit.org/show_bug.cgi?id=169309
        <rdar://problem/30883525>

        Reviewed by Tim Horton.

        Serialize the snapshot excluding the selection and the snapshot's bounds when sending TextIndicatorData over
        IPC to the UI process.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):

2017-03-08  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r213564): Netflix does not play content
        https://bugs.webkit.org/show_bug.cgi?id=169391
        <rdar://problem/30930190>

        Reviewed by Alex Christensen.

        Add the missing IOKit properties identified during testing on Netflix.

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

2017-03-08  Anders Carlsson  <andersca@apple.com>

        Clean up WebPaymentCoordinatorProxy
        https://bugs.webkit.org/show_bug.cgi?id=169393
        Part of rdar://problem/28880714.

        Reviewed by Beth Dakin.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewControllerDidFinish:]):
        Move this to where it belongs.

        (WebKit::toPKPaymentSummaryItems):
        Add a new helper function.

        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingMethodSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingContactSelection):
        Use the new helper function.

2017-03-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac][WK2] Whitelist a local cache needed by CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=169388
        <rdar://problem/30224000>

        Reviewed by Alex Christensen.

        Whitelist access to a local cache needed by CFNetwork.

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

2017-03-08  Anders Carlsson  <andersca@apple.com>

        Simplify the PaymentCoordinator interface
        https://bugs.webkit.org/show_bug.cgi?id=169382
        Part of rdar://problem/28880714.

        Reviewed by Tim Horton.

        Send the new structs over the wire to the UI process and update the various proxy object to take them instead of
        multiple parameters.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::PaymentAuthorizationResult>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentAuthorizationResult>::decode):
        (IPC::ArgumentCoder<WebCore::PaymentError>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentError>::decode):
        (IPC::ArgumentCoder<WebCore::PaymentMethodUpdate>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentMethodUpdate>::decode):
        (IPC::ArgumentCoder<WebCore::ShippingContactUpdate>::encode):
        (IPC::ArgumentCoder<WebCore::ShippingContactUpdate>::decode):
        (IPC::ArgumentCoder<WebCore::ShippingMethodUpdate>::encode):
        (IPC::ArgumentCoder<WebCore::ShippingMethodUpdate>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::completeShippingMethodSelection):
        (WebKit::WebPaymentCoordinatorProxy::completeShippingContactSelection):
        (WebKit::WebPaymentCoordinatorProxy::completePaymentMethodSelection):
        (WebKit::WebPaymentCoordinatorProxy::completePaymentSession):
        (WebKit::isValidEnum): Deleted.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentSession):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingMethodSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingContactSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentMethodSelection):
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::completeShippingMethodSelection):
        (WebKit::WebPaymentCoordinator::completeShippingContactSelection):
        (WebKit::WebPaymentCoordinator::completePaymentMethodSelection):
        (WebKit::WebPaymentCoordinator::completePaymentSession):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

2017-03-08  Brent Fulgham  <bfulgham@apple.com>

        Remove the trace command from the sandbox profile.

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

2017-03-08  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r212904): [WK2][Mac] Revise sandbox to support AES3
        https://bugs.webkit.org/show_bug.cgi?id=169361
        <rdar://problem/30927476>

        Unreviewed sandbox revert. Avoid web compatibility issue by
        restoring access to AES3 Plugin path.

        Tests: Existing media tests, on older Mac hardware.

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

2017-03-08  Simon Fraser  <simon.fraser@apple.com>

        Add support for history.scrollRestoration
        https://bugs.webkit.org/show_bug.cgi?id=147782
        rdar://problem/22614568

        Reviewed by Sam Weinig.
        
        Need to send shouldRestoreScrollPosition to the UI process in SessionState,
        WKWebView now stores _unobscuredCenterToRestore and _scrollOffsetToRestore as
        std::optionals, and they will be nullopt if scroll restoration should not happen.

        ViewGestureControllerIOS also needs knowledge of whether scroll restoration will
        happen, and compares UI-process scroll position vs. the position at snapshot time
        to know if the snapshot should be shown (this prevents showing a misleading snapshot
        when swiping back on a navigation where scroll restoration is disabled).

        * Shared/SessionState.cpp:
        (WebKit::FrameState::encode):
        (WebKit::FrameState::decode):
        * Shared/SessionState.h:
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::pageState):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]):
        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::viewScrollPosition):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewScrollPosition):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::viewScrollPosition):
        (WebKit::PageClientImpl::restorePageState):
        (WebKit::PageClientImpl::restorePageCenterAndScale):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::restorePageState):
        (WebKit::WebPageProxy::restorePageCenterAndScale):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::viewScrollPosition):
        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshot::setViewScrollPosition):
        (WebKit::ViewSnapshot::viewScrollPosition):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::recordSnapshot):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFrameState):
        (WebKit::applyFrameState):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::restoreViewState):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):

2017-03-08  Matt Rajca  <mrajca@apple.com>

        Add support for updating autoplay policies after a page has been loaded.
        https://bugs.webkit.org/show_bug.cgi?id=169360

        Reviewed by Alex Christensen.

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

2017-03-08  Tim Horton  <timothy_horton@apple.com>

        Switching focus from a UITextField to an editable WKWebView causes the keyboard to dance
        https://bugs.webkit.org/show_bug.cgi?id=168932
        <rdar://problem/30193996>

        Reviewed by Beth Dakin.

        When WKWebView first becomes first responder from a tap, we don't have
        enough information to immediately respond accurately to various questions
        from UIKit, because we haven't had time to ask the Web Content process
        what is under the touch. Defer updating input views until we get a
        response or lose first responder status, so that the keyboard doesn't
        start transitioning to its new state until we know what that is.

        There is currently no test because TestWebKitAPI has no UIApplication,
        and thus cannot generate mock events.

        * Platform/spi/ios/UIKitSPI.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * UIProcess/ios/InputViewUpdateDeferrer.h: Added.
        * UIProcess/ios/InputViewUpdateDeferrer.mm: Added.
        Add an RAII object that defers input view updates while alive.

        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _commitPotentialTapFailed]):
        (-[WKContentView _didNotHandleTapAsClick:]):
        (-[WKContentView _didCompleteSyntheticClick]):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _attemptClickAtLocation:]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
        Create a InputViewUpdateDeferrer just before we become first responder
        from a tap, and destroy it when we get a response (of any kind) or lose
        first-responder status (or interaction is torn down).

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didCompleteSyntheticClick):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCompleteSyntheticClick):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::completeSyntheticClick):
        Plumb an indication that the synthetic click completed, regardless of
        how it was handled.

2017-03-08  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Guard GLib-specific code in Module, Connection files with USE(GLIB)
        https://bugs.webkit.org/show_bug.cgi?id=169349

        Reviewed by Carlos Garcia Campos.

        Use the USE(GLIB) build guards for GLib-specific code in Connection and
        Module header files and the ConnectionUnix implementation file, instead
        of the PLATFORM(GTK) guard.

        * Platform/IPC/Connection.h:
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::platformInitialize):
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::open):
        (IPC::Connection::sendOutputMessage):
        * Platform/Module.h:

2017-03-08  Tim Horton  <timothy_horton@apple.com>

        Remove unused WebPageIOS::zoomToRect and plumbing
        https://bugs.webkit.org/show_bug.cgi?id=169344

        Reviewed by Alex Christensen.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::zoomToRect): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::zoomToRect): Deleted.

2017-03-08  Brad Wright  <bwright2@apple.com>

        UIViewController with WKWebView presented modally causes the presented UIViewController to be dismissed.
        https://bugs.webkit.org/show_bug.cgi?id=165225
        
        Reviewed by Wenson Hsieh.

        The problem happens on an iPhone with a WKWebView inside a view controller presented modally. If the user selects an HTML file input 
        tag button, a UIDocumentMenuViewController will appear. Anything the user does next causes the entire modal view controller to get dismissed.

        To fix this problem, I prevent the UIDocumentMenuViewController from being dismissed by not saving a pointer to it. The UIDocumentMenuViewController 
        always goes away by itself on any user interaction. Trying to dismiss the UIDocumentMenuViewController when it is already dismissed causes the modal view controller
        to be dismissed.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _cancel]):
        (-[WKFileUploadPanel dismiss]):
        (-[WKFileUploadPanel _showDocumentPickerMenu]):
        (-[WKFileUploadPanel _presentMenuOptionForCurrentInterfaceIdiom:]):
        (-[WKFileUploadPanel _presentForCurrentInterfaceIdiom:]): Deleted.

2017-03-08  Alexey Proskuryakov  <ap@apple.com>

        WebKit should not export dyld install name hints on watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=169342

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WebKit.m:

2017-03-07  Simon Fraser  <simon.fraser@apple.com>

        Have fixedPositionCreatesStackingContext be on by default everywhere
        https://bugs.webkit.org/show_bug.cgi?id=169334

        Reviewed by Zalan Bujtas.

        It makes no sense to have web-exposed CSS functionality be different based on setting,
        and other browser are now aligned with having position:fixed create stacking context.

        So remove the fixedPositionCreatesStackingContext setting and have StyleResolver::adjustRenderStyle()
        always force stacking context for position:fixed.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseFixedLayout):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updatePreferences):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):

2017-03-07  Brent Fulgham  <bfulgham@apple.com>

        [Mac][WK2] Whitelist iokit-get-properties
        https://bugs.webkit.org/show_bug.cgi?id=169331
        <rdar://problem/16363632>

        Reviewed by Alex Christensen.

        Block access to all IOKit properties by default. Turn on only those properties
        that are actually needed by our engine.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2017-03-07  Simon Fraser  <simon.fraser@apple.com>

        Enable SubpixelAntialiasedLayerTextEnabled by default on some versions of macOS
        https://bugs.webkit.org/show_bug.cgi?id=169329

        Reviewed by Tim Horton.

        If the macOS version is > 101300, enable subpixelAntialiasedLayerTextEnabled.

        * Shared/WebPreferencesDefinitions.h:

2017-03-07  Dean Jackson  <dino@apple.com>

        Some platforms won't be able to create a GPUDevice
        https://bugs.webkit.org/show_bug.cgi?id=169314
        <rdar://problems/30907521>

        Reviewed by Jon Lee.

        Disable WEB_GPU on the iOS Simulator.

        * Configurations/FeatureDefines.xcconfig:

2017-03-07  Brent Fulgham  <bfulgham@apple.com>

        [Mac][iOS][WK2] Whitelist sysctl-read
        https://bugs.webkit.org/show_bug.cgi?id=169306
        <rdar://problem/16371458>

        Reviewed by Alex Christensen.

        Limit access to the 'sysctl' call to read-only cases of the very small
        set of operations we actually use.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Databases.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2017-03-07  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Rename "Domain" to "Condition" where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=169297

        Reviewed by Brady Eidson.

        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::filtersWithoutConditionsBytecode):
        (WebKit::WebCompiledContentExtension::filtersWithoutConditionsBytecodeLength):
        (WebKit::WebCompiledContentExtension::filtersWithConditionsBytecode):
        (WebKit::WebCompiledContentExtension::filtersWithConditionsBytecodeLength):
        (WebKit::WebCompiledContentExtension::conditionedFiltersBytecode):
        (WebKit::WebCompiledContentExtension::conditionedFiltersBytecodeLength):
        (WebKit::WebCompiledContentExtension::filtersWithoutDomainsBytecode): Deleted.
        (WebKit::WebCompiledContentExtension::filtersWithoutDomainsBytecodeLength): Deleted.
        (WebKit::WebCompiledContentExtension::filtersWithDomainsBytecode): Deleted.
        (WebKit::WebCompiledContentExtension::filtersWithDomainsBytecodeLength): Deleted.
        (WebKit::WebCompiledContentExtension::domainFiltersBytecode): Deleted.
        (WebKit::WebCompiledContentExtension::domainFiltersBytecodeLength): Deleted.
        * Shared/WebCompiledContentExtension.h:
        * Shared/WebCompiledContentExtensionData.cpp:
        (WebKit::WebCompiledContentExtensionData::encode):
        (WebKit::WebCompiledContentExtensionData::decode):
        * Shared/WebCompiledContentExtensionData.h:
        (WebKit::WebCompiledContentExtensionData::WebCompiledContentExtensionData):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::ContentExtensionMetaData::fileSize):
        (API::encodeContentExtensionMetaData):
        (API::decodeContentExtensionMetaData):
        (API::compiledToFile):
        (API::createExtension):
        (API::UserContentExtensionStore::lookupContentExtension):
        (API::UserContentExtensionStore::compileContentExtension):
        (API::UserContentExtensionStore::removeContentExtension):
        * UIProcess/API/APIUserContentExtensionStore.h:

2017-03-07  Brent Fulgham  <bfulgham@apple.com>

        [Mac][WK2] Expand sandbox to support access to audio component registrar
        https://bugs.webkit.org/show_bug.cgi?id=169283
        <rdar://problem/30793512>

        Reviewed by Alexey Proskuryakov.

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

2017-03-07  Chris Dumez  <cdumez@apple.com>

        Port DOMTimer from std::chrono::milliseconds to WTF::Seconds type
        https://bugs.webkit.org/show_bug.cgi?id=169236

        Reviewed by Simon Fraser.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::updateHiddenPageThrottlingAutoIncreaseLimit):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::setHiddenPageDOMTimerThrottlingIncreaseLimit):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setHiddenPageDOMTimerThrottlingIncreaseLimit):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2017-03-06  Aakash Jain  <aakash_jain@apple.com>

        Enable SUPPORTS_TEXT_BASED_API in WebKit2 for iOS
        https://bugs.webkit.org/show_bug.cgi?id=169233

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig: Enable SUPPORTS_TEXT_BASED_API.
        * Configurations/WebKit.xcconfig: Pass information to TAPI about reexporting WebKitLegacy and few extra headers.
        * WebKit2.xcodeproj/project.pbxproj: Run scripts which are run for installhdrs phase for installapi phase as well.

2017-03-06  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose API::InjectedBundle::EditorClient::didChange via the Objective-C bundle SPI
        https://bugs.webkit.org/show_bug.cgi?id=169223

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInEditingDelegate.h: Declared new
          delegate method -_webProcessPlugInBrowserContextControllerDidChangeByEditing:.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]): Added an override
          of API::InjectedBundle::EditorClient::didChange that calls the new delegate method.

2017-03-06  Michael Saboff  <msaboff@apple.com>

        Unreviewed build fix after r213492.

        * Configurations/Base.xcconfig:

2017-03-06  Aakash Jain  <aakash_jain@apple.com>

        Add WK_CLASS_AVAILABLE to _WKLinkIconParameters and _WKWebViewPrintFormatter
        https://bugs.webkit.org/show_bug.cgi?id=169225

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKLinkIconParameters.h:
        * UIProcess/_WKWebViewPrintFormatter.h:

2017-03-06  Michael Saboff  <msaboff@apple.com>

        Unreviewed build fix after r213483.

        * Configurations/Base.xcconfig:

2017-03-06  Brent Fulgham  <bfulgham@apple.com>

        [Mac][WK2] Support new CoreMedia routing features
        https://bugs.webkit.org/show_bug.cgi?id=169241
        <rdar://problem/30077969>

        Reviewed by Alexey Proskuryakov.

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

2017-03-06  Michael Saboff  <msaboff@apple.com>

        Take advantage of fast permissions switching of JIT memory for devices that support it
        https://bugs.webkit.org/show_bug.cgi?id=169155

        Reviewed by Saam Barati.

        Updated the Xcode config files to match what is in the JavaScriptCore ones.

        * Configurations/FeatureDefines.xcconfig:

2017-03-06  Aakash Jain  <aakash_jain@apple.com>

        Make WKMenuItemIdentifiersPrivate.h private header
        https://bugs.webkit.org/show_bug.cgi?id=168981

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj: Made WKMenuItemIdentifiersPrivate.h private.

2017-03-06  Alexey Proskuryakov  <ap@apple.com>

        Replace -sub_umbrella linker flag with a build setting
        https://bugs.webkit.org/show_bug.cgi?id=169146

        Reviewed by Tim Horton.

        * Configurations/WebKit.xcconfig:

2017-03-03  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when the user never plays a media element that was prevented from auto-playing
        https://bugs.webkit.org/show_bug.cgi?id=169150

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKPageUIClient.h:

2017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Expand font-weight and font-stretch to take any number
        https://bugs.webkit.org/show_bug.cgi?id=168889

        Reviewed by Simon Fraser.

        Migrate off old enum types.

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

2017-03-06  Andreas Kling  <akling@apple.com>

        [iOS] Report domains crashing under memory pressure via enhanced privacy logging.
        <https://webkit.org/b/169133>
        <rdar://problem/29964017>

        Reviewed by Antti Koivisto.

        Notify the UI process when the memory pressure status changes.
        If a web process crashes while under memory pressure, log the domain of the last open page
        using enhanced privacy logging.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::memoryPressureStatusChanged):
        (WebKit::WebProcessProxy::isUnderMemoryPressure):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2017-03-05  Brady Eidson  <beidson@apple.com>

        Remove new files accidentally added in r213441

        Unreviewed.

        * UIProcess/WebLoadingProviderProxy.cpp: Removed.
        * UIProcess/WebLoadingProviderProxy.h: Removed.
        * UIProcess/WebLoadingProviderProxy.messages.in: Removed.

2017-03-05  Brady Eidson  <beidson@apple.com>

        Rename CustomProtocolFoo to LegacyCustomProtocolFoo.
        https://bugs.webkit.org/show_bug.cgi?id=169188

        Reviewed by Andy Estes.

        * CMakeLists.txt:
        * DerivedSources.make:

        * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm: Renamed from Source/WebKit2/NetworkProcess/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm.
        (+[WKCustomProtocol canInitWithRequest:]):
        (+[WKCustomProtocol canonicalRequestForRequest:]):
        (+[WKCustomProtocol requestIsCacheEquivalent:toRequest:]):
        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]):
        (-[WKCustomProtocol initializationRunLoop]):
        (-[WKCustomProtocol startLoading]):
        (-[WKCustomProtocol stopLoading]):
        (WebKit::LegacyCustomProtocolManager::registerProtocolClass):
        (WebKit::LegacyCustomProtocolManager::registerScheme):
        (WebKit::LegacyCustomProtocolManager::unregisterScheme):
        (WebKit::LegacyCustomProtocolManager::supportsScheme):
        (WebKit::dispatchOnInitializationRunLoop):
        (WebKit::LegacyCustomProtocolManager::didFailWithError):
        (WebKit::LegacyCustomProtocolManager::didLoadData):
        (WebKit::LegacyCustomProtocolManager::didReceiveResponse):
        (WebKit::LegacyCustomProtocolManager::didFinishLoading):
        (WebKit::LegacyCustomProtocolManager::wasRedirectedToRequest):
        (WebKit::LegacyCustomProtocolManager::protocolForID):

        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.cpp: Renamed from Source/WebKit2/NetworkProcess/CustomProtocols/CustomProtocolManager.cpp.
        (WebKit::generateCustomProtocolID):
        (WebKit::LegacyCustomProtocolManager::supplementName):
        (WebKit::LegacyCustomProtocolManager::LegacyCustomProtocolManager):
        (WebKit::LegacyCustomProtocolManager::initialize):
        (WebKit::LegacyCustomProtocolManager::addCustomProtocol):
        (WebKit::LegacyCustomProtocolManager::removeCustomProtocol):
        (WebKit::LegacyCustomProtocolManager::startLoading):
        (WebKit::LegacyCustomProtocolManager::stopLoading):
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.h: Renamed from Source/WebKit2/NetworkProcess/CustomProtocols/CustomProtocolManager.h.
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.messages.in: Renamed from Source/WebKit2/NetworkProcess/CustomProtocols/CustomProtocolManager.messages.in.

        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp: Renamed from Source/WebKit2/NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp.
        (WebKit::CustomProtocolManager::WebSoupRequestAsyncData::WebSoupRequestAsyncData):
        (WebKit::CustomProtocolManager::WebSoupRequestAsyncData::~WebSoupRequestAsyncData):
        (WebKit::CustomProtocolManager::registerProtocolClass):
        (WebKit::CustomProtocolManager::registerScheme):
        (WebKit::CustomProtocolManager::unregisterScheme):
        (WebKit::CustomProtocolManager::supportsScheme):
        (WebKit::CustomProtocolManager::didFailWithError):
        (WebKit::CustomProtocolManager::didLoadData):
        (WebKit::CustomProtocolManager::didReceiveResponse):
        (WebKit::CustomProtocolManager::didFinishLoading):
        (WebKit::CustomProtocolManager::wasRedirectedToRequest):

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

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::create):
        * NetworkProcess/NetworkSession.h:

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::globalLegacyCustomProtocolManager):
        (WebKit::NetworkSessionCocoa::setLegacyCustomProtocolManager):
        (WebKit::NetworkSessionCocoa::create):
        (WebKit::NetworkSessionCocoa::defaultSession):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::globalCustomProtocolManager): Deleted.
        (WebKit::NetworkSessionCocoa::setCustomProtocolManager): Deleted.

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):

        * UIProcess/API/APICustomProtocolManagerClient.h:
        (API::LegacyCustomProtocolManagerClient::~LegacyCustomProtocolManagerClient):
        (API::LegacyCustomProtocolManagerClient::startLoading):
        (API::LegacyCustomProtocolManagerClient::stopLoading):
        (API::LegacyCustomProtocolManagerClient::invalidate):
        (API::CustomProtocolManagerClient::~CustomProtocolManagerClient): Deleted.
        (API::CustomProtocolManagerClient::startLoading): Deleted.
        (API::CustomProtocolManagerClient::stopLoading): Deleted.
        (API::CustomProtocolManagerClient::invalidate): Deleted.

        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.h: Renamed from Source/WebKit2/UIProcess/Cocoa/CustomProtocolManagerClient.h.
        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.mm: Renamed from Source/WebKit2/UIProcess/Cocoa/CustomProtocolManagerClient.mm.
        (-[WKCustomProtocolLoader initWithLegacyCustomProtocolManagerProxy:customProtocolID:request:]):
        (-[WKCustomProtocolLoader dealloc]):
        (-[WKCustomProtocolLoader customProtocolManagerProxyDestroyed]):
        (-[WKCustomProtocolLoader connection:didFailWithError:]):
        (-[WKCustomProtocolLoader connection:willCacheResponse:]):
        (-[WKCustomProtocolLoader connection:didReceiveResponse:]):
        (-[WKCustomProtocolLoader connection:didReceiveData:]):
        (-[WKCustomProtocolLoader connection:willSendRequest:redirectResponse:]):
        (-[WKCustomProtocolLoader connectionDidFinishLoading:]):
        (WebKit::LegacyCustomProtocolManagerClient::startLoading):
        (WebKit::LegacyCustomProtocolManagerClient::stopLoading):
        (WebKit::LegacyCustomProtocolManagerClient::invalidate):

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize):

        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.cpp: Removed.
        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp: Added.
        (WebKit::LegacyCustomProtocolManagerProxy::LegacyCustomProtocolManagerProxy):
        (WebKit::LegacyCustomProtocolManagerProxy::~LegacyCustomProtocolManagerProxy):
        (WebKit::LegacyCustomProtocolManagerProxy::startLoading):
        (WebKit::LegacyCustomProtocolManagerProxy::stopLoading):
        (WebKit::LegacyCustomProtocolManagerProxy::processDidClose):
        (WebKit::LegacyCustomProtocolManagerProxy::wasRedirectedToRequest):
        (WebKit::LegacyCustomProtocolManagerProxy::didReceiveResponse):
        (WebKit::LegacyCustomProtocolManagerProxy::didLoadData):
        (WebKit::LegacyCustomProtocolManagerProxy::didFailWithError):
        (WebKit::LegacyCustomProtocolManagerProxy::didFinishLoading):
        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.h: Renamed from Source/WebKit2/UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h.
        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.messages.in: Renamed from Source/WebKit2/UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.messages.in.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        * UIProcess/Network/NetworkProcessProxy.h:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::setLegacyCustomProtocolManagerClient):
        (WebKit::WebProcessPool::registerSchemeForCustomProtocol):
        (WebKit::WebProcessPool::unregisterSchemeForCustomProtocol):
        (WebKit::WebProcessPool::setCustomProtocolManagerClient): Deleted.
        * UIProcess/WebProcessPool.h:

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/cocoa/WebProcessCocoa.mm:

2017-03-04  Eric Carlson  <eric.carlson@apple.com>

        [iOS] The web process should inherit application state from UI process
        https://bugs.webkit.org/show_bug.cgi?id=169156
        <rdar://problem/30845473>

        Reviewed by Alexey Proskuryakov.

        * Platform/spi/ios/CelestialSPI.h: Added.

        * WebKit2.xcodeproj/project.pbxproj: Include CelestialSPI.h.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist: Add entitlement.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitialize): Set up PID proxying.

2017-03-04  Aakash Jain  <aakash_jain@apple.com>

        Add symbols required by TAPI from Shared/API/Cocoa/WebKit.m in a header file
        https://bugs.webkit.org/show_bug.cgi?id=169162

        Reviewed by Alexey Proskuryakov.

        The symbols from binary and headers should match precisely, otherwise TAPI would
        complain. There are few symbols which are not actually needed in header file, but
        we still need to add them in a header file to make TAPI happy.

        * Platform/ExtraPublicSymbolsForTAPI.h: Added.
        * WebKit2.xcodeproj/project.pbxproj: Added ExtraPublicSymbolsForTAPI.h

2017-03-04  Aakash Jain  <aakash_jain@apple.com>

        Add symbols required by TAPI in a header file
        https://bugs.webkit.org/show_bug.cgi?id=169113
        <rdar://problem/30772033>

        Reviewed by Alexey Proskuryakov.

        The symbols from binary and headers should match precisely, otherwise TAPI would
        complain. There are few symbols which are not actually needed in header file, but
        we still need to add them in a header file to make TAPI happy.

        * Platform/ExtraPrivateSymbolsForTAPI.h: Added.
        * WebKit2.xcodeproj/project.pbxproj: Added Platform/ExtraPrivateSymbolsForTAPI.h

2017-03-04  Joseph Pecoraro  <pecoraro@apple.com>

        Remove duplicate initialization guard in WebKit2 logging initialization
        https://bugs.webkit.org/show_bug.cgi?id=169164

        Reviewed by Dan Bernstein.

        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary):

2017-03-03  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Update libwebrtc source code
        https://bugs.webkit.org/show_bug.cgi?id=168599

        Reviewed by Alex Christensen.

        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:

2017-03-03  Dean Jackson  <dino@apple.com>

        Add WebGPU compile flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=169161
        <rdar://problem/30846689>

        Reviewed by Tim Horton.

        Add ENABLE_WEBGPU, an experimental feature flag, a RuntimeEnabledFeature,
        and an InternalSetting.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-03-03  Dean Jackson  <dino@apple.com>

        Move Input Events and Gamepad from experimental features into main preferences
        https://bugs.webkit.org/show_bug.cgi?id=169157
        <rdar://problems/30845587>

        Reviewed by Myles C. Maxfield.

        These are no longer experimental on trunk.

        * Shared/WebPreferencesDefinitions.h:

2017-03-03  Brent Fulgham  <bfulgham@apple.com>

        [MediaStream iOS] REGRESSION(r212883): Missing function definition breaks sandbox
        https://bugs.webkit.org/show_bug.cgi?id=169148
        <rdar://problem/30825728>

        Reviewed by Alex Christensen.

        The changes in r212883 added a call to 'shared-preferences-read', which is not defined
        for iOS. In fact, it's not needed since 'user-preference-read' does everything we need on iOS.
        Switch to the correct preference rule.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Add missing function

2017-03-03  Aakash Jain  <aakash_jain@apple.com>

        Move declaration of _WKSetCrashReportApplicationSpecificInformation to header file
        https://bugs.webkit.org/show_bug.cgi?id=169043

        Reviewed by Alex Christensen.

        * WebKit2.xcodeproj/project.pbxproj: Added WebProcessCocoa.h
        * WebProcess/cocoa/WebProcessCocoa.h: Added.
        * WebProcess/cocoa/WebProcessCocoa.mm: Imported WebProcessCocoa.h
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm: Ditto.

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

        [GTK] Ensure WebKitWebView always have a user content manager
        https://bugs.webkit.org/show_bug.cgi?id=169130

        Reviewed by Michael Catanzaro.

        User content manager is a construct only property, so if not set by the user the web view doesn't have any. We
        can create a default one, like we do for settings, when user didn't provide one.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed):

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

        Rename htmlediting.h/cpp to Editing.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=169103

        Reviewed by Alex Christensen.

        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2017-03-02  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Set the NSURLSessionTask priority to match the request's priority
        https://bugs.webkit.org/show_bug.cgi?id=169115
        <rdar://problem/28881392>

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::toNSURLSessionTaskPriority):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        Set the priority on the task based on the ResourceRequest's priority.
        This is used for HTTP/2 request prioritization.

2017-03-02  Mark Lam  <mark.lam@apple.com>

        Add WebKit2 hooks to notify the VM that the user has requested a debugger break.
        https://bugs.webkit.org/show_bug.cgi?id=169089

        Reviewed by Tim Horton and Joseph Pecoraro.

        * CMakeLists.txt:
        * DerivedSources.make:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::connect):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebInspectorInterruptDispatcher.cpp: Added.
        (WebKit::WebInspectorInterruptDispatcher::create):
        (WebKit::WebInspectorInterruptDispatcher::WebInspectorInterruptDispatcher):
        (WebKit::WebInspectorInterruptDispatcher::~WebInspectorInterruptDispatcher):
        (WebKit::WebInspectorInterruptDispatcher::initializeConnection):
        (WebKit::WebInspectorInterruptDispatcher::notifyNeedDebuggerBreak):
        * WebProcess/WebPage/WebInspectorInterruptDispatcher.h: Added.
        * WebProcess/WebPage/WebInspectorInterruptDispatcher.messages.in: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:

2017-03-02  Brady Eidson  <beidson@apple.com>

        Update WKWebsiteDatastoreConfiguration SPI.
        https://bugs.webkit.org/show_bug.cgi?id=169102

        Reviewed by Tim Horton.
        
        Make these strings URLs, and throw exceptions if you try to use non-file URLs.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):

        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (checkURLArgument):
        (-[_WKWebsiteDataStoreConfiguration _webStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setWebStorageDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration _indexedDBDatabaseDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setIndexedDBDatabaseDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration _webSQLDatabaseDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setWebSQLDatabaseDirectory:]):

2017-03-02  Youenn Fablet  <youenn@apple.com>

        Move part of NetworkRTCProvider::close implementation in NetworkRTCProvider destructor
        https://bugs.webkit.org/show_bug.cgi?id=169104

        Reviewed by Alex Christensen.

        Improving NetworkRTCProvider clean-up by moving some member field cleaning to the destructor.
        The remaining cleaning is still kept in NetworkRTCProvider::close as we need to go to the rtc network thread and
        for that, we take a ref of NetworkRTCProvider.
        Stopping any resolver before freeing them.

        * NetworkProcess/webrtc/NetworkRTCMonitor.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::~NetworkRTCProvider):
        (WebKit::NetworkRTCProvider::close):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:

2017-03-02  Youenn Fablet  <youenn@apple.com>

        [iOS] Replicate NetworkProcess Mac sandboxing in iOS to allow TCP/UDP
        https://bugs.webkit.org/show_bug.cgi?id=169105

        Reviewed by Alex Christensen.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Adding sandbox extension support for TCP/UDP networking.

2017-03-02  Aakash Jain  <aakash_jain@apple.com>

        Move stringMatchesWildcardString from WebKit2 to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=169065

        Reviewed by Alexey Proskuryakov.

        * Platform/mac/StringUtilities.h: Moved stringMatchesWildcardString to WebCore.
        * WebKit2.xcodeproj/project.pbxproj: Make StringUtilities.h a project header.
        * Platform/mac/StringUtilities.mm:
        (WebKit::wildcardRegexPatternString): Moved to WebCore.
        (WebKit::stringMatchesWildcardString): Ditto.
        * WebProcess/Plugins/WebPluginInfoProvider.cpp: Using stringMatchesWildcardString from WebCore.

2017-03-02  Aakash Jain  <aakash_jain@apple.com>

        IsSmartPtr<WKRetainPtr<T>>::value should not be exported
        https://bugs.webkit.org/show_bug.cgi?id=169047

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/cpp/WKRetainPtr.h:

2017-03-02  Youenn Fablet  <youenn@apple.com>

        Activate some new webrtc tests
        https://bugs.webkit.org/show_bug.cgi?id=168850

        Reviewed by Alex Christensen.

        * Shared/WebPreferencesDefinitions.h: Activating peer connection by default when libwebrtc is on.
        This allows ensuring the network process will have its sandbox extension.

2017-03-02  Brian Burg  <bburg@apple.com>

        Web Automation: _WKAutomationSessionDelegate should work with WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=169091
        <rdar://problem/30810538>

        Reviewed by Tim Horton.

        As a first step towards fixing the mistake of using WKPageRef in an Objective-C SPI,
        add the correct delegate methods that take WKWebView so that Objective-C clients can
        use this functionality.

        In a future patch, we'll remove the WKPageRef delegate methods when they are no longer
        being used by clients. Clients should switch to using WKWebView, or wait for a C SPI
        with equivalent functionality (something like WKAutomationSessionClient) to be ported.

        While I'm fixing this mess, make API::AutomationSessionClient use references instead
        of pointers. We null-check all WebPageProxy parameters before calling its methods.

        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::didDisconnectFromRemote):
        (API::AutomationSessionClient::didRequestNewWindow):
        (API::AutomationSessionClient::isShowingJavaScriptDialogOnPage):
        (API::AutomationSessionClient::dismissCurrentJavaScriptDialogOnPage):
        (API::AutomationSessionClient::acceptCurrentJavaScriptDialogOnPage):
        (API::AutomationSessionClient::messageOfCurrentJavaScriptDialogOnPage):
        (API::AutomationSessionClient::setUserInputForCurrentJavaScriptPromptOnPage):
        Change pointer to reference.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        Add duplicate delegate methods that take/return WKWebView instead of WKPageRef.
        Adjust the delegate method names to reflect parameter type and avoid conflicts with the
        WKPageRef-using methods that we need to remove eventually.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::terminate):
        (WebKit::WebAutomationSession::createBrowsingContext):
        (WebKit::WebAutomationSession::isShowingJavaScriptDialog):
        (WebKit::WebAutomationSession::dismissCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::acceptCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::messageOfCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::setUserInputForCurrentJavaScriptPrompt):
        Dereference `this` and `webPageProxy` when calling API::AutomationSessionClient methods.

        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::AutomationSessionClient::didDisconnectFromRemote):
        (WebKit::AutomationSessionClient::didRequestNewWindow):
        (WebKit::AutomationSessionClient::isShowingJavaScriptDialogOnPage):
        (WebKit::AutomationSessionClient::dismissCurrentJavaScriptDialogOnPage):
        (WebKit::AutomationSessionClient::acceptCurrentJavaScriptDialogOnPage):
        (WebKit::AutomationSessionClient::messageOfCurrentJavaScriptDialogOnPage):
        (WebKit::AutomationSessionClient::setUserInputForCurrentJavaScriptPromptOnPage):
        Now there are two possible delegate methods for most of these, so try to use the
        WKWebView-based delegate method first and fall back to the WKPageRef delegate method.

2017-03-02  Alex Christensen  <achristensen@webkit.org>

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169056

        Reviewed by Jon Lee.

        * Configurations/FeatureDefines.xcconfig:

2017-03-01  Megan Gardner  <megan_gardner@apple.com>

        Data interaction support for WK1
        https://bugs.webkit.org/show_bug.cgi?id=169062

        Reviewed by Wenson Hsieh.

        Allow for separate additions files in WK1 and WK2

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:

2017-03-02  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Activate ICE candidate privacy policy
        https://bugs.webkit.org/show_bug.cgi?id=168975

        Reviewed by Alex Christensen.

        Disabling network enumeration by default.
        Enabling ICE candidate filtering by default.
        Chaning ICE candidate filtering according userMediaAccess policy:
        - If access is denied, filtering is on.
        - If access is granted, filtering is off.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetICECandidateFilteringEnabled):
        (WKPreferencesGetICECandidateFilteringEnabled):
        (WKPreferencesSetEnumeratingAllNetworkInterfacesEnabled):
        (WKPreferencesGetEnumeratingAllNetworkInterfacesEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::toWebCore):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        (WebKit::UserMediaProcessManager::endedCaptureSession):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:

2017-03-02  Tomas Popela  <tpopela@redhat.com>

        [WK2] Keyboard menu key should show context menu
        https://bugs.webkit.org/show_bug.cgi?id=72099

        Reviewed by Carlos Garcia Campos.

        Show the context menu when the GtkWidget::popup-menu signal is
        emitted. This signal is triggered by pressing a key (usually
        the Menu key or the Shift + F10 shortcut) or it could be emitted on
        WebKitWebView.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        (webkit_web_view_class_init): Update the documentation for the
        context-menu signal
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBasePopupMenu): Connect to the popup-menu signal and
        save the event that was used to trigger the signal. If there is no
        such event create a new GdkEvent with GDK_NOTHING type.
        (webkitWebViewBasePopupMenu):
        (webkit_web_view_base_class_init):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleContextMenuKeyEvent):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::contextMenuForKeyEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2017-03-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Replace -[WKWebView adjustedDataInteractionItemProviders:] with a UI delegate method
        https://bugs.webkit.org/show_bug.cgi?id=169013

        Reviewed by Dan Bernstein.

        Rather than introduce new SPI on WKWebView directly, we should follow convention and add the hook to the private
        version of the UI delegate.

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

2017-03-01  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r213259.

        Broke an internal build

        Reverted changeset:

        "Continue enabling WebRTC"
        https://bugs.webkit.org/show_bug.cgi?id=169056
        http://trac.webkit.org/changeset/213259

2017-03-01  Alex Christensen  <achristensen@webkit.org>

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169056

        Reviewed by Jon Lee.

        * Configurations/FeatureDefines.xcconfig:

2017-03-01  Chris Dumez  <cdumez@apple.com>

        [WK2][!NETWORK_SESSION] Failure to download when using a download attribute with no value on an anchor
        https://bugs.webkit.org/show_bug.cgi?id=169060
        <rdar://problem/30773140>

        Reviewed by Darin Adler.

        In the !NETWORK_SESSION code path, we were failing to use the suggested filename coming from the
        network layer in the case where the download attribute is present but has no value. We were ending
        up passing an empty string as suggested filename to Safari which is not handled properly.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):

2017-02-28  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplayed media is muted
        https://bugs.webkit.org/show_bug.cgi?id=168987

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKPageUIClient.h:

2017-03-01  Brady Eidson  <beidson@apple.com>

        Add SPI to create WebsiteDataStore objects pointing to custom paths.
        https://bugs.webkit.org/show_bug.cgi?id=169044

        Reviewed by Tim Horton.

        * UIProcess/API/APIWebsiteDataStore.h:

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):

        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h.
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h.

        * UIProcess/WebsiteData/WebsiteDataStore.h:

        * WebKit2.xcodeproj/project.pbxproj:

2017-03-01  Jon Lee  <jonlee@apple.com>

        Update peer connection preference
        https://bugs.webkit.org/show_bug.cgi?id=169016
        rdar://problem/30773889

        Reviewed by Eric Carlson.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setEnabledForFeature):
        (WebKit::WebPreferences::setPeerConnectionAndMediaStreamEnabled): Deleted.
        * UIProcess/WebPreferences.h:

2017-03-01  Tomas Popela  <tpopela@redhat.com>

        [GTK] Fix problems found by Coverity scan in WebPrintOperationGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=169027

        Reviewed by Carlos Garcia Campos.

        Initialize the lastPagePosition variable and remove an unused one
        - totalToPrint.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::PrintPagesData::PrintPagesData):

2017-03-01  Andreas Kling  <akling@apple.com>

        Move MemoryPressureHandler to WTF
        <https://webkit.org/b/168908>

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * PluginProcess/PluginProcess.cpp:
        * Shared/linux/WebMemorySamplerLinux.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        * WebProcess/WebPage/ios/WebPageIOS.mm:

2017-03-01  Joseph Pecoraro  <pecoraro@apple.com>

        [WebRTC] Install libwebrtc.dylib inside of WebCore.framework
        https://bugs.webkit.org/show_bug.cgi?id=168859

        Reviewed by Dan Bernstein.

        * Configurations/BaseTarget.xcconfig:
        * Configurations/WebKit.xcconfig:
        Set library search path to find the libwebrtc.dylib inside of WebCore's Frameworks
        or in the WK_OVERRIDE_FRAMEWORKS_DIR.

2017-02-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkProcess aborts in WebKit::NetworkLoad::didCompleteWithError at Source/WebKit2/NetworkProcess/NetworkLoad.cpp:423
        https://bugs.webkit.org/show_bug.cgi?id=168963

        Reviewed by Antti Koivisto.

        This is trying to call SpeculativeLoad::didFailLoading() after SpeculativeLoad has already been
        completed. SpeculativeLoad::didComplete() call its completion handler that removes the load from
        m_pendingPreloads. When the completion handler returns the SpeculativeLoad is deleted. So, we should always
        ensure that SpeculativeLoad is not used after didComplete() call. In SpeculativeLoad::willSendRedirectedRequest(),
        the call to NetworkLoad::continueWillSendRequest() causes SpeculativeLoad::didFailLoading() to be called. We
        don't really need to call continueWillSendRequest() though, since the network load is going to be deleted anyway
        by didComplete(), and the willSendRequest completion handler does nothing when the request is null.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):

2017-02-28  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=168899
        Re-add deprecated functions to WKPageGroup.h

        Reviewed by Tim Horton.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPageGroupRemoveUserContentFilter):
        (WKPageGroupRemoveAllUserContentFilters): Deleted. Unlike the other three, this
        function isn't used by any clients.
        * UIProcess/API/C/WKPageGroup.h:

2017-02-28  Alexey Proskuryakov  <ap@apple.com>

        Expose _WKVisitedLinkProvider in a header
        https://bugs.webkit.org/show_bug.cgi?id=168955

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm:
        * UIProcess/API/Cocoa/_WKVisitedLinkStore.h:
        The class needs to be visible in a header, as it is exported SPI.

2017-02-28  Brady Eidson  <beidson@apple.com>

        Move resolving symlinks of some WebsiteDataStore paths from WebProcessPool to... WebsiteDataStore!.
        https://bugs.webkit.org/show_bug.cgi?id=168696.

        Reviewed by Alex Christensen.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::resolvedApplicationCacheDirectory):
        (WebKit::WebsiteDataStore::resolvedMediaCacheDirectory):
        (WebKit::WebsiteDataStore::resolvedMediaKeysDirectory):
        (WebKit::WebsiteDataStore::resolvedDatabaseDirectory):

2017-02-28  Alex Christensen  <achristensen@webkit.org>

        LibWebRTCProvider should check existence of libwebrtc.dylib
        https://bugs.webkit.org/show_bug.cgi?id=168986

        Reviewed by Youenn Fablet.

        * Shared/WebPreferencesDefinitions.h:
        * Shared/WebPreferencesStore.cpp:
        * UIProcess/WebPreferences.cpp:
        (WebKit::checkWebRTCAvailability): Deleted.

2017-02-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, build fix after r213176.

        * Platform/spi/ios/UIKitSPI.h:

2017-02-28  Tim Horton  <timothy_horton@apple.com>

        [iOS] Getting QLPreviewProtocol slows down first navigation in Web process
        https://bugs.webkit.org/show_bug.cgi?id=168940
        <rdar://problem/29468999>

        Reviewed by Simon Fraser.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        Make use of isQuickLookPreviewURL.

2017-02-28  Brady Eidson  <beidson@apple.com>

        Fix API test regression(s):
        REGRESSION (r213168): API test WKUserContentController.ScriptMessageHandlerMultipleHandlerRemoval crashing
        https://bugs.webkit.org/show_bug.cgi?id=168991

        Unreviewed.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):

2017-02-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction should support attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=168916
        <rdar://problem/30664519>

        Reviewed by Ryosuke Niwa.

        Teaches WKContentView to recognize attachment elements as data interactive content, and add an internal hook to
        adjust the list of item providers before initiating data interaction.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _adjustedDataInteractionItemProviders:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView pointIsInDataInteractionContent:]):

2017-02-28  Yongjun Zhang  <yongjun_zhang@apple.com>

        Add delegate method to handle images with alternate data.
        https://bugs.webkit.org/show_bug.cgi?id=168785
        <rdar://problem/28776219>

        Add delegate methods to WKUIDelegatePrivate so that a WebKit client can provide alternate URL or data for an image
        before long-press or preview. When an image has alternate URL or data, we can change the actions accordingly.

        Reviewed by Enrica Casucci.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Add two delegate methods _webView:getAlternateURLFromImage:completionHandler:
            and _webView:alternateURLFromImage:userInfo;
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h: Add an readonly property userInfo so that alternate data can be
            carried by _WKActivatedElementInfo and be processed by WebKit client.
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:]):
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:userInfo:]): A new initializer that also takes userInfo.
        (-[_WKActivatedElementInfo userInfo]):
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h: A new delegate method for WKActionSheetAssistantDelegate to fetch
            alternate data before showing image sheet.
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]): Before showing the image sheet, if the image doesn't have linked URL (i.e. not a image
            link), try to fetch its alternate URL and data.
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]): Drive-by fix. We always use positionInformation's URL to populate the
            actions, however, we should use elementInfo's URL since the two URLs could mismatch.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistant:getAlternateURLForImage:completion:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]): Before previewing an image, synchronously get alternate
            data for the image and update the actions accordingly.

2017-02-28  Brady Eidson  <beidson@apple.com>
        
        Refactor WebViewImpl creation in preparation for supporting multiple WebsiteDataStores.
        https://bugs.webkit.org/show_bug.cgi?id=168676

        Reviewed by Alex Christensen and Sam Weinig.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::warmInitialProcess):
        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessPool.h:

2017-02-28  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Limit libwebrtc logging in Debug build
        https://bugs.webkit.org/show_bug.cgi?id=168974

        Reviewed by Alex Christensen.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        * Platform/Logging.h:

2017-02-28  Youenn Fablet  <youenn@apple.com>

        [WebRTC] NetworkRTCProvider should stop the network thread from the main thread
        https://bugs.webkit.org/show_bug.cgi?id=168972

        Reviewed by Alex Christensen.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::close): Ensuring to stop the network thread from the main thread when provider is
        getting closed.

2017-02-24  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplayed media ends without being paused
        https://bugs.webkit.org/show_bug.cgi?id=168852

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKPageUIClient.h:

2017-02-28  Csaba Osztrogonác  <ossy@webkit.org>

        Remove EFL leftover from WebPageProxy.messages.in
        https://bugs.webkit.org/show_bug.cgi?id=168828

        Reviewed by Gyuyoung Kim.

        * UIProcess/WebPageProxy.messages.in:

2017-02-28  Alex Christensen  <achristensen@webkit.org>

        Main resource requests need cachePartition
        https://bugs.webkit.org/show_bug.cgi?id=168806

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        Begin enabling WebRTC on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=168915

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2017-02-27  Alexey Proskuryakov  <ap@apple.com>

        Remove _WKWebsiteDataRecord.h
        https://bugs.webkit.org/show_bug.cgi?id=168954

        Reviewed by Dan Bernstein.

        This doesn't seem to have ever been used, so better to remove it than to add an
        implementation.

        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2017-02-27  Alexey Proskuryakov  <ap@apple.com>

        WKPageIsPlayingVideoInEnhancedFullscreen availability mismatch
        https://bugs.webkit.org/show_bug.cgi?id=168952

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/mac/WKPagePrivateMac.h: TARGET_OS_MAC is not the right thing to
        check, as it's true on both macOS and iOS.

2017-02-27  Alexey Proskuryakov  <ap@apple.com>

        Export WKPluginInformationBundleShortVersionKey
        https://bugs.webkit.org/show_bug.cgi?id=168951

        Reviewed by Dan Bernstein.

        * Shared/API/c/WKPluginInformation.h: It was accidentally not exported when added.

2017-02-27  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Add support for libwebrtc TCP incoming connections
        https://bugs.webkit.org/show_bug.cgi?id=168748

        Reviewed by Alex Christensen.

        Covered by added layout tests.

        When a libwebrtc server socket is signalling a new connnection through SignalNewConnection, we do:
        - Wrap the incoming socket into a LibWebRTCSocketClient
        - Store it into a pending socket map with an identifier
        - Send a message to the web process of a new connection with the server socket identifier and new connection socket identifier.
        The Web process then creates a WebRTCSocket wrapper around it by sendinig a WrapNewTCPConnection message.
        It then propagates the SignalNewConnection to libwebrtc code path.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::LibWebRTCSocketClient):
        (WebKit::LibWebRTCSocketClient::signalReadPacket):
        (WebKit::LibWebRTCSocketClient::signalSentPacket):
        (WebKit::LibWebRTCSocketClient::signalNewConnection):
        (WebKit::LibWebRTCSocketClient::signalAddressReady):
        (WebKit::LibWebRTCSocketClient::signalConnect):
        (WebKit::LibWebRTCSocketClient::signalClose):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::wrapNewTCPConnection):
        (WebKit::NetworkRTCProvider::newConnection):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::signalNewConnection):
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createNewConnectionSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
        * WebProcess/Network/webrtc/WebRTCSocket.cpp:
        (WebKit::WebRTCSocket::signalNewConnection):
        * WebProcess/Network/webrtc/WebRTCSocket.h:
        * WebProcess/Network/webrtc/WebRTCSocket.messages.in:

2017-02-27  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Don't use undefined sandbox rule on macOS 10.11 or earlier
        https://bugs.webkit.org/show_bug.cgi?id=168942
        <rdar://problem/30743376>

        Reviewed by Ryosuke Niwa.

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

2017-02-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, roll out r213065.

        * UIProcess/ios/WKContentViewInteraction.h:

2017-02-27  Alexey Proskuryakov  <ap@apple.com>

        Remove some deprecated WKPage plug-in information functions
        https://bugs.webkit.org/show_bug.cgi?id=168897

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetProcessIdentifier):
        (WKPageGetPluginInformationBundleIdentifierKey): Deleted.
        (WKPageGetPluginInformationBundleVersionKey): Deleted.
        (WKPageGetPluginInformationDisplayNameKey): Deleted.
        (WKPageGetPluginInformationFrameURLKey): Deleted.
        (WKPageGetPluginInformationMIMETypeKey): Deleted.
        (WKPageGetPluginInformationPageURLKey): Deleted.
        (WKPageGetPluginInformationPluginspageAttributeURLKey): Deleted.
        (WKPageGetPluginInformationPluginURLKey): Deleted.
        * UIProcess/API/C/WKPage.h:

2017-02-27  Alexey Proskuryakov  <ap@apple.com>

        Stop exporting C++ member variables from class extensions in WKDOMInternals.h
        https://bugs.webkit.org/show_bug.cgi?id=168886

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h: These are @package variables.

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        Optimize checkWebRTCAvailability
        https://bugs.webkit.org/show_bug.cgi?id=168913

        Reviewed by Darin Adler.

        We can optimize startup time by using RTLD_LAZY instead of RTLD_NOW because we don't need to load all the symbols.
        We just need to check whether libwebrtc.dylib can be found and is a valid dylib for the current architecture.
        Also, initialize a static bool so it only needs to be checked once.  Right now it's only used when initializing settings,
        but if we use it for other things in the future there will be no need to reopen the dylib.

        * UIProcess/WebPreferences.cpp:
        (WebKit::checkWebRTCAvailability):

2017-02-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, revert all temporary build fixes for data interaction

        Rolls out r212990, r212988 and r212984.

        * UIProcess/ios/WKContentViewInteraction.h:

2017-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rendering artifacts when resizing the window in X11 with AC mode enabled
        https://bugs.webkit.org/show_bug.cgi?id=168728

        Reviewed by Žan Doberšek.

        This happens because the pixmap we create from the redirected window is uninitialized until the threaded
        compositor renders into it. We should always initialize the pixmap right after it's created.

        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
        (WebKit::defaultVisual): Helper static method to get the default GdkVisual.
        (WebKit::AcceleratedSurfaceX11::AcceleratedSurfaceX11): Use createPixmap().
        (WebKit::AcceleratedSurfaceX11::createPixmap): Create and initialize the pixmap.
        (WebKit::AcceleratedSurfaceX11::resize): Use createPixmap().
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h:

2017-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Flickering when leaving accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=168911

        Reviewed by Žan Doberšek.

        It doesn't always happen, and it's too fast, more noticeable in websites with a dark background, because we are
        drawing a single white frame. This happens when we leave AC mode during the layer flush that schedules an update
        on the compositor, which at that point only clears the area and renders nothing. However,
        CoordinatedGraphicsScene::paintToCurrentGLContext() always renders a white background when no web view color has
        been set. And that's the white frame we get. We could prevent that last update from happening by checking if we
        still have a graphics root layer after syncDisplayState() in the layer flush, the same way we check the layer
        tree host is still valid.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::layerFlushTimerFired):

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        [libwebrtc] Enable WebRTC in some Production Builds
        https://bugs.webkit.org/show_bug.cgi?id=168858

        * Configurations/FeatureDefines.xcconfig:

2017-02-27  Andy Estes  <aestes@apple.com>

        Links cannot be activated when running Mobile Safari with external SDK build of WebKit for iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=141906

        Reviewed by Tim Horton.

        Even if Touch Events are disabled, we still need to register a
        UIWebTouchEventsGestureRecognizer to record the layer tree transaction ID when a touch
        begins. Click events are only generated for touches that occur after the current frame's
        load has committed, and we use the transaction ID from when the touch began to implement
        this check.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h: Declared _layerTreeTransactionIdAtLastTouchStart.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]): Register a UIWebTouchEventsGestureRecognizer even if
        Touch Events are disabled.
        (-[WKContentView cleanupInteraction]): Reset _layerTreeTransactionIdAtLastTouchStart to 0.
        (-[WKContentView _webTouchEventsRecognized:]): Update _layerTreeTransactionIdAtLastTouchStart
        when a touch begins, even if Touch Events are disabled.
        (-[WKContentView _singleTapCommited:]): Passed _layerTreeTransactionIdAtLastTouchStart to
        WebPageProxy::commitPotentialTap().
        (-[WKContentView _attemptClickAtLocation:]): Ditto for WebPageProxy::handleTap().
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::commitPotentialTap):
        (WebKit::WebPageProxy::handleTap):

2017-02-26  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Remove CoordinatedGraphicsScene::paintToGraphicsContext()
        https://bugs.webkit.org/show_bug.cgi?id=168903

        Reviewed by Carlos Garcia Campos.

        Remove the CoordinatedGraphicsScene::paintToGraphicsContext() method as it
        is not used anywhere. Also enables removing the GraphicsContext pointer
        member from the TextureMapper class.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToGraphicsContext): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:

2017-02-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Hangs when showing Google search results
        https://bugs.webkit.org/show_bug.cgi?id=168699

        Reviewed by Žan Doberšek.

        Connection::sendOutgoingMessage() can poll forever if sendmsg fails with EAGAIN or EWOULDBLOCK. For example if
        socket read buffers are full, poll will be blocked until we read the pending data, but we can't read because
        the thread is blocked in the poll. In case of EAGAIN/EWOULDBLOCK we should poll using the run loop, to allow
        reads to happen in thread while we wait for the socket to be writable again. In the GTK+ port we use
        GSocketMonitor to poll socket file descriptor without blocking, using the run loop. This patch renames the
        socket monitor as readSocketMonitor and adds another one for polling output. When sendmsg fails with
        EAGAIN/EWOULDBLOCK, the pending message is saved and the write monitor starts polling. Once the socket is
        writable again we send the pending message. Helper class MessageInfo and a new one UnixMessage have been moved
        to its own header file to be able to use std::unique_ptr member to save the pending message.

        * Platform/IPC/Connection.cpp: Include UnixMessage.h as required by std::unique_ptr.
        * Platform/IPC/Connection.h: Add write socket monitor and also keep the GSocket as a member to reuse it.
        * Platform/IPC/glib/GSocketMonitor.cpp: Use Function instead of std::function.
        (IPC::GSocketMonitor::start):
        * Platform/IPC/glib/GSocketMonitor.h:
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::platformInitialize): Initialize the GSocket here since we rely on it to take the ownership of
        the descriptor. We were leaking it if the connection was invalidated without being opened.
        (IPC::Connection::platformInvalidate): Destroy the GSocket even when not connected. Also stop the write monitor.
        (IPC::Connection::processMessage):
        (IPC::Connection::open):
        (IPC::Connection::platformCanSendOutgoingMessages): Return false if we have a pending message to ensure
        Connection doesn't try to send more messages until the pending message is dispatched. We don't need to check
        m_isConnected because the caller already checks that.
        (IPC::Connection::sendOutgoingMessage): Split it in two. This creates and prepares a UnixMessage and then calls
        sendOutputMessage() to do the rest.
        (IPC::Connection::sendOutputMessage): Send the message, or save it if sendmsg fails with EAGAIN or EWOULDBLOCK
        to be sent later when the socket is writable.
        * Platform/IPC/unix/UnixMessage.h: Added.
        (IPC::MessageInfo::MessageInfo):
        (IPC::MessageInfo::setMessageBodyIsOutOfLine):
        (IPC::MessageInfo::isMessageBodyIsOutOfLine):
        (IPC::MessageInfo::bodySize):
        (IPC::MessageInfo::attachmentCount):
        (IPC::UnixMessage::UnixMessage):
        (IPC::UnixMessage::~UnixMessage):
        (IPC::UnixMessage::attachments):
        (IPC::UnixMessage::messageInfo):
        (IPC::UnixMessage::body):
        (IPC::UnixMessage::bodySize):
        (IPC::UnixMessage::appendAttachment):
        * PlatformGTK.cmake:

2017-02-26  Devin Rousso  <dcrousso+webkit@gmail.com>

        Web Inspector: RTL: Docking Left doesn't constrain the page width
        https://bugs.webkit.org/show_bug.cgi?id=168862

        Reviewed by Brian Burg.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        Calculate the inspectedViewFrame to be the remaining space after WebInspector is opened
        instead of using the original page size.

2017-02-26  Alexey Proskuryakov  <ap@apple.com>

        Stop exporting C++ member variables from WKDOMTextIterator
        https://bugs.webkit.org/show_bug.cgi?id=168885

        Reviewed by Dan Bernstein.

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

2017-02-26  Alexey Proskuryakov  <ap@apple.com>

        Add preprocessor guards to Mac specific files that are exposed as private headers on iOS
        https://bugs.webkit.org/show_bug.cgi?id=168878

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKInspector.h:
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.h:

2017-02-26  Alexey Proskuryakov  <ap@apple.com>

        Remove spurious C++ include from _WKTestingDelegate.h
        https://bugs.webkit.org/show_bug.cgi?id=168877

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKTestingDelegate.h:

2017-02-26  Alexey Proskuryakov  <ap@apple.com>

        Remove unimplemented WKResourceLoadStatisticsManagerSetReducedTimestampResolution
        https://bugs.webkit.org/show_bug.cgi?id=168880

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKResourceLoadStatisticsManager.h:

2017-02-26  Alexey Proskuryakov  <ap@apple.com>

        Remove leftover WebKit2 C API function declarations
        https://bugs.webkit.org/show_bug.cgi?id=168879

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2017-02-26  Alexey Proskuryakov  <ap@apple.com>

        Remove some old WKSecurityOrigin binary compatibility stubs
        https://bugs.webkit.org/show_bug.cgi?id=168881

        Reviewed by Dan Bernstein.

        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginGetHost): Deleted.
        (WKSecurityOriginGetProtocol): Deleted.

2017-02-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r211312): Double-clicking a word selects it along with the space that follows it
        https://bugs.webkit.org/show_bug.cgi?id=168821
        <rdar://problem/30690431>

        Reviewed by Tim Horton.

        Actually encode and decode smartInsertDeleteEnabled when sending WebPageCreationParameters over XPC.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):

2017-02-26  Chris Dumez  <cdumez@apple.com>

        HitTestResult's linkSuggestedFilename should sanitize download attribute
        https://bugs.webkit.org/show_bug.cgi?id=168856
        <rdar://problem/30683109>

        Reviewed by Antti Koivisto.

        HitTestResult's linkSuggestedFilename should sanitize download attribute.
        This is used by the context menu's "Download Linked File" & "Download Linked
        File As..." actions.

        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::WebHitTestResultData):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::linkSuggestedFilename):

2017-02-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unreviewed, document deficiency in webkit_website_data_manager_clear() API

        Document that this function cannot currently delete cookie data for a particular period of
        time.

        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:

2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Gather timing information with reliable responseEnd time
        https://bugs.webkit.org/show_bug.cgi?id=168351

        Reviewed by Alex Christensen.

        Change from an unused `double finishTime` to a complete WebCore::NetworkLoadMetrics
        object in the didFinishLoad ResourceLoader path. We may also extend this in the
        didFail path later on. This allows the NetworkProcess to give complete timing
        information, and more final metrics about the load, to WebCore.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTaskClient::didCompleteWithError):
        Give the NetworkDataTaskClient a basic didCompleteWithError for a completion
        without metrics. For loads that complete with an error, or haven't populated
        any metrics, this will pass empty metrics onward.

        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
        (WebKit::BlobDownloadClient::didFinishLoading):
        * NetworkProcess/Downloads/BlobDownloadClient.h:
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::didFail):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::didCompleteWithError):
        (WebKit::NetworkLoad::didFinishLoading):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        Change didFinishLoad paths to take a NetworkLoadMetrics object instead of finishTime.
        Change didCompleteWithError pathes to include a NetworkLoadMetrics object instead of finishTime.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::didCompleteWithError):
        Own a NetworkLoadTiming that will be populated with the load.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        Populate NetworkLoadMetrics in the didFinishCollectingMetrics NSURLSessionTaskDelegate method.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::timeoutFired):
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse):
        (WebKit::NetworkDataTaskSoup::dispatchDidCompleteWithError):
        (WebKit::NetworkDataTaskSoup::tlsErrorsChanged):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        (WebKit::NetworkDataTaskSoup::didFinishRead):
        (WebKit::NetworkDataTaskSoup::didFinishRequestNextPart):
        (WebKit::NetworkDataTaskSoup::didFailDownload):
        (WebKit::NetworkDataTaskSoup::didFail):
        (WebKit::NetworkDataTaskSoup::networkEvent):
        (WebKit::NetworkDataTaskSoup::didStartRequest):
        (WebKit::NetworkDataTaskSoup::didRestart):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        Instead of populating the NetworkLoadMetrics on the ResourceResponse, populate
        a member variable during the entire load and dispatch didFinishCollectingMetrics
        right before didCompleteLoadWithError.

2017-02-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r212944.

        Caused a lot of failures on the debug bots

        Reverted changeset:

        "[Resource Timing] Gather timing information with reliable
        responseEnd time"
        https://bugs.webkit.org/show_bug.cgi?id=168351
        http://trac.webkit.org/changeset/212944

2017-02-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal build

        * UIProcess/ios/WKContentViewInteraction.h:

2017-02-24  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplay is denied
        https://bugs.webkit.org/show_bug.cgi?id=168840

        Reviewed by Alex Christensen.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::handleAutoplayEvent):
        (API::UIClient::didPlayMediaPreventedFromPlayingWithoutUserGesture): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleAutoplayEvent):
        (WebKit::WebPageProxy::didPlayMediaPreventedFromPlayingWithoutUserGesture): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::handleAutoplayEvent):
        (WebKit::WebChromeClient::didPlayMediaPreventedFromPlayingWithoutUserGesture): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2017-02-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor data interaction to use new WKDataInteraction SPI
        https://bugs.webkit.org/show_bug.cgi?id=168602
        Work towards <rdar://problem/30313681>

        Reviewed by Tim Horton.

        Adjust testing SPI to match new data interaction interfaces.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _simulateDataInteractionEntered:]):
        (-[WKWebView _simulateDataInteractionUpdated:]):
        (-[WKWebView _simulateDataInteractionPerformOperation:]):
        (-[WKWebView _simulateDataInteractionEnded:]):
        (-[WKWebView _simulateDataInteractionSessionDidEnd:]):
        (-[WKWebView _simulateWillBeginDataInteractionWithSession:]):
        (-[WKWebView _simulatedItemsForSession:]):
        (-[WKWebView _simulatePrepareForDataInteractionSession:completion:]):
        (-[WKWebView _simulateDataInteractionSessionDidEnd:withOperation:]): Deleted.
        (-[WKWebView _simulateFailedDataInteractionWithIndex:]): Deleted.
        (-[WKWebView _simulateWillBeginDataInteractionWithIndex:withSession:]): Deleted.
        (-[WKWebView _simulatedItemsForDataInteractionWithIndex:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _positionInformationDidChange:]):
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:

2017-02-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove the data interaction gesture recognizer
        https://bugs.webkit.org/show_bug.cgi?id=168600
        <rdar://problem/30313681>

        Reviewed by Anders Carlsson.

        The data interaction gesture recognizer will no longer be needed moving forward.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _simulateDataInteractionGestureRecognized]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _dataInteractionGestureRecognizer]): Deleted.

2017-02-24  Chris Dumez  <cdumez@apple.com>

        [iOS][WK2] Disable network cache speculative revalidation / loading in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=168832
        <rdar://problem/30697911>

        Reviewed by Antti Koivisto.

        Disable network cache speculative revalidation / loading in low power mode on iOS to
        save battery.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::initialize):
        * NetworkProcess/cache/NetworkCache.h:

2017-02-24  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add alternate classification method
        https://bugs.webkit.org/show_bug.cgi?id=168347
        <rdar://problem/30352793>
        <rdar://problem/30646710>
        <rdar://problem/30660708>

        Reviewed by Alex Christensen.

        This patch adds a CorePrediction-based classifier to the WebResourceLoadStatisticsStore.
        The CorePrediction framework is introduced as a dependency for macOS and iOS. The patch
        also adds functions to support layout tests of the feature.

        * Platform/Logging.h:
            Added channel ResourceLoadStatistics.
        * Platform/classifier/ResourceLoadStatisticsClassifier.h: Added.
            Pulls in the Cocoa-specific classifier for Cocoa-based platforms.
        (WebKit::ResourceLoadStatisticsClassifier::ResourceLoadStatisticsClassifier):
        * Platform/classifier/ResourceLoadStatisticsClassifierBase.cpp: Added.
        (WebKit::ResourceLoadStatisticsClassifierBase::hasPrevalentResourceCharacteristics):
            Shared classifier logic.
        (WebKit::ResourceLoadStatisticsClassifierBase::classifyWithVectorThreshold):
            Fallback classifier for when we don't have CorePrediction.
        * Platform/classifier/ResourceLoadStatisticsClassifierBase.h: Added.
        (WebKit::ResourceLoadStatisticsClassifierBase::ResourceLoadStatisticsClassifierBase):
        (WebKit::ResourceLoadStatisticsClassifierBase::~ResourceLoadStatisticsClassifierBase):
        * Platform/classifier/cocoa/CorePredictionSoftLink.h: Added.
            Soft links to CorePrediction and the two functions we use from it.
        * Platform/classifier/cocoa/ResourceLoadStatisticsClassifierCocoa.cpp: Added.
        (WebKit::ResourceLoadStatisticsClassifier::classify):
        (WebKit::ResourceLoadStatisticsClassifier::storagePath):
        (WebKit::ResourceLoadStatisticsClassifier::shouldUseCorePredictionAndHaveModelLoaded):
        (WebKit::ResourceLoadStatisticsClassifier::singletonPredictionModel):
            The new classifier for Cocoa platforms.
        * Platform/classifier/cocoa/ResourceLoadStatisticsClassifierCocoa.h: Added.
        * PlatformGTK.cmake:
            Added Platform/classifier directory and ResourceLoadStatisticsClassifierBase.cpp.
        * PlatformMac.cmake:
            Added Platform/classifier and Platform/classifier/cocoa directories, and
            source files ResourceLoadStatisticsClassifierBase.cpp and
            ResourceLoadStatisticsClassifierCocoa.cpp
        * Resources/ResourceLoadStatistics/corePrediction_model: Added.
            Model file to load into CorePrediction.
        * UIProcess/API/C/WKResourceLoadStatisticsManager.cpp:
        (WKResourceLoadStatisticsManagerSetSubframeUnderTopFrameOrigin):
        (WKResourceLoadStatisticsManagerSetSubresourceUnderTopFrameOrigin):
        (WKResourceLoadStatisticsManagerSetSubresourceUniqueRedirectTo):
            Test infrastructure.
        * UIProcess/API/C/WKResourceLoadStatisticsManager.h:
        * UIProcess/WebResourceLoadStatisticsManager.cpp:
        (WebKit::WebResourceLoadStatisticsManager::setSubframeUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsManager::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsManager::setSubresourceUniqueRedirectTo):
            Test infrastructure.
        * UIProcess/WebResourceLoadStatisticsManager.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
            Renamed m_storagePath to m_statisticsStoragePath for clarity.
        (WebKit::WebResourceLoadStatisticsStore::classifyResource):
            Now calls the classifier through its ResourceLoadStatisticsClassifier
            member variable.
        (WebKit::WebResourceLoadStatisticsStore::persistentStoragePath):
            Renamed m_storagePath to m_statisticsStoragePath for clarity.
        (WebKit::WebResourceLoadStatisticsStore::writeEncoderToDisk):
            Renamed m_storagePath to m_statisticsStoragePath for clarity.
        (WebKit::WebResourceLoadStatisticsStore::hasPrevalentResourceCharacteristics): Deleted.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * WebKit2.xcodeproj/project.pbxproj:
            Added the new classifier source files under Platform/classifier and the
            corePrediction_model file under Resources/ResourceLoadStatistics.

2017-02-23  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Add Experimental Feature Flag
        https://bugs.webkit.org/show_bug.cgi?id=167147

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferencesDefinitions.h:
        Move ResourceTiming to experimental section.
        Disable it for El Capitan due to known issues.

2017-02-23  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Gather timing information with reliable responseEnd time
        https://bugs.webkit.org/show_bug.cgi?id=168351

        Reviewed by Alex Christensen.

        Change from an unused `double finishTime` to a complete WebCore::NetworkLoadMetrics
        object in the didFinishLoad ResourceLoader path. We may also extend this in the
        didFail path later on. This allows the NetworkProcess to give complete timing
        information, and more final metrics about the load, to WebCore.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTaskClient::didCompleteWithError):
        Give the NetworkDataTaskClient a basic didCompleteWithError for a completion
        without metrics. For loads that complete with an error, or haven't populated
        any metrics, this will pass empty metrics onward.

        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
        (WebKit::BlobDownloadClient::didFinishLoading):
        * NetworkProcess/Downloads/BlobDownloadClient.h:
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::didFail):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::didCompleteWithError):
        (WebKit::NetworkLoad::didFinishLoading):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        Change didFinishLoad paths to take a NetworkLoadMetrics object instead of finishTime.
        Change didCompleteWithError pathes to include a NetworkLoadMetrics object instead of finishTime.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::didCompleteWithError):
        Own a NetworkLoadTiming that will be populated with the load.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        Populate NetworkLoadMetrics in the didFinishCollectingMetrics NSURLSessionTaskDelegate method.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::timeoutFired):
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse):
        (WebKit::NetworkDataTaskSoup::dispatchDidCompleteWithError):
        (WebKit::NetworkDataTaskSoup::tlsErrorsChanged):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        (WebKit::NetworkDataTaskSoup::didFinishRead):
        (WebKit::NetworkDataTaskSoup::didFinishRequestNextPart):
        (WebKit::NetworkDataTaskSoup::didFailDownload):
        (WebKit::NetworkDataTaskSoup::didFail):
        (WebKit::NetworkDataTaskSoup::networkEvent):
        (WebKit::NetworkDataTaskSoup::didStartRequest):
        (WebKit::NetworkDataTaskSoup::didRestart):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        Instead of populating the NetworkLoadMetrics on the ResourceResponse, populate
        a member variable during the entire load and dispatch didFinishCollectingMetrics
        right before didCompleteLoadWithError.

2017-02-23  Beth Dakin  <bdakin@apple.com> + Dan Saunders  <dasau@microsoft.com>

        No reliable way to get a snapshot of WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=161450
        -and corresponding-
        <rdar://problem/23846039>

        Reviewed by Tim Horton.

        This patch adds a new API to WKWebView to snapshot a rect:
        takeSnapshotWithConfiguration:completionHandler:

        It also adds a new API object WKSnapshotConfiguration.

        * UIProcess/API/Cocoa/WKSnapshotConfiguration.h: Added.
        * UIProcess/API/Cocoa/WKSnapshotConfiguration.mm: Added.
        (-[WKSnapshotConfiguration copyWithZone:]):
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        * WebKit2.xcodeproj/project.pbxproj:

2017-02-23  Jer Noble  <jer.noble@apple.com>

        ASSERT in RTCNetwork::IPAddress::decode()
        https://bugs.webkit.org/show_bug.cgi?id=168792

        Reviewed by Tim Horton.

        An ASSERT added to RTCNetwork::IPAddress::decode in r212781 was hit due to a bad encode of SocketAddress; an
        extra boolean value was added to the encoder unnecessarily, leading to garbage data being decoded in the following
        IPAddress.

        Drive-by-fix: allow the IPAddress encoder/decoder to pass through a value of AF_UNSPEC for an IPAddress to support
        passing through an "empty" IPAddress value.

        * Shared/RTCNetwork.cpp:
        (WebKit::RTCNetwork::IPAddress::decode):
        (WebKit::RTCNetwork::IPAddress::encode):
        (WebKit::RTCNetwork::SocketAddress::encode):

2017-02-23  Eric Carlson  <eric.carlson@apple.com>

        [WebRTC][Mac][WebKit2] WebRTC requires media capture
        https://bugs.webkit.org/show_bug.cgi?id=168782
        <rdar://problem/30675242>

        Reviewed by Youenn Fablet.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Extend the sanbox to allow microphone access
        if media stream OR WebRTC is enabled.

2017-02-23  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Remove unneeded sandbox exceptions for media elements
        https://bugs.webkit.org/show_bug.cgi?id=168767

        Reviewed by Alex Christensen.

        Remove several sandbox exceptions that have not been needed for the past four
        or five macOS releases.
        
        * WebProcess/com.apple.WebProcess.sb.in:

2017-02-23  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Remove com.apple.audio.VDCAssistant from sandboxes
        https://bugs.webkit.org/show_bug.cgi?id=168764
        <rdar://problem/16736919>

        Reviewed by Alex Christensen.

        Remove unneeded sandbox class.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2017-02-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction causes selection to fall out of sync between web/UI processes
        https://bugs.webkit.org/show_bug.cgi?id=168735
        <rdar://problem/30657817>

        Reviewed by Tim Horton.

        Fixes a bug with data interaction causing selection state to fall out of sync between the UI and web processes,
        and also introduces testing infrastructure and tests for grabbing UI-side selection view rects in TestWebKitAPI.
        While performing a data interaction operation, we now lift restrictions for assisting the focused node.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):

2017-02-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash attempting to load Flash plugin in Wayland
        https://bugs.webkit.org/show_bug.cgi?id=163159

        Reviewed by Michael Catanzaro.

        The problem is that we check if the current diplay is X11 or Wayland also in the plugin process, but with GTK2
        plugins the display is always X11. We should early reject plugins requiring GTK2 in the UI process when the
        current display is Wayland.

        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::getPluginInfo):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::createPluginContainer): Add an assert to ensure this message is never received on a
        non-X11 display.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::createPluginContainer): Never send CreatePluginContainer message to the UI process if the
        display is not X11.

2017-02-23  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] Allow web process sandbox to be extended for media capture
        https://bugs.webkit.org/show_bug.cgi?id=168756

        Reviewed by Brent Fulgham.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Add rules to dynamically
        extend the sandbox to allow access to the camera and/or microphone.

2017-02-23  Tomas Popela  <tpopela@redhat.com>

        [GTK] Drag and drop is always moving the content even if copy is requested
        https://bugs.webkit.org/show_bug.cgi?id=168424

        Reviewed by Carlos Garcia Campos.

        Drag and drop is always moving the content around even if the copy is
        requested (i.e. by pressing the Control key).

        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::drop):

2017-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Better handle Thread and RunLoop initialization
        https://bugs.webkit.org/show_bug.cgi?id=167828

        Reviewed by Yusuke Suzuki.

        Remove unnecessary call to WTF::initializeMainThread().

        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):

2017-02-22  Chris Dumez  <cdumez@apple.com>

        Unreviewed, drop console logging landed by mistake as part of r212832.

        * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
        (WebKit::BackgroundProcessResponsivenessTimer::timerFired):

2017-02-22  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Tighten sandbox to deny process-info* access
        https://bugs.webkit.org/show_bug.cgi?id=168704
        <rdar://problem/16371441>

        Reviewed by Alex Christensen.

        Tighten the various WebKit sandboxes by denying access to process-info.
        Add back specific features needed to run WebKit tests and to do browsing
        of websites (including plugins).

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2017-02-22  Anders Carlsson  <andersca@apple.com>

        Crash if there's a mismatch between the WebKit used by the UI process and child processes respectively
        https://bugs.webkit.org/show_bug.cgi?id=168739
        Part of rdar://problem/30631411.

        Reviewed by Geoffrey Garen.

        If the UI process and web process for some reason end up using different versions of the WebKit framework, weird things happen
        because the message format is different between versions. To avoid this, send along the WebKit bundle version from the UI process
        in the XPC bootstrap message, check that it matches inside the XPC main functions. If there's a mismatch, crash.

        * Shared/Cocoa/ChildProcessCocoa.mm:
        (WebKit::ChildProcess::didReceiveInvalidMessage):
        Fix parameters.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (main):
        Check for the bundle version and crash if it's not what we expect.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Initialize the bundle version.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::_WKSetCrashReportApplicationSpecificInformation):
        Export this so we can call it from the XPC services without having to link WKSI.

2017-02-22  Chris Dumez  <cdumez@apple.com>

        [WK2] Call processDidBecomeUnresponsive delegate when a background process is unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=168683
        <rdar://problem/30558745>

        Reviewed by Dan Bernstein.

        Call processDidBecomeUnresponsive delegate when a background process is unresponsive
        instead of killing it on WebKit side. This gives the client the choice about what it
        wants to do about this process.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/BackgroundProcessResponsivenessTimer.cpp: Renamed from Source/WebKit2/UIProcess/UnresponsiveWebProcessTerminator.cpp.
        (WebKit::BackgroundProcessResponsivenessTimer::BackgroundProcessResponsivenessTimer):
        (WebKit::BackgroundProcessResponsivenessTimer::updateState):
        (WebKit::BackgroundProcessResponsivenessTimer::timerFired):
        * UIProcess/BackgroundProcessResponsivenessTimer.h: Renamed from Source/WebKit2/UIProcess/UnresponsiveWebProcessTerminator.h.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::terminateProcess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::m_backgroundResponsivenessTimer):
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:

2017-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkProcess: Stop disabling buffering when NETWORK_CACHE is disabled in build
        https://bugs.webkit.org/show_bug.cgi?id=168637

        Reviewed by Alex Christensen.

        It was added in r193752 as part of bug #137692 to fix an infinite loop in network process that happened in EFL
        because they didn't enable the network cache at that time. I think that was actually a workaround, and it was
        added without any comment so it has stayed there even when EFL enabled disk cache, and now that is gone. Looking
        at current code I see no reason why buffering can't work with the disk cache disabled, so I think it's time to
        remove that workaround.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime):

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293
        <rdar://problem/30401864>

        Reviewed by Alex Christensen.

        Activating PeerConnection runtime flag based on successful loading of libwebrtc.dylib.

        * Configurations/WebKit.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::checkWebRTCAvailability):

2017-02-21  Commit Queue  <commit-queue@webkit.org>

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

        It broke GTK+ port when using single shared process model
        (Requested by KaL on #webkit).

        Reverted changeset:

        "Refactor WebViewImpl creation in preparation for supporting
        multiple WebsiteDataStores."
        https://bugs.webkit.org/show_bug.cgi?id=168676
        http://trac.webkit.org/changeset/212786

2017-02-21  Brady Eidson  <beidson@apple.com>

        Refactor WebViewImpl creation in preparation for supporting multiple WebsiteDataStores.
        https://bugs.webkit.org/show_bug.cgi?id=168676

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Allow for WebViewImpl creation to fail.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:]): Ditto.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::maybeCreate):
        (WebKit::WebViewImpl::WebViewImpl):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess): New WebProcess creation might fail. Handle it.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::warmInitialProcess):
        (WebKit::WebProcessPool::maybeCreateNewWebProcessRespectingProcessCountLimit): This can now fail
          if the process will have a non-default WebsiteDataStore but we've already reached the process cap.
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit): Deleted.
        * UIProcess/WebProcessPool.h:

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC] WebKit2 should assert that libwebrtc transmitted IP addresses family is IP4 or IP6
        https://bugs.webkit.org/show_bug.cgi?id=168691

        Reviewed by Alex Christensen.

        Adding some asserts that family is IPv4 or IPv6.

        * Shared/RTCNetwork.cpp:
        (WebKit::RTCNetwork::IPAddress::decode):
        (WebKit::RTCNetwork::IPAddress::encode):

2017-02-20  Simon Fraser  <simon.fraser@apple.com>

        Add support to PlatformCALayer/GraphicsLayerCA for subpixel-antialiased text, with a Setting and a MiniBrowser switch
        https://bugs.webkit.org/show_bug.cgi?id=168620
        <rdar://problem/30617772>

        Reviewed by Tim Horton.

        Add a Setting for subpixel-antialiased layer text. Plumb this through GraphicsLayerCA and
        PlatformCALayer, where it ultimately affects the layer contents format.
        
        This is not supported with UI-side compositing.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetSubpixelAntialiasedLayerTextEnabled):
        (WKPreferencesGetSubpixelAntialiasedLayerTextEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _subpixelAntialiasedLayerTextEnabled]):
        (-[WKPreferences _setSubpixelAntialiasedLayerTextEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::supportsSubpixelAntialiasedText):
        (WebKit::PlatformCALayerRemote::setSupportsSubpixelAntialiasedText):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::supportsSubpixelAntialiasedText):
        (WebKit::PlatformCALayerRemoteTiledBacking::setSupportsSubpixelAntialiasedText):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2017-02-21  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Only scan website data store once per session ID + reinstate removal counting
        https://bugs.webkit.org/show_bug.cgi?id=168541

        Reviewed by Alex Christensen.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::deleteWebsiteDataForTopPrivatelyOwnedDomainsInAllPersistentDataStores):
            The CallbackAggregator now merges a list of domains for which we
            have removed data records and eventually reports this back to the
            caller.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::removeDataRecords):
            Now reports back to its WebCore::ResourceLoadStatisticsStore
            which domains have had data records removed.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataForTopPrivatelyOwnedDomains):
            The completion handler now handles data record removal counting.
        (WebKit::WebsiteDataStore::removeDataForTopPrivatelyOwnedDomains):
            The completion handler now handles data record removal counting.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2017-02-21  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Network process sandbox does not allow WebRTC networking
        https://bugs.webkit.org/show_bug.cgi?id=168594

        Reviewed by Brent Fulgham.

        UIProcess was passing a boolean to know whether WebRTC networking is allowed or not to the network process.
        This boolean was known to late for the sandbox to be relaxed.
        A sandbox extension is now used instead to relax the sandbox.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        (WebKit::NetworkProcess::initializeSandbox):
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC] ICE candidates should be filtered according a policy
        https://bugs.webkit.org/show_bug.cgi?id=168348

        Reviewed by Alex Christensen.

        Adding the possibility for the UI process to control the ICE candidate filtering and whether libwebrtc can
        enumerate all interfaces or not.

        Disabling ICE candidate filtering for the moment.
        Enabling to enumerate all interfaces for the moment.

        In the future, ICE candidate filtering should be tied to getUserMedia.
        Interface enumeration should be disabled with the default configuration.
        We should do that once we have sufficient testing in various network infrastructures.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::disableICECandidateFiltering):
        (WebKit::WebPage::enableICECandidateFiltering):
        (WebKit::WebPage::disableEnumeratingAllNetworkInterfaces):
        (WebKit::WebPage::enableEnumeratingAllNetworkInterfaces):
        * WebProcess/WebPage/WebPage.messages.in:

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC] NetworkRTCMonitor should ensure clearing its manager only once
        https://bugs.webkit.org/show_bug.cgi?id=168661

        Reviewed by Alex Christensen.

        Making sure NetworkRTCMonitor manager is cleared only once.
        ALso ensuring that manager does not get destroyed as part of NetworkRTCMonitor destructor.
        The manager needs to be destroyed in the RTC network thread.

        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
        (WebKit::NetworkRTCMonitor::~NetworkRTCMonitor):
        (WebKit::NetworkRTCMonitor::stopUpdating):
        * NetworkProcess/webrtc/NetworkRTCMonitor.h:

2017-02-21  Brent Fulgham  <bfulgham@apple.com>

        [WebRTC][Mac][WebKit2] Revise sandbox to limit connections to UDP and TCP
        https://bugs.webkit.org/show_bug.cgi?id=168664
        <rdar://problem/30600587>

        Reviewed by Youenn Fablet.

        Add filters to the WebRTC rule to limit network traffic to UDP and TCP.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2017-02-21  Maureen Daum  <mdaum@apple.com>

        Check what LocalStorage data exists in deleteDatabasesModifiedSince() before attempting deletion.
        https://bugs.webkit.org/show_bug.cgi?id=168659
        rdar://problem/22781730

        Reviewed by Brady Eidson.

        Check what LocalStorage data exists in deleteDatabasesModifiedSince() before attempting deletion.
        It is possible that another process has caused information to be added to LocalStorage
        after we created this LocalStorageDatabaseTracker instance, so we should update our
        internal state by checking the contents of StorageTracker.db and the other local
        storage files so we know what databases actually exist. By calling importOriginIdentifiers()
        at the start of deleteDatabasesModifiedSince(), m_origins will now have the up-to-date
        list of origins LocalStorage contains data for.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):

2017-02-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reduce platform ifdefs in WebKit2 custom protocols implementation
        https://bugs.webkit.org/show_bug.cgi?id=165028

        Reviewed by Darin Adler.

        Make mac implementation use the APICustomProtocolManagerClient to share more code with the soup based ports.

        * CMakeLists.txt: Add CustomProtocolManagerProxy.cpp.
        * PlatformEfl.cmake: Remove CustomProtocolManagerProxySoup.cpp.
        * PlatformGTK.cmake: Ditto.
        * PlatformMac.cmake: Remove CustomProtocolManagerProxyMac.mm.
        * UIProcess/API/APICustomProtocolManagerClient.h:
        (API::CustomProtocolManagerClient::startLoading): Make it void, since we were always returning true and the
        returned value was ignored.
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (EwkUrlSchemeRequest::finish): Update to new CustomProtocolManagerProxy API.
        * UIProcess/API/gtk/WebKitCustomProtocolManagerClient.cpp:
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestReadCallback): Ditto.
        * UIProcess/Cocoa/CustomProtocolManagerClient.h: Added.
        * UIProcess/Cocoa/CustomProtocolManagerClient.mm: Added.
        (-[WKCustomProtocolLoader initWithCustomProtocolManagerProxy:customProtocolID:request:]):
        (-[WKCustomProtocolLoader dealloc]):
        (-[WKCustomProtocolLoader connection:didFailWithError:]):
        (-[WKCustomProtocolLoader connection:didReceiveResponse:]):
        (-[WKCustomProtocolLoader connection:didReceiveData:]):
        (-[WKCustomProtocolLoader connection:willSendRequest:redirectResponse:]):
        (-[WKCustomProtocolLoader connectionDidFinishLoading:]):
        (WebKit::CustomProtocolManagerClient::startLoading):
        (WebKit::CustomProtocolManagerClient::stopLoading):
        (WebKit::CustomProtocolManagerClient::invalidate):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize): Set the CustomProtocolManagerClient.
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Remove code that is now shared.
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.cpp: Added.
        (WebKit::CustomProtocolManagerProxy::startLoading):
        (WebKit::CustomProtocolManagerProxy::processDidClose):
        (WebKit::CustomProtocolManagerProxy::wasRedirectedToRequest):
        (WebKit::CustomProtocolManagerProxy::didReceiveResponse):
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::globalURLSchemesWithCustomProtocolHandlers): Just moved here to use it from ensureNetworkProcess().
        (WebKit::WebProcessPool::WebProcessPool): Remove soup ifdefs.
        (WebKit::WebProcessPool::setCustomProtocolManagerClient): Moved from the soup implementation.
        (WebKit::WebProcessPool::ensureNetworkProcess): Initialize custom protocols parameters.
        (WebKit::WebProcessPool::registerSchemeForCustomProtocol): Register the protocol if not already registered globally.
        (WebKit::WebProcessPool::unregisterSchemeForCustomProtocol): Remove soup ifdefs.
        * UIProcess/WebProcessPool.h: Remove soup ifdefs.
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Remove code that is now shared.
        * WebKit2.xcodeproj/project.pbxproj:

2017-02-21  Daewoong Jang  <daewoong.jang@navercorp.com>

        Remove unused files.
        https://bugs.webkit.org/show_bug.cgi?id=168656.

        Reviewed by Csaba Osztrogonác.

        Remove files which became unused after removal of EFL port.

        * UIProcess/CoordinatedGraphics/PageViewportController.cpp: Removed.
        * UIProcess/CoordinatedGraphics/PageViewportController.h: Removed.
        * UIProcess/PageViewportControllerClient.h: Removed.

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC] LibWebRTCSocket::SendTo message should have a correct SocketAddress
        https://bugs.webkit.org/show_bug.cgi?id=168636

        Reviewed by Eric Carlson.

        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::SendTo): Ensuring address remains valid during SendTo message lifetime.

2017-02-21  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212699.

        Internal build not ready

        Reverted changeset:

        "[WebRTC][Mac] Activate libwebrtc"
        https://bugs.webkit.org/show_bug.cgi?id=167293
        http://trac.webkit.org/changeset/212699

2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove ENABLE_THREADED_COMPOSITOR build option
        https://bugs.webkit.org/show_bug.cgi?id=168606

        Reviewed by Michael Catanzaro.

        Now that we have AC mode on demand with the threaded compositor there's no reason to keep the old AC code.

        * PlatformGTK.cmake:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp: Removed.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h: Removed.

2017-02-20  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293
        <rdar://problem/30401864>

        Reviewed by Alex Christensen.

        Activating PeerConnection runtime flag based on successful loading of libwebrtc.dylib.

        * Configurations/WebKit.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::checkWebRTCAvailability):

2017-02-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r212685.

        This change broke the 32-bit Sierra build.

        Reverted changeset:

        "Resource Load Statistics: Add alternate classification
        method"
        https://bugs.webkit.org/show_bug.cgi?id=168347
        http://trac.webkit.org/changeset/212685

2017-02-20  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add alternate classification method
        https://bugs.webkit.org/show_bug.cgi?id=168347
        <rdar://problem/30352793>

        Reviewed by Alex Christensen.

        This patch adds a CorePrediction-based classifier to the WebResourceLoadStatisticsStore.
        The CorePrediction framework is introduced as a dependency for macOS and iOS. The patch
        also adds functions to support layout tests of the feature.

        * Configurations/BaseTarget.xcconfig:
        * Configurations/WebKit.xcconfig:
            Added dependency on CorePrediction.
        * Platform/classifier: Added.
        * Platform/classifier/ResourceLoadStatisticsClassifier.h: Added.
            Pulls in the Cocoa-specific classifier for Cocoa-based platforms.
        (WebKit::ResourceLoadStatisticsClassifier::ResourceLoadStatisticsClassifier):
        * Platform/classifier/ResourceLoadStatisticsClassifierBase.cpp: Added.
        (WebKit::ResourceLoadStatisticsClassifierBase::hasPrevalentResourceCharacteristics):
            Shared classifier logic.
        (WebKit::ResourceLoadStatisticsClassifierBase::classifyWithVectorThreshold):
            Fallback classifier for when we don't have CorePrediction.
        * Platform/classifier/ResourceLoadStatisticsClassifierBase.h: Added.
        (WebKit::ResourceLoadStatisticsClassifierBase::ResourceLoadStatisticsClassifierBase):
        (WebKit::ResourceLoadStatisticsClassifierBase::~ResourceLoadStatisticsClassifierBase):
        * Platform/classifier/cocoa: Added.
        * Platform/classifier/cocoa/CorePredictionSPI.h: Added.
            Includes CorePrediction if available, otherwise declares needed symbols.
            Always redeclares the functions so we'll get a build error if
            CorePrediction changes.
        * Platform/classifier/cocoa/ResourceLoadStatisticsClassifierCocoa.cpp: Added.
        (WebKit::ResourceLoadStatisticsClassifier::classify):
        (WebKit::ResourceLoadStatisticsClassifier::storagePath):
        (WebKit::ResourceLoadStatisticsClassifier::shouldUseCorePrediction):
            The new classifier for Cocoa platforms.
        * Platform/classifier/cocoa/ResourceLoadStatisticsClassifierCocoa.h: Added.
        (WebKit::ResourceLoadStatisticsClassifier::ResourceLoadStatisticsClassifier):
        * PlatformGTK.cmake:
           Added Platform/classifier directory and ResourceLoadStatisticsClassifierBase.cpp.
        * PlatformMac.cmake:
           Added Platform/classifier and Platform/classifier/cocoa directories, and
           source files ResourceLoadStatisticsClassifierBase.cpp and
           ResourceLoadStatisticsClassifierCocoa.cpp
        * Resources/ResourceLoadStatistics: Added.
        * Resources/ResourceLoadStatistics/corePrediction_model: Added.
            Model file to load into CorePrediction.
        * UIProcess/API/C/WKResourceLoadStatisticsManager.cpp:
        (WKResourceLoadStatisticsManagerSetSubframeUnderTopFrameOrigin):
        (WKResourceLoadStatisticsManagerSetSubresourceUnderTopFrameOrigin):
        (WKResourceLoadStatisticsManagerSetSubresourceUniqueRedirectTo):
            Test infrastructure.
        * UIProcess/API/C/WKResourceLoadStatisticsManager.h:
        * UIProcess/WebResourceLoadStatisticsManager.cpp:
        (WebKit::WebResourceLoadStatisticsManager::setSubframeUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsManager::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsManager::setSubresourceUniqueRedirectTo):
            Test infrastructure.
        * UIProcess/WebResourceLoadStatisticsManager.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
            Renamed m_storagePath to m_statisticsStoragePath for clarity.
        (WebKit::WebResourceLoadStatisticsStore::classifyResource):
            Now calls the classifier through its ResourceLoadStatisticsClassifier
            member variable.
        (WebKit::WebResourceLoadStatisticsStore::persistentStoragePath):
            Renamed m_storagePath to m_statisticsStoragePath for clarity.
        (WebKit::WebResourceLoadStatisticsStore::writeEncoderToDisk):
            Renamed m_storagePath to m_statisticsStoragePath for clarity.
        (WebKit::WebResourceLoadStatisticsStore::hasPrevalentResourceCharacteristics): Deleted.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * WebKit2.xcodeproj/project.pbxproj:
            Added the new classifier source files under Platform/classifier and the
            corePrediction_model file under Resources/ResourceLoadStatistics.

2017-02-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add plumbing to the UI process for TextIndicatorData when computing the drag image
        https://bugs.webkit.org/show_bug.cgi?id=168583
        Work towards <rdar://problem/30313681>

        Reviewed by Tim Horton.

        Changes the SetDragImage IPC message to send TextIndicatorData over to the UI process. Also changes the boolean
        isLink parameter to be a DragSourceAction instead, leaving it up to the receiving end (in the UI process) to
        special case links.

        Additionally, renames hasDataInteractionAtPosition to hasSelectionAtPosition to better reflect its purpose.

        These changes are only infrastructural should not alter any behaviors.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _simulateDataInteractionGestureRecognized]):
        (-[WKWebView _simulateDataInteractionEntered:]):
        (-[WKWebView _simulateDataInteractionUpdated:]):
        (-[WKWebView _simulateDataInteractionPerformOperation:]):
        (-[WKWebView _simulateDataInteractionEnded:]):
        (-[WKWebView _simulateDataInteractionSessionDidEnd:withOperation:]):
        (-[WKWebView _simulateFailedDataInteractionWithIndex:]):
        (-[WKWebView _simulateWillBeginDataInteractionWithIndex:withSession:]):
        (-[WKWebView _simulatedItemsForDataInteractionWithIndex:]):
        * UIProcess/API/Cocoa/_WKTestingDelegate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setDragImage):
        (WebKit::PageClientImpl::startDataInteractionWithImage):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsInDataInteractionContent:]):
        (-[WKContentView _dataInteractionGestureRecognizer]):
        (-[WKContentView pointIsInAssistedNode:]):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setDragImage):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2017-02-20  David Quesada  <david_quesada@apple.com>

        Don’t set NSURLSessionConfiguration’s _sourceApplicationAuditTokenData if _sourceApplicationBundleIdentifier is also set.
        https://bugs.webkit.org/show_bug.cgi?id=168607

        rdar://problem/30239618

        Reviewed by Geoffrey Garen.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        If the process pool configuration sets a source application bundle identifier, don't give the NSURLSession configuration
        the audit token from the UI process, as it may be associated with an application with a conflicting bundle identifier.

2017-02-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r212632.

        This change appears to have caused API test failures.

        Reverted changeset:

        "Reduce platform ifdefs in WebKit2 custom protocols
        implementation"
        https://bugs.webkit.org/show_bug.cgi?id=165028
        http://trac.webkit.org/changeset/212632

2017-02-20  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Fix some memory leaks in libwebrtc binding code
        https://bugs.webkit.org/show_bug.cgi?id=168596

        Reviewed by Eric Carlson.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::OnMessage):

2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove code under USE(GRAPHICS_SURFACE)
        https://bugs.webkit.org/show_bug.cgi?id=168592

        Reviewed by Michael Catanzaro.

        This was only used by EFL port.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<CoordinatedGraphicsLayerState>::encode):
        (IPC::ArgumentCoder<CoordinatedGraphicsLayerState>::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::syncPlatformLayerIfNeeded):
        (WebKit::CoordinatedGraphicsScene::deleteLayer):
        (WebKit::CoordinatedGraphicsScene::assignImageBackingToLayer):
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::Handle::encode):
        (WebKit::WebCoordinatedSurface::Handle::decode):
        (WebKit::WebCoordinatedSurface::create):
        (WebKit::WebCoordinatedSurface::createGraphicsContext):
        (WebKit::WebCoordinatedSurface::createHandle):
        (WebKit::WebCoordinatedSurface::copyToTexture):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:

2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reduce platform ifdefs in WebKit2 custom protocols implementation
        https://bugs.webkit.org/show_bug.cgi?id=165028

        Reviewed by Darin Adler.

        Make mac implementation use the APICustomProtocolManagerClient to share more code with the soup based ports.

        * CMakeLists.txt: Add CustomProtocolManagerProxy.cpp.
        * PlatformEfl.cmake: Remove CustomProtocolManagerProxySoup.cpp.
        * PlatformGTK.cmake: Ditto.
        * PlatformMac.cmake: Remove CustomProtocolManagerProxyMac.mm.
        * UIProcess/API/APICustomProtocolManagerClient.h:
        (API::CustomProtocolManagerClient::startLoading): Make it void, since we were always returning true and the
        returned value was ignored.
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (EwkUrlSchemeRequest::finish): Update to new CustomProtocolManagerProxy API.
        * UIProcess/API/gtk/WebKitCustomProtocolManagerClient.cpp:
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestReadCallback): Ditto.
        * UIProcess/Cocoa/CustomProtocolManagerClient.h: Added.
        * UIProcess/Cocoa/CustomProtocolManagerClient.mm: Added.
        (-[WKCustomProtocolLoader initWithCustomProtocolManagerProxy:customProtocolID:request:]):
        (-[WKCustomProtocolLoader dealloc]):
        (-[WKCustomProtocolLoader connection:didFailWithError:]):
        (-[WKCustomProtocolLoader connection:didReceiveResponse:]):
        (-[WKCustomProtocolLoader connection:didReceiveData:]):
        (-[WKCustomProtocolLoader connection:willSendRequest:redirectResponse:]):
        (-[WKCustomProtocolLoader connectionDidFinishLoading:]):
        (WebKit::CustomProtocolManagerClient::startLoading):
        (WebKit::CustomProtocolManagerClient::stopLoading):
        (WebKit::CustomProtocolManagerClient::invalidate):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize): Set the CustomProtocolManagerClient.
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Remove code that is now shared.
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.cpp: Added.
        (WebKit::CustomProtocolManagerProxy::startLoading):
        (WebKit::CustomProtocolManagerProxy::processDidClose):
        (WebKit::CustomProtocolManagerProxy::wasRedirectedToRequest):
        (WebKit::CustomProtocolManagerProxy::didReceiveResponse):
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::globalURLSchemesWithCustomProtocolHandlers): Just moved here to use it from ensureNetworkProcess().
        (WebKit::WebProcessPool::WebProcessPool): Remove soup ifdefs.
        (WebKit::WebProcessPool::setCustomProtocolManagerClient): Moved from the soup implementation.
        (WebKit::WebProcessPool::ensureNetworkProcess): Initialize custom protocols parameters.
        (WebKit::WebProcessPool::registerSchemeForCustomProtocol): Register the protocol if not already registered globally.
        (WebKit::WebProcessPool::unregisterSchemeForCustomProtocol): Remove soup ifdefs.
        * UIProcess/WebProcessPool.h: Remove soup ifdefs.
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Remove code that is now shared.
        * WebKit2.xcodeproj/project.pbxproj:

2017-02-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Remove compilation flag ENABLE_CSS_GRID_LAYOUT
        https://bugs.webkit.org/show_bug.cgi?id=167693

        Reviewed by Sergio Villar Senin.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r212345): [GTK] ASSERT(cookieChangeCallbackMap().contains(jar)) failed in WebCore::stopObservingCookieChanges:54
        https://bugs.webkit.org/show_bug.cgi?id=168375

        Reviewed by Alex Christensen.

        Simplify the cookies change notification. The current approach of the UI process telling the network process
        when to start and stop observing cookie changes is quite fragile and error prone. In the GTK+ port we always
        observe cookies, so our cookie manager always calls start in the constructor and stop in the destructor.
        Everything would be a lot simpler if the network process always monitored cookies.

        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup): Set cookies observer handler for the session.
        (WebKit::NetworkSessionSoup::~NetworkSessionSoup): Remove the cookies observer handler.
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate): Remove the cookies observer callback.
        (webkit_cookie_manager_class_init): Remove dispose implementation that is no longer needed.
        (webkitCookieManagerCreate): Set the cookies observer callback.
        (webkit_cookie_manager_set_persistent_storage): Remove code to start/stop observing cookies when the jar
        changes, the network process deals with that now.
        (webkitCookieManagerDispose): Deleted.
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges): Remove the optional callback method in favor of an
        explicit method to the set the callback that doesn't send the StartObservingCookieChanges message to the network
        process.
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges): Do not change the callback map here.
        (WebKit::WebCookieManagerProxy::setCookieObserverCallback): Add the callback to the map or remove the session if
        nullptr is given.
        * UIProcess/WebCookieManagerProxy.h:
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::notifyCookiesDidChange): Send CookiesDidChange message to the UI process.
        (WebKit::WebCookieManager::startObservingCookieChanges): Use notifyCookiesDidChange().
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): Set the policy on all sessions. Code moved from
        WebFrameNetworkingContext since it doesn't belong there.
        (WebKit::WebCookieManager::setCookiePersistentStorage): Use new method to set the cookie storage in the
        NetworkStorageSession.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Deleted.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:

2017-02-19  Chris Dumez  <cdumez@apple.com>

        [WK2] Support termination of unresponsive WebContent processes that are in the background
        https://bugs.webkit.org/show_bug.cgi?id=168479
        <rdar://problem/30558745>

        Reviewed by Antti Koivisto.

        Support termination of unresponsive WebContent processes that are in the background.
        This protects us against cases where a background tab is unresponsive and has high CPU
        usage, thus draining the battery without the user knowing about it (e.g.
        <rdar://problem/29808005>).

        The feature works as follows:
        - If a WebProcessProxy has pages but none of them are visible, then it will check
          regularly if its associated WebContent process is still responsive.
        - Every time we find that the WebContent process is responsive, we exponentially
          back off the timer to avoid waking up the process too often. The timer initially
          uses a 20 seconds interval and can back off up to 8 hours.
        - If the WebContent process is unresponsive, then we terminate it. No notification
          is shown to the user and the termination is not immediately observable since the
          tab is not visible and its title remains. The tab is not immediately reloaded
          so as to avoid getting back into a bad state in the background (and have a
          yo-yo effect).
        - If the user switches to a tab that was previously killed for being unresponsive
          while in the background, we will then reload the tab in a fresh WebContent
          process. The crash banner will only be shown if the tab has ever been visible.
          If it wasn't ever visible (e.g. session restore case), then it will look as if
          the tab loads for the first time when the user switches to it.

        The functionality is disabled by default and can be enabled by the client via the new
        WKContextSetUnresponsiveBackgroundProcessesTerminationEnabled() private API.

        * CMakeLists.txt:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetUnresponsiveBackgroundProcessesTerminationEnabled):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/UnresponsiveWebProcessTerminator.cpp: Added.
        (WebKit::UnresponsiveWebProcessTerminator::UnresponsiveWebProcessTerminator):
        (WebKit::UnresponsiveWebProcessTerminator::updateState):
        (WebKit::pagesCopy):
        (WebKit::UnresponsiveWebProcessTerminator::timerFired):
        * UIProcess/UnresponsiveWebProcessTerminator.h: Added.
        (WebKit::UnresponsiveWebProcessTerminator::shouldBeActive):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::reloadAfterBeingKilledInBackground):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::terminateProcess):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::m_backgroundResponsivenessTimer):
        (WebKit::WebProcessProxy::createWebPage):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::updateBackgroundResponsivenessTimer):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::visiblePageCount):
        * WebKit2.xcodeproj/project.pbxproj:

2017-02-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove COORDINATED_GRAPHICS_MULTIPROCESS
        https://bugs.webkit.org/show_bug.cgi?id=168514

        Reviewed by Darin Adler.

        * Shared/DrawingAreaInfo.h:
        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewFindZoomableAreaForRect):
        * UIProcess/AcceleratedDrawingAreaProxy.cpp:
        (WebKit::AcceleratedDrawingAreaProxy::AcceleratedDrawingAreaProxy):
        * UIProcess/AcceleratedDrawingAreaProxy.h:
        (WebKit::AcceleratedDrawingAreaProxy::coordinatedLayerTreeHostProxy): Deleted.
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp: Removed.
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h: Removed.
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in: Removed.
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::pageTransitionViewportReady):
        * UIProcess/CoordinatedGraphics/WebPageProxyCoordinatedGraphics.cpp: Removed.
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidRequestScroll): Deleted.
        (WebKit::WebPageProxy::pageTransitionViewportReady): Deleted.
        (WebKit::WebPageProxy::didRenderFrame): Deleted.
        (WebKit::WebPageProxy::commitPageTransitionViewport): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::AcceleratedDrawingArea):
        (WebKit::AcceleratedDrawingArea::updateBackingStoreState):
        (WebKit::AcceleratedDrawingArea::didReceiveCoordinatedLayerTreeHostMessage): Deleted.
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::commitSceneState):
        (WebKit::CoordinatedLayerTreeHost::createCoordinatedSurface):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp: Removed.
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::pageDidRequestScroll):
        (WebKit::WebPage::didCompletePageTransition):
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::commitPageTransitionViewport): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2017-02-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Cannot paste primary selection into web view in Wayland
        https://bugs.webkit.org/show_bug.cgi?id=166949

        Reviewed by Carlos Garcia Campos.

        Once upon a time, primary selection (middle-click paste) was not supported in Wayland. At
        the time, I changed this function to report that primary selection was unsupported. But
        nowadays, primary selection works fine in all GTK+ applications except WebKit. All we have
        to do to make it work in WebKit is change this return value.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::supportsGlobalSelection):

2017-02-17  Brian Burg  <bburg@apple.com>

        Web Inspector: RTL: Inspector window should dock to the left when using RTL layout direction
        https://bugs.webkit.org/show_bug.cgi?id=168273
        <rdar://problem/29949325>

        Reviewed by Matt Baker.

        Add the ability to dock Web Inspector to the left of the inspected view.
        The frontend decides whether the Dock to Side button docks left or right
        based on the current layout direction.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::attachLeft):
        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::createInspectorPage):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        Add plumbing for new dock configuration.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        (WebKit::WebInspectorProxy::platformAttach):
        Adapt existing sizing logic to work for docking to left.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::requestSetDockSide):
        (WebKit::WebInspectorUI::setDockSide):
        * WebProcess/WebPage/WebInspectorUI.h:
        (WebKit::WebInspectorUI::attachedLeft):
        * WebProcess/WebPage/WebInspectorUI.messages.in:
        Add plumbing for new dock configuration.

2017-02-16  Simon Fraser  <simon.fraser@apple.com>

        Allow PlatformCALayers to specify that they want deep color backing store
        https://bugs.webkit.org/show_bug.cgi?id=168495

        Reviewed by Tim Horton.

        Currently capable iOS devices get deep color backing store by virtue of a supports
        check in PlatformCALayerCocoa::PlatformCALayerCocoa(), and LegacyTileGridTile.

        Future work will make layer contents format selection more complex, so express the need
        for deep color on PlatformCALayer, and have the creators of PlatformCALayer (mainly the
        flavors of GraphicsLayerCA) choose for them to support deep color. A bit of special-casing
        is needed to propagte the state to TileControllers.
        
        The deep-colorness now propagates from PlatformCALayerRemote to RemoteLayerBackingStore,
        instead of RemoteLayerBackingStore looking at the properties of the screen directly.

        Remove PlatformCALayer::LayerTypeWebTiledLayer which was only used for the old CATiledLayers
        that we no longer use.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::ensureBackingStore):
        (WebKit::RemoteLayerBackingStore::bytesPerPixel):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::drawInContext):
        (WebKit::RemoteLayerBackingStore::surfaceBufferFormat):
        (WebKit::bufferFormat): Deleted.
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::createPlatformCALayer):
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::PlatformCALayerRemote):
        (WebKit::PlatformCALayerRemote::updateBackingStore):
        (WebKit::PlatformCALayerRemote::wantsDeepColorBackingStore):
        (WebKit::PlatformCALayerRemote::setWantsDeepColorBackingStore):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::wantsDeepColorBackingStore):
        (WebKit::PlatformCALayerRemoteTiledBacking::setWantsDeepColorBackingStore):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2017-02-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Action sheet should not dismiss when a DDAction with user interface is being presented
        https://bugs.webkit.org/show_bug.cgi?id=168528
        <rdar://problem/30515324>

        Reviewed by Beth Dakin.

        After r211643, -[WKActionSheet doneWithSheet] now dismisses the presenting view controller. This is called when
        interaction with the sheet is finished and is a reasonable thing to do in most cases. However, when using data
        detectors, we don't want to dismiss the presenting view controller, since DataDetector handles dismissing on its
        own and expects that its completion handler will be invoked.

        To fix this, we add a parameter to doneWithSheet: to indicate whether or not we should additionally dismiss the
        presenting view controller, and pass in NO in the case where we are handing control over to DataDetector.

        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet doneWithSheet:]):
        (-[WKActionSheet doneWithSheet]): Deleted.
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        (-[WKActionSheetAssistant cleanupSheet]):

2017-02-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove EFL from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=168511

        Reviewed by Alex Christensen.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::open):
        * Platform/Module.h:
        * PlatformEfl.cmake: Removed.
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * Shared/NativeWebKeyboardEvent.h:
        (WebKit::NativeWebKeyboardEvent::isFakeEventForComposition):
        (WebKit::NativeWebKeyboardEvent::isFiltered): Deleted.
        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::nativeEvent):
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent): Deleted.
        * Shared/NativeWebTouchEvent.h:
        (WebKit::NativeWebTouchEvent::nativeEvent):
        * Shared/NativeWebWheelEvent.h:
        (WebKit::NativeWebWheelEvent::nativeEvent):
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::determineQuirks):
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKTextChecker.cpp:
        * UIProcess/API/C/WKTextChecker.h:
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::getLaunchOptions):
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::pixelAlignedFloatPoint):
        * UIProcess/InspectorServer/WebInspectorServer.h:
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Network/CustomProtocols/soup/CustomProtocolManagerProxySoup.cpp:
        * UIProcess/PageClient.h:
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::getPluginDisplay):
        (WebKit::x11Screen):
        (WebKit::displayDepth):
        (WebKit::rootWindowID):
        (WebKit::NetscapePluginX11::paint):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebKit::WebChromeClient::pageExtendedBackgroundColorDidChange):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldEraseMarkersAfterChangeSelection):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::saveViewStateToItem):
        (WebKit::WebFrameLoaderClient::restoreViewState):
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * config.h:

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

        Stop backing up localStorage databases to iCloud by default.
        <rdar://problem/29045531> and https://bugs.webkit.org/show_bug.cgi?id=168388

        Reviewed by Geoffrey Garen.

        * UIProcess/Cocoa/VersionChecks.h:

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasePath):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/Storage/ios/LocalStorageDatabaseTrackerIOS.mm: Copied from Source/WebKit2/UIProcess/Cocoa/VersionChecks.h.
        (WebKit::LocalStorageDatabaseTracker::platformExcludeFromBackup):

        * WebKit2.xcodeproj/project.pbxproj:

2017-02-16  Aakash Jain  <aakash_jain@apple.com>

        Remove unused methods WKPageGetDebugPaintFlags and WKPageSetDebugPaintFlags
        https://bugs.webkit.org/show_bug.cgi?id=168464

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/C/WKPagePrivate.h:

2017-02-16  Youenn Fablet  <youenn@apple.com>

        [WebRTC] libwebrtc socket addresses should not be passed as strings
        https://bugs.webkit.org/show_bug.cgi?id=168474

        Reviewed by Alex Christensen.

        Removing all seralization of socket addresses as strings.
        Instead, a dedicated serialization is provided.
        This allows proper handling of various cases like addresses with both hostnames and resolved IPs.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::signalReadPacket):
        (WebKit::LibWebRTCSocketClient::signalSentPacket):
        (WebKit::LibWebRTCSocketClient::signalAddressReady):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCSocket.cpp:
        (WebKit::NetworkRTCSocket::sendTo):
        * NetworkProcess/webrtc/NetworkRTCSocket.h:
        * NetworkProcess/webrtc/NetworkRTCSocket.messages.in:
        * Shared/RTCNetwork.cpp:
        (WebKit::RTCNetwork::SocketAddress::decode):
        (WebKit::RTCNetwork::SocketAddress::encode):
        * Shared/RTCNetwork.h:
        (WebKit::RTCNetwork::SocketAddress::SocketAddress):
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::signalAddressReady):
        (WebKit::LibWebRTCSocket::SendTo):
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::CreateServerTcpSocket):
        (WebKit::LibWebRTCSocketFactory::CreateUdpSocket):
        (WebKit::LibWebRTCSocketFactory::CreateClientTcpSocket):
        * WebProcess/Network/webrtc/WebRTCSocket.cpp:
        (WebKit::WebRTCSocket::signalAddressReady):
        * WebProcess/Network/webrtc/WebRTCSocket.h:
        * WebProcess/Network/webrtc/WebRTCSocket.messages.in:

2017-02-16  Daniel Bates  <dabates@apple.com>

        Remove Chromium-specific code to call FrameLoaderClient::redirectDataToPlugin(nullptr)
        https://bugs.webkit.org/show_bug.cgi?id=168417
        <rdar://problem/30541748>

        Reviewed by Brent Fulgham.

        Update override of FrameLoaderClient::redirectDataToPlugin() to take a Widget& instead of a
        Widget* as it is always called with a valid Widget.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::redirectDataToPlugin):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * mac/WebKit2.order: Remove symbol for WebFrameLoaderClient::redirectDataToPlugin() that took a Widget*
        as it no longer exists. I am unclear if this file is still meaningful as it was last modified in
        r180570 (2 years ago) though Xcode still references this ordering file (why?).

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Remove EFL-specific files in WebKit2.

        Rubber-stamped by Anders Carlsson

        * DatabaseProcess/efl: Removed.
        * DatabaseProcess/efl/DatabaseProcessMainEfl.cpp: Removed.
        * NetworkProcess/Downloads/efl: Removed.
        * NetworkProcess/Downloads/efl/DownloadSoupErrorsEfl.cpp: Removed.
        * NetworkProcess/efl: Removed.
        * NetworkProcess/efl/NetworkProcessMainEfl.cpp: Removed.
        * Platform/efl: Removed.
        * Platform/efl/ModuleEfl.cpp: Removed.
        * Shared/API/c/efl: Removed.
        * Shared/API/c/efl/WKArrayEfl.cpp: Removed.
        * Shared/API/c/efl/WKArrayEfl.h: Removed.
        * Shared/API/c/efl/WKBaseEfl.h: Removed.
        * Shared/efl: Removed.
        * Shared/efl/NativeWebKeyboardEventEfl.cpp: Removed.
        * Shared/efl/NativeWebTouchEventEfl.cpp: Removed.
        * Shared/efl/NativeWebWheelEventEfl.cpp: Removed.
        * Shared/efl/ProcessExecutablePathEfl.cpp: Removed.
        * Shared/efl/WebEventFactory.cpp: Removed.
        * Shared/efl/WebEventFactory.h: Removed.
        * UIProcess/API/C/efl: Removed.
        * UIProcess/API/C/efl/WKAPICastEfl.h: Removed.
        * UIProcess/API/C/efl/WKColorPickerResultListener.cpp: Removed.
        * UIProcess/API/C/efl/WKColorPickerResultListener.h: Removed.
        * UIProcess/API/C/efl/WKEventEfl.cpp: Removed.
        * UIProcess/API/C/efl/WKEventEfl.h: Removed.
        * UIProcess/API/C/efl/WKViewEfl.cpp: Removed.
        * UIProcess/API/C/efl/WKViewEfl.h: Removed.
        * UIProcess/API/cpp/efl: Removed.
        * UIProcess/API/cpp/efl/WKEinaSharedString.cpp: Removed.
        * UIProcess/API/cpp/efl/WKEinaSharedString.h: Removed.
        * UIProcess/API/efl: Removed.
        * UIProcess/API/efl/APIWebsiteDataStoreEfl.cpp: Removed.
        * UIProcess/API/efl/EWebKit2.h.in: Removed.
        * UIProcess/API/efl/EwkView.cpp: Removed.
        * UIProcess/API/efl/EwkView.h: Removed.
        * UIProcess/API/efl/EwkViewCallbacks.h: Removed.
        * UIProcess/API/efl/GestureRecognizer.cpp: Removed.
        * UIProcess/API/efl/GestureRecognizer.h: Removed.
        * UIProcess/API/efl/SnapshotImageGL.cpp: Removed.
        * UIProcess/API/efl/SnapshotImageGL.h: Removed.
        * UIProcess/API/efl/WebAccessibility.cpp: Removed.
        * UIProcess/API/efl/WebAccessibility.h: Removed.
        * UIProcess/API/efl/ewk_application_cache_manager.cpp: Removed.
        * UIProcess/API/efl/ewk_application_cache_manager.h: Removed.
        * UIProcess/API/efl/ewk_application_cache_manager_private.h: Removed.
        * UIProcess/API/efl/ewk_auth_request.cpp: Removed.
        * UIProcess/API/efl/ewk_auth_request.h: Removed.
        * UIProcess/API/efl/ewk_auth_request_private.h: Removed.
        * UIProcess/API/efl/ewk_back_forward_list.cpp: Removed.
        * UIProcess/API/efl/ewk_back_forward_list.h: Removed.
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp: Removed.
        * UIProcess/API/efl/ewk_back_forward_list_item.h: Removed.
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h: Removed.
        * UIProcess/API/efl/ewk_back_forward_list_private.h: Removed.
        * UIProcess/API/efl/ewk_color_picker.cpp: Removed.
        * UIProcess/API/efl/ewk_color_picker.h: Removed.
        * UIProcess/API/efl/ewk_color_picker_private.h: Removed.
        * UIProcess/API/efl/ewk_context.cpp: Removed.
        * UIProcess/API/efl/ewk_context.h: Removed.
        * UIProcess/API/efl/ewk_context_menu.cpp: Removed.
        * UIProcess/API/efl/ewk_context_menu.h: Removed.
        * UIProcess/API/efl/ewk_context_menu_item.cpp: Removed.
        * UIProcess/API/efl/ewk_context_menu_item.h: Removed.
        * UIProcess/API/efl/ewk_context_menu_item_private.h: Removed.
        * UIProcess/API/efl/ewk_context_menu_private.h: Removed.
        * UIProcess/API/efl/ewk_context_private.h: Removed.
        * UIProcess/API/efl/ewk_cookie_manager.cpp: Removed.
        * UIProcess/API/efl/ewk_cookie_manager.h: Removed.
        * UIProcess/API/efl/ewk_cookie_manager_private.h: Removed.
        * UIProcess/API/efl/ewk_database_manager.cpp: Removed.
        * UIProcess/API/efl/ewk_database_manager.h: Removed.
        * UIProcess/API/efl/ewk_database_manager_private.h: Removed.
        * UIProcess/API/efl/ewk_download_job.cpp: Removed.
        * UIProcess/API/efl/ewk_download_job.h: Removed.
        * UIProcess/API/efl/ewk_download_job_private.h: Removed.
        * UIProcess/API/efl/ewk_error.cpp: Removed.
        * UIProcess/API/efl/ewk_error.h: Removed.
        * UIProcess/API/efl/ewk_error_private.h: Removed.
        * UIProcess/API/efl/ewk_favicon_database.cpp: Removed.
        * UIProcess/API/efl/ewk_favicon_database.h: Removed.
        * UIProcess/API/efl/ewk_favicon_database_private.h: Removed.
        * UIProcess/API/efl/ewk_file_chooser_request.cpp: Removed.
        * UIProcess/API/efl/ewk_file_chooser_request.h: Removed.
        * UIProcess/API/efl/ewk_file_chooser_request_private.h: Removed.
        * UIProcess/API/efl/ewk_form_submission_request.cpp: Removed.
        * UIProcess/API/efl/ewk_form_submission_request.h: Removed.
        * UIProcess/API/efl/ewk_form_submission_request_private.h: Removed.
        * UIProcess/API/efl/ewk_intro.h: Removed.
        * UIProcess/API/efl/ewk_main.cpp: Removed.
        * UIProcess/API/efl/ewk_main.h: Removed.
        * UIProcess/API/efl/ewk_main_private.h: Removed.
        * UIProcess/API/efl/ewk_navigation_data.cpp: Removed.
        * UIProcess/API/efl/ewk_navigation_data.h: Removed.
        * UIProcess/API/efl/ewk_navigation_data_private.h: Removed.
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp: Removed.
        * UIProcess/API/efl/ewk_navigation_policy_decision.h: Removed.
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h: Removed.
        * UIProcess/API/efl/ewk_object.cpp: Removed.
        * UIProcess/API/efl/ewk_object.h: Removed.
        * UIProcess/API/efl/ewk_object_private.h: Removed.
        * UIProcess/API/efl/ewk_page_group.cpp: Removed.
        * UIProcess/API/efl/ewk_page_group.h: Removed.
        * UIProcess/API/efl/ewk_page_group_private.h: Removed.
        * UIProcess/API/efl/ewk_popup_menu.cpp: Removed.
        * UIProcess/API/efl/ewk_popup_menu.h: Removed.
        * UIProcess/API/efl/ewk_popup_menu_item.cpp: Removed.
        * UIProcess/API/efl/ewk_popup_menu_item.h: Removed.
        * UIProcess/API/efl/ewk_popup_menu_item_private.h: Removed.
        * UIProcess/API/efl/ewk_popup_menu_private.h: Removed.
        * UIProcess/API/efl/ewk_security_origin.cpp: Removed.
        * UIProcess/API/efl/ewk_security_origin.h: Removed.
        * UIProcess/API/efl/ewk_security_origin_private.h: Removed.
        * UIProcess/API/efl/ewk_settings.cpp: Removed.
        * UIProcess/API/efl/ewk_settings.h: Removed.
        * UIProcess/API/efl/ewk_settings_private.h: Removed.
        * UIProcess/API/efl/ewk_storage_manager.cpp: Removed.
        * UIProcess/API/efl/ewk_storage_manager.h: Removed.
        * UIProcess/API/efl/ewk_storage_manager_private.h: Removed.
        * UIProcess/API/efl/ewk_text_checker.cpp: Removed.
        * UIProcess/API/efl/ewk_text_checker.h: Removed.
        * UIProcess/API/efl/ewk_text_checker_private.h: Removed.
        * UIProcess/API/efl/ewk_touch.h: Removed.
        * UIProcess/API/efl/ewk_url_request.cpp: Removed.
        * UIProcess/API/efl/ewk_url_request.h: Removed.
        * UIProcess/API/efl/ewk_url_request_private.h: Removed.
        * UIProcess/API/efl/ewk_url_response.cpp: Removed.
        * UIProcess/API/efl/ewk_url_response.h: Removed.
        * UIProcess/API/efl/ewk_url_response_private.h: Removed.
        * UIProcess/API/efl/ewk_url_scheme_request.cpp: Removed.
        * UIProcess/API/efl/ewk_url_scheme_request.h: Removed.
        * UIProcess/API/efl/ewk_url_scheme_request_private.h: Removed.
        * UIProcess/API/efl/ewk_view.cpp: Removed.
        * UIProcess/API/efl/ewk_view.h: Removed.
        * UIProcess/API/efl/ewk_view_configuration.cpp: Removed.
        * UIProcess/API/efl/ewk_view_configuration.h: Removed.
        * UIProcess/API/efl/ewk_view_configuration_private.h: Removed.
        * UIProcess/API/efl/ewk_view_private.h: Removed.
        * UIProcess/API/efl/ewk_window_features.cpp: Removed.
        * UIProcess/API/efl/ewk_window_features.h: Removed.
        * UIProcess/API/efl/ewk_window_features_private.h: Removed.
        * UIProcess/API/efl/tests: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestMain.cpp: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h: Removed.
        * UIProcess/API/efl/tests/extensions: Removed.
        * UIProcess/API/efl/tests/extensions/extension_sample.cpp: Removed.
        * UIProcess/API/efl/tests/resources: Removed.
        * UIProcess/API/efl/tests/resources/Page1.html: Removed.
        * UIProcess/API/efl/tests/resources/Page2.html: Removed.
        * UIProcess/API/efl/tests/resources/Page3.html: Removed.
        * UIProcess/API/efl/tests/resources/blank.ico: Removed.
        * UIProcess/API/efl/tests/resources/default_test_page.html: Removed.
        * UIProcess/API/efl/tests/resources/empty_theme.edj: Removed.
        * UIProcess/API/efl/tests/resources/file_chooser.html: Removed.
        * UIProcess/API/efl/tests/resources/frame_flattening_test.html: Removed.
        * UIProcess/API/efl/tests/resources/frame_flattening_test_subframe.html: Removed.
        * UIProcess/API/efl/tests/resources/local_file_access.html: Removed.
        * UIProcess/API/efl/tests/resources/redirect_url_to_default.html: Removed.
        * UIProcess/API/efl/tests/resources/resultMHTML.mht: Removed.
        * UIProcess/API/efl/tests/resources/same_page_navigation.html: Removed.
        * UIProcess/API/efl/tests/resources/spelling_selection_tests.html: Removed.
        * UIProcess/API/efl/tests/resources/spelling_test.html: Removed.
        * UIProcess/API/efl/tests/resources/test.pdf: Removed.
        * UIProcess/API/efl/tests/resources/window_move_resize.html: Removed.
        * UIProcess/API/efl/tests/test_ewk2_accessibility.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_auth_request.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_color_picker.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_context_history_callbacks.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_javascript_binding.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_object.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_page.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_page_group.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_popup_menu.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_ssl.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_view_configuration.cpp: Removed.
        * UIProcess/API/efl/tests/test_ewk2_window_features.cpp: Removed.
        * UIProcess/InspectorServer/efl: Removed.
        * UIProcess/InspectorServer/efl/WebInspectorServerEfl.cpp: Removed.
        * UIProcess/Launcher/efl: Removed.
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp: Removed.
        * UIProcess/efl: Removed.
        * UIProcess/efl/ContextHistoryClientEfl.cpp: Removed.
        * UIProcess/efl/ContextHistoryClientEfl.h: Removed.
        * UIProcess/efl/ContextMenuClientEfl.cpp: Removed.
        * UIProcess/efl/ContextMenuClientEfl.h: Removed.
        * UIProcess/efl/DownloadManagerEfl.cpp: Removed.
        * UIProcess/efl/DownloadManagerEfl.h: Removed.
        * UIProcess/efl/EasingCurves.cpp: Removed.
        * UIProcess/efl/EasingCurves.h: Removed.
        * UIProcess/efl/EwkDebug.h: Removed.
        * UIProcess/efl/EwkTouchEvent.cpp: Removed.
        * UIProcess/efl/EwkTouchEvent.h: Removed.
        * UIProcess/efl/EwkTouchPoint.cpp: Removed.
        * UIProcess/efl/EwkTouchPoint.h: Removed.
        * UIProcess/efl/FindClientEfl.cpp: Removed.
        * UIProcess/efl/FindClientEfl.h: Removed.
        * UIProcess/efl/FormClientEfl.cpp: Removed.
        * UIProcess/efl/FormClientEfl.h: Removed.
        * UIProcess/efl/InputMethodContextEfl.cpp: Removed.
        * UIProcess/efl/InputMethodContextEfl.h: Removed.
        * UIProcess/efl/PageLoadClientEfl.cpp: Removed.
        * UIProcess/efl/PageLoadClientEfl.h: Removed.
        * UIProcess/efl/PagePolicyClientEfl.cpp: Removed.
        * UIProcess/efl/PagePolicyClientEfl.h: Removed.
        * UIProcess/efl/PageUIClientEfl.cpp: Removed.
        * UIProcess/efl/PageUIClientEfl.h: Removed.
        * UIProcess/efl/PageViewportControllerClientEfl.cpp: Removed.
        * UIProcess/efl/PageViewportControllerClientEfl.h: Removed.
        * UIProcess/efl/RequestManagerClientEfl.cpp: Removed.
        * UIProcess/efl/RequestManagerClientEfl.h: Removed.
        * UIProcess/efl/TextCheckerClientEfl.cpp: Removed.
        * UIProcess/efl/TextCheckerClientEfl.h: Removed.
        * UIProcess/efl/TextCheckerEfl.cpp: Removed.
        * UIProcess/efl/VibrationClientEfl.cpp: Removed.
        * UIProcess/efl/VibrationClientEfl.h: Removed.
        * UIProcess/efl/ViewClientEfl.cpp: Removed.
        * UIProcess/efl/ViewClientEfl.h: Removed.
        * UIProcess/efl/WebColorPickerClient.cpp: Removed.
        * UIProcess/efl/WebColorPickerClient.h: Removed.
        * UIProcess/efl/WebColorPickerEfl.cpp: Removed.
        * UIProcess/efl/WebColorPickerEfl.h: Removed.
        * UIProcess/efl/WebColorPickerResultListenerProxy.cpp: Removed.
        * UIProcess/efl/WebColorPickerResultListenerProxy.h: Removed.
        * UIProcess/efl/WebContextMenuProxyEfl.cpp: Removed.
        * UIProcess/efl/WebContextMenuProxyEfl.h: Removed.
        * UIProcess/efl/WebInspectorProxyEfl.cpp: Removed.
        * UIProcess/efl/WebPageProxyEfl.cpp: Removed.
        * UIProcess/efl/WebPopupItemEfl.cpp: Removed.
        * UIProcess/efl/WebPopupItemEfl.h: Removed.
        * UIProcess/efl/WebPopupMenuProxyEfl.cpp: Removed.
        * UIProcess/efl/WebPopupMenuProxyEfl.h: Removed.
        * UIProcess/efl/WebPreferencesEfl.cpp: Removed.
        * UIProcess/efl/WebProcessPoolEfl.cpp: Removed.
        * UIProcess/efl/WebView.cpp: Removed.
        * UIProcess/efl/WebView.h: Removed.
        * UIProcess/efl/WebViewClient.cpp: Removed.
        * UIProcess/efl/WebViewClient.h: Removed.
        * WebProcess/InjectedBundle/API/efl: Removed.
        * WebProcess/InjectedBundle/API/efl/EWebKit_Extension.h: Removed.
        * WebProcess/InjectedBundle/API/efl/ewk_extension.cpp: Removed.
        * WebProcess/InjectedBundle/API/efl/ewk_extension.h: Removed.
        * WebProcess/InjectedBundle/API/efl/ewk_extension_private.h: Removed.
        * WebProcess/InjectedBundle/API/efl/ewk_page.cpp: Removed.
        * WebProcess/InjectedBundle/API/efl/ewk_page.h: Removed.
        * WebProcess/InjectedBundle/API/efl/ewk_page_private.h: Removed.
        * WebProcess/InjectedBundle/efl: Removed.
        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp: Removed.
        * WebProcess/WebCoreSupport/efl: Removed.
        * WebProcess/WebCoreSupport/efl/WebContextMenuClientEfl.cpp: Removed.
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp: Removed.
        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp: Removed.
        * WebProcess/WebCoreSupport/efl/WebPopupMenuEfl.cpp: Removed.
        * WebProcess/WebPage/efl: Removed.
        * WebProcess/WebPage/efl/WebInspectorUIEfl.cpp: Removed.
        * WebProcess/WebPage/efl/WebPageEfl.cpp: Removed.
        * WebProcess/efl: Removed.
        * WebProcess/efl/ExtensionManagerEfl.cpp: Removed.
        * WebProcess/efl/ExtensionManagerEfl.h: Removed.
        * WebProcess/efl/WebInjectedBundleMainEfl.cpp: Removed.
        * WebProcess/efl/WebProcessMainEfl.cpp: Removed.
        * efl: Removed.
        * efl/EWebKit2Config.cmake.in: Removed.
        * efl/EWebKit2ConfigVersion.cmake.in: Removed.
        * efl/ewebkit2-extension.pc.in: Removed.
        * efl/ewebkit2.pc.in: Removed.

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Remove old URL parser
        https://bugs.webkit.org/show_bug.cgi?id=168483

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * Shared/Cocoa/WebKit2InitializeCocoa.mm: Removed.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):
        * Shared/WebKit2Initialize.h:
        (): Deleted.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/efl/WebKit2InitializeEFL.cpp: Removed.
        * Shared/gtk/WebKit2InitializeGTK.cpp: Removed.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::createNewWebProcess):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2017-02-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add additional test infrastructure and unit tests for data interaction
        https://bugs.webkit.org/show_bug.cgi?id=168439
        <rdar://problem/30557942>

        Reviewed by Tim Horton.

        Adds two new _WKTestingDelegate protocol methods that are fired when a 'start data interaction' request has been
        sent to the web process, and when a response has been received. See Tools/ChangeLog for more details.

        * UIProcess/API/Cocoa/_WKTestingDelegate.h:

2017-02-16  Aakash Jain  <aakash_jain@apple.com>

        Remove unused method WKBundlePageCopyContextMenuItemTitle
        https://bugs.webkit.org/show_bug.cgi?id=168456

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: Removed WKBundlePageCopyContextMenuItemTitle.

2017-02-16  Aakash Jain  <aakash_jain@apple.com>

        Remove unused WKContextGetProcessSuppressionEnabled and WKContextSetProcessSuppressionEnabled
        https://bugs.webkit.org/show_bug.cgi?id=168460

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:

2017-02-16  Aakash Jain  <aakash_jain@apple.com>

        Removed unused method WKContextGetProcessModel
        https://bugs.webkit.org/show_bug.cgi?id=168457

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKContext.h: Removed WKContextGetProcessModel.

2017-02-16  Tim Horton  <timothy_horton@apple.com>

        WKWebView inside a UICollectionView flashes when items are inserted above it
        https://bugs.webkit.org/show_bug.cgi?id=168376
        <rdar://problem/29322051>

        Reviewed by Simon Fraser.

        Previously, we would immediately send visible content rect updates
        whenever we scrolled, or our frame or bounds changed, or ... a whole
        bunch of other things. This message would be immediately sent to the
        Web Content process, and coalesced at the whims of the Web Content process
        main thread. However, if we received multiple such updates within the
        same runloop cycle in the UI process, the Web Content process could
        send back layer tree commits for intermediate states that would
        never make it to the screen.

        In the UICollectionView case, UIKit would first scroll to the new location
        (potentially putting the WKWebView totally off-screen), and then update
        our frame (back on screen), and we would get two layer tree commits;
        one, with less tile coverage than needed to cover the area, and another
        with full coverage.

        Instead, wait until just before we commit the UI-side layer tree (and
        thus everyone is done moving things around) to push the new visible 
        rect info to the Web Content process.

        So far, I have not found a way to test that reliably fails before
        and reliably passes after without adding a ton of supporting code to WebKit.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didInvokeUIScrollViewDelegateCallback]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _scrollViewDidInterruptDecelerating:]):
        (-[WKWebView _didScroll]):
        (-[WKWebView _enclosingScrollerScrollingEnded:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _scheduleVisibleContentRectUpdate]):
        (-[WKWebView _scrollViewIsInStableState:]):
        (-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]):
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _endInteractiveObscuredInsetsChange]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _updateVisibleContentRects]): Deleted.
        (-[WKWebView _updateVisibleContentRectAfterScrollInView:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLayerTree:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView setContentInset:]):
        Have existing callers of _updateVisibleContentRect* instead call
        _scheduleVisibleContentRectUpdate*.

        In _scheduleVisibleContentRectUpdate, schedule a pre-commit callback
        in which we will compute the new visible content rect information
        and send it to the Web Content process.

        Keep track of the stable state of the scroll view which most recently
        scheduled an update, and use that to inform _updateVisibleContentRects.
        This matches the previous behavior where the updates might get coalesced
        in the Web Content process, and the most recent update wins.

        Make a few callers of _updateVisibleContentRectAfterScrollInView
        that passed in our scroll view just use _scheduleVisibleContentRectUpdate instead.

2017-02-16  Brent Fulgham  <bfulgham@apple.com>

        [WebRTC][Mac] Conditionally add sandbox extensions to the Network Process
        https://bugs.webkit.org/show_bug.cgi?id=168010
        <rdar://problem/30245503>

        Reviewed by Youenn Fablet.

        Conditionally add sandbox extensions to the Network Process when the WebRTC/Media Capture
        features are enabled.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode): Serialize new process configuration flag.
        (WebKit::NetworkProcessCreationParameters::decode): Ditto.
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):  Remember state of WebRTC for when the
        sandbox is established.
        (WebKit::NetworkProcess::initializeSandbox): Add ENABLE_WEB_RTC parameter to sandbox launch state.
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in: Add conditional sandbox expansion to allow
        bidirectional network access when the ENABLE_LIBWEBRTC flag is present in the sandbox launch parameters.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Use proper compile guards and check media stream
        preference, rather than the peer connection preference.
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Notify NetworkProcess at launch time whether the
        user wants WebRTC support.

2017-02-16  Brent Fulgham  <bfulgham@apple.com>

        [WebRTC][Mac][WebKit2] Initial WebProcess does not support WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=168438
        <rdar://problem/30401818>

        Reviewed by Youenn Fablet.

        The sandbox extension for microphone access does not take effect until the second WebProcess
        is created, causing the initial browser tab to lack microphone support.

        This patch checks the setting earlier in the boot process so that the initial WebProcess
        instance gets the correct setting.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Move microphone sandbox extension here, so that the
        initial WebProcess has the correct microphone access.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess): Move microphone sandbox extension from here to platform-specific file.
        (WebKit::WebProcessPool::createWebPage): Remove unneeded preference checks.

2017-02-16  Eric Carlson  <eric.carlson@apple.com>

        Add WebRTC as an off-by-default experimental feature menu item.
        https://bugs.webkit.org/show_bug.cgi?id=167972
        <rdar://problem/30293429>

        Reviewed by Alex Christensen.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setPeerConnectionAndMediaStreamEnabled): We need to enable/disable
        peer connection and media stream preferences at the same time, so special case them.
        (WebKit::WebPreferences::setEnabledForFeature):
        * UIProcess/WebPreferences.h:

2017-02-15  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212394.

        Fixed iOS WebInspector

        Reverted changeset:

        "Unreviewed, rolling out r212169."
        https://bugs.webkit.org/show_bug.cgi?id=166681
        http://trac.webkit.org/changeset/212394

2017-02-15  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] delete CaptureDeviceInfo struct
        https://bugs.webkit.org/show_bug.cgi?id=168395

        Reviewed by Sam Weinig.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<CaptureDevice>::encode):
        (IPC::ArgumentCoder<CaptureDevice>::decode):

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

        Try again.

        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag):

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

        Attempt to fix the GTK+ build.

        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag):

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

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

        Reviewed by Alex Christensen.

        Initialize the data members better, and rearrange to group the types in a slightly more space-efficient manner.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        * Shared/WebProcessCreationParameters.h:

2017-02-15  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r183937): Fullscreen Exit animation missing mask
        https://bugs.webkit.org/show_bug.cgi?id=168360

        Reviewed by Eric Carlson.

        In r183937, the fullscreen window's clip layer has it's mask removed when the enter
        fullscreen animation completes, allowing low-power video playback mode to be entered. But
        this breaks the exit fullscreen animaiton, which assumes a mask is present. Abstract the
        mask creation code out into a static helper method, and use it at the beginning of the exit
        fullscreen animation to re-create the mask before adding animations to it.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (createMask):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):

2017-02-15  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212169.

        Broke iOS WebInspector

        Reverted changeset:

        "WebInspector: refactor RemoteInspector to move cocoa specific
        code to their own files"
        https://bugs.webkit.org/show_bug.cgi?id=166681
        http://trac.webkit.org/changeset/212169

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

        Modernize DragClient::startDrag somewhat
        https://bugs.webkit.org/show_bug.cgi?id=168379

        Reviewed by Tim Horton.

        Update for WebCore changes.

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

2017-02-15  Aakash Jain  <aakash_jain@apple.com>

        Remove WebIOSEvent interface
        https://bugs.webkit.org/show_bug.cgi?id=168368

        Reviewed by Tim Horton.

        * Shared/NativeWebKeyboardEvent.h: Using WebEvent from WebCore instead of WebIOSEvent.
        * Shared/ios/NativeWebKeyboardEventIOS.mm: Ditto.
        * Shared/ios/WebIOSEventFactory.h: Ditto.
        * Shared/ios/WebIOSEventFactory.mm: Ditto.
        * UIProcess/ios/WKContentViewInteraction.h: Ditto.
        * UIProcess/ios/WKContentViewInteraction.mm: Ditto.
        * UIProcess/API/C/WKPage.cpp: Using WebEvent from WebKit.

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Update cookie manager API to properly work with ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=168230

        Reviewed by Michael Catanzaro.

        WebKitCookieManager is associated to a particular WebKitWebContext and uses the default session ID
        unconditionally. It should be associated to a WebKitWebsiteDataManager instead and use its session ID. This
        patch also adds support for handling cookies with WebKitWebsiteDataManager and deprecates
        webkit_cookie_manager_get_domains_with_cookies(), webkit_cookie_manager_delete_cookies_for_domain() and
        webkit_cookie_manager_delete_all_cookies(). It also adds API to get the the WebKitWebsiteDataManager of a
        WebKitWebView, since it's the only way to get the WebKitCookieManager associated to an ephemeral web view.

        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (webkitCookieManagerDispose): Stop observing cookie changes.
        (webkit_cookie_manager_class_init): Add dispose implementation.
        (webkitCookieManagerCreate): Create the WebKitCookieManager with a WebKitWebsiteDataManager.
        (webkit_cookie_manager_set_persistent_storage): Work with all contexts having the session.
        (webkit_cookie_manager_set_accept_policy): Ditto.
        (webkit_cookie_manager_get_accept_policy): Use any context having the session.
        (webkit_cookie_manager_get_domains_with_cookies): Deprecate and implement using WebKitWebsiteDataManager.
        (webkit_cookie_manager_get_domains_with_cookies_finish): Ditto.
        (webkit_cookie_manager_delete_cookies_for_domain): Ditto.
        (webkit_cookie_manager_delete_all_cookies): Ditto.
        * UIProcess/API/gtk/WebKitCookieManager.h:
        * UIProcess/API/gtk/WebKitCookieManagerPrivate.h:
        * UIProcess/API/gtk/WebKitCustomProtocolManagerClient.cpp:
        (attachCustomProtocolManagerClientToContext):
        * UIProcess/API/gtk/WebKitDownloadClient.cpp:
        (attachDownloadClientToContext):
        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
        (attachInjectedBundleClientToContext):
        * UIProcess/API/gtk/WebKitSecurityManager.cpp:
        (registerSecurityPolicyForURIScheme):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed): Call webkitWebsiteDataManagerAddProcessPool.
        (webkitWebContextDispose): Call webkitWebsiteDataManagerRemoveProcessPool.
        (webkit_web_context_get_cookie_manager): Return the WebKitCookieManager of the WebKitWebsiteDataManager.
        (webkitWebContextGetProcessPool): Make it return a reference.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Call webkitWebsiteDataManagerAddProcessPool when creating a ephemeral web view.
        (webkitWebViewDispose): Call webkitWebsiteDataManagerRemoveProcessPool if needed.
        (webkit_web_view_get_website_data_manager): Return the WebKitWebsiteDataManager or the context one.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebsiteData.cpp: Add support for Cookies type.
        (recordContainsSupportedDataTypes):
        (toWebKitWebsiteDataTypes):
        * UIProcess/API/gtk/WebKitWebsiteData.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
        (_WebKitWebsiteDataManagerPrivate::~_WebKitWebsiteDataManagerPrivate): Ensure all contexts were unregistered.
        (webkitWebsiteDataManagerAddProcessPool): Register the process pool in the session.
        (webkitWebsiteDataManagerRemoveProcessPool): Unregister the process poll from the session.
        (webkitWebsiteDataManagerGetProcessPools): Return the list of proces pools registered.
        (webkit_website_data_manager_get_cookie_manager): Return the WebKitCookieManager.
        (toWebsiteDataTypes): Add Cookies.
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::displayNameForCookieHostName): Handle localhost as a special case here for backwards
        compatibility.

2017-02-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Support data interaction on links
        https://bugs.webkit.org/show_bug.cgi?id=168331
        <rdar://problem/30200837>

        Reviewed by Tim Horton.

        Adds support for data interaction on links at the client layer for WebKit2. This involves several changes,
        detailed in the per-method changes below:

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):

        Add adjustedPointForNodeRespondingToClickEvents (the request point, adjusted to take nodeRespondingToClickEvents
        into account) to InteractionInformationAtPosition. The web process sends this adjusted point over to the UI
        process so that the UI process will be able to begin a data interaction at the adjusted point rather than the
        request point, which is necessary for small clickable (and data-interactive) elements such as links.

        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet presentSheet:]):
        (-[WKActionSheet _presentationRectForStyle:]):
        (-[WKActionSheet updateSheetPosition]):
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant presentationRectForElementUsingClosestIndicatedRect]):
        (-[WKActionSheetAssistant presentationRectForIndicatedElement]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant _shouldPresentAtTouchLocationForElementRect:]):
        (-[WKActionSheetAssistant needsLinkIndicator]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant cleanupSheet]):
        (-[WKActionSheetAssistant _presentationStyleForImageAtElementRect:]): Deleted.

        Add support for the WKActionSheetPresentAtClosestIndicatorRect style of presenting an action sheet. When
        showing the action sheet for a link and there is space along the margins to show a popover in the first place,
        we will now target the popover rect to the bounding rect of the set of adjacent (or nearly-adjacent) element
        rects closest to the user's touch location. This covers cases where the link is split into multiple rects due to
        a line break, when the link is on multiple lines with a jagged rect per line, and when both of the above are
        true.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView pointIsInDataInteractionContent:]):
        (-[WKContentView _positionInformationDidChange:]):
        (-[WKContentView positionInformationForActionSheetAssistant:]):
        (-[WKContentView updatePositionInformationForActionSheetAssistant:]):

        Include link indicator data in the position information request if needed. As the FIXME suggests, this can be
        improved by asynchronously presenting the action sheet assistant after the request returns, and is something we
        should address in the future.

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

2017-02-14  Jason Rinn  <jrinn@apple.com>

        Add new WKWebKit Cocoa API for getContentsAsString.
        https://bugs.webkit.org/show_bug.cgi?id=168147
        <rdar://problem/30502539>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _getContentsAsStringWithCompletionHandler:]): New API for getContentsAsString.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2017-02-14  Chris Dumez  <cdumez@apple.com>

        HTML Form Validation bubble should take minimum font size setting into consideration
        https://bugs.webkit.org/show_bug.cgi?id=168271
        <rdar://problem/29869869>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _contentsOfUserInterfaceItem:]):
        Return font size used in the validation bubble.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createValidationBubble):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::showValidationMessage):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createValidationBubble):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showValidationMessage):
        Pass minimum font size setting when constructing the form validation bubble.

2017-02-14  Commit Queue  <commit-queue@webkit.org>

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

        Not ready for the menu yet (Requested by eric_car_ on
        #webkit).

        Reverted changeset:

        "Add WebRTC as an off-by-default experimental feature menu
        item."
        https://bugs.webkit.org/show_bug.cgi?id=167972
        http://trac.webkit.org/changeset/211879

2017-02-14  Simon Fraser  <simon.fraser@apple.com>

        Add logging and defensive fixes to try to detect problems causing blank tabs
        https://bugs.webkit.org/show_bug.cgi?id=168270
        rdar://problem/30505482

        Reviewed by Jon Lee.
        
        Add release logging when -[WKWebView _beginAnimatedResizeWithUpdates:] and -[WKWebView _endAnimatedResize]
        are unbalanced across a commit, to detect cases where _endAnimatedResize wasn't called enough times.
        
        Also log when RemoteLayerTreeHost::updateLayerTree() fails to find a root layer, which should never happen.
        
        In WebPageProxy, clear m_firstLayerTreeTransactionIdAfterDidCommitLoad on a web process crash.

        * Platform/Logging.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::isAlwaysOnLoggingAllowed):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::clearLayers):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        * WebProcess/WebPage/WebFrame.h:

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Allow to use stored credentials also for downloads started by DownloadManager::startDownload
        https://bugs.webkit.org/show_bug.cgi?id=167584

        Reviewed by Michael Catanzaro.

        Cliking on a link that triggers a download works on an already HTTP authenticated site works, but right clicking
        and downloading from the context menu shows the HTTP auth dialog again. This is because PendingDownload uses
        DoNotAllowStoredCredentials unconditionally. We want to allow using cached credentials at least for
        non-ephemeral sessions.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make DragImageRef a RefPtr instead of a plain pointer
        https://bugs.webkit.org/show_bug.cgi?id=168296

        Reviewed by Sergio Villar Senin.

        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag):

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Ensure a response MIME type when Content-Type is missing and sniffing not allowed
        https://bugs.webkit.org/show_bug.cgi?id=168299

        Reviewed by Sergio Villar Senin.

        Sniffing is not allowed but we can try to guess the MIME using the response path, or at least fallback to
        default MIME type instead of leaving an empty string. This matches what mac port does.

        Fixes: http/tests/inspector/network/fetch-response-body.html
               http/tests/inspector/network/xhr-response-body.html

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::didSendRequest):

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        CookieManager only works with the default session
        https://bugs.webkit.org/show_bug.cgi?id=168229

        Reviewed by Alex Christensen.

        Make CookieManager session aware by adding a SessionID parameter to all its functions, and update all the callers
        to pass the default session ID, preserving the current
        behavior. WebCookieManagerProxy::startObservingCookieChanges() now also receives an optional callback to be
        called on every change.

        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerGetHostnamesWithCookies):
        (WKCookieManagerDeleteCookiesForHostname):
        (WKCookieManagerDeleteAllCookies):
        (WKCookieManagerDeleteAllCookiesModifiedAfterDate):
        (WKCookieManagerStartObservingCookieChanges):
        (WKCookieManagerStopObservingCookieChanges):
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate):
        (webkitCookieManagerCreate):
        (webkit_cookie_manager_set_persistent_storage):
        (webkit_cookie_manager_get_domains_with_cookies):
        (webkit_cookie_manager_delete_cookies_for_domain):
        (webkit_cookie_manager_delete_all_cookies):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::addSingleCookie):
        (WebKit::WebAutomationSession::deleteAllCookies):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
        (WebKit::WebCookieManagerProxy::deleteAllCookies):
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManagerProxy::addCookie):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::cookiesDidChange):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.messages.in:
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::WebCookieManager):
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManager::addCookie):
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::stopObservingCookieChanges):
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:

2017-02-14  Tomas Popela  <tpopela@redhat.com>

        Unreviewed, fix documentation typo

        * UIProcess/API/gtk/WebKitEditingCommands.h:

2017-02-12  Brian Burg  <bburg@apple.com>

        Web Inspector: expose system user interface layout direction through InspectorFrontendHost
        https://bugs.webkit.org/show_bug.cgi?id=168209
        <rdar://problem/11573736>

        Reviewed by Joseph Pecoraro.

        Forward the UserInterfaceLayoutDirection of the inspector page. If the WebKit client has
        properly set the UI directionality from system settings in PageClient, this will get inherited
        automatically by the Inspector's WebPage instance.

        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::userInterfaceLayoutDirection):
        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::userInterfaceLayoutDirection):
        * WebProcess/WebPage/WebInspectorUI.h:

2017-02-13  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Creating RTCPeerConnection with libwebrtc backend is crashing on rwt
        https://bugs.webkit.org/show_bug.cgi?id=168250

        Reviewed by Alex Christensen.

        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createPeerConnection):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        (WebKit::WebRTCMonitor::StartUpdating):
        (WebKit::WebRTCMonitor::networksChanged):
        * WebProcess/Network/webrtc/WebRTCMonitor.h:
        * WebProcess/Network/webrtc/WebRTCResolver.cpp:
        (WebKit::WebRTCResolver::setResolvedAddress):
        (WebKit::WebRTCResolver::resolvedAddressError):
        * WebProcess/Network/webrtc/WebRTCSocket.cpp:
        (WebKit::WebRTCSocket::signalOnNetworkThread):

2017-02-13  Megan Gardner  <megan_gardner@apple.com>

        Implement Drag cancels
        https://bugs.webkit.org/show_bug.cgi?id=168266

        Reviewed by Wenson Hsieh.

        Adds support for the UI Process to cancel already started drag events.

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

2017-02-13  Simon Fraser  <simon.fraser@apple.com>

        Call WKDestroyRenderingResources() on iOS when tabs are backgrounded
        https://bugs.webkit.org/show_bug.cgi?id=168261
        rdar://problem/30481079

        Reviewed by Tim Horton.

        There's code to call CABackingStoreCollectBlocking() on a 10s timer that exists for Mac, but on iOS
        the web processes are suspended before this timer fires. So call CABackingStoreCollectBlocking()
        from WebProcess::actualPrepareToSuspend(), which is where we also trigger the markAllLayersVolatile()
        code.

        Also add CABackingStoreCollectBlocking() to QuartzCoreSPI.h so we can use it without using WKSI.

        Release-log how long this takes, in case we get reports of bad performance. In my testing it could be up to 10ms.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::destroyRenderingResources):

2017-02-13  Brady Eidson  <beidson@apple.com>

        Followup to: Replace all WebKit Library Version checks in WK2 with SDK version checks.
        https://bugs.webkit.org/show_bug.cgi?id=168124

        Reviewed by Geoffrey Garen.

        * UIProcess/Cocoa/VersionChecks.h: 

2017-02-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add test infrastructure and unit tests for data interaction
        https://bugs.webkit.org/show_bug.cgi?id=168159
        <rdar://problem/30477634>

        Reviewed by Tim Horton.

        Adds support at the WebKit2 layer for testing data interaction. Introduces the _WKTestingDelegate, which a
        protocol which can specified for a WKWebView and used to install mock objects and simulate the state of the
        platform. By default, this delegate is nil, which results in normal behavior. For data interaction, we are able
        to specify a mock data interaction gesture recognizer for use by the WKContentView to simulate firing a long
        press and subsequent movement. This gesture recognizer is used in place of the regular data interaction gesture
        recognizer, and allows for TestWebKitAPI to drive interaction without actually sending events through the
        UIApplication. The _WKTestingDelegate also contains optional method hooks which are invoked at key points in
        time when performing a data interaction gesture.

        Since all methods of the testing delegate are optional, the testing delegate can be easily extended to support
        testing for other features -- the idea is that leaving all but the relevant methods in the protocol
        unimplemented will result in default behavior for everything other than those methods, so a client need only
        implement and add WebKit2 hooks for a few methods to support testing for a new feature.

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

        Specify the testing delegate to use for this WKWebView (see above for more details).

        (-[WKWebView _simulateDataInteractionGestureRecognized]):
        (-[WKWebView _simulateDataInteractionEntered:]):
        (-[WKWebView _simulateDataInteractionUpdated:]):
        (-[WKWebView _simulateDataInteractionPerformOperation:]):
        (-[WKWebView _simulateDataInteractionEnded:]):
        (-[WKWebView _simulateDataInteractionSessionDidEnd:withOperation:]):
        (-[WKWebView _simulateFailedDataInteractionWithIndex:]):
        (-[WKWebView _simulateWillBeginDataInteractionWithIndex:withSession:]):
        (-[WKWebView _simulatedItemsForDataInteractionWithIndex:]):

        Used by TestWebKitAPI to drive data interaction tests. See DataInteractionTests.mm.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKTestingDelegate.h: Added.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _dataInteractionGestureRecognizer]):
        * WebKit2.xcodeproj/project.pbxproj:

2017-02-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream Mac] Video capture needs access to /Library/CoreMediaIO/Plug-Ins/DAL/
        https://bugs.webkit.org/show_bug.cgi?id=168244
        <rdar://problem/30461158>

        Reviewed by Brady Eidson.

        * WebProcess/com.apple.WebProcess.sb.in: Grant read-access to the video capture
        plug-in directory when enabling video capture.

2017-02-13  Antti Koivisto  <antti@apple.com>

        Disable mmap'd cache files if container is class A
        https://bugs.webkit.org/show_bug.cgi?id=168241
        <rdar://problem/23676252>

        Reviewed by JF Bastien and Chris Dumez.

        If the mmap'd cache file gets evicted and the device is locked,
        then WebContent won't be able to bring the file back in under
        class A, causing SIGBUS.

        In those circumstances, don't use mmap'd files.

        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::Cache::canUseSharedMemoryForBodyData):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord):

            Don't initialize the shareable resource handle for the map if forbidden.

        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::canUseSharedMemoryForPath):

            Query the system for the protection status of the cache path.

        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::canUseSharedMemoryForBodyData):

2017-02-13  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] libwebrtc socket factory is not assigning the right socket type
        https://bugs.webkit.org/show_bug.cgi?id=168233

        Reviewed by Brent Fulgham.

        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::CreateUdpSocket):
        (WebKit::LibWebRTCSocketFactory::CreateClientTcpSocket):

2017-02-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unreviewed, add missing precondition check

        * WebProcess/InjectedBundle/API/gtk/WebKitWebEditor.cpp:
        (webkit_web_editor_get_page):

2017-02-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix another docs typo.

        * UIProcess/API/gtk/WebKitEditingCommands.h:

2017-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve documentation of webkit_context_menu_set_user_data()
        https://bugs.webkit.org/show_bug.cgi?id=168214

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitContextMenu.cpp:

2017-02-12  Dan Bernstein  <mitz@apple.com>

        Tried to fix USE(APPLE_INTERNAL_SDK) builds after r212211.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createShareMenuItem): Use non-deprecated method.

2017-02-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Some -respondsToSelector: checks are unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=168183

        Reviewed by Tim Horton.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::setColorMatchUntaggedContent): Removed unnecessary
          -respondsToSelector: check.
        (WebKit::LayerHostingContext::colorMatchUntaggedContent): Ditto.

        * Platform/mac/MenuUtilities.mm:
        (WebKit::menuItemTitleForTelephoneNumberGroup): Ditto.

        * Platform/spi/ios/UIKitSPI.h: Moved declaration of
          -[UIScrollView _isInterruptingDeceleration] from WKWebView.mm to the
          !USE(APPLE_INTERNAL_SDK) section here.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setSharedHTTPCookieStorage): Removed unnecessary -respondsToSelector:
          check.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::typeForEvent): Ditto.

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

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformOpenPaymentSetup): Ditto.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsFromViewOnly): Ditto.

        * UIProcess/WKImagePreviewViewController.mm:
        (-[WKImagePreviewViewController previewActions]): Removed check whether _WKElementAction
          responds to -runActionWithElementInfo:.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showDataDetectorsSheet]): Ditto.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _lookup:]): Ditto.
        (-[WKContentView _share:]): Ditto.
        (-[WKContentView _addShortcut:]): Ditto.
        (-[WKContentView _promptForReplace:]): Ditto.
        (-[WKContentView _transliterateChinese:]): Ditto.
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]): Removed call to
          -[UIKeyboardImpl didHandleWebKeyEvent], which is a no-op.
        (-[WKContentView _interpretKeyEvent:isCharEvent:]): Removed unnecessary -respondsToSelector:
          check.
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]): Ditto.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence): Ditto.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _animationControllerForDataDetectedText]): Ditto.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createShareMenuItem): Ditto.

2017-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unreviewed, minor documentation improvements

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkit_web_page_class_init):

2017-02-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Downloads fail when the given destination is not a URI
        https://bugs.webkit.org/show_bug.cgi?id=168187

        Reviewed by Michael Catanzaro.

        It always expects a uri, and fails if a local path is given.

        Fixes: http/tests/download/anchor-download-no-extension.html
               http/tests/download/area-download.html
               http/tests/security/anchor-download-allow-data.html
               http/tests/security/anchor-download-allow-sameorigin.html

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::download): Use g_file_new_for_path() if the pending destination is a path instead
        of a URI.

2017-02-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Handle caps lock indicator in event modifiers
        https://bugs.webkit.org/show_bug.cgi?id=168186

        Reviewed by Michael Catanzaro.

        Use PlatformKeyboardEvent::modifiersContainCapsLock() to check if modifiers contain the caps lock and add
        Modifiers::CapsLockKey in that case.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::modifiersForEvent):
        * UIProcess/API/gtk/WebKitPrivate.cpp:
        (wkEventModifiersToGdkModifiers):
        (toGdkModifiers):

2017-02-12  Andy Estes  <aestes@apple.com>

        [iOS] PDF page number indicator can show "0 of n" on short pages
        https://bugs.webkit.org/show_bug.cgi?id=168185

        Reviewed by Tim Horton.

        When viewing a PDF with a last page that is shorter than the frame height, it's possible
        (thanks to rubber-banding) to scroll down until the page no longer intersects the rect we
        use to determine the center page. When this happens, the page number indicator displays
        "0 of n".

        Fix this by handling cases where the first page starts below the center page rect or the
        last page ends above it.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _revalidateViews]):

2017-02-11  Alex Christensen  <achristensen@webkit.org>

        Fix crashes after [NSURLSession invalidateAndCancel]
        https://bugs.webkit.org/show_bug.cgi?id=168181
        <rdar://problem/29813868>

        Reviewed by Brady Eidson.

        When we call NetworkSessionCocoa::invalidateAndCancel, we intend for the session to immediately
        become invalid and stop doing things. [NSURLSession invalidateAndCancel] asynchronously cancels
        everything and then calls the delegate's didBecomeInvalidWithError, so before this change there
        is a time when we have torn down the session with SessionTracker::destroySession but we can still
        get a delegate callback which assumes the session and its NetworkStorageSession exists.  If we
        get any delegate callbacks after a NetworkSession has been invalidated, we will want to ignore them.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate sessionInvalidated]):
        (-[WKNetworkSessionDelegate URLSession:didBecomeInvalidWithError:]):
        (-[WKNetworkSessionDelegate URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:]):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        The pointer to the NetworkSessionCocoa can now be null. We need to check it.
        (WebKit::NetworkSessionCocoa::invalidateAndCancel):
        Synchronously remove the connection between the delegates and the NetworkSessionCocoa.

2017-02-10  John Wilander  <wilander@apple.com>

        Updates to Resource Load Statistics: Get the right website data store and introduce timeout for user interaction
        https://bugs.webkit.org/show_bug.cgi?id=167474
        <rdar://problem/24681808>
        <rdar://problem/24703286>
        <rdar://problem/30290270>

        This patch does the following:
        1. Gets the right website data store. API::WebsiteDataStore::defaultDataStore()
            does not provide the right data store.
        2. Introduces timeout for user interaction. A domain needs interaction every 30
            days to stay in that category.
        3. Adds grandfathered to the statistics model in preparation for grandfathering of
            existing data records.
        4. Adds test infrastructure to allow testing of the various rules in place for
            data records removal.
        5. Fixes various smaller bugs that were found as part of setting up the tests.
        6. Regresses the data records removal counting. We need to come up with a thread
            safe way of gathering removal statistics from more than one data store now
            that we potentially interact with multiple stores.
        7. Adds a first set of layout tests for resource load statistics.

        Reviewed by Andy Estes.

        * PlatformEfl.cmake:
            Added UIProcess/WebResourceLoadStatisticsManager.cpp and
            UIProcess/API/C/WKResourceLoadStatisticsManager.cpp.
        * PlatformGTK.cmake:
            Added UIProcess/WebResourceLoadStatisticsManager.cpp and
            UIProcess/API/C/WKResourceLoadStatisticsManager.cpp.
        * PlatformMac.cmake:
            Added UIProcess/WebResourceLoadStatisticsManager.cpp and
            UIProcess/API/C/WKResourceLoadStatisticsManager.cpp.
        * Shared/API/APIObject.h:
            Adds WebResourceLoadStatisticsManager to the Type enum.
        * Shared/API/c/WKBase.h:
            Typedef of WKResourceLoadStatisticsManagerRef.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
            Adds support for statistics mostRecentUserInteraction, grandfathered, and
            dataRecordsRemoved.
        * UIProcess/API/C/WKAPICast.h:
            Adds API mapping between WKResourceLoadStatisticsManagerRef and 
            WebResourceLoadStatisticsManager.
        * UIProcess/API/C/WKResourceLoadStatisticsManager.cpp: Added.
        (WKResourceLoadStatisticsManagerGetTypeID):
        (WKResourceLoadStatisticsManagerSetPrevalentResource):
        (WKResourceLoadStatisticsManagerIsPrevalentResource):
        (WKResourceLoadStatisticsManagerSetHasHadUserInteraction):
        (WKResourceLoadStatisticsManagerIsHasHadUserInteraction):
        (WKResourceLoadStatisticsManagerSetTimeToLiveUserInteraction):
        (WKResourceLoadStatisticsManagerFireDataModificationHandler):
        (WKResourceLoadStatisticsManagerSetNotifyPagesWhenDataRecordsWereScanned):
        (WKResourceLoadStatisticsManagerSetShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WKResourceLoadStatisticsManagerSetMinimumTimeBetweeenDataRecordsRemoval):
        (WKResourceLoadStatisticsManagerResetToConsistentState):
            API level bridge to WebResourceLoadStatisticsManager functions.
        * UIProcess/API/C/WKResourceLoadStatisticsManager.h: Added.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::deleteWebsiteDataForTopPrivatelyOwnedDomainsInAllPersistentDataStores):
            A way to delete website data in persistent store(s) configured by the 
            embedding client. API::WebsiteDataStore::defaultDataStore() does not 
            do this which caused us to skip session storage.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsManager.cpp: Added.
        (WebKit::WebResourceLoadStatisticsManager::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsManager::isPrevalentResource):
        (WebKit::WebResourceLoadStatisticsManager::setHasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsManager::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsManager::setTimeToLiveUserInteraction):
        (WebKit::WebResourceLoadStatisticsManager::fireDataModificationHandler):
        (WebKit::WebResourceLoadStatisticsManager::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebResourceLoadStatisticsManager::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsManager::setMinimumTimeBetweeenDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsManager::resetToConsistentState):
            Static functions to manage the state and behavior of the UI process' 
            resource load statistics store.
        * UIProcess/WebResourceLoadStatisticsManager.h: Added.
        (WebKit::WebResourceLoadStatisticsManager::create):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
            An effect of a member variable rename. See header file comment below.
        (WebKit::WebResourceLoadStatisticsStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebResourceLoadStatisticsStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsStore::setMinimumTimeBetweeenDataRecordsRemoval):
            Three static functions for controlling the behavior of the store.
        (WebKit::WebResourceLoadStatisticsStore::removeDataRecords):
            Changes:
            1. Covers all data record types.
            2. Allows data removal when m_lastTimeDataRecordsWereRemoved is not set.
            3. Moves the heavy lifting to WebsiteDataStore (see below).
            4. No longer counts removed data regressions.
        (WebKit::WebResourceLoadStatisticsStore::processStatisticsAndDataRecords):
            See next comment.
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
            WebResourceLoadStatisticsStore::processStatisticsAndDataRecords() is 
            broken out of WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated
            to allow for statistics processing without prior classification.
            Tests need to set statistics and a run of the classifier may
            reset the data.
        (WebKit::WebResourceLoadStatisticsStore::registerSharedResourceLoadObserver):
            Sets the notification callback which calls 
            WebResourceLoadStatisticsStore::processStatisticsAndDataRecords().
        * UIProcess/WebResourceLoadStatisticsStore.h:
        (WebKit::WebResourceLoadStatisticsStore::coreStore):
            Renamed m_resourceStatisticsStore to m_resourceLoadStatisticsStore to
            harmonize with other naming.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataForTopPrivatelyOwnedDomains):
            This is now where matching is made between prevalent resources
            and data records. This function is used by 
            WebsiteDataStore::removeDataForTopPrivatelyOwnedDomains().
        (WebKit::WebsiteDataStore::removeDataForTopPrivatelyOwnedDomains):
            The function WebResourceLoadStatisticsStore::removeDataRecords()
            calls to get data records removed in all persistent stores.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::m_resourceLoadStatisticsStore):
        (WebKit::WebProcess::statisticsChangedTimerFired):
        (WebKit::m_resourceLoadStatisticsStorage): Deleted.
            Renamed m_resourceLoadStatisticsStorage to m_resourceLoadStatisticsStore 
            to harmonize with other naming.
        * WebProcess/WebProcess.h:

2017-02-10  Simon Fraser  <simon.fraser@apple.com>

        Zero out some WKWebView state in the case of a web content crash
        https://bugs.webkit.org/show_bug.cgi?id=168157

        Reviewed by Tim Horton.

        Reset some bits of state in WKWebView when the web content process crashes, in
        to try to avoid states that might cause the web view to stay blank.

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

2017-02-10  Daniel Bates  <dabates@apple.com>

        Detach frame from document when entering page cache
        https://bugs.webkit.org/show_bug.cgi?id=166774
        <rdar://problem/29904368>

        Reviewed by Chris Dumez.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAllowsPageCacheWithWindowOpener): Deleted.
        (WKPreferencesGetAllowsPageCacheWithWindowOpener): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebInspector: refactor RemoteInspector to move cocoa specific code to their own files
        https://bugs.webkit.org/show_bug.cgi?id=166681

        Reviewed by Michael Catanzaro.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Add PLATFORM(COCOA) to the ifdef.

2017-02-10  Tim Horton  <timothy_horton@apple.com>

        Infinite UI process hang under ensurePositionInformationIsUpToDate
        https://bugs.webkit.org/show_bug.cgi?id=168154
        <rdar://problem/30428673>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        If the web process crashes or we're being torn down for another reason,
        assume that we aren't ever going to receive any pending async interaction
        information update. Otherwise, ensurePositionInformationIsUpToDate can end
        up waiting for it forever.

2017-02-10  Andrew Gold  <agold@apple.com>

        Add mediaStreamEnabled property to WKPreferences for Cocoa.
        https://bugs.webkit.org/show_bug.cgi?id=168080

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Sets the pageConfiguration's mediaStreamEnabled preference value.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]): Copies the mediaStreamEnabled property.
        (-[WKWebViewConfiguration _mediaStreamEnabled]): Gets the mediaStreamEnabled property.
        (-[WKWebViewConfiguration _setMediaStreamEnabled:]): Sets the mediaStreamEnabled property.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2017-02-10  Olivier Blin  <olivier.blin@softathome.com>

        WebProcess: remove unused m_inDidClose
        https://bugs.webkit.org/show_bug.cgi?id=168121

        Reviewed by Alex Christensen.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didClose):
        * WebProcess/WebProcess.h:
        m_inDidClose has been unused since r83774

2017-02-10  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Enable Resource Timing by default in Tests
        https://bugs.webkit.org/show_bug.cgi?id=168145

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetResourceTimingEnabled):
        (WKPreferencesGetResourceTimingEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-02-10  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add shouldChangeSelectedRange to WKWebProcessPlugInEditingDelegate
        https://bugs.webkit.org/show_bug.cgi?id=168097

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInEditingDelegate.h:
          Declared new delegate method.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]): Dispatch new delegate
          method.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture): Pass UserTriggered whan calling
          WebCore::Frame::Selection::setSelectedRange, so that the delegate is consulted.
        (WebKit::WebPage::changeBlockSelection): Ditto.
        (WebKit::WebPage::updateSelectionWithTouches): Ditto.
        (WebKit::WebPage::selectWithTwoTouches): Ditto.
        (WebKit::WebPage::extendSelection): Ditto.
        (WebKit::WebPage::selectWordBackward): Ditto,
        (WebKit::WebPage::moveSelectionByOffset): Ditto.
        (WebKit::WebPage::selectPositionAtPoint): Ditto.
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection): Ditto.
        (WebKit::WebPage::moveSelectionAtBoundaryWithDirection): Ditto.
        (WebKit::WebPage::selectTextWithGranularityAtPoint): Ditto.
        (WebKit::WebPage::updateSelectionWithExtentPointAndBoundary): Ditto.
        (WebKit::WebPage::updateSelectionWithExtentPoint): Ditto.

2017-02-10  Brady Eidson  <beidson@apple.com>

        Replace all WebKit Library Version checks in WK2 with SDK version checks.
        https://bugs.webkit.org/show_bug.cgi?id=168124

        Reviewed by Geoffrey Garen.

        This change gets rid of WebKit Library Version checks and replaces them with SDK version checks.
        
        To allow our tools to still be able to test new behaviors even when built against older SDKs,
        it also opts them into an SPI default to have "linkedOnOrAfter()" always return true.
        
        * Shared/Cocoa/CompletionHandlerCallChecker.mm:
        (WebKit::shouldThrowExceptionForDuplicateCompletionHandlerCall):
        
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        
        * UIProcess/Cocoa/VersionChecks.h:
        (WebKit::linkedOnOrAfter): Deleted.
        * UIProcess/Cocoa/VersionChecks.mm:
        (WebKit::linkedOnOrAfter):
        
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::isNetworkCacheEnabled):

2017-02-10  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: generate an NS_ENUM containing platforms supported by the protocol code generator
        https://bugs.webkit.org/show_bug.cgi?id=168019
        <rdar://problem/28718990>

        Reviewed by Joseph Pecoraro.

        * UIProcess/Automation/Automation.json: Fix the platform values to be lowercase.

2017-02-10  Brian Burg  <bburg@apple.com>

        Web Automation: fail gracefully when a screenshot cannot be encoded as base64
        https://bugs.webkit.org/show_bug.cgi?id=168095
        <rdar://problem/30297427>

        Reviewed by Joseph Pecoraro.

        Convert platformGetBase64EncodedPNGData to return a std::optional<String>.
        Return nullopt if we can't create a screenshot or convert it to base64.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::didTakeScreenshot):
        (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData):

2017-02-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build with threaded compositor disabled.

        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode):
        (WebKit::AcceleratedDrawingArea::exitAcceleratedCompositingModeNow):

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212040.

        Broke build.  I'm not surprised

        Reverted changeset:

        "[WebRTC][Mac] Activate libwebrtc"
        https://bugs.webkit.org/show_bug.cgi?id=167293
        http://trac.webkit.org/changeset/212040

2017-02-09  Chris Dumez  <cdumez@apple.com>

        [Mac][WK2] Use MIME type to add file extension to downloads' suggested filenames when missing
        https://bugs.webkit.org/show_bug.cgi?id=168077
        <rdar://problem/30412595>

        Reviewed by Alex Christensen.

        Use MIME type to add file extension to downloads' suggested filenames when missing:
        - https://html.spec.whatwg.org/#as-a-download (step 19)

        This new behavior matches Chrome.

        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
        (WebKit::BlobDownloadClient::didReceiveResponseAsync):
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveResponse):
        (WebKit::Download::decideDestinationWithSuggestedFilename):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didStart):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:

2017-02-09  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293

        Reviewed by Alex Christensen.

        * Shared/WebPreferencesDefinitions.h:

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Fix libwebrtc build on case-sensitive file systems.

        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-02-09  Brady Eidson  <beidson@apple.com>

        Transition "WebKit Library Version" checks to SDK version checks.
        <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056

        Reviewed by Geoffrey Garen.

        When doing linkedOnOrAfter checks, relying solely on the WebKit library version number is error prone,
        since apps may not link against WebKit directly and therefore the linked WebKit is unknown.
        
        We should first prefer a version check on the SDK that the app was built with.
        
        If that check fails, we can fallback to the linked WebKit library version number if it exists.

        * Shared/Cocoa/CompletionHandlerCallChecker.mm:
        (WebKit::shouldThrowExceptionForDuplicateCompletionHandlerCall):

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):

        For each "linked-on-or-after" feature, include both the WebKit library version and SDK version:
        * UIProcess/Cocoa/VersionChecks.h:
        (WebKit::linkedOnOrAfter):
        * UIProcess/Cocoa/VersionChecks.mm:
        (WebKit::linkedOnOrAfter):
        (WebKit::linkTimeVersion): Deleted.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::isNetworkCacheEnabled):

2017-02-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r211980 and r211987.
        https://bugs.webkit.org/show_bug.cgi?id=168072

        Caused API test WebKit2.DuplicateCompletionHandlerCalls to
        fail (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Transition "WebKit Library Version" checks to SDK version
        checks."
        https://bugs.webkit.org/show_bug.cgi?id=168056
        http://trac.webkit.org/changeset/211980

        "Build fix for APPLE_INTERNAL_SDK builds after r211980."
        http://trac.webkit.org/changeset/211987

2017-02-09  Brady Eidson  <beidson@apple.com>

        Transition "WebKit Library Version" checks to SDK version checks.
        <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056

        Reviewed by Geoffrey Garen.

        Library version linkedOnOrAfter checks are error prone since apps may not link directly to WebKit.
        
        We always know what version of the SDK an app was built with, so we should use SDK version checks
        whenever possible.

        * Shared/Cocoa/CompletionHandlerCallChecker.mm:
        (WebKit::shouldThrowExceptionForDuplicateCompletionHandlerCall):
        
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        
        Add SDKVersion form of the linkedOnOrAfter check, and transition over the current Library Version checks:
        * UIProcess/Cocoa/VersionChecks.h: 
        * UIProcess/Cocoa/VersionChecks.mm:
        (WebKit::linkedOnOrAfter):
        
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::isNetworkCacheEnabled):

2017-02-09  Antti Koivisto  <antti@apple.com>

        Use all cacheable speculatively loaded responses
        https://bugs.webkit.org/show_bug.cgi?id=168052

        Reviewed by Andreas Kling.

        We currently only allow 200 responses. There is no reason not to use speculative responses
        that have other cacheable status codes. This is helpful for 204s and 404s.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeStoreDecision):
        (WebKit::NetworkCache::isStatusCodeCacheableByDefault): Deleted.
        (WebKit::NetworkCache::isStatusCodePotentiallyCacheable): Deleted.

            Move to CacheValidation.h/cpp

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):

            Allow all cacheable-by-default responses.

2017-02-09  Tomas Popela  <tpopela@redhat.com>

        Unreviewed. Fix gtk-doc warning

        html/WebKitSettings.html:4435: warning: no link for: 'api-index-2.3' -> (2.3).

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_class_init):

2017-02-09  Antti Koivisto  <antti@apple.com>

        Remove most cases of #if ENABLE(CACHE_PARTITIONING)
        https://bugs.webkit.org/show_bug.cgi?id=167990

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::makeCacheKey):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encode):
        (IPC::ArgumentCoder<ResourceRequest>::decode):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextRegisterURLSchemeAsCachePartitioned):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingTimer):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsCachePartitioned):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::registerURLSchemeAsCachePartitioned):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2017-02-08  Simon Fraser  <simon.fraser@apple.com>

        Put names on more UIViews for ease of debugging
        https://bugs.webkit.org/show_bug.cgi?id=168035

        Reviewed by Tim Horton.

        Put names on the various bare UIViews that we create.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::showPaintRect):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):

2017-02-08  Andy Estes  <aestes@apple.com>

        Custom protocols should not continue loading after a network process crash
        https://bugs.webkit.org/show_bug.cgi?id=168028
        <rdar://problem/27607520>

        Reviewed by Brady Eidson.

        WKCustomProtocolLoaders are meant to be owned by CustomProtocolManagerProxy and have their
        loads cancelled when CustomProtocolManagerProxy is destroyed. However, WKCustomProtocolLoader
        creates a NSURLConnection for which it is the client, so NSURLConnection retains it for the
        duration of the load.

        These loaders should be explicitly cancelled when their CustomProtocolManagerProxy is destroyed.

        New API test: WebKit2CustomProtocolsTest.CloseDuringCustomProtocolLoad

        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (-[WKCustomProtocolLoader customProtocolManagerProxyDestroyed]): Added. Cancels the
        _urlConnection and sets _customProtocolManagerProxy to nullptr.
        (WebKit::CustomProtocolManagerProxy::~CustomProtocolManagerProxy):
        Called -customProtocolManagerProxyDestroyed on every loader in m_loaderMap.

2017-02-08  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKRemoteObjectCoder doesn’t handle CGSize
        https://bugs.webkit.org/show_bug.cgi?id=168031

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeInvocationArguments): Encode CGSize by encoding two NSNumbers. Somewhat sadly,
          +[NSValue valueWithCGSize:] is not available in macOS.
        (decodeInvocationArguments): Decode wrapped numbers.

2017-02-08  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build after r211897.

        * UIProcess/ios/WKContentViewInteraction.h:

2017-02-08  Dan Bernstein  <mitz@apple.com>

        [iOS] WKWebView doesn’t have implementations of UIResponderStandardEditActions that can be overridden
        https://bugs.webkit.org/show_bug.cgi?id=167974

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
          Gave each of the actions in FOR_EACH_WKCONTENTVIEW_ACTION an implementation that sends it
          to the WKContentView if we’re using one.
        (-[WKWebView canPerformAction:withSender:]): Override and for each of the actions in
          FOR_EACH_WKCONTENTVIEW_ACTION, forward to
          -[WKContentView canPerformActionForWebView:withSender:] if we’re using a WKContentView,
          otherwise returning NO.

        * UIProcess/ios/WKContentViewInteraction.h: Declared -canPerformActionForWebView:withSender:
          and several internal methods we override.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformAction:withSender:]): Now returns NO so that the target for any
          action is the WKWebView.
        (-[WKContentView canPerformActionForWebView:withSender:]): Moved the logic previously in
          -canPerformAction:withSender: to here.

2017-02-08  Antti Koivisto  <antti@apple.com>

        Allow speculative redirects
        https://bugs.webkit.org/show_bug.cgi?id=167982

        Reviewed by Andreas Kling.

        If speculative loader hits a redirect it will drop it on the floor. We should use it instead.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):

            Reset m_isWaitingContinueWillSendRequestForCachedRedirect bit immediately.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::makeRedirectEntry):

            Factor to a function.

        (WebKit::NetworkCache::Cache::storeRedirect):
        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::Cache::speculativeLoadManager):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):

            Use std::optional instead std::unique_ptr for the redirect request.

        (WebKit::NetworkCache::Entry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheEntry.h:
        (WebKit::NetworkCache::Entry::redirectRequest):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):

            Make a cache entry for speculative redirect.
            Redirect is not actually performed, the target resource will have a separate
            speculative entry.

        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        (WebKit::NetworkCache::SpeculativeLoad::didFailLoading):
        (WebKit::NetworkCache::SpeculativeLoad::didComplete):

            Protect against multiple completions.

        (WebKit::NetworkCache::SpeculativeLoad::abort): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve):

            Make successful retrieves asynchronous to avoid re-entrancy problems.

2017-02-08  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; FullscreenClient only avaialble on 32-bit builds.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):

2017-02-08  Jer Noble  <jer.noble@apple.com>

        Move FullscreenClient creation into WebViewImpl, for use in (deprecated) WKView.
        https://bugs.webkit.org/show_bug.cgi?id=168007

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKFullscreenDelegate.h:
        * UIProcess/Cocoa/FullscreenClient.h:
        * UIProcess/Cocoa/FullscreenClient.mm:
        (WebKit::FullscreenClient::FullscreenClient):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):

2017-02-08  Youenn Fablet  <youenn@apple.com>

        GUM is crashing in Debug mode when access is granted/denied for a page that is gone
        https://bugs.webkit.org/show_bug.cgi?id=168003

        Reviewed by Eric Carlson.

        Removing the assertion since manager can be null and case is coevered by the if statement behind it.

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::deny):

2017-02-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r211869.

        This change caused assertion failures on macOS WK2.

        Reverted changeset:

        "Allow speculative redirects"
        https://bugs.webkit.org/show_bug.cgi?id=167982
        http://trac.webkit.org/changeset/211869

2017-02-08  Eric Carlson  <eric.carlson@apple.com>

        Add WebRTC as an off-by-default experimental feature menu item.
        https://bugs.webkit.org/show_bug.cgi?id=167972
        <rdar://problem/30293429>

        Reviewed by Jon Lee.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setPeerConnectionAndMediaStreamEnabled): We need to enable/disable
        peer connection and media stream preferences at the same time, so special case them.
        (WebKit::WebPreferences::setEnabledForFeature):
        * UIProcess/WebPreferences.h:

2017-02-08  Chris Dumez  <cdumez@apple.com>

        Add support for enhanced privacy diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=167948
        <rdar://problem/30385112>

        Reviewed by Antti Koivisto.

        Implement new DiagnosticLoggingClient::logDiagnosticMessageWithEnhancedPrivacy()
        virtual method on WebKit2 and expose it to the client via the WKPageDiagnosticLogging
        delegate.

        * UIProcess/API/APIDiagnosticLoggingClient.h:
        (API::DiagnosticLoggingClient::logDiagnosticMessageWithEnhancedPrivacy):
        * UIProcess/API/C/WKPageDiagnosticLoggingClient.h:
        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.mm:
        (WebKit::DiagnosticLoggingClient::setDelegate):
        (WebKit::DiagnosticLoggingClient::logDiagnosticMessageWithEnhancedPrivacy):
        * UIProcess/WebPageDiagnosticLoggingClient.cpp:
        (WebKit::WebPageDiagnosticLoggingClient::logDiagnosticMessageWithEnhancedPrivacy):
        * UIProcess/WebPageDiagnosticLoggingClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::logDiagnosticMessageWithEnhancedPrivacy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithEnhancedPrivacy):
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:

2017-02-08  Antti Koivisto  <antti@apple.com>

        Allow speculative redirects
        https://bugs.webkit.org/show_bug.cgi?id=167982

        Reviewed by Andreas Kling.

        If speculative loader hits a redirect it will drop it on the floor. We should use it.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):

            Reset the m_isWaitingContinueWillSendRequestForCachedRedirect bit immediately.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::makeRedirectEntry):

            Factor to a function.

        (WebKit::NetworkCache::Cache::storeRedirect):
        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::Cache::speculativeLoadManager):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):

            Use std::optional instead std::unique_ptr for the redirect request.

        (WebKit::NetworkCache::Entry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheEntry.h:
        (WebKit::NetworkCache::Entry::redirectRequest):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):

            Make cache entry for speculative redirect.
            The redirect is not actually performed, the target resource will have separate
            a speculative entry.

        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        (WebKit::NetworkCache::SpeculativeLoad::didFailLoading):
        (WebKit::NetworkCache::SpeculativeLoad::didComplete):

            Protect against multiple completions.

        (WebKit::NetworkCache::SpeculativeLoad::abort): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve):

            Make successful retrieves asynchronous to avoid re-entrancy problems.

2017-02-07  Brent Fulgham  <bfulgham@apple.com>

        Correct initialization of Resource Load Statistics for use in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=167960

        Reviewed by Andy Estes.

        WebKit2 starts up with different process configuration settings depending on the type of
        WebView and client application. This led to two problems:
        1. Registering the shared resource load observer did not start at UIProcess launch. Instead, it
           was lazily initialized as messages from the various WebProcess started getting received. This
           is too slow for WebKitTestRunner, which needs this object to be initialized right at launch
           time.
           
           A new 'registerSharedResourceLoadObserver' method was needed, so that the WebProcess can ask
           the WebsiteDataStore to register a resource load observer during platform initialization.

        2. Some WebView uses do not enable WebsiteDataStore, and should not activate a resource load
           statistics observer.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::registerSharedResourceLoadObserver): Added.
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize): If the web process is using a WebsiteDataStore,
        register a resource load observer.
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::registerSharedResourceLoadObserver): Added.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::registerSharedResourceLoadObserver): Added.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        REGRESSION (r211819): [ios-simulator] API tests Coding.WKWebView and Coding.WKWebView_SameConfiguration crashing
        https://bugs.webkit.org/show_bug.cgi?id=167947

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h:
        Add SPI declaration.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        Make sure to call setDrawsBackground here.

        (-[WKWebView _populateArchivedSubviews:]):
        We don't want to archive the scroll view and the fixed overlay view.

        (-[WKWebView setOpaque:]):
        Return early if this is called before we have a page (like from -[UIView initWithCoder:]).

2017-02-07  Alex Christensen  <achristensen@webkit.org>

        Revert r166597
        https://bugs.webkit.org/show_bug.cgi?id=167951

        Reviewed by Andreas Kling.

        CFURLConnectionInvalidateConnectionCache is not commonly called and is likely causing
        CFNetwork to be in a strange state when using NSURLSession and invalidating the connection
        cache during authentication, especially server trust evaluation.  Right now we only call
        it when handling memory pressure, and it isn't worth getting into such a strange state
        in a poorly tested situation. See rdar://problem/27439617

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::initializeSandbox):
        (WebKit::NetworkProcess::platformLowMemoryHandler): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler): Deleted.

2017-02-07  Brian Burg  <bburg@apple.com>

        [Mac] Web Automation: NSEventType not initialized in WebAutomationSession::platformSimulateMouseInteraction
        https://bugs.webkit.org/show_bug.cgi?id=167902

        Reviewed by Joseph Pecoraro.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        Initialize these to 0, which is not a valid NSEventType. Assert that
        each NSEventType has a valid value before attempting to use it.

2017-02-07  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] LibWebRTC WK2 network stack is not providing correct ports for ICE candidates
        https://bugs.webkit.org/show_bug.cgi?id=167939

        Reviewed by Sam Weinig.

        AddressReady signalling was done by the WebProcess for UDP and ServerTCP as real async sockets in those case do
        not send it. But the WebProcess does not have information on the port, as it is assigned by the socket factory
        which is in the network process.

        Fixed that bug by signalling AddressReady in the network process for UDP, ServerTCP and ClientTCP.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::LibWebRTCSocketClient):
        (WebKit::LibWebRTCSocketClient::signalAddressReady):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::LibWebRTCSocket):
        (WebKit::LibWebRTCSocket::signalAddressReady):

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

        Try to fix the EFL build.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:

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

        -[WKWebView encodeWithCoder:] needs to call super
        https://bugs.webkit.org/show_bug.cgi?id=167945
        rdar://problem/29777668

        Reviewed by Geoffrey Garen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView encodeWithCoder:]):
        Call super.

2017-02-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Soup] WebKitSoupRequestInputStream can still leave requests unfinished after r211773
        https://bugs.webkit.org/show_bug.cgi?id=167929

        Reviewed by Michael Catanzaro.

        The while loop to process the pending data requests was not a good idea, because having a new pending request
        doesn't mean we have more data available, but that more data was requested.

        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamPendingReadAsyncComplete): Process only one request if needed.

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

        [Soup] Long resources loaded by custom protocols sometimes never finish loading
        https://bugs.webkit.org/show_bug.cgi?id=167890

        Reviewed by Michael Catanzaro.

        It's another bug that has appeared in WebKitSoupRequestInputStream after moving the custom protocols handling to
        the main thread. The problem is that webkitSoupRequestInputStreamPendingReadAsyncComplete invalidates
        pendingAsyncRead after calling webkitSoupRequestInputStreamReadAsyncResultComplete, but in some cases
        webkitSoupRequestInputStreamReadAsyncResultComplete completes the task in the same run loop iteration. In that
        case webkitSoupRequestInputStreamReadAsync is called again creating a new AsyncReadData that is destroyed right
        after webkitSoupRequestInputStreamReadAsyncResultComplete returns.

        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (AsyncReadData::AsyncReadData): Use an rvalue reference for the task.
        (webkitSoupRequestInputStreamPendingReadAsyncComplete): Use WTFMove to ensure pendingAsyncRead is cleared before
        webkitSoupRequestInputStreamReadAsyncResultComplete is called, and continue processing pending requests if there
        are new ones after webkitSoupRequestInputStreamReadAsyncResultComplete.
        (webkitSoupRequestInputStreamReadAsync): Use WTFMove to transfer the task to AsyncReadData.
        (webkitSoupRequestInputStreamDidFailWithError): Use WTFMove to ensure pendingAsyncRead is cleared.

2017-02-06  Dan Bernstein  <mitz@apple.com>

        [iOS] -[WKWebView becomeFirstResponder] and -[WKWebView resignFirstResponder] don’t get called when non-programmatic first responder changes happen
        https://bugs.webkit.org/show_bug.cgi?id=167898

        Reviewed by Tim Horton.

        Made WKContentView’s -becomeFirstResponder and -resignFirstResponder forward to the
        WKWebView, giving subclasses an opportunity to override these methods. Changed the WKWebView
        implementations to call back into WKContentView methods that actually do the work.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView becomeFirstResponder]): If the current content view is a WKContentView, call
          -becomeFirstResponderForWebView. Added a check that the content view has a superview to
          get the right behavior when this is called during the transition from not having to having
          a custom content view.
        (-[WKWebView canBecomeFirstResponder]): If the current content view is a WKContentView, call
          -canBecomeFirstResponderForWebView.
        (-[WKWebView resignFirstResponder]): If the current content view is a WKContentView, call
          -resignFirstResponderForWebView.
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]): If the new content view is a
          WKContentView, use -canBecomeFirstResponderForWebView.

        * UIProcess/ios/WKContentViewInteraction.h: Added _becomingFirstResponder ivar.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canBecomeFirstResponder]): Return _becomingFirstResponder. Normally this is
          NO, so code that hit-tests then walks up the view hierarchy to select a first responder
          will continue to the WKWebView. But we need to return YES around the call to super’s
          -becomeFirstResponder in -becomeFirstResponderForWebView.
        (-[WKContentView canBecomeFirstResponderForWebView]): Moved the old
          -becomeFirstResponderForWebView implementation here.
        (-[WKContentView becomeFirstResponder]): Forward to the WKWebView.
        (-[WKContentView becomeFirstResponderForWebView]): Moved the old -becomeFirstResponder
          implementation here, setting _becomingFirstResponder to YES around the call to super.
        (-[WKContentView resignFirstResponder]): Forward to the WKWebView.
        (-[WKContentView resignFirstResponderForWebView]): Moved the old -resignFirstResponder
          implementation here.

2017-02-06  Simon Fraser  <simon.fraser@apple.com>

        Remove assertion in WebViewImpl::performKeyEquivalent()

        Reviewed by Wenson Hsieh.

        The assertion ASSERT(event == [NSApp currentEvent]) fires when using certain key combinations
        in MiniBrowser's location field (e.g. Option-Shift-Arrow to select). The assertion is not correct,
        so remove it.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::performKeyEquivalent):

2017-02-06  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Keep the tiled scrolling indicator on-screen when pinching
        https://bugs.webkit.org/show_bug.cgi?id=167915

        Reviewed by Tim Horton.
        
        Clamp the location to the larger of the location of .unobscuredContentRect() and 0,0.

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

2017-02-06  Simon Fraser  <simon.fraser@apple.com>

        Tiled scrolling indicator gets doubled up on navigation
        https://bugs.webkit.org/show_bug.cgi?id=167909

        Reviewed by Tim Horton.

        TiledCoreAnimationDrawingArea::updateDebugInfoLayer() would parent a new m_debugInfoLayer
        in m_hostingLayer without removing the old one, causing the old tiled scrolling indicator layer
        hierarchy to get left in the layer tree.

        Also a couple of nullptr/0 -> nil.

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

2017-02-06  Alex Christensen  <achristensen@webkit.org>

        More build fixes after r211751
        https://bugs.webkit.org/show_bug.cgi?id=166998

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::authenticate):
        (WebKit::NetworkDataTaskSoup::continueAuthenticate):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        Use the correct partition for credentials.

2017-02-06  Jer Noble  <jer.noble@apple.com>

        Update sandbox to allow CoreMedia to perform custom media loading.
        https://bugs.webkit.org/show_bug.cgi?id=167700

        Reviewed by Alexey Proskuryakov.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2017-02-06  Alex Christensen  <achristensen@webkit.org>

        credentials should be partitioned by main document domain
        https://bugs.webkit.org/show_bug.cgi?id=166998
        rdar://problem/22901123

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::NetworkDataTask):
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::partition):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCocoa::tryPasswordBasedAuthentication):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createSocketStreamHandle):
        * WebProcess/Network/WebSocketProvider.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::getAuthenticationInfo):

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

        Crash child processes if they receive an invalid message
        https://bugs.webkit.org/show_bug.cgi?id=167900

        Reviewed by Dan Bernstein.

        Previously, some processes would try to gracefully exit, others would just drop messages leading to weird bugs.
        Instead, set app-specific crash information to the message that failed to be decoded, and then crash.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::didReceiveInvalidMessage): Deleted.
        * DatabaseProcess/DatabaseProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveInvalidMessage): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didReceiveInvalidMessage): Deleted.
        * PluginProcess/PluginProcess.h:
        * Shared/ChildProcess.h:
        * Shared/Cocoa/ChildProcessCocoa.mm: Added.
        (WebKit::ChildProcess::didReceiveInvalidMessage):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveInvalidMessage): Deleted.
        * WebProcess/WebProcess.h:

2017-02-06  Chris Dumez  <cdumez@apple.com>

        [WK2] Drop legacy WKBundlePageDiagnosticLoggingClient API
        https://bugs.webkit.org/show_bug.cgi?id=167883
        <rdar://problem/30376695>

        Reviewed by Sam Weinig.

        Drop legacy WKBundlePageDiagnosticLoggingClient API as I am not aware of any remaining client.
        All clients have now switched to the equivalent UIProcess-side API.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetDiagnosticLoggingClient): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageDiagnosticLoggingClient.h: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.h: Removed.
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::initializeInjectedBundleDiagnosticLoggingClient): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleUIClient):
        (WebKit::WebPage::injectedBundleDiagnosticLoggingClient): Deleted.

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

        Null check the WebKit::RemoteObjectProxy object before calling it
        https://bugs.webkit.org/show_bug.cgi?id=167891
        rdar://problem/30229358

        Reviewed by Tim Horton.

        If a _WKRemoteObjectRegistry invocation reply block outlives its underlying WebKit::RemoteObjectProxy object,
        we'll crash trying to send an unused reply to it. Work around this crash by adding a null check before calling
        sendUnusedReply. 

        While this fixes the crash it will lead to leaks in the process that holds on to the reply block. A more long term fix
        would be to manage the reply block checkers and call sendUnusedReply when invalidating the _WKRemoteObjectRegistry.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _invokeMethod:]):

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

        [Soup] Deadlock in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=167876

        Reviewed by Michael Catanzaro.

        WebKitSoupRequestInputStream uses a read lock. What is happening is that webkitSoupRequestInputStreamAddData
        takes the lock, and it calls webkitSoupRequestInputStreamPendingReadAsyncComplete with the lock help. That
        causes webkitSoupRequestInputStreamReadAsync to be called again to read the next chunk, but in the same run loop
        operation. We don't really need the read lock because both webkitSoupRequestInputStreamAddData and
        webkitSoupRequestInputStreamReadAsync shoudl always be called from the main thread.

        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamReadAsync): Remove the read lock and assert if called from a secondary thread.
        (webkitSoupRequestInputStreamAddData): Ditto.

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

        Guard and unguard ports in a much less intrusive way
        https://bugs.webkit.org/show_bug.cgi?id=167813

        Reviewed by Sam Weinig.

        Instead of adopting mach_port_construct/mach_port_destruct, just guard and unguard the ports where appropriate.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInitialize):
        (IPC::Connection::open):

2017-02-06  Miguel Gomez  <magomez@igalia.com>

        [GTK][EFL] Release unused UpdateAtlas when in memory pressure situation
        https://bugs.webkit.org/show_bug.cgi?id=167872

        Reviewed by Carlos Garcia Campos.

        In a memory pressure situation, release all the unused UpdateAtlas as soon as possible, instead
        of waiting 3 seconds before releasing them.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::releaseInactiveAtlasesTimerFired):
        (WebKit::CompositingCoordinator::releaseAtlases):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:

2017-02-05  Simon Fraser  <simon.fraser@apple.com>

        Remove unparentsOffscreenTiles logic in TileController
        https://bugs.webkit.org/show_bug.cgi?id=167823

        Reviewed by Tim Horton.
        
        Drive-by fix: make sure we put the tiled scrolling indicator's layer back when switching tabs.

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

2017-02-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction on an image should make it stand out when presenting the action sheet
        https://bugs.webkit.org/show_bug.cgi?id=167846
        <rdar://problem/30363014>

        Reviewed by Tim Horton.

        Adds infrastructure to improve the behavior of data interaction for images. We make two changes to accomplish
        this: first, add some plumbing to WebKit so the web process can tell the UI process when it is done handling a
        request to start data interaction, so that the UI process is able to clean up UI-side state in the event that
        the page prevented the default behavior.

        Secondly, this patch tweaks the heuristic used to present action sheets as popovers. For image elements, if
        there is sufficient space around the element, we will use the element rect as the target rect; otherwise, we
        fall back to presenting the popover at the touch location.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didHandleStartDataInteractionRequest):
        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet presentSheet:]):

        Added a presentation style parameter, used to specify whether or not WKActionSheet should present the popover
        using the element rect as the target rect, or the touch location.

        (-[WKActionSheet doneWithSheet]):
        (-[WKActionSheet updateSheetPosition]):
        (-[WKActionSheet presentSheet]): Deleted.
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant presentationRectForIndicatedElement]):

        Returns the (inflated) bounds of the element that is currently being indicated.

        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant _presentationStyleForImageAtElementRect:]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didHandleStartDataInteractionRequest):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:

        Remove unnecessary function declarations and implementations.

        (WebKit::PageClientImpl::didPerformDataInteractionControllerOperation): Deleted.
        (WebKit::PageClientImpl::startDataInteractionWithImage): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestStartDataInteraction):

        Notify the UI process that the web process is done handling a data interaction request, specifying whether or
        not the request was granted.

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

        Unreviewed. Fix the key shortcut to enable resource usage overlay in GTK+.

        The condition to check for CTRL and Shift modifiers is wrong, causing the overlay to be shown on Shit+G and
        making it impossible to write a 'G'.

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

2017-02-03  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout of r211486, r211629.

        Original change is not ideal and is causing issues.

        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):

2017-02-03  Daniel Bates  <dabates@apple.com>

        [Mac][WK2] Add SPI to override the Content Security Policy of a page
        https://bugs.webkit.org/show_bug.cgi?id=167810
        <rdar://problem/30102568>

        Reviewed by Anders Carlsson.

        Add SPI to WKWebViewConfiguration so that an embedding client can define a custom Content Security
        Policy that overrides the Content Security Policy of any page loaded in the web view.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Encode instance variable overrideContentSecurityPolicy.
        (WebKit::WebPageCreationParameters::decode): Decode instance variable overrideContentSecurityPolicy.
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy): Copy instance variable overrideContentSecurityPolicy.
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::overrideContentSecurityPolicy): Added.
        (API::PageConfiguration::setOverrideContentSecurityPolicy): Added.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Copy overrideContentSecurityPolicy set on the WKWebViewConfiguration
        object to the API::PageConfiguration object if non-nil.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):  Copy the instance variable overrideContentSecurityPolicy.
        (-[WKWebViewConfiguration _overrideContentSecurityPolicy]): Added.
        (-[WKWebViewConfiguration _setOverrideContentSecurityPolicy:]): Added.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Define SPI property _overrideContentSecurityPolicy.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_overrideContentSecurityPolicy from the passed
        page configuration.
        (WebKit::WebPageProxy::creationParameters): Set WebPageCreationParameters::overrideContentSecurityPolicy
        so that the WebPage object (in the WebProcess) will know the overridden Content Security Policy
        to apply to the document.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::overrideContentSecurityPolicy): Added. Returns the custom Content
        Security Policy to apply to a new document.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::overrideContentSecurityPolicy): Added.

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

        Revert toString behavior to what we had in the last version we shipped
        https://bugs.webkit.org/show_bug.cgi?id=167814
        rdar://problem/30344753

        Reviewed by Tim Horton.

        This is a speculative fix for a crash that we've seen on recent builds. It simply reverts the toString call back to
        what we have in the last version of Safari we shipped.

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

2017-02-03  Chris Dumez  <cdumez@apple.com>

        Dismiss HTML form validation popover when pressing Escape key
        https://bugs.webkit.org/show_bug.cgi?id=167716
        <rdar://problem/29872943>

        Reviewed by Simon Fraser.

        Override ValidationMessageClient::hideAnyValidationMessage().

        * WebProcess/WebCoreSupport/WebValidationMessageClient.cpp:
        (WebKit::WebValidationMessageClient::hideAnyValidationMessage):
        * WebProcess/WebCoreSupport/WebValidationMessageClient.h:

2017-02-03  Jeremy Jones  <jeremyj@apple.com>

        Require keyboard focus for pointer lock.
        https://bugs.webkit.org/show_bug.cgi?id=167750

        Reviewed by Tim Horton.

        When keyboard focus leaves the page, end pointer lock
        Prevent pointer lock when the page doesn't have keyboard focus.

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

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

        Stash away the ports - they will be nulled out before the cancel handlers are called
        https://bugs.webkit.org/show_bug.cgi?id=167812

        Reviewed by Geoffrey Garen.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):

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

        Inline createReceiveSource in its two call sites
        https://bugs.webkit.org/show_bug.cgi?id=167809

        Reviewed by Alex Christensen.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):
        (IPC::createReceiveSource): Deleted.

2017-02-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKActionSheet should dismiss with animation when done with the sheet
        https://bugs.webkit.org/show_bug.cgi?id=167804
        <rdar://problem/30334861>

        Reviewed by Tim Horton.

        Currently, we do not dismiss the action menu when -doneWithSheet is invoked. While this is okay when the menu is
        dismissed via tap (since it will be dismissed as default behavior by the popover controller) we need to manually
        dismiss it if we are trying to programmatically dismiss the action sheet/menu.

        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet presentSheetFromRect:]):
        (-[WKActionSheet doneWithSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView resignFirstResponder]):

2017-02-03  Olivier Blin  <olivier.blin@softathome.com>

        Doc generation failure in WebKitSecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=167796

        Reviewed by Michael Catanzaro.

        * UIProcess/API/gtk/WebKitSecurityOrigin.cpp:
        warning: Free-form return value description in webkit_security_origin_get_protocol. Use `Returns:' to avoid ambiguities.

2017-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial implementation of resource usage overlay
        https://bugs.webkit.org/show_bug.cgi?id=167731

        Reviewed by Michael Catanzaro.

        Toggle the resource usage overlay visibility by pressing CTRL + Shift + G. Only available when building with
        developer mode enabled.

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

2017-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r211486) [GTK] The MiniBrowser doesn't work anymore.
        https://bugs.webkit.org/show_bug.cgi?id=167776

        Reviewed by Yusuke Suzuki.

        Since r211486 JSC::initializeThreading() also initializes the main run loop. It would be possible that RunLoop
        need to know if it's the main one or not in its constructor, like the GLib impementation does, so we need to
        ensure that WTF threading and MainThread are initialized before creating the main RunLoop. This is a quick fix
        because the regression made impossible to load anything in a WebView, but I think we should review all the
        initialize methods, what they do and how they are called in all the code.

        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2): Call WTF::initializeThreading() and WTF::initializeMainThread() before
        JSC::initializeThreading() and do not call RunLoop::initializeMainRunLoop() because it's already called by JSC.

2017-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] One more unreviewed speculative buildfix after r211403.
        https://bugs.webkit.org/show_bug.cgi?id=165478

        * UIProcess/API/Cocoa/WKWebView.mm: WebSQLiteDatabaseTrackerClient.h is an iOS specific
        header in platform/ios directory which shouldn't and can't be included on non iOS build.

2017-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed speculative buildfix after r211403.
        https://bugs.webkit.org/show_bug.cgi?id=165478

        * UIProcess/API/Cocoa/WKWebView.mm: WebBackgroundTaskController.h is an iOS specific
        header in platform/ios directory which shouldn't and can't be included on non iOS build.


2017-02-02  Andreas Kling  <akling@apple.com>

        [Mac] In-process memory pressure monitor for WebContent processes AKA websam
        <https://webkit.org/b/167491>
        <rdar://problem/30116072>

        Reviewed by Antti Koivisto.

        Enable the in-process memory monitor for WebContent processes on macOS 10.12+

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

2017-02-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r211535, r211566, and r211568.
        https://bugs.webkit.org/show_bug.cgi?id=167765

        Causing timeouts? (Requested by andersca_ on #webkit).

        Reverted changesets:

        "IPC::Connection receive ports should be guarded"
        https://bugs.webkit.org/show_bug.cgi?id=167704
        http://trac.webkit.org/changeset/211535

        "<rdar://problem/30323148> Webkit Nightly on 10.10 broken"
        http://trac.webkit.org/changeset/211566

        "<rdar://problem/30323148> Webkit Nightly on 10.10 broken"
        http://trac.webkit.org/changeset/211568

2017-02-02  Megan Gardner  <megan_gardner@apple.com>

        Don't attempt wide gammut on older OSes
        https://bugs.webkit.org/show_bug.cgi?id=167754
        <rdar://problem/29931587>

        Reviewed by Tim Horton.

        We need to guard our extended color checks the same way throughout the code, or we will attempt to set up
        support for wide gamut partially, which causes crashes when using sharable bitmap.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2017-02-02  Enrica Casucci  <enrica@apple.com>

        WK2: cannot tap on candidate view with hardware keyboard.
        https://bugs.webkit.org/show_bug.cgi?id=167761
        rdar://problem/28775395

        Reviewed by Tim Horton.

        The candidate view is a subview of the view returned by
        automaticallySelectedOverlay and it should be the unscaled view
        instead of the WKContentView.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView automaticallySelectedOverlay]):

2017-02-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Drag images should be anchored to the mouse location
        https://bugs.webkit.org/show_bug.cgi?id=167690
        <rdar://problem/30295261>

        Reviewed by Enrica Casucci.

        Adds some plumbing for the mouse anchor point in the UI process. Additionally, refactors some unrelated code
        for handling data interaction.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startDataInteractionWithImage):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::startDataInteractionWithImage):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setDragImage):
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag):

2017-02-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r211571 and r211582.
        https://bugs.webkit.org/show_bug.cgi?id=167751

        This change caused API test WebKit1.MemoryPressureHandler to
        fail with an assertion. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[Mac] In-process memory pressure monitor for WebContent
        processes."
        https://bugs.webkit.org/show_bug.cgi?id=167491
        http://trac.webkit.org/changeset/211571

        "Unreviewed attempt to fix the Windows build after r211571."
        http://trac.webkit.org/changeset/211582

2017-02-02  Dan Bernstein  <mitz@apple.com>

        The Make Frameworks Symbolic Link build phase can end up creating a symlink inside the Frameworks subdirectory
        https://bugs.webkit.org/show_bug.cgi?id=167745

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj: Pass the -h option to ln(1) so that it will replace,
          rather than follow, an existing symlink.

2017-02-02  Andreas Kling  <akling@apple.com>

        [Mac] In-process memory pressure monitor for WebContent processes.
        <https://webkit.org/b/167491>
        <rdar://problem/30116072>

        Reviewed by Antti Koivisto.

        Enable the in-process memory monitor for WebContent processes on macOS 10.12+

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

2017-02-02  Chris Dumez  <cdumez@apple.com>

        [Crash] com.apple.WebKit.WebContent at WebKit: WebKit::WebPage::fromCorePage()
        https://bugs.webkit.org/show_bug.cgi?id=167738
        <rdar://problem/30229990>

        Reviewed by Andreas Kling.

        The BackForwardClient no longer needs to worry about removing HistoryItems
        from the PageCache now that WebCore takes care of it.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItemFromUIProcess):
        (WebKit::WebBackForwardListProxy::addItem):
        (WebKit::WebBackForwardListProxy::close):
        * WebProcess/WebPage/WebBackForwardListProxy.h:

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

        <rdar://problem/30323148> Webkit Nightly on 10.10 broken

        Follow-up fix.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):

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

        <rdar://problem/30323148> Webkit Nightly on 10.10 broken

        Try to fix the 10.10 build.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):

2017-02-01  Anders Carlsson  <andersca@apple.com>

        Handle m_processLauncher being null in ChildProcessProxy::processIdentifier()
        https://bugs.webkit.org/show_bug.cgi?id=167713
        rdar://problem/28896113

        Reviewed by Dan Bernstein.

        This can happen if the process has been explicitly terminated.

        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::processIdentifier):

2017-02-02  Yongjun Zhang  <yongjun_zhang@apple.com>

        In iOS, we should take background assertion when accessing localstorage databases.
        https://bugs.webkit.org/show_bug.cgi?id=165478

        Just like in WebKit1, when initializing a WKWebView, initialize the database transaction
        tracker client. Also, we should set up the start and end background task blocks here. In
        WebKit1, this is done inside UIKit.

        Reviewed by Brady Eidson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setUpSQLiteDatabaseTrackerClient]): Set up the start/end background task blocks
            and database transaction tracker client.

2017-02-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the nightly open source build.

        Adds more header checks when importing from WebKitAdditions.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:

2017-02-01  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] With visual viewports, a fixed bottom bar can be clipped out when the keyboard is visible
        https://bugs.webkit.org/show_bug.cgi?id=167710
        rdar://problem/30100286

        Reviewed by Wenson Hsieh.

        The unobscuredRectInContentCoordinates passed to -didUpdateVisibleRect:... could project outside
        of the bounds of the document, which is OK when rubber-banding, but not when we're in a stable state,
        because that can cause fixed elements to get pushed outside the doc. This happened when the keyboard
        triggered bottom content insets on the scroll view.

        Fix by computing a rectangle which is the "allowed" bounds of fixed content, which is permitted
        to extend outside the document bounds only when rubber-banding, and intersect unobscuredRectInContentCoordinates
        with that rectangle.

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

2017-02-01  Enrica Casucci  <enrica@apple.com>

        WebProcess crashes in  int WTF::__throw_bad_variant_access<int> when expanding/shrinking a block selection.
        https://bugs.webkit.org/show_bug.cgi?id=167673
        rdar://problem/30229620

        Reviewed by Anders Carlsson

        This is a speculative fix for a bug that might have been introduced
        with http://trac.webkit.org/changeset/208479.
        The code in containsRange inline fuction in WebPageIOS.mm has not been
        updated when the return value of Range::compareBoundaryPoints was changed
        to ExceptionOr<short>.
        Since there is already a method containsRange in the Range class that
        does the right thing, expandedRangeFromHandle now uses that.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::expandedRangeFromHandle):
        (WebKit::containsRange): Deleted.

2017-02-01  Anders Carlsson  <andersca@apple.com>

        IPC::Connection receive ports should be guarded
        https://bugs.webkit.org/show_bug.cgi?id=167704

        Reviewed by Tim Horton.

        Guarding receive rights will make sure that they won't be closed accidentally. They are created
        with a context pointer and can only be unguarded or destructed with the same context pointer.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate):
        Use mach_port_destruct and pass the connection pointer as the context.

        (IPC::Connection::platformInitialize):
        Guard the server port with the connection pointer as the context.

        (IPC::Connection::open):
        Use mach_port_construct to create the port which lets us avoid a call to mach_port_set_attributes and setMachPortQueueLength.
        Make the port guarded and use the connection pointer as the context.

        (IPC::createReceiveSource):
        Get rid of this and just duplicate the five lines of code in two places. For the receive port we want to use mach_port_destruct
        in our cancel handler.

2017-02-01  Andreas Kling  <akling@apple.com>

        Implement the alwaysRunsAtBackgroundPriority WK2 setting using thread QoS.
        <https://webkit.org/b/167387>
        <rdar://problem/29711409>

        Reviewed by Antti Koivisto.

        Remove the old ProcessThrottlerClient implementation of alwaysRunsAtBackgroundPriority
        and replace it with WTF::setGlobalMaxQOSClass().

        If the setting is enabled, it's passed over to each WK2 child process along with its
        bootstrap parameter, and we notify WTF in XPCServiceInitializer(), before anything
        too threading related happens.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::processIncomingMessage):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getExtraInitializationData):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::ChildProcessProxy):
        (WebKit::ChildProcessProxy::getLaunchOptions):
        * UIProcess/ChildProcessProxy.h:
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::DatabaseProcessProxy):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::alwaysRunsAtBackgroundPriority): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::assertionState):
        * UIProcess/ProcessThrottlerClient.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::alwaysRunsAtBackgroundPriority): Deleted.
        * UIProcess/WebProcessProxy.h:

2017-02-01  Tomas Popela  <tpopela@redhat.com>

        [GTK] Add an API to add a custom tab into the print dialog
        https://bugs.webkit.org/show_bug.cgi?id=151998

        Reviewed by Carlos Garcia Campos.

        Add a new create-custom-widget signal to the WebKitPrintOperation. The
        signal is emitted before the dialog is displayed and it gives an
        opportunity to embed a custom widget in the dialog. You can do so by
        creating a new WebKitPrintCustomWidget and returning it from the
        create-custom-widget signal handler. The WebKitPrintCustomWidget is
        emitting two signals:
          - update - emitted when the currently selected printer is changed,
                     to be able to actualize the custom widget based on the
                     current printer
          - apply - emitted when the dialog is closed, just before the
                    printing will start, to be able e.g. to change content
                    based on the custom widget state.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitAutocleanups.h:
        * UIProcess/API/gtk/WebKitPrintCustomWidget.cpp: Added.
        (webkitPrintCustomWidgetSetProperty):
        (webkit_print_custom_widget_class_init):
        (webkit_print_custom_widget_new):
        (webkit_print_custom_widget_get_widget):
        (webkit_print_custom_widget_get_title):
        (webkitPrintCustomWidgetEmitCustomWidgetApplySignal):
        (webkitPrintCustomWidgetEmitUpdateCustomWidgetSignal):
        * UIProcess/API/gtk/WebKitPrintCustomWidget.h: Added.
        * UIProcess/API/gtk/WebKitPrintCustomWidgetPrivate.h: Added.
        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        (webkitPrintOperationAccumulatorObjectHandled):
        (webkit_print_operation_class_init):
        (notifySelectedPrinterCallback):
        (webkitPrintOperationRunDialog):
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:

2017-02-01  Antti Koivisto  <antti@apple.com>

        Load resources speculatively
        https://bugs.webkit.org/show_bug.cgi?id=167660

        Reviewed by Andreas Kling.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::makeEntry):

            Factor to a function.

        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):

            Support loads where we don't have existing cache entry to validate.

        (WebKit::NetworkCache::SpeculativeLoad::didReceiveBuffer):

            Synthesize a NetworkCache::Entry if we can't store it.

        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        (WebKit::NetworkCache::SpeculativeLoad::didFailLoading):
        (WebKit::NetworkCache::SpeculativeLoad::abort):
        (WebKit::NetworkCache::SpeculativeLoad::didComplete):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):

            Make having existing cache entry optional.

        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):

            Allow validation without validation headers (that is, normal load).

        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateSubresource):

            Make having existing cache entry optional.

        (WebKit::NetworkCache::canRevalidate):

            Allow speculative loads without validation headers if we have high confidence that the
            page is going to request this resource again. This is based on the time span we have
            seen this resource being loaded on a given page and how much time has elapsed since we
            last loaded it.

            For example if we have seen the resource over the last 10 days we'll speculate that it will
            be required for the next 5 days.

        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourceInfo::decode):

            Encode the firstSeen and lastSeen time stamps.

        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        (WebKit::NetworkCache::makeSubresourceInfoVector):
        (WebKit::NetworkCache::SubresourcesEntry::SubresourcesEntry):
        (WebKit::NetworkCache::SubresourcesEntry::updateSubresourceLoads):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::lastSeen):
        (WebKit::NetworkCache::SubresourceInfo::firstSeen):
        (WebKit::NetworkCache::SubresourceInfo::setNonTransient):
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo): Deleted.
        (WebKit::NetworkCache::SubresourceInfo::setTransient): Deleted.

2017-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed speculative buildfix after r211403.
        https://bugs.webkit.org/show_bug.cgi?id=167601

        * UIProcess/API/Cocoa/WKWebView.mm:

2017-01-31  Antti Koivisto  <antti@apple.com>

        Teach cache coders to encode time_points
        https://bugs.webkit.org/show_bug.cgi?id=167670

        Reviewed by Andreas Kling.

        Encode time_point instead of duration.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeRecordMetaData):
        (WebKit::NetworkCache::Storage::readRecord):
        (WebKit::NetworkCache::encodeRecordMetaData):
        (WebKit::NetworkCache::Storage::encodeRecord):
        (WebKit::NetworkCache::Storage::traverse):

2017-01-31  Brent Fulgham  <bfulgham@apple.com>

        [WebRTC][WebKit2] Support expanding the sandbox to allow microphone access at process launch
        https://bugs.webkit.org/show_bug.cgi?id=167669
        <rdar://problem/29974333>

        Reviewed by Alexey Proskuryakov.

        This change implements a temporary workaround to <rdar://problem/29448368> to allow us to do live
        testing of WebRTC microphone access. It should be removed when that underlying bug is fixed.

        This change adds a new process creation parameter that indicates whether we wish to expand the
        sandbox to allow microphone access.

        Tested by WebRTC suite (part of another set of bugs).

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Serialize the audio access entitlement handle.
        (WebKit::WebProcessCreationParameters::decode): Ditto.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess): Create an entitlement handle and pass along to
        the child process.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): If an audio entitlement (for the microphone)
        was desired, expand the sandbox to include access.

2017-01-31  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2017-01-31  Anders Carlsson  <andersca@apple.com>

        Add more CRASH calls to try to figure out why we're failing to send mach ports over the wire
        https://bugs.webkit.org/show_bug.cgi?id=167657

        Reviewed by Tim Horton.

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

2017-01-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Crash when trying to compute global location when the WKContentView does not have a window
        https://bugs.webkit.org/show_bug.cgi?id=167627
        <rdar://problem/30272380>

        Reviewed by Beth Dakin.

        Moves data interaction state out of OpenSource and into WebKitAdditions. Work towards fixing a crash in
        <rdar://problem/30272380>.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponder]):

2017-01-31  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Add support for WK2 libwebrtc endpoint
        https://bugs.webkit.org/show_bug.cgi?id=167306
        <rdar://problem/30245426>

        Reviewed by Alex Christensen.

        Implementation of the LibWebRTC networking in WebKit2.
        The following features are required to be moved from WebProcess to NetworkProcess:
        1 Resolution of DNS names (RTCResolver)
        2 Enumeration of interfaces/gathering of host addresses (RTCMonitor)
        3 Implementation of Packet Socket for TCP/UDP communication (RTCSocket).

        This patch implements the related classes in WebProcess/NetworkProcess and the integration with libwebrtc.
        NetworkProcess implementation is using libwebetc for NetworkRTCMonitor and NetworkRTCSocket.
        This ensures an as-close implementation to libwebrtc as possible.
        In the future, after getting a better test infrastructure we should try to implement these using native APIs.

        Currently, the implementation is as follow:
        - libwebrtc is calling WebProcess stack on the rtc network thread
        - WebProcess stack is forwarding calls to the main thread and makes related IPC calls
        - NetworkProcess receives the IPC calls and forward them to the rtc network thread.
        - The calls are processed in the rtc network thread
        Conversely, when the rtc network thread wants to notify its client, the reverse path is used.

        This patch also implements the LibWebRTCProvider for WebKit2.
        This provider uses the related classes to create a peer connection factory that will use them.

        * CMakeLists.txt:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::rtcProvider):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp: Added.
        (WebKit::LibWebRTCSocketClient::LibWebRTCSocketClient):
        (WebKit::LibWebRTCSocketClient::sendTo):
        (WebKit::LibWebRTCSocketClient::close):
        (WebKit::LibWebRTCSocketClient::setOption):
        (WebKit::LibWebRTCSocketClient::signalReadPacket):
        (WebKit::LibWebRTCSocketClient::signalSentPacket):
        (WebKit::LibWebRTCSocketClient::signalAddressReady):
        (WebKit::LibWebRTCSocketClient::signalConnect):
        (WebKit::LibWebRTCSocketClient::signalClose):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h: Added.
        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp: Added.
        (WebKit::NetworkRTCMonitor::startUpdating):
        (WebKit::NetworkRTCMonitor::stopUpdating):
        (WebKit::NetworkRTCMonitor::onNetworksChanged):
        * NetworkProcess/webrtc/NetworkRTCMonitor.h: Added.
        * NetworkProcess/webrtc/NetworkRTCMonitor.messages.in: Added.
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp: Added.
        (WebKit::createThread):
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        (WebKit::NetworkRTCProvider::close):
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        (WebKit::NetworkRTCProvider::addSocket):
        (WebKit::NetworkRTCProvider::takeSocket):
        (WebKit::NetworkRTCProvider::didReceiveNetworkRTCSocketMessage):
        (WebKit::NetworkRTCProvider::createResolver):
        (WebKit::NetworkRTCProvider::stopResolver):
        (WebKit::NetworkRTCProvider::resolvedName):
        (WebKit::NetworkMessageData::NetworkMessageData):
        (WebKit::NetworkRTCProvider::OnMessage):
        (WebKit::NetworkRTCProvider::callOnRTCNetworkThread):
        (WebKit::NetworkRTCProvider::callSocket):
        (WebKit::NetworkRTCProvider::sendFromMainThread):
        * NetworkProcess/webrtc/NetworkRTCProvider.h: Added.
        (WebKit::NetworkRTCProvider::create):
        (WebKit::NetworkRTCProvider::didReceiveNetworkRTCMonitorMessage):
        (WebKit::NetworkRTCProvider::Resolver::Resolver):
        (WebKit::NetworkRTCProvider::Resolver::~Resolver):
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in: Added.
        * NetworkProcess/webrtc/NetworkRTCSocket.cpp: Added.
        (WebKit::NetworkRTCSocket::NetworkRTCSocket):
        (WebKit::NetworkRTCSocket::sendTo):
        (WebKit::NetworkRTCSocket::close):
        (WebKit::NetworkRTCSocket::setOption):
        * NetworkProcess/webrtc/NetworkRTCSocket.h: Added.
        * NetworkProcess/webrtc/NetworkRTCSocket.messages.in: Added.
        * Shared/RTCNetwork.cpp: Added.
        (WebKit::RTCNetwork::RTCNetwork):
        (WebKit::ips):
        (WebKit::RTCNetwork::value):
        (WebKit::RTCNetwork::IPAddress::decode):
        (WebKit::RTCNetwork::IPAddress::encode):
        (WebKit::RTCNetwork::decode):
        (WebKit::RTCNetwork::encode):
        * Shared/RTCNetwork.h: Added.
        (WebKit::RTCNetwork::IPAddress::IPAddress):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/webrtc/LibWebRTCNetwork.h: Added.
        (WebKit::LibWebRTCNetwork::monitor):
        (WebKit::LibWebRTCNetwork::socketFactory):
        (WebKit::LibWebRTCNetwork::socket):
        (WebKit::LibWebRTCNetwork::resolver):
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp: Added.
        (WebKit::LibWebRTCProvider::createPeerConnection):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h: Added.
        * WebProcess/Network/webrtc/LibWebRTCResolver.cpp: Added.
        (WebKit::sendOnMainThread):
        (WebKit::LibWebRTCResolver::Start):
        (WebKit::LibWebRTCResolver::GetResolvedAddress):
        (WebKit::LibWebRTCResolver::Destroy):
        (WebKit::LibWebRTCResolver::setResolvedAddress):
        (WebKit::LibWebRTCResolver::setError):
        * WebProcess/Network/webrtc/LibWebRTCResolver.h: Added.
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp: Added.
        (WebKit::sendOnMainThread):
        (WebKit::LibWebRTCSocket::LibWebRTCSocket):
        (WebKit::LibWebRTCSocket::~LibWebRTCSocket):
        (WebKit::LibWebRTCSocket::GetLocalAddress):
        (WebKit::LibWebRTCSocket::GetRemoteAddress):
        (WebKit::LibWebRTCSocket::signalAddressReady):
        (WebKit::LibWebRTCSocket::signalReadPacket):
        (WebKit::LibWebRTCSocket::signalSentPacket):
        (WebKit::LibWebRTCSocket::signalConnect):
        (WebKit::LibWebRTCSocket::signalClose):
        (WebKit::authKey):
        (WebKit::LibWebRTCSocket::willSend):
        (WebKit::LibWebRTCSocket::SendTo):
        (WebKit::LibWebRTCSocket::Close):
        (WebKit::LibWebRTCSocket::GetOption):
        (WebKit::LibWebRTCSocket::SetOption):
        * WebProcess/Network/webrtc/LibWebRTCSocket.h: Added.
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp: Added.
        (WebKit::LibWebRTCSocketFactory::CreateServerTcpSocket):
        (WebKit::LibWebRTCSocketFactory::CreateUdpSocket):
        (WebKit::LibWebRTCSocketFactory::CreateClientTcpSocket):
        (WebKit::LibWebRTCSocketFactory::detach):
        (WebKit::LibWebRTCSocketFactory::CreateAsyncResolver):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h: Added.
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp: Added.
        (WebKit::sendOnMainThread):
        (WebKit::WebRTCMonitor::StartUpdating):
        (WebKit::WebRTCMonitor::StopUpdating):
        (WebKit::WebRTCMonitor::networksChanged):
        * WebProcess/Network/webrtc/WebRTCMonitor.h: Added.
        * WebProcess/Network/webrtc/WebRTCMonitor.messages.in: Added.
        * WebProcess/Network/webrtc/WebRTCResolver.cpp: Added.
        (WebKit::WebRTCResolver::WebRTCResolver):
        (WebKit::WebRTCResolver::setResolvedAddress):
        (WebKit::WebRTCResolver::resolvedAddressError):
        * WebProcess/Network/webrtc/WebRTCResolver.h: Added.
        * WebProcess/Network/webrtc/WebRTCResolver.messages.in: Added.
        * WebProcess/Network/webrtc/WebRTCSocket.cpp: Added.
        (WebKit::WebRTCSocket::signalOnNetworkThread):
        (WebKit::WebRTCSocket::WebRTCSocket):
        (WebKit::WebRTCSocket::signalAddressReady):
        (WebKit::WebRTCSocket::signalReadPacket):
        (WebKit::WebRTCSocket::signalSentPacket):
        (WebKit::WebRTCSocket::signalConnect):
        (WebKit::WebRTCSocket::signalClose):
        * WebProcess/Network/webrtc/WebRTCSocket.h: Added.
        * WebProcess/Network/webrtc/WebRTCSocket.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeLibWebRTC):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::libWebRTC):

2017-01-31  Jessie Berlin  <jberlin@webkit.org>

        Build fix.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::dragImageForView):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate writeItemsToPasteboard:withTypes:]):
        (WebKit::PDFPlugin::handleEditingCommand):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate pdfLayerController:copyItems:withTypes:]):
        (WebKit::PDFPlugin::handleEditingCommand):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteAttachment):
        (WebKit::WebDragClient::declareAndWriteDragImage):

2017-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.15.4 release.

        * gtk/NEWS: Add release notes for 2.15.4.

2017-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix syntax error in GTK+ API docs.

        * UIProcess/API/gtk/WebKitWebContext.cpp:

2017-01-31  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Enable CSS Grid Layout by default
        https://bugs.webkit.org/show_bug.cgi?id=167578

        Reviewed by Michael Catanzaro.

        Now that Safari 10.1 is shipping CSS Grid Layout it seems safe to enable the feature by default:
        https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_1.html

        * Shared/WebPreferencesDefinitions.h: Remove Grid Layout from the list of experimental flags and enable it by default.

2017-01-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CoordinatedGraphics] WebCoordinatedSurface::create should do null-check of the return value of ShareableBitmap::createShareable
        https://bugs.webkit.org/show_bug.cgi?id=167631

        Reviewed by Carlos Garcia Campos.

        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::create): Do null-check of the
        return value of ShareableBitmap::createShareable.

2017-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Environment variables for enabling/disabling AC mode should take precedence over the API.
        https://bugs.webkit.org/show_bug.cgi?id=167605

        Reviewed by Žan Doberšek.

        Add HardwareAccelerationManager singleton helper to handle the global values for enabling, disabling or forcing
        accelerated compositing. This is used by WebPreferences to initialize the values like always, but also by
        WebKitSettings to ensure those values are honored and are not changed when it's not possible. This new class can
        be used in the future to implement the GPU blacklist.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_class_init): Document that the setting depends on actual hardware capabilities.
        (webkit_settings_set_hardware_acceleration_policy): Check HardwareAccelerationManager before trying to change
        the settings.
        * UIProcess/gtk/HardwareAccelerationManager.cpp: Added.
        (WebKit::HardwareAccelerationManager::singleton):
        (WebKit::HardwareAccelerationManager::HardwareAccelerationManager): Initialize m_canUseHardwareAcceleration and
        m_forceHardwareAcceleration dependoing on hardware and system capabilites and
        WEBKIT_DISABLE_COMPOSITING_MODE/WEBKIT_FORCE_COMPOSITING_MODE variables.
        * UIProcess/gtk/HardwareAccelerationManager.h: Added.
        (WebKit::HardwareAccelerationManager::canUseHardwareAcceleration):
        (WebKit::HardwareAccelerationManager::forceHardwareAcceleration):
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore): Use HardwareAccelerationManager to set the initial values.

2017-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] HTTP authentication is not implemented for downloads
        https://bugs.webkit.org/show_bug.cgi?id=167583

        Reviewed by Michael Catanzaro.

        When a normal load is converted to a download, the HTTP authentication happens before the load is converted, and
        the download starts already authenticated. However, downloads started by DownloadManager::startDownload use the
        DownloadClient API to do the authentication. We don't implement didReceiveAuthenticationChallenge() in our
        download client, what makes the load to be cancelled and then fail silently. We should probably add API to
        handle downloads authentication, but we can also forward the authentication to the web view for downloads having
        a web view associated. That would cover most of the cases, like downloading from the context menu.

        * UIProcess/API/gtk/WebKitDownloadClient.cpp: Add didReceiveAuthenticationChallenge implementation.

2017-01-30  Sam Weinig  <sam@webkit.org>

        JSDOMBinding is too big. Split it up!
        https://bugs.webkit.org/show_bug.cgi?id=167601

        Reviewed by Darin Adler.

        * Shared/WebCoreArgumentCoders.cpp:
        Replace include of JSDOMBinding with JSDOMExceptionHandling.

2017-01-30  Andy Estes  <aestes@apple.com>

        [QuickLook] FrameLoaderClient should return the new QuickLookHandleClient it creates
        https://bugs.webkit.org/show_bug.cgi?id=167625

        Reviewed by Andreas Kling.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: Declared createQuickLookHandleClient().
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::createQuickLookHandleClient): Renamed from didCreateQuickLookHandle().
        (WebKit::WebFrameLoaderClient::didCreateQuickLookHandle): Renamed to createQuickLookHandleClient().
        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.cpp:
        (WebKit::WebQuickLookHandleClient::WebQuickLookHandleClient): Set m_fileName and m_uti from
        the constructor arguments instead of from handle.
        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.h:

2017-01-30  Anders Carlsson  <andersca@apple.com>

        Add some more crash reporter information to diagnose a failed mach_msg
        https://bugs.webkit.org/show_bug.cgi?id=167610

        Reviewed by Dean Jackson.

        Include the receive port name as well.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::readFromMachPort):

2017-01-30  Simon Fraser  <simon.fraser@apple.com>

        [iOS] position:fixed inside touch-scrollable overflow is mispositioned
        https://bugs.webkit.org/show_bug.cgi?id=167604
        rdar://problem/29500273

        Reviewed by Zalan Bujtas.

        Make sure we tell m_webPageProxy.computeCustomFixedPositionRect() when visual viewports are enabled.

        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::customFixedPositionRect):

2017-01-30  Simon Fraser  <simon.fraser@apple.com>

        Fixed elements should not rubber-band in WK2, nor remain at negative offsets
        https://bugs.webkit.org/show_bug.cgi?id=167484
        rdar://problem/29453068

        Reviewed by Dean Jackson.

        Pass in StickToViewportBounds as we did before visual viewports.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect):

2017-01-30  Chris Dumez  <cdumez@apple.com>

        Update DiagnosticLoggingClient::logDiagnosticMessageWithValue() to take in the value as a double
        https://bugs.webkit.org/show_bug.cgi?id=167536

        Reviewed by Darin Adler.

        Update DiagnosticLoggingClient::logDiagnosticMessageWithValue() to take in the value as a double
        instead of a string. The value needs to be numeric and the current API is error-prone.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::logDiagnosticMessage):
        (WebKit::NetworkProcess::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcess::logDiagnosticMessageWithValue):
        * NetworkProcess/NetworkProcess.h:
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/HighPerformanceGraphicsUsageSampler.cpp:
        (WebKit::HighPerformanceGraphicsUsageSampler::timerFired):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::logDiagnosticMessage):
        (WebKit::NetworkProcessProxy::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcessProxy::logDiagnosticMessageWithValue):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/PerActivityStateCPUUsageSampler.cpp:
        (WebKit::PerActivityStateCPUUsageSampler::loggingTimerFired):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::goToItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::logDiagnosticMessage):
        (WebKit::WebPageProxy::logDiagnosticMessageWithResult):
        (WebKit::WebPageProxy::logDiagnosticMessageWithValue):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:

2017-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Fix the build after r211354.
        https://bugs.webkit.org/show_bug.cgi?id=167565

        Unreviewed buildfix.

        * PlatformMac.cmake:

2017-01-30  Miguel Gomez  <magomez@igalia.com>

        [GTK] Scrolling iframes, doesn't redraw their content
        https://bugs.webkit.org/show_bug.cgi?id=167581

        Reviewed by Carlos Garcia Campos.

        Take into account whether we are using AC or not in order to repaint an area after scrolling.

        No behaviour change, no new tests.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):

2017-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build after r211365.

        Remove invalid assert.

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

2017-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not release OpenGL resource immediately when leaving accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=167544

        Reviewed by Michael Catanzaro.

        Sometimes the conditions to be in AC mode or not change quickly, and then we leave AC mode just enter it again
        after a very short period of time. In those cases we are dropping all the GL resources and the compositor
        thread, and creating it again. We could keep the layer tree host alive for a while when exiting AC mode, and
        reuse it if we enter AC mode before the previous one has been discarded. While the previous layer tree host is
        alive we still need to keep it up to date, for example if the web view is resized or contents size change, and
        synchronize with the threaded compositor when it becomes the layer tree host again.

        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::~AcceleratedDrawingArea): Discard the previous layer tree host.
        (WebKit::AcceleratedDrawingArea::AcceleratedDrawingArea): Initialize the timer to discard the previous layer
        tree host.
        (WebKit::AcceleratedDrawingArea::pageBackgroundTransparencyChanged): Notify the previous layer tree host if needed.
        (WebKit::AcceleratedDrawingArea::mainFrameContentSizeChanged): Ditto.
        (WebKit::AcceleratedDrawingArea::updateBackingStoreState): Ditto.
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode): Reuse the previous layer tree host if possible.
        (WebKit::AcceleratedDrawingArea::exitAcceleratedCompositingModeNow): Exit AC mode and save the layer tree host
        starting a timer of 5 seconds to discard it if not reused.
        (WebKit::AcceleratedDrawingArea::discardPreviousLayerTreeHost): Invalidate and destroy the previous layer tree host.
        (WebKit::AcceleratedDrawingArea::didChangeViewportAttributes): Notify the previous layer tree host if needed.
        (WebKit::AcceleratedDrawingArea::deviceOrPageScaleFactorChanged): Ditto.
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::scrollNonCompositedContents): If it's discardable add the action to
        be synchronized instead.
        (WebKit::ThreadedCoordinatedLayerTreeHost::contentsSizeChanged): Ditto.
        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged): Ditto.
        (WebKit::ThreadedCoordinatedLayerTreeHost::pageBackgroundTransparencyChanged): Ditto.
        (WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange): Ditto.
        (WebKit::ThreadedCoordinatedLayerTreeHost::didChangeViewportAttributes): Ditto.
        (WebKit::ThreadedCoordinatedLayerTreeHost::setIsDiscardable): When the layer tree host becomes discardable,
        reset the sync actions and return. When it becomes the real layer tree host again, apply all pending actions to
        synchronize with the threaded compositor.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scroll): Notify the previous layer tree host if needed.
        (WebKit::DrawingAreaImpl::mainFrameContentSizeChanged): Ditto.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): Use AcceleratedDrawingArea::exitAcceleratedCompositingModeNow().
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setIsDiscardable): Added.

2017-01-30  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Remove support to enable/disable experimental features
        https://bugs.webkit.org/show_bug.cgi?id=167586

        Reviewed by Michael Catanzaro.

        As requested in bug #167578 we should remove the support to enable/disable
        experimental features in WebKitGTK+.
        One reason is that CSS Grid Layout is going to be enabled by default now,
        so we don't need it to be in this file.
        Another is that this support needs to be rewritten to use
        the enumerable experimental features API.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsConstructed):
        * UIProcess/gtk/ExperimentalFeatures.cpp: Removed.
        * UIProcess/gtk/ExperimentalFeatures.h: Removed.

2017-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to handle the accelerated compositing policy
        https://bugs.webkit.org/show_bug.cgi?id=167509

        Reviewed by Michael Catanzaro.

        Now that we have brought back the on demand mode, we should allow applications to choose the policy, without
        having to deal with environment variables. Settings also allows to set different policy depending on the web
        view, so for example evolution could disable AC for the composer, but leave the on demand mode for the email
        viewer. This patch adds a single new setting hardware-acceleration-policy to handle both
        acceleratedCompositingEnabled and forceCompositingMode preferences using an enum with values
        WEBKIT_HARDWARE_ACCELERATION_POLICY_ON_DEMAND, WEBKIT_HARDWARE_ACCELERATION_POLICY_ALWAYS and
        WEBKIT_HARDWARE_ACCELERATION_POLICY_NEVER.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Add setter for hardware-acceleration-policy property.
        (webKitSettingsGetProperty): Add getter for hardware-acceleration-policy property.
        (webkit_settings_class_init): Add hardware-acceleration-policy property.
        (webkit_settings_get_hardware_acceleration_policy): Return policy according to the preferences.
        (webkit_settings_set_hardware_acceleration_policy): set preferences according to the given policy.
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):

2017-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Crash on WebCore::GLContext::version()
        https://bugs.webkit.org/show_bug.cgi?id=167559

        Reviewed by Michael Catanzaro.

        This is happening because TextureMapperPlatformLayerProxy::compositorThreadUpdateTimerFired() is fired after the
        threaded compositor is deleted. CoordinatedGraphicsScene::purgeGLResources() should invalidate the proxies
        before clearing the map.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):

2017-01-29  Nan Wang  <n_wang@apple.com>

        AX: WKContentView needs to implement UITextInput methods to make speak selection highlighting work
        https://bugs.webkit.org/show_bug.cgi?id=166955

        Reviewed by Ryosuke Niwa.

        Implemented methods that Speak Selection can use to retrieve the word/sentence highlighting rects.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView webSelectionRectsForSelectionRects:]):
        (-[WKContentView webSelectionRects]):
        (-[WKContentView _accessibilityRetrieveRectsEnclosingSelectionOffset:withGranularity:]):
        (-[WKContentView _accessibilityRetrieveRectsAtSelectionOffset:withText:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::selectionRectsCallback):
        (WebKit::WebPageProxy::requestRectsForGranularityWithSelectionOffset):
        (WebKit::WebPageProxy::requestRectsAtSelectionOffsetWithText):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::visiblePositionForPositionWithOffset):
        (WebKit::WebPage::getRectsForGranularityWithSelectionOffset):
        (WebKit::rangeNearPositionMatchesText):
        (WebKit::WebPage::getRectsAtSelectionOffsetWithText):

2017-01-29  Dan Bernstein  <mitz@apple.com>

        [iOS] Expose WebCore::DataDetection::detectContentInRange WKWebProcessPlugInRangeHandle
        https://bugs.webkit.org/show_bug.cgi?id=167565

        Reviewed by Sam Weinig.

        Test: TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm

        * Shared/API/Cocoa/WKDataDetectorTypes.h: Added. Moved the enum definition from
          WKWebViewConfiguration.h to here.
        * Shared/API/Cocoa/WKDataDetectorTypesInternal.h: Added.
        (fromWKDataDetectorTypes): Moved from WKWebView.mm.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (fromWKDataDetectorTypes): Moved to WKDataDetectorTypesInternal.h.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h: Moved WKDataDetectorTypes definition out
          to WKDataDetectorTypes.h.

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

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm:
        (-[WKWebProcessPlugInRangeHandle detectDataWithTypes:context:]): Added. Calls
          DataDetection::detectContentInRange.

2017-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Coordinated Graphics] WebPage shouldn't use the layerTreeHost directly
        https://bugs.webkit.org/show_bug.cgi?id=167494

        Reviewed by Michael Catanzaro.

        In Coordinated Graphics we have a couple of methods that the WebPage uses directly from the layer tree host,
        instead of using the drawing area interface. This patch adds DrawingArea::didChangeViewportAttributes and
        DrawingArea::deviceOrPageScaleFactorChanged and renames LayerTreeHost::didChangeViewportProperties as
        LayerTreeHost::didChangeViewportAttributes for consistency.

        * Shared/CoordinatedGraphics/SimpleViewportController.cpp:
        (WebKit::SimpleViewportController::didChangeViewportAttributes): Receive an rvalue reference to avoid copies.
        * Shared/CoordinatedGraphics/SimpleViewportController.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::didChangeViewportAttributes): Forward it to the layer tree host if any.
        (WebKit::AcceleratedDrawingArea::deviceOrPageScaleFactorChanged): Ditto.
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::didChangeViewportAttributes): Renamed and updated to pass an rvalue reference.
        (WebKit::ThreadedCoordinatedLayerTreeHost::didChangeViewportProperties): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::didChangeViewportAttributes): Renamed and updated to pass an rvalue reference.
        (WebKit::LayerTreeHost::didChangeViewportProperties): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged): Use the drawing area.
        (WebKit::WebPage::scalePage): Ditto
        (WebKit::WebPage::setDeviceScaleFactor): Ditto.
        (WebKit::WebPage::viewportPropertiesDidChange): Ditto.

2017-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Crash when detaching the CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=167547

        Reviewed by Michael Catanzaro.

        It seems that commitSceneState() can be called after the CoordinatedGraphicsScene has been detached.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::commitSceneState): Return early if scene has been detached.
        (WebKit::CoordinatedGraphicsScene::detach): Take the render queue lock before clearing the render queue.

2017-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Crash when deleting the compositor run loop
        https://bugs.webkit.org/show_bug.cgi?id=167545

        Reviewed by Michael Catanzaro.

        The problem is that we are releasing the WorkQueue before the update timer that keeps a reference to the run
        loop, destroyed by the WorkQueue. So, invalidate the WorkQueue in the next run loop iteration to ensure it
        happens after the CompositingRunLoop destructor.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::~CompositingRunLoop):

2017-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ASSERTION FAILED: !m_layerTreeHost in DrawingAreaImpl::display()
        https://bugs.webkit.org/show_bug.cgi?id=167548

        Reviewed by Michael Catanzaro.

        The problem is that non accelerated compositing forceRepaint implementation is doing a layout and then calling
        display. The layout makes the drawing area enter in AC mode and display asserts that we have a layer tree
        host. forceRepaint shouldn't do the layout because display already does that and it correctly handles the case
        of entering AC mode during the layout. It shouldn't call setNeedsDisplay either, because that schedules a
        display, but we are going to display synchronously.

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

2017-01-28  Tim Horton  <timothy_horton@apple.com>

        Don't flash a tap highlight for the entirety of an editable WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=167486
        <rdar://problem/30193996>

        Reviewed by Dan Bernstein.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary):
        Bail from providing a tap highlight if we are about to highlight
        the entire body of an editable web view.

2017-01-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Check USE(APPLE_INTERNAL_SDK) instead of specific headers when importing from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=167555

        Reviewed by Dan Bernstein.

        Instead of guarding #import <WebKitAdditions/*> on the existence of the imported file, consult
        USE(APPLE_INTERNAL_SDK) instead.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:

2017-01-28  Yoav Weiss  <yoav@yoav.ws>

        Add Link Preload as an off-by-default experimental feature menu item.
        https://bugs.webkit.org/show_bug.cgi?id=167201

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetLinkPreloadEnabled):
        (WKPreferencesGetLinkPreloadEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Add User Timing Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=167542
        <rdar://problem/22746307>

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetUserTimingEnabled):
        (WKPreferencesGetUserTimingEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Experimental feature. Off for now while we update ResourceTiming
        and NavigationTiming to be compatible with Performance Timing 2.

2017-01-28  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/30247736> WebKit2-7604.1.5 has failed to build: error: only virtual member functions can be marked 'override'

        * UIProcess/ios/PageClientImplIOS.h: Guard the declaration of requestPasswordForQuickLookDocument
          with USE(QUICK_LOOK) to match the base class.
        * UIProcess/ios/PageClientImplIOS.mm: Guard the implementation as well.

2017-01-27  Dan Bernstein  <mitz@apple.com>

        [Cocoa] No way to get the text from a WKWebProcessPlugInRangeHandle
        https://bugs.webkit.org/show_bug.cgi?id=167535

        Reviewed by Sam Weinig.

        Added a text property to WKWebProcessPlugInRangeHandle.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.h: Declare new property.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm:
        (-[WKWebProcessPlugInRangeHandle text]): Added. Calls InjectedBundleRangeHandle::text.

        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::text): Added. Calls WebCore::Range::text.
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.h:

2017-01-27  Alex Christensen  <achristensen@webkit.org>

        Move smartInsertDeleteEnabled to WebPageCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=167530

        Reviewed by Brady Eidson.

        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::create):
        (WebKit::WebPage::WebPage):
        (WebKit::m_userInterfaceLayoutDirection):
        (WebKit::WebPage::reinitializeWebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        * WebProcess/WebProcess.h:
        Instead of making a WebPage then immediately sending it a message to set smartInsertDeleteEnabled,
        just call setSmartInsertDeleteEnabled at the end of the WebPage creation.  No change in behaviour.

2017-01-27  Brady Eidson  <beidson@apple.com>

        IconLoadingClient API doesn't work asynchronously.
        <rdar://problem/30243429> and https://bugs.webkit.org/show_bug.cgi?id=167532

        Reviewed by Alex Christensen.

        Make a WTF::Function (inherently not compatible with ObjC blocks as they must be copyable)
        into a std::function, which is copyable.

        * UIProcess/API/APIIconLoadingClient.h:
        (API::IconLoadingClient::getLoadDecisionForIcon):
        
        * UIProcess/API/mac/WKView.mm:
        (-[WKView maybeInstallIconLoadingClient]):
        
        * UIProcess/Cocoa/IconLoadingDelegate.h:
        * UIProcess/Cocoa/IconLoadingDelegate.mm:
        (WebKit::IconLoadingDelegate::IconLoadingClient::getLoadDecisionForIcon):
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getLoadDecisionForIcon):

2017-01-27  Chris Dumez  <cdumez@apple.com>

        Fix remaining bad uses of logDiagnosticMessageWithValue()
        https://bugs.webkit.org/show_bug.cgi?id=167526

        Reviewed by Alex Christensen.

        Fix remaining bad uses of logDiagnosticMessageWithValue(). It can only
        be called with numeric values.

        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCache::Statistics::recordRetrievalFailure):
        (WebKit::NetworkCache::Statistics::recordRetrievedCachedEntry):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::goToItem):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::willStartUserTriggeredZooming):

2017-01-27  Chris Dumez  <cdumez@apple.com>

        Round CPU Usage diagnostic logging to 2 significant digits
        https://bugs.webkit.org/show_bug.cgi?id=167515
        <rdar://problem/30236297>

        Reviewed by Antti Koivisto.

        Round CPU Usage diagnostic logging to 2 significant digits
        as requested by diagnostic logging team.

        * UIProcess/PerActivityStateCPUUsageSampler.cpp:
        (WebKit::toStringRoundingSignificantFigures):
        (WebKit::PerActivityStateCPUUsageSampler::loggingTimerFired):

2017-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Stop creating the GLContext on demand the first time makeContextCurrent is called
        https://bugs.webkit.org/show_bug.cgi?id=167496

        Reviewed by Žan Doberšek.

        This is causing problems with animations when entering AC mode on demand. What happens is that the threaded
        compositor is created, then the animation is scheduled and during the first animation iteration the GLContext is
        created, making the first frame of the animation quite slow. In my computer creating the GLContext takes 0.8
        seconds. If the animation duration is less than the time it takes to create the GLContext, the animation ends
        without iterating. This causing timeouts in the bots in tests like
        animations/animation-iteration-event-destroy-renderer.html that expect webkitAnimationIteration events that
        never fire.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::ThreadedCompositor): Create the GLContext right after the compositing thread is
        created if we already have a native surface handle.
        (WebKit::ThreadedCompositor::createGLContext): Helper to create the GLContext.
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing): Create the GLContext when a native surface
        handle is given.
        (WebKit::ThreadedCompositor::makeContextCurrent): Deleted.
        (WebKit::ThreadedCompositor::renderLayerTree): Make the context cunrrent directly here.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2017-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Stop forcing accelerated compositing by default
        https://bugs.webkit.org/show_bug.cgi?id=167492

        Reviewed by Žan Doberšek.

        We are now ready to bring back the on demand accelerated compositing mode with the threaded
        compositor. Unfortunately, having AC always enabled brought a lot of issues for many people. Not only it
        requires a lot more memory but also caused rendering issues (or even nothing rendered at all) with some graphics
        drivers. People started to use WEBKIT_DISABLE_COMPOSITING_MODE as a workaround, but that was not expected to be
        used by users. So, entering/leaving AC when required by web contents is not actually the solution but a huge
        improvement for many people. If we are eventually ready to force AC mode again, we'll change this again. Note
        that we still have WEBKIT_DISABLE_COMPOSITING_MODE, but now also WEBKIT_FORCE_COMPOSITING_MODE for testing and debugging.

        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):

2017-01-26  Chris Dumez  <cdumez@apple.com>

        Crash when navigating back to a page in PacheCache when one of its frames has been removed
        https://bugs.webkit.org/show_bug.cgi?id=167421
        <rdar://problem/30188490>

        Reviewed by Darin Adler.

        Add a new setting allowing layout tests to enable PageCache in a window
        that has an opener, for convenience.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAllowsPageCacheWithWindowOpener):
        (WKPreferencesGetAllowsPageCacheWithWindowOpener):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-01-26  Keith Miller  <keith_miller@apple.com>

        classInfo should take a VM so it is not materialized from the object on each call
        https://bugs.webkit.org/show_bug.cgi?id=167424

        Rubber Stamped by Michael Saboff.

        Previously, classInfo() would get the VM from the target's
        MarkedBlock.  Most callers already have a VM on hand, so it is
        wasteful to compute the VM from the marked block every time. This
        patch refactors some of the most common callers of classInfo(),
        jsDynamicCast and inherits to take a VM as well.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::elementForNodeHandle):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::reportException):
        (WebKit::InjectedBundle::webNotificationID):
        (WebKit::InjectedBundle::createWebDataFromUint8Array):
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::JSNPMethod::finishCreation):
        (WebKit::callMethod):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::finishCreation):
        (WebKit::callNPJSObject):
        (WebKit::constructWithConstructor):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::create):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateNPObject):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::frameForContext):
        (WebKit::WebFrame::counterValue):

2017-01-26  Chris Dumez  <cdumez@apple.com>

        Fix CPU usage diagnostic logging in PerActivityStateCPUUsageSampler
        https://bugs.webkit.org/show_bug.cgi?id=167471
        <rdar://problem/30221723>

        Reviewed by Alex Christensen.

        Fix CPU usage diagnostic logging in PerActivityStateCPUUsageSampler
        to use numeric values for logDiagnosticMessageWithValue().

        * UIProcess/PerActivityStateCPUUsageSampler.cpp:
        (WebKit::PerActivityStateCPUUsageSampler::loggingTimerFired):
        (WebKit::loggingKeyForCPUUsage): Deleted.

2017-01-26  Jeremy Jones  <jeremyj@apple.com>

        Request pointer unlock on navigation and re-enable pointer-lock tests for WK2.
        https://bugs.webkit.org/show_bug.cgi?id=166765

        Reviewed by Tim Horton.

        When the main frame is load is committed, pointer lock should end.
        This resets pointer lock state between tests and allows tests to succeed.

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

2017-01-26  Chris Dumez  <cdumez@apple.com>

        Fix WebGL diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=167463
        <rdar://problem/30216981>

        Reviewed by Alex Christensen.

        Fix WebGL diagnostic logging so that it no longer uses logDiagnosticMessageWithValue().
        This is because the value apparently needs to be numeric on Mac.

        * UIProcess/HighPerformanceGraphicsUsageSampler.cpp:
        (WebKit::HighPerformanceGraphicsUsageSampler::timerFired):

2017-01-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for recognizing data interaction gestures in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=167444

        Reviewed by Beth Dakin.

        Adds a new data interaction gesture recognizer, responsible for determining when to begin data interaction. This
        is a new long press gesture recognizer that fires simultaneously with the existing long press gesture
        recognizers (for performing long-press actions, and for showing the tap highlight).

        Also tweaks logic for determining whether selection gesture recognizers should fire to account for data
        interaction -- in particular, we don't want selection gesture recognizers to cause the current selection to
        change while data interaction is possible. See -hasSelectablePositionAtPoint and -pointIsInAssistedNode for
        more details.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didPerformDataInteractionControllerOperation):
        (WebKit::PageClientImpl::startDataInteractionWithImage):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createAndConfigureLongPressGestureRecognizer]):
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView resignFirstResponder]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsInDataInteractionContent:]):
        (-[WKContentView pointIsInAssistedNode:]):

2017-01-26  Matt Rajca  <mrajca@apple.com>

        Notify clients when the user plays media otherwise prevented from autoplaying
        https://bugs.webkit.org/show_bug.cgi?id=167390

        Reviewed by Alex Christensen.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didPlayMediaPreventedFromPlayingWithoutUserGesture):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPlayMediaPreventedFromPlayingWithoutUserGesture):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didPlayMediaPreventedFromPlayingWithoutUserGesture):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2017-01-26  Anders Carlsson  <andersca@apple.com>

        Don't use _CFBundleCreateUnique on Yosemite, it's not available there
        https://bugs.webkit.org/show_bug.cgi?id=167459
        rdar://problem/30181179

        Reviewed by Beth Dakin.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):

2017-01-26  Alex Christensen  <achristensen@webkit.org>

        Add SPI for updating WebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=167040

        Reviewed by Brady Eidson.
        
        In r209558 we added a way to send a WebsitePolicies structure to the WebProcess during navigation.
        If the UIProcess wants to update these policies on a WKWebView while a page is open, we will
        need to have SPI for doing so. This adds such SPI, but it's not hooked up to change functionality yet.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageUpdateWebsitePolicies):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateWebsitePolicies:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateWebsitePolicies):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateWebsitePolicies):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2017-01-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Update also the contents size when creating the threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=167452

        Reviewed by Žan Doberšek.

        In r210954 we ensured that the threaded compositor and the viewport controller were created with the initial web
        page size. If we don't update the contents size, the visible rectangle will be empty and tiles won't be created
        until contentsSizeDidChange is called. It's even possible, when entering AC mode on demand, that we create the
        layer tree host after the contents size changed, in which case nothing is rendered unless we resize the window.

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

2017-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Fix the build after r211160
        https://bugs.webkit.org/show_bug.cgi?id=167451

        Unreviewed buildfix.

        * UIProcess/API/Cocoa/WKWebView.mm:

2017-01-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r211193.

        This change broke internal builds.

        Reverted changeset:

        "Notify clients when the user plays media otherwise prevented
        from autoplaying"
        https://bugs.webkit.org/show_bug.cgi?id=167390
        http://trac.webkit.org/changeset/211193

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add infrastructure to support data interaction in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=167443

        Reviewed by Simon Fraser.

        Adds plumbing for two new XPC messages: WebPageProxy::DidPerformDataInteractionControllerOperation and
        WebPage::RequestStartDataInteraction. Additionally, adds a new field to InteractionInformationAtPosition that
        indicates whether or not there is data to interact with at a given location.

        This patch only adds infrastructure, and does not change any behavior.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didPerformDataInteractionControllerOperation):
        (WebKit::PageClientImpl::startDataInteractionWithImage):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didPerformDataInteractionControllerOperation):
        (WebKit::requestStartDataInteraction):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDataInteractionControllerOperation):
        (WebKit::PageClientImpl::startDataInteractionWithImage):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestStartDataInteraction):
        (WebKit::WebPage::getPositionInformation):

2017-01-25  Tim Horton  <timothy_horton@apple.com>

        Stop inheriting from UIWebScrollView, just use UIScrollView
        https://bugs.webkit.org/show_bug.cgi?id=167440
        <rdar://problem/7729691>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillBeginDragging:]):
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView initWithFrame:]): Deleted.
        (-[WKScrollView setDecelerationRate:]): Deleted.
        Inherit directly from UIScrollView, no need for UIWebScrollView.
        Set the few settings we care about directly.
        This has the side effect of reducing the default rate of scroll deceleration.

2017-01-25  Matt Rajca  <mrajca@apple.com>

        Notify clients when the user plays media otherwise prevented from autoplaying
        https://bugs.webkit.org/show_bug.cgi?id=167390

        Reviewed by Alex Christensen.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didPlayMediaPreventedFromPlayingWithoutUserGesture):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPlayMediaPreventedFromPlayingWithoutUserGesture):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didPlayMediaPreventedFromPlayingWithoutUserGesture):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor drag and drop implementation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=167427

        Reviewed by Enrica Casucci.

        See WebCore ChangeLog for more details.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:

2017-01-25  Andy Estes  <aestes@apple.com>

        Use #pragma once in a few places
        https://bugs.webkit.org/show_bug.cgi?id=167435

        Reviewed by Alex Christensen.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.h:

2017-01-25  Andy Estes  <aestes@apple.com>

        [QuickLook] Display a WKPasswordView when a document is password-protected
        https://bugs.webkit.org/show_bug.cgi?id=167407
        <rdar://problem/28544527>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _hidePasswordView]): Added an early return if there is no _passwordView.
        * UIProcess/PageClient.h: Declared requestPasswordForQuickLookDocument().
        (WebKit::PageClient::didStartProvisionalLoadForMainFrame): Added an no-op base class
        implementation.
        (WebKit::PageClient::didFailProvisionalLoadForMainFrame): Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Called
        PageClient::didStartProvisionalLoadForMainFrame() if frame is the main frame.
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): Ditto for
        PageClient::didFailProvisionalLoadForMainFrame().
        * UIProcess/WebPageProxy.h: Declared didRequestPasswordForQuickLookDocumentInMainFrame().
        * UIProcess/WebPageProxy.messages.in: Added message
        DidRequestPasswordForQuickLookDocumentInMainFrame.
        * UIProcess/ios/PageClientImplIOS.h: Overrode requestPasswordForQuickLookDocument(),
        didStartProvisionalLoadForMainFrame(), and didFailProvisionalLoadForMainFrame().
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame): Called
        -[WKWebView _hidePasswordView].
        (WebKit::PageClientImpl::didFailProvisionalLoadForMainFrame): Ditto.
        (WebKit::PageClientImpl::didCommitLoadForMainFrame): Ditto.
        (WebKit::PageClientImpl::requestPasswordForQuickLookDocument): If there is already a
        password view, assert that it is for the same fileName. Call
        -[WKPasswordView showPasswordFailureAlert] and update the userDidEnterPassword block.
        Otherwise, call -[WKWebView _showPasswordViewWithDocumentName:passwordHandler:].
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame): Called
        PageClient::requestPasswordForQuickLookDocument() with a completion handler that send
        message WebPage::DidReceivePasswordForQuickLookDocument.
        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.cpp:
        (WebKit::passwordCallbacks): Stores a map of page IDs to completion handler functions.
        (WebKit::WebQuickLookHandleClient::~WebQuickLookHandleClient): Removes the current page ID
        from passwordCallbacks().
        (WebKit::WebQuickLookHandleClient::didRequestPassword): Asserts there is no current function
        for this page ID in passwordCallbacks(), adds completionHandler to passwordCallbacks(), and
        sends message WebPageProxy::DidRequestPasswordForQuickLookDocumentInMainFrame.
        (WebKit::WebQuickLookHandleClient::didReceivePassword): Asserts there is a function for this
        page ID in passwordCallbacks(), takes the completionHandler from passwordCallbacks(), and
        calls it with the received password.
        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.h: Declared didReceivePassword()
        and overrode supportsPasswordEntry() and didRequestPassword().
        * WebProcess/WebPage/WebPage.h: Declared didReceivePasswordForQuickLookDocument().
        * WebProcess/WebPage/WebPage.messages.in: Added message
        DidReceivePasswordForQuickLookDocument.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didReceivePasswordForQuickLookDocument): Called
        WebQuickLookHandleClient::didReceivePassword() with the received password and current page ID.

2017-01-25  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Introduce libwebrtc abstraction for WK1/WK2 implementations
        https://bugs.webkit.org/show_bug.cgi?id=167294

        Reviewed by Alex Christensen.

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

2017-01-25  Andy Estes  <aestes@apple.com>

        [iOS] Move WKPDFView's password view to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=167401

        Reviewed by Tim Horton.

        r210943 moved the PDF password view into the new class WKPasswordView but left it as a
        subview of the WKPDFView. To show the password view for Web content, my original plan was to
        teach WKContentView to host its own password view, but this turned out not to work. Since
        QuickLook needs to unlock a document before determining its preview's MIME type, we have to
        ask for a password during provisional navigation, but if the still-committed document is a
        PDF then the WKContentView will not be in the view hierarchy.

        To ensure password view visibility, this patch moves the ownership of WKPasswordView to
        WKWebView and creates an internal API for showing and hiding it. When
        -_showPasswordViewWithDocumentName:passwordHandler: is called, WKWebView inserts a new
        WKPasswordView as a subview of the scroll view and hides the current content view. The
        password view is removed and the current content view is unhidden by -_hidePasswordView.

        This also fixes a bug in WKPDFView where a PDF document is laid out incorrectly if the view
        size changes while the password view is displayed.

        * UIProcess/API/Cocoa/WKWebView.mm: Declared _passwordView.
        (-[WKWebView _processDidExit]): Hid the password view.
        (-[WKWebView _didCommitLayerTree:]): Ignored if not showing the standard content view.
        (-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]): Ditto.
        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]): Ditto.
        (-[WKWebView usesStandardContentView]): Changed to return false if _passwordView is non-nil.
        (-[WKWebView _updateContentRectsWithState:]): Updated _passwordView's frame with the current
        bounds size.
        (-[WKWebView _showPasswordViewWithDocumentName:passwordHandler:]): Created a WKPasswordView,
        called -showInScrollView:, and hid _currentContentView.
        (-[WKWebView _hidePasswordView]): Removed _passwordView from its superview, set
        _passwordView to nil, and unhid _currentContentView.
        (-[WKWebView _passwordView]): Returned _passwordView.
        (-[WKWebView _beginAnimatedResizeWithUpdates:]): Called -usesStandardContentView instead of
        checking for a non-nil _customContentView when deciding whether to do a non-animated resize.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKPDFView.mm: Removed _passwordView.
        (-[WKPDFView web_setMinimumSize:]): Set m_minimumSize and updated the frame size even when a
        password view is displayed.
        (-[WKPDFView _computePageAndDocumentFrames]): Removed password view code.
        (-[WKPDFView _showPasswordEntryField]): Ditto.
        (-[WKPDFView _passwordViewFrame]): Deleted.
        * UIProcess/ios/WKPasswordView.h:
        * UIProcess/ios/WKPasswordView.mm:
        (-[WKPasswordView initWithFrame:documentName:]): Stored a copy of documentName in
        _documentName.
        (-[WKPasswordView documentName]): Added. Returns _documentName.
        (-[WKPasswordView showInScrollView:]): Renamed from displayInContentView:. Started saving
        zoomScale and contentSize.
        (-[WKPasswordView hide]): Started restoring zoomeScale and contentSize.
        (-[WKPasswordView showPasswordFailureAlert]): Renamed from -displayPasswordFailureAlert.
        (-[WKPasswordView displayInContentView:]): Renamed to -showInScrollView:
        (-[WKPasswordView displayPasswordFailureAlert]): Renamed to -showPasswordFailureAlert.

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for named pasteboards, pasteboard strategies and platform pasteboards
        https://bugs.webkit.org/show_bug.cgi?id=167404

        Reviewed by Enrica Casucci.

        Adds support for delivering the pasteboard name to the UI process when writing to or reading from the pasteboard.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::writeWebContentToPasteboard):
        (WebKit::WebPasteboardProxy::writeImageToPasteboard):
        (WebKit::WebPasteboardProxy::writeStringToPasteboard):
        (WebKit::WebPasteboardProxy::readStringFromPasteboard):
        (WebKit::WebPasteboardProxy::readURLFromPasteboard):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        (WebKit::WebPasteboardProxy::getPasteboardItemsCount):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::writeToPasteboard):
        (WebKit::WebPlatformStrategies::getPasteboardItemsCount):
        (WebKit::WebPlatformStrategies::readBufferFromPasteboard):
        (WebKit::WebPlatformStrategies::readURLFromPasteboard):
        (WebKit::WebPlatformStrategies::readStringFromPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2017-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Icon Database should be in private browsing mode for ephemeral web views
        https://bugs.webkit.org/show_bug.cgi?id=167414

        Reviewed by Michael Catanzaro.

        This is already done by WebProcessPool for the legacy private session setting, but only checking the setting and not
        whether there are ephemeral web pages or not.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextEnableIconDatabasePrivateBrowsingIfNeeded): Enable icon database private browsing if there's
        any ephemeral web view.
        (webkitWebContextDisableIconDatabasePrivateBrowsingIfNeeded): Disable icon database private browsing if there
        aren't ephemeral web views anymore.
        (webkit_web_context_set_favicon_database_directory): Enable icon database private browsing if the web context is ephemeral.
        (webkitWebContextCreatePageForWebView): Call webkitWebContextEnableIconDatabasePrivateBrowsingIfNeeded().
        (webkitWebContextWebViewDestroyed): Call webkitWebContextDisableIconDatabasePrivateBrowsingIfNeeded().
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewDispose): Ensure webkitWebContextWebViewDestroyed is called only once.

2017-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] UIProcess from WebKitGtk+ 2.15.x SIGSEGVs because of X Error BadDamage in WebKit::AcceleratedBackingStoreX11::update(WebKit::LayerTreeContext const&) () at Source/WebKit2/UIProcess/gtk/AcceleratedBackingStoreX11.cpp:145
        https://bugs.webkit.org/show_bug.cgi?id=165656

        Reviewed by Michael Catanzaro.

        We are incorrectly handling BadDamage errors because the BadDamage value we pass to the XErrorTrapper is not
        the actual error code used by X11. Since XDamage is an extension, it has its own errors and a base error
        code. We need to use the base error code we get when calling XDamageQueryExtension to pass the right error code
        to the XErrorTrapper.

        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::create): Get also the damage base error.
        (WebKit::xDamageErrorCode): Helper to get the actual error code.
        (WebKit::AcceleratedBackingStoreX11::~AcceleratedBackingStoreX11): Use xDamageErrorCode().
        (WebKit::AcceleratedBackingStoreX11::update): Ditto.

2017-01-25  Miguel Gomez  <magomez@igalia.com>

        [GTK] The inspector is broken when AC support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=165237

        Reviewed by Carlos Garcia Campos.

        WebInspector must not use PageOverlays or GraphicsLayers when AC is not avaialable.

        No new tests added.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        (WebKit::WebInspectorClient::showPaintRect):

2017-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Custom protocols don't work in private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=167236

        Reviewed by Sergio Villar Senin.

        We only register them in the default session, they should be registered in all existing sessions, and also on
        newly created ones.

        * NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        (WebKit::CustomProtocolManager::registerProtocolClass): Set the WEBKIT_TYPE_SOUP_REQUEST_GENERIC as type for
        custom protocols.
        (WebKit::CustomProtocolManager::registerScheme): Use g_type_class_peek instead of g_type_class_ref since we know
        the class was already created in registerProtocolClass(). Setup custom protocols in all existing sessions.

2017-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to create ephemeral web views and deprecate the private browsing setting
        https://bugs.webkit.org/show_bug.cgi?id=167370

        Reviewed by Michael Catanzaro.

        Add API to create ephemeral WebKitWebView, WebKitWebsiteDataManager and WebKitWebContext.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Ignore deprecation warnings.
        (webKitSettingsGetProperty): Ditto.
        (webkit_settings_class_init): Mark WebKitSettings:enable-private-browsing as deprecated.
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_new_ephemeral): Create an ephemeral WebKitWebContext. This is just a convenient method to
        create a WebKitWebContext with an ephemeral WebKitWebsiteDataManager without having to deal with the manager.
        (webkit_web_context_is_ephemeral): Return whether the context is ephemeral.
        (webkitWebContextCreatePageForWebView): Configure page with the web view WebKitWebsiteDataManager if it has one.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Check if the WebView is or should be ephemeral and create a non persistent website
        data manager if it's an ephemeral web view in a non ephemeral web context.
        (webkitWebViewSetProperty): Add setter for is-ephemeral property.
        (webkitWebViewGetProperty): Add getter for is-ephemeral property.
        (webkit_web_view_class_init): Add is-ephemeral property.
        (webkitWebViewHandleAuthenticationChallenge): Check also whether web view is ephemeral.
        (webkitWebViewGetWebsiteDataManager): Helper private to return the web view data manager.
        (webkit_web_view_new_with_context): Also set is-ephemeral property depending on the context.
        (webkit_web_view_is_ephemeral): Return whether the view is ephemeral.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetProperty): Add setter for is-ephemeral property.
        (webkitWebsiteDataManagerSetProperty): Add getter for is-ephemeral property.
        (webkit_website_data_manager_class_init): Add is-ephemeral property.
        (webkit_website_data_manager_new_ephemeral): Create a new ephemeral WebKitWebsiteDataManager.
        (webkit_website_data_manager_is_ephemeral): Return whether the website data manager is ephemeral.
        (webkit_website_data_manager_get_base_data_directory): Return nullptr if manager is ephemeral.
        (webkit_website_data_manager_get_base_cache_directory): Ditto.
        (webkit_website_data_manager_get_local_storage_directory): Ditto.
        (webkit_website_data_manager_get_disk_cache_directory): Ditto.
        (webkit_website_data_manager_get_offline_application_cache_directory): Ditto.
        (webkit_website_data_manager_get_indexeddb_directory): Ditto.
        (webkit_website_data_manager_get_websql_directory): Ditto.
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.

2017-01-24  Zalan Bujtas  <zalan@apple.com>

        Add simple line layout toggle to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=167405

        Reviewed by Andreas Kling.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _simpleLineLayoutEnabled]):
        (-[WKPreferences _setSimpleLineLayoutEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Fold USER_TIMING into WEB_TIMING and make it a RuntimeEnabledFeature
        https://bugs.webkit.org/show_bug.cgi?id=167394

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2017-01-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Avoid IOSurface readback for snapshot creation
        https://bugs.webkit.org/show_bug.cgi?id=167397
        rdar://problem/30174873

        Reviewed by Tim Horton.

        Use IOSurface::sinkIntoImage() for snapshots, to avoid GPU readback.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2017-01-24  Tim Horton  <timothy_horton@apple.com>

        Script gets touch events even after navigation swipe begins
        https://bugs.webkit.org/show_bug.cgi?id=167383
        <rdar://problem/22938927>

        Reviewed by Simon Fraser.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isNavigationSwipeGestureRecognizer:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (-[WKSwipeTransitionController isNavigationSwipeGestureRecognizer:]):
        (WebKit::ViewGestureController::isNavigationSwipeGestureRecognizer):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
        Require the navigation swipe gesture recognizer to fail before the
        UIWebTouchEventsGestureRecognizer can recognize. This way, the page
        doesn't get touch events during the swipe, which previously led to
        e.g. carousels scrolling while swiping.

2017-01-24  Matt Rajca  <mrajca@apple.com>

        Pass down website autoplay policies to media elements
        https://bugs.webkit.org/show_bug.cgi?id=167355

        Reviewed by Alex Christensen.

        Autoplay policies can be specified at the global web view preferences level or on a per-page
        basis during navigation. This patch ensures that policies specified on a per-page basis hold
        precedence over global policies. If no policies are specified during navigation, global
        policies are used. A WebsiteAutoplayPolicy::Default option has been added to let clients
        explicitly specify web view defaults should be used.

        * Shared/WebsitePolicies.h:
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesGetAutoplayPolicy):
        (WKWebsitePoliciesSetAutoplayPolicy):
        * UIProcess/API/C/WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setAutoplayPolicy:]):
        (-[_WKWebsitePolicies autoplayPolicy]):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2017-01-24  Nan Wang  <n_wang@apple.com>

        AX: Speak Selection does not work in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=166794
        <rdar://problem/29913013>

        Reviewed by Chris Fleizach.

        Making sure WebPage::getSelectionOrContentsAsString() is getting the
        selection content in the right frame. 

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _accessibilityRetrieveSpeakSelectionContent]):
        (-[WKWebView _accessibilityDidGetSpeakSelectionContent:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessibilityRetrieveSpeakSelectionContent]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getSelectionOrContentsAsString):

2017-01-24  Jer Noble  <jer.noble@apple.com>

        Make _WKFullscreenDelegate available to users of the WebKit2 C-API.
        https://bugs.webkit.org/show_bug.cgi?id=165255

        Reviewed by Anders Carlsson.

        Add a getter and setter to WKPagePrivate allowing clients to set/get the
        _WKFullscreenDelegate associated with the page.

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageSetFullscreenDelegate):
        (WKPageGetFullscreenDelegate):

2017-01-23  Anders Carlsson  <andersca@apple.com>

        The Score Esports crashes on launch
        https://bugs.webkit.org/show_bug.cgi?id=167338
        rdar://problem/29948645

        Reviewed by Dan Bernstein.

        * Shared/Cocoa/WKObject.mm:
        (+[WKObject conformsToProtocol:]):
        Add a class method implementation in case an app ends up calling +[WKObject conformsToProtocol:] for some reason.

2017-01-24  Miguel Gomez  <magomez@igalia.com>

        [Coordinated Graphics] Ensure that we're in AC mode before trying to create GraphicsLayers
        https://bugs.webkit.org/show_bug.cgi?id=167365

        Reviewed by Carlos Garcia Campos.

        When entering AC on demand, the RenderLayerCompositor wants to create the root GraphicsLayer before the
        AcceleratedDrawingArea is in AC mode. This means there's no LayerTreeHost to request the GraphicsLayerFactory,
        so no layers are created. Ensure that we are in AC mode before requesting the GraphicsLayerFactory.

        No behaviour change, no new tests.

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

2017-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to WebKitWebsiteDataManager to handle website data
        https://bugs.webkit.org/show_bug.cgi?id=146589

        Reviewed by Michael Catanzaro.

        Add WebKitWebsiteData boxed type to wrap a WebsiteDataRecord and new methods to WebKitWebsiteDataManager to
        fetch, remove and clear website data.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/WebKitWebsiteData.cpp: Added.
        (_WebKitWebsiteData::_WebKitWebsiteData):
        (recordContainsSupportedDataTypes): Helper function to check if the WebsiteDataRecord contains any type exposed
        by our API.
        (toWebKitWebsiteDataTypes): Convert from WebKit::WebsiteDataType to the GTK+ public API types.
        (webkitWebsiteDataCreate): Create a new WebKitWebsiteData for the given WebsiteDataRecord if it contains any
        supported type.
        (webkitWebsiteDataGetRecord): Returns the wrapped WebsiteDataRecord.
        (webkit_website_data_ref):
        (webkit_website_data_unref):
        (webkit_website_data_get_name): Return the display name.
        (webkit_website_data_get_types): Returns the mask of types.
        (webkit_website_data_get_size): Returns the size for the given types.
        * UIProcess/API/gtk/WebKitWebsiteData.h: Added.
        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
        (toWebsiteDataTypes): Convert from GTK+ public API types to WebKit::WebsiteDataType.
        (webkit_website_data_manager_fetch): Fetch website data of the given types.
        (webkit_website_data_manager_fetch_finish):
        (webkit_website_data_manager_remove): Remove the website data of the given types for the given WebKitWebsiteData list.
        (webkit_website_data_manager_remove_finish):
        (webkit_website_data_manager_clear): Clear all website data of the given types modified since the given time span.
        (webkit_website_data_manager_clear_finish):
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/WebKitWebsiteDataPrivate.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section.
        * UIProcess/API/gtk/webkit2.h: Inlcude WebKitWebsiteData.h

2017-01-23  Antti Koivisto  <antti@apple.com>

        Maintain ordering when doing speculative loads
        https://bugs.webkit.org/show_bug.cgi?id=167324

        Forgot to implement a review comment.

        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::makeSubresourceInfoVector):

        Allocated initial capacity and use uncheckedAppend.

2017-01-23  Commit Queue  <commit-queue@webkit.org>

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

        broke API tests (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Pass down website autoplay policies to media elements"
        https://bugs.webkit.org/show_bug.cgi?id=167132
        http://trac.webkit.org/changeset/211062

2017-01-23  Antti Koivisto  <antti@apple.com>

        Maintain ordering when doing speculative loads
        https://bugs.webkit.org/show_bug.cgi?id=167324

        Reviewed by Chris Dumez.

        We currently randomize the ordering of speculative loads because they are serialized as a hash map.
        It would be better to load in the same order as the requests were originally issued as that is
        likely to match the order the document needs them.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourceInfo::decode):

            Include key into SubresourceInfo.

        (WebKit::NetworkCache::makeSubresourcesVector):

            Deduplicate the entries.

        (WebKit::NetworkCache::SubresourcesEntry::SubresourcesEntry):
        (WebKit::NetworkCache::SubresourcesEntry::updateSubresourceLoads):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        (WebKit::NetworkCache::SubresourceInfo::key):
        (WebKit::NetworkCache::SubresourceInfo::setTransient):
        (WebKit::NetworkCache::SubresourcesEntry::subresources):

            Keep the resources in a Vector instead of a HashMap to maintain order.

2017-01-23  Matt Rajca  <mrajca@apple.com>

        Pass down website autoplay policies to media elements
        https://bugs.webkit.org/show_bug.cgi?id=167132

        Reviewed by Alex Christensen.

        The playbackRequiresUserGesture APIs are already covered by tests. This patch adds API tests
        for autoplay website policies.

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

2017-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Asserts seen opening and closing Remote Web Inspector windows
        https://bugs.webkit.org/show_bug.cgi?id=167316
        <rdar://problem/28891161>

        Reviewed by Alexey Proskuryakov.

        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::createFrontendPageAndWindow):
        Assume read access, like the local web inspector, to Web Inspector resources.

        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::closeWindow):
        Clear ourselves as the inspector frontend client when closing.

2017-01-20  Anders Carlsson  <andersca@apple.com>

        When Safari reloads pages with Flash objects after Flash is installed, placeholders don't paint (but do work!)
        https://bugs.webkit.org/show_bug.cgi?id=167268
        rdar://problem/29857388

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/WebPluginInfoProvider.h:
        Make refreshPlugins() private.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::refreshPlugins):
        Call the newly added PluginInfoProvider::refresh().

2017-01-23  Antti Koivisto  <antti@apple.com>

        Use priorities in speculative revalidation
        https://bugs.webkit.org/show_bug.cgi?id=167314

        Reviewed by Chris Dumez.

        We currently do all speculative cache operations with 'Medium' priority
        and network operations with 'Low'. We should use the actual request priorities instead.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):

            Use priority when constructing validation request.

        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):

            Use priority when retrieving from cache.

        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourceInfo::decode):

            Save and restore the priority.

        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        (WebKit::NetworkCache::SubresourceInfo::priority):

2017-01-23  Jer Noble  <jer.noble@apple.com>

        Video details does not apear and missing scrubber in Control Center
        https://bugs.webkit.org/show_bug.cgi?id=167233

        Reviewed by Alex Christensen.

        Make requestActiveNowPlayingSessionInfo() and handleActiveNowPlayingSessionInfoResponse()
        work in PLATFORM(IOS).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestActiveNowPlayingSessionInfo]):
        (-[WKWebView _handleActiveNowPlayingSessionInfoResponse:title:duration:elapsedTime:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestActiveNowPlayingSessionInfo):
        (WebKit::WebPageProxy::handleActiveNowPlayingSessionInfoResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleActiveNowPlayingSessionInfoResponse):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::requestActiveNowPlayingSessionInfo):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::requestActiveNowPlayingSessionInfo): Deleted.

2017-01-23  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r211033): ASSERTION FAILED: m_ptr in com.apple.WebCore: WTF::RefPtr<WebCore::Element>::operator* const + 70
        https://bugs.webkit.org/show_bug.cgi?id=167308
        <rdar://problem/30144964>

        Unreviewed, do a partial revert of r211033 to fix assertion.

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

2017-01-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        urlParserEnabled parameter is only encoded for COCOA ports
        https://bugs.webkit.org/show_bug.cgi?id=167238

        Reviewed by Alex Christensen.

        This leads to URLParser being enabled on the UI process, since it is
        the default, but disabled on the WebProcess, which is the default for
        WebProcessCreationParameters, casuing asserts like on tests such as these
        due to differences in parsing:

        - fast/loader/redirect-to-invalid-url-using-javascript-calls-policy-delegate.html
        - fast/loader/window-open-to-invalid-url-calls-policy-delegate.html
        - http/tests/inspector/network/copy-as-curl.html

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): encode urlParserEnabled
        (WebKit::WebProcessCreationParameters::decode): decode urlParserEnabled

2017-01-20  Darin Adler  <darin@apple.com>

        Remove PassRefPtr from "page" directory of WebCore, also deploy references
        https://bugs.webkit.org/show_bug.cgi?id=167224

        Reviewed by Chris Dumez.

        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref
        instead of PassRefPtr.
        * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageInstallPageOverlay): Pass a reference.
        (WKBundlePageUninstallPageOverlay): Ditto.
        (WKBundlePageInstallPageOverlayWithAnimation): Ditto.
        (WKBundlePageUninstallPageOverlayWithAnimation): Ditto.
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::jsPDFDocPrint): Ditto.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::focusPluginElement): Ditto.
        (WebKit::PluginView::setStatusbarText): Ditto.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient.
        (WebKit::WebChromeClient::elementDidBlur): Ditto.
        (WebKit::WebChromeClient::makeFirstResponder): Ditto.
        (WebKit::WebChromeClient::createWindow): Ditto.
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto.
        (WebKit::WebChromeClient::runJavaScriptAlert): Ditto.
        (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto.
        (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto.
        (WebKit::WebChromeClient::contentsSizeChanged): Ditto.
        (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto.
        (WebKit::WebChromeClient::print): Ditto.
        (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto.
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto.
        (WebKit::WebChromeClient::createColorChooser): Ditto.
        (WebKit::WebChromeClient::createPopupMenu): Ditto.
        (WebKit::WebChromeClient::createSearchPopupMenu): Ditto.
        (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto.
        (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto.
        (WebKit::WebChromeClient::createScrollingCoordinator): Ditto.
        (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto.
        (WebKit::WebChromeClient::enterFullScreenForElement): Ditto.
        (WebKit::WebChromeClient::exitFullScreenForElement): Ditto.
        (WebKit::WebChromeClient::didAddHeaderLayer): Ditto.
        (WebKit::WebChromeClient::didAddFooterLayer): Ditto.
        (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto.
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::elementDidRefocus): Ditto.
        (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto.
        (WebKit::WebChromeClient::observedContentChange): Ditto.
        (WebKit::WebChromeClient::clearContentChangeObservers): Ditto.
        (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference.
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::~WebInspectorClient): Ditto.
        (WebKit::WebInspectorClient::hideHighlight): Ditto.
        (WebKit::WebInspectorClient::showPaintRect): Ditto.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll): Ditto.
        (WebKit::FindController::hideFindUI): Ditto.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of
        PassRefPtr.
        (WebKit::WebFrame::createSubframe): Ditto.
        (WebKit::WebFrame::create): Ditto.
        * WebProcess/WebPage/WebFrame.h: Updated for the above.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openInNewTab): Pass reference.

        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::updateFindIndicator): Use reference.
        (WebKit::FindController::hideFindIndicator): Ditto.

2017-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r211012.

        It caused a lot of crashes in the network process

        Reverted changeset:

        "[SOUP] Custom protocols don't work in private browsing mode"
        https://bugs.webkit.org/show_bug.cgi?id=167236
        http://trac.webkit.org/changeset/211012

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Remove never changing IndexedDB RuntimeEnabledFeature
        https://bugs.webkit.org/show_bug.cgi?id=167278

        Reviewed by Darin Adler.

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

2017-01-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Custom protocols don't work in private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=167236

        Reviewed by Sergio Villar Senin.

        We only register them in the default session.

        * NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        (WebKit::CustomProtocolManager::registerProtocolClass): Set the WEBKIT_TYPE_SOUP_REQUEST_GENERIC as type for
        custom protocols, and setup custom protocols in all existing sessions.
        (WebKit::CustomProtocolManager::registerScheme): Use g_type_class_peek instead of g_type_class_ref since we know
        the class was already created in registerProtocolClass().

2017-01-20  Brady Eidson  <beidson@apple.com>

        Require a button press on a gamepad for them to be exposed to the DOM.
        <rdar://problem/28620919> and https://bugs.webkit.org/show_bug.cgi?id=167272

        Reviewed by Alex Christensen.

        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::gamepadSyncTimerFired):
        (WebKit::UIGamepadProvider::platformGamepadInputActivity):
        * UIProcess/Gamepad/UIGamepadProvider.h:

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

        * WebProcess/Gamepad/WebGamepadProvider.cpp:
        (WebKit::WebGamepadProvider::gamepadActivity):
        * WebProcess/Gamepad/WebGamepadProvider.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::gamepadActivity):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup RuntimeEnabledFeatures
        https://bugs.webkit.org/show_bug.cgi?id=167228

        Reviewed by Simon Fraser.

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

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Remove outdated ENABLE(CSP_NEXT) build flag
        https://bugs.webkit.org/show_bug.cgi?id=167252

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:

2017-01-20  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2017-01-20  Antoine Quint  <graouts@apple.com>

        Web Animations should be off by default and enabled as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=167115
        <rdar://problem/30048963>

        Reviewed by Joseph Pecoraro.

        Promote, or relegate depending on how you see things, the Web Animations preference
        to an experimental feature.

        * Shared/WebPreferencesDefinitions.h:

2017-01-20  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Use DEFAULT_EXPERIMENTAL_FEATURES_ENABLED as the default value for modern media controls, which is true.

        * Shared/WebPreferencesDefinitions.h:

2017-01-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.15.3 release.

        * gtk/NEWS: Add release notes for 2.15.3.

2017-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Initialize the threaded compositor with the current size
        https://bugs.webkit.org/show_bug.cgi?id=167196

        Reviewed by Žan Doberšek.

        We are always creating the threaded compositor with an empty size and then a sizeDidChange always happen when
        the backing store state changes. This is always happening because the threaded compositor is created before the
        first backing store state, but if we wanted to create it later, for example to enter/leave AC mode on demand,
        the threaded compositor will not have the viewport size unless the window is resized, or sizeDidChange is called
        manually when entering AC mode. Creating the threaded compositor is sync and changing the size too, so it's
        better to do both things at the same time using the same sync operation.

        * Shared/CoordinatedGraphics/SimpleViewportController.cpp:
        (WebKit::SimpleViewportController::SimpleViewportController): Pass an initial size to the constructor.
        * Shared/CoordinatedGraphics/SimpleViewportController.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::create): Add viewportSize and scaleFactor construction parameters,
        (WebKit::ThreadedCompositor::ThreadedCompositor): Ditto. Also mark as needs resize if the given size is not empty.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost): Initialize the threaded compositor
        with an initial viewport size and scale factor.

2017-01-19  Chris Dumez  <cdumez@apple.com>

        iterable<> should be enabled on WK1
        https://bugs.webkit.org/show_bug.cgi?id=167221
        <rdar://problem/30108531>

        Reviewed by Youenn Fablet.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-01-19  Alex Christensen  <achristensen@webkit.org>

        Construct URLSearchParams from array or object
        https://bugs.webkit.org/show_bug.cgi?id=166973

        Reviewed by Sam Weinig.

        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        (WebKit::NetworkCapture::Manager::fuzzyMatchURLs):
        Change std::pair's first/second to WTF::KeyValuePair's key/value.

2017-01-19  Andy Estes  <aestes@apple.com>

        [iOS] Move the PDF password view into its own class for possible reuse
        https://bugs.webkit.org/show_bug.cgi?id=167192

        Reviewed by Tim Horton.

        * UIProcess/ios/WKPDFView.h: Stopped conforming to UIDocumentPasswordViewDelegate.
        * UIProcess/ios/WKPDFView.mm: Changed _passwordView to a WKPasswordView.
        (-[WKPDFView _passwordViewFrame]): Returns the frame to set on _passwordView.
        (-[WKPDFView _updatePasswordEntryField]): Removed.
        (-[WKPDFView _showPasswordEntryField]): Created a WKPasswordView, set a lambda on its
        userDidEnterPassword property to do the work previously done in -_tryToUnlockWithPassword:,
        and showed the password view.
        (-[WKPDFView _keyboardDidShow:]): Moved to WKPasswordView.
        (-[WKPDFView _hidePasswordEntryField]): Deleted. The userDidEnterPassword lambda now calls
        -[WKPasswordView hide] when the document is unlocked.
        (-[WKPDFView userDidEnterPassword:forPasswordView:]): Moved to WKPasswordView.
        (-[WKPDFView didBeginEditingPassword:inView:]): Ditto.
        (-[WKPDFView didEndEditingPassword:inView:]): Ditto.
        (-[WKPDFView _didFailToUnlock]): Ditto.
        (-[WKPDFView _tryToUnlockWithPassword:]): Moved into _passwordView's userDidEnterPassword lambda.
        * UIProcess/ios/WKPasswordView.h: Added.
        * UIProcess/ios/WKPasswordView.mm: Added.
        (-[WKPasswordView initWithFrame:documentName:]): Created a UIDocumentPasswordView with
        documentName, set self as its passwordDelegate, and added it as a subview.
        (-[WKPasswordView layoutSubviews]): Updated _scrollView's contentSize if we are displaying
        the view.
        (-[WKPasswordView displayInContentView:]): Saved the scroll view's previous minimum/maximum
        zoom scale and color, set new values for minimum/maximum zoom scale and color, and added
        self as a subview of contentView.
        (-[WKPasswordView hide]): Restored the saved minimum/maximum zoom scale and color on the
        scroll view and removed self from its superview.
        (-[WKPasswordView displayPasswordFailureAlert]): Displayed the alert previously shown by
        -[WKPDFView _didFailToUnlock].
        (-[WKPasswordView _keyboardDidShow:]): Moved from WKPDFView.
        (-[WKPasswordView userDidEnterPassword:forPasswordView:]): Retained self and called the
        _userDidEnterPassword block with the password.
        (-[WKPasswordView didBeginEditingPassword:inView:]): Moved from WKPDFView.
        (-[WKPasswordView didEndEditingPassword:inView:]): Ditto.
        * WebKit2.xcodeproj/project.pbxproj:

2017-01-19  Chris Dumez  <cdumez@apple.com>

        Make sure HTML validation bubble gets dismissed when its associated element's frame gets detached
        https://bugs.webkit.org/show_bug.cgi?id=167215
        <rdar://problem/29885052>

        Reviewed by Andreas Kling.

        Make sure HTML validation bubble gets dismissed when its associated
        element's frame gets detached and that we do not crash.

        * WebProcess/WebCoreSupport/WebValidationMessageClient.cpp:
        (WebKit::WebValidationMessageClient::documentDetached):
        * WebProcess/WebCoreSupport/WebValidationMessageClient.h:

2017-01-19  Chris Dumez  <cdumez@apple.com>

        Implement per activity state CPU usage reporting using diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=167163
        <rdar://problem/30058349>

        Reviewed by Andreas Kling.

        Implement per activity state CPU usage reporting using diagnostic logging.

        * Platform/Logging.h:
        * UIProcess/PerActivityStateCPUUsageSampler.cpp: Added.
        (WebKit::PerActivityStateCPUUsageSampler::PerActivityStateCPUUsageSampler):
        (WebKit::PerActivityStateCPUUsageSampler::~PerActivityStateCPUUsageSampler):
        (WebKit::PerActivityStateCPUUsageSampler::reportWebContentCPUTime):
        (WebKit::loggingKeyForActivityState):
        (WebKit::loggingKeyForCPUUsage):
        (WebKit::PerActivityStateCPUUsageSampler::loggingTimerFired):
        (WebKit::PerActivityStateCPUUsageSampler::pageForLogging):
        * UIProcess/PerActivityStateCPUUsageSampler.h: Copied from Source/WebCore/page/ActivityState.h.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::reportWebContentCPUTime):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::reportProcessCPUTime):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2017-01-19  Dan Bernstein  <mitz@apple.com>

        Build fix.

        Rubber-stamped by Anders Carlsson.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKPaymentAuthorizationStatus): Suppressed deprecation warnings.

2017-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Variation fonts are erroneously disabled on iOS
        https://bugs.webkit.org/show_bug.cgi?id=167172

        Reviewed by Simon Fraser.

        OpenSource builders don't seem to understand sdk=embedded*.

        * Configurations/FeatureDefines.xcconfig:

2017-01-18  Anders Carlsson  <andersca@apple.com>

        Install WebKit.apinotes with the public headers of WebKit framework
        https://bugs.webkit.org/show_bug.cgi?id=167182
        rdar://problem/29008989

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/WebKit.apinotes: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2017-01-19  Brian Burg  <bburg@apple.com>

        Web Inspector: move Mac-specific automation commands to a separate implementation file
        https://bugs.webkit.org/show_bug.cgi?id=163297
        <rdar://problem/28718990>

        Reviewed by Timothy Hatcher.

        Not all Automation commands are available on all platforms. Start splitting out
        command declarations and implementations based on the target platform.

        * DerivedSources.make:
        Set an appropriate --platform so the correct backend interface is generated.

        * UIProcess/Automation/Automation.json:
        Guard commands that should not be available on iOS:
            - resizeWindowOfBrowsingContext
            - moveWindowOfBrowsingContext
            - inspectBrowsingContext

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::platformSimulateKeySequence): Deleted.
        - Move shared convenience macros to header file.
        - Move out Cocoa-only or Mac-only command implementations.

        * UIProcess/Automation/WebAutomationSession.h:
        Rearrange some declarations and switch from USE(APPKIT) to PLATFORM(MAC).

        * UIProcess/Automation/WebAutomationSessionMacros.h: Added.

        * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm: Added.
        (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData):
        Moved from WebAutomationSessionCocoa.mm. Add iOS-specific header includes.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm: Renamed from Source/WebKit2/UIProcess/Cocoa/WebAutomationSessionCocoa.mm.
        (WebKit::WebAutomationSession::resizeWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::moveWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::inspectBrowsingContext):
        Move macOS platform command implementations to here. If other desktop ports want
        to use these commands, we can move them somewhere else later.

        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage):
        (WebKit::WebAutomationSession::markEventAsSynthesizedForAutomation):
        (WebKit::WebAutomationSession::wasEventSynthesizedForAutomation):
        Move out AppKit-specific event simulation code to here.

        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        (WebKit::WebAutomationSession::platformSimulateKeyStroke):
        (WebKit::WebAutomationSession::platformSimulateKeySequence):
        Move out Mac platformFoo implementations to here.

        * WebKit2.xcodeproj/project.pbxproj:
        - Added UIProcess/Automation/{mac,cocoa} groups.
        - Add new platform-specific implementation files.

2017-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Provide API to set proxy settings
        https://bugs.webkit.org/show_bug.cgi?id=128674

        Reviewed by Michael Catanzaro.

        Add new method webkit_web_context_set_network_proxy_settings() that allows to set proxy settings in a
        WebKitWebContext. It receives an enum WebKitNetworkProxyMode with modes Default, NoProxy and Custom, and an
        optional WebKitNetworkProxySettings that is used when mode is Custom. WebKitNetworkProxySettings is a simple
        boxed type that user can create to set proxy settins with a similar API to GSimpleProxyResolver.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in: Add SetNetworkProxySettings message.
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode): Encode proxy settings.
        (WebKit::NetworkProcessCreationParameters::decode): Decode proxy settings.
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/efl/NetworkProcessMainEfl.cpp: Use SoupNetworkSession::setProxySettingsFromEnvironment().
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Set proxy settings if provided by the user.
        (WebKit::NetworkProcess::setNetworkProxySettings): Set global proxy settings and setup the proxy for all
        existing contexts.
        * PlatformGTK.cmake: Add new files to compilation.
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode proxy settings.
        (WebKit::WebProcessCreationParameters::decode): Decode proxy settings.
        * Shared/WebProcessCreationParameters.h:
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<SoupNetworkProxySettings>::encode): Add encoder implementation for SoupNetworkProxySettings.
        (IPC::ArgumentCoder<SoupNetworkProxySettings>::decode): add decoder implementation for SoupNetworkProxySettings.
        * UIProcess/API/gtk/WebKitNetworkProxySettings.cpp: Added.
        (_WebKitNetworkProxySettings::_WebKitNetworkProxySettings):
        (webkitNetworkProxySettingsGetNetworkProxySettings):
        (webkit_network_proxy_settings_new): Create a new WebKitNetworkProxySettings with optional default proxy uri and
        ignore hosts list.
        (webkit_network_proxy_settings_copy):
        (webkit_network_proxy_settings_free):
        (webkit_network_proxy_settings_add_proxy): Add a proxy uri for a given uri scheme.
        * UIProcess/API/gtk/WebKitNetworkProxySettings.h: Added.
        * UIProcess/API/gtk/WebKitNetworkProxySettingsPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_network_proxy_settings): Set proxy settings.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols to the documentation.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for WebKitNetworkProxySettings.
        * UIProcess/API/gtk/webkit2.h: Include WebKitNetworkProxySettings.h.
        * UIProcess/WebProcessPool.h: Add m_networkProxySettings and a setter for soup.
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Set m_networkProxySettings to parameters.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Ditto.
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Ditto.
        (WebKit::WebProcessPool::setNetworkProxySettings): Update m_networkProxySettings and notify all processes.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Add SetNetworkProxySettings message.
        * WebProcess/efl/WebProcessMainEfl.cpp: Use SoupNetworkSession::setProxySettingsFromEnvironment().
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformSetCacheModel): Remove comment that is no longer true.
        (WebKit::WebProcess::platformInitializeWebProcess): Set proxy settings if provided by the user.
        (WebKit::WebProcess::setNetworkProxySettings): Set global proxy settings and setup the proxy for all
        existing contexts.

2017-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not update the backing store state unnecessarily when page visibility changes
        https://bugs.webkit.org/show_bug.cgi?id=167195

        Reviewed by Sergio Villar Senin.

        I've noticed that we are receiving UpdateBackingStoreState messages in the web process even when size and scale
        factor didn't change. That's quite unfortunate because we do a lot of work unnecessarily and we tell the
        threaded compositor that the size changed. This is not only a problem because it's not true, but also because
        changing the size is a sync operation in the threaded compositor, so we block the compositing thread for
        nothing. This is happening because the WebPageProxy notifies the drawing area that the backing store is
        discardable when the page is not visible, and that always produces a new backing store state. In accelerating
        compositing mode we don't even have a backing store to discard, so we should check we have something to discard
        and also make sure we only generate a new backing store state if we really discarded the backing store.

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

2017-01-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS][WK2] Remove the WebView private configuration contentUpdateFrequency
        https://bugs.webkit.org/show_bug.cgi?id=167188

        Reviewed by Simon Fraser.

        This patch reverts r209294. This configuration is not needed anymore.
        The CADisplayLink::preferredFramesPerSecond for WK2 will be set to the
        default value always.

        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::setAlwaysRunsAtForegroundPriority):
        (API::PageConfiguration::contentUpdateFrequency): Deleted.
        (API::PageConfiguration::setContentUpdateFrequency): Deleted.
        (): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackAfterFullscreen:]):
        (-[WKWebViewConfiguration _contentUpdateFrequency]): Deleted.
        (-[WKWebViewConfiguration _setContentUpdateFrequency:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[WKOneShotDisplayLinkHandler initWithDrawingAreaProxy:]):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::contentUpdateFrequency): Deleted.

2017-01-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210848.

        This change introduced media-related LayoutTest failures and
        crashes on macOS.

        Reverted changeset:

        "[Modern Media Controls] Turn modern media controls on by
        default"
        https://bugs.webkit.org/show_bug.cgi?id=165668
        http://trac.webkit.org/changeset/210848

2017-01-18  Anders Carlsson  <andersca@apple.com>

        Add instrumentation for when we fail to receive a message
        https://bugs.webkit.org/show_bug.cgi?id=167179

        Reviewed by Alexey Proskuryakov.

        This will help us diagnose what the error from mach_msg is.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::readFromMachPort):

2017-01-18  Alex Christensen  <achristensen@webkit.org>

        Fix CFURLConnection build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=167168

        Reviewed by Andy Estes.

        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::resume):
        (WebKit::Download::platformDidFinish):
        (WebKit::Download::platformCancelNetworkLoad):
        (WebKit::Download::startNetworkLoadWithHandle):
        (WebKit::Download::startNetworkLoad):
        (WebKit::Download::platformInvalidate):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::allowsSpecificHTTPSCertificateForHost):
        (WebKit::serverTrustCredential):
        * Shared/Authentication/mac/AuthenticationManager.mac.mm:
        (WebKit::AuthenticationManager::tryUseCertificateInfoForChallenge):
        * config.h:

2017-01-18  Alex Christensen  <achristensen@webkit.org>

        Modernize DelayedReply IPC code
        https://bugs.webkit.org/show_bug.cgi?id=167176

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunctionImpl):
        (IPC::callMemberFunction):
        (IPC::handleMessageDelayed):
        * Scripts/webkit/messages.py:
        (message_to_struct_declaration):
        (generate_message_handler):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::getDatabaseProcessConnection):
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getNetworkProcessConnection):
        (WebKit::WebProcessPool::getDatabaseProcessConnection):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        (WebKit::WebProcessProxy::getDatabaseProcessConnection):
        * UIProcess/WebProcessProxy.h:

2017-01-18  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-01-18  Megan Gardner  <megan_gardner@apple.com>

        Ignore Connection Assertion if we are not using connection to send messages
        https://bugs.webkit.org/show_bug.cgi?id=167022

        Reviewed by Darin Adler.

        Ask the process about a particular connection rather that getting it and making the     
        comparison ourselves. 

        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::hasConnection):
        Check to see the the ProcessProxy has this particular connection. This get around the assert
        that we would run into when just requesting the connection directly.
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::setPasteboardPathnamesForType):
        Use the new check instead of getting the raw connection.

2017-01-18  Andreas Kling  <akling@apple.com>

        Document::securityOrigin() should return a reference.
        <https://webkit.org/b/167124>

        Reviewed by Sam Weinig.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createTransientLocalStorageMap):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopySecurityOrigin):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::storageBlockingStateChanged):
        (WebKit::PluginView::performFrameLoadURLRequest):
        (WebKit::PluginView::isPrivateBrowsingEnabled):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::getWebVisiblePluginInfo):
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didRunInsecureContent):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::allowsFollowingLink):

2017-01-18  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Use DEFAULT_EXPERIMENTAL_FEATURES_ENABLED as the default value for modern media controls, which is true.

        * Shared/WebPreferencesDefinitions.h:

2017-01-15  Darin Adler  <darin@apple.com>

        Remove PassRefPtr from "loader" directory of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=167055

        Reviewed by Alex Christensen.

        * Shared/APIWebArchive.h: Use RefPtr&& instead of PassRefPtr.
        * Shared/APIWebArchive.mm:
        (API::WebArchive::create): Ditto.
        (API::WebArchive::WebArchive): Ditto.
        (API::WebArchive::subresources): Ditto.
        (API::WebArchive::subframeArchives): Ditto.

        * Shared/TextCheckerState.h: Initialize data members so classes
        using this won't have to explicitly initalize them.

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::setIconDataForIconURL): Pass a raw
        pointer to WebCore.

        * UIProcess/WebPageProxy.h: Removed forward declaration of
        StringPairVector, not needed here.

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::WebIconDatabaseProxy): Take a reference.
        (WebKit::WebIconDatabaseProxy::retainIconForPageURL): Updated for reference.
        (WebKit::WebIconDatabaseProxy::releaseIconForPageURL): Ditto.
        (WebKit::WebIconDatabaseProxy::synchronousIconForPageURL): Ditto.
        (WebKit::WebIconDatabaseProxy::loadDecisionForIconURL): Ditto.
        (WebKit::WebIconDatabaseProxy::receivedIconLoadDecision): Ditto.
        (WebKit::WebIconDatabaseProxy::iconDataForIconURL): Ditto.
        (WebKit::WebIconDatabaseProxy::setIconURLForPageURL): Ditto.
        (WebKit::WebIconDatabaseProxy::setIconDataForIconURL): Ditto.
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h: Updated for the above.
        Marked the class final, made most functions private and final.

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        Removed assertion that a pointer is non-null since that pointer is now a
        reference. Left use of PassRefPtr here for now.z

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad): Updated since application cache
        host is now a reference rather thna a pointer.
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest): Ditto.
        (WebKit::WebResourceLoader::didReceiveResponse): Ditto.
        (WebKit::WebResourceLoader::didFailResourceLoad): Ditto.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders): Got rid of unneeded use of String::format.
        (WebKit::PluginView::create): Take a reference instead of PassRefPtr.
        (WebKit::PluginView::PluginView): Ditto. Also moved much of the data
        member initialization to the class definition.
        (WebKit::PluginView::recreateAndInitialize): Take Ref&& instead of PassRefPtr.
        (WebKit::PluginView::manualLoadDidReceiveResponse): Updated for change to
        ManualStreamState enumeration.
        (WebKit::PluginView::manualLoadDidReceiveData): Ditto.
        (WebKit::PluginView::manualLoadDidFinishLoading Ditto.):
        (WebKit::PluginView::manualLoadDidFail): Ditto.
        (WebKit::PluginView::liveResourceData): Return RefPtr insead of PassRefPtr.
        (WebKit::PluginView::redeliverManualStream): Updated for ManualStreamState.
        * WebProcess/Plugins/PluginView.h: Updated for the above. Also changed
        ManualStreamState into an enum class.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Changed m_page to a reference.
        (WebKit::WebChromeClient::runOpenPanel): Take both arguments as references.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Updated for the above.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerUndoStep): Take reference instead of PassRefPtr.
        (WebKit::WebEditorClient::registerRedoStep): Ditto.
        * WebProcess/WebCoreSupport/WebEditorClient.h: Updated for the above

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        Updated for change to FrameLoaderClient.
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Ditto.
        (WebKit::WebFrameLoaderClient::dispatchWillSendSubmitEvent): Ditto.
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm): Ditto.
        (WebKit::WebFrameLoaderClient::createFrame): Ditto.
        (WebKit::WebFrameLoaderClient::createPlugin): Ditto.
        (WebKit::WebFrameLoaderClient::recreatePlugin): Ditto.
        (WebKit::WebFrameLoaderClient::createJavaAppletWidget): Ditto.
        (WebKit::WebFrameLoaderClient::createNetworkingContext): Ditto.
        (WebKit::WebFrameLoaderClient::didRequestAutocomplete): Ditto.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: Updated for the above.

        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::didReceiveMobileDocType): Updated since m_page is a
        reference now.
        (WebKit::WebChromeClient::observedContentChange): Ditto.
        (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto.
        (WebKit::WebChromeClient::didLayout): Ditto.
        (WebKit::WebChromeClient::didStartOverflowScroll): Ditto.
        (WebKit::WebChromeClient::didEndOverflowScroll): Ditto.
        (WebKit::WebChromeClient::hasStablePageScaleFactor): Ditto.
        (WebKit::WebChromeClient::showPlaybackTargetPicker): Ditto.
        (WebKit::WebChromeClient::eventThrottlingDelay): Ditto.
        (WebKit::WebChromeClient::deviceOrientation): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Pass reference.
        (WebKit::WebPage::createPlugin): Return RefPtr instead of PassRefPtr.
        (WebKit::WebPage::fromCorePage): Updated for change to WebChromeClient.
        (WebKit::WebPage::setHeaderPageBanner): Take pointer instead of PassRefPtr.
        (WebKit::WebPage::setFooterPageBanner): Ditto.
        (WebKit::WebPage::setActiveOpenPanelResultListener): Take Ref&& instead of
        PassRefPtr.
        (WebKit::WebPage::currentSelectionAsRange): Return RefPtr instead of PassRefPtr.
        (WebKit::WebPage::rangeFromEditingRange): Ditto.
        * WebProcess/WebPage/WebPage.h: Updated for the above.

        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::cachedResponseDataForURL): Return RefPtr instead of PassRefPtr.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::cachedResponseDataForURL): Ditto.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::cachedResponseDataForURL): Ditto.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::cachedResponseDataForURL): Ditto.
        (WebKit::WebPage::setTopOverhangImage): Take raw pointer instead of PassRefPtr.
        (WebKit::WebPage::setBottomOverhangImage): Ditto.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Pass a reference. Move most initialization to
        the class definition.
        * WebProcess/WebProcess.h: Updaed for the above.

2017-01-17  Michael Catanzaro  <mcatanzaro@igalia.com>

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

        It introduced dozens of test timeouts.

        Reverted changeset:
        "[Modern Media Controls] Turn modern media controls on by default"
        https://bugs.webkit.org/show_bug.cgi?id=165668
        http://trac.webkit.org/changeset/210834

2017-01-17  Antti Koivisto  <antti@apple.com>

        Persist derived data
        https://bugs.webkit.org/show_bug.cgi?id=167136

        Reviewed by Andreas Kling.

        Add a mechanism for storing arbitrary data into disk cache.

        From WebCore level data can be stored using

            loaderStrategy()->storeDerivedDataToCache(key, partition, type, data);

        The data is keyed with the body hash of a network resource. It can be retrieved along
        with the resource by specifying the type in ResourceLoaderOptions. If a related data
        blob is found it will be deliver via CachedResource::didRetrieveDerivedDataFromCache()
        callback.

        This patch adds the mechanism but doesn't yet use it for anything.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::storeDerivedDataToCache):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):

            Look for related resources to return if needed.

        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::resourceType):
         (WebKit::NetworkCache::Cache::retrieveData):
        (WebKit::NetworkCache::Cache::storeData):
        (WebKit::NetworkCache::Cache::makeCacheKey): Deleted.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::encodeAsStorageRecord):
        (WebKit::NetworkCache::Entry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::Key):
        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCache::DataKey::encode):
        (WebKit::NetworkCache::DataKey::decode):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::readRecord):
        (WebKit::NetworkCache::Storage::traverse):
        * NetworkProcess/cache/NetworkCacheStorage.h:

            Return body hash with the Record.

        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourcesEntry::encodeAsStorageRecord):
        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<SHA1::Digest>::encode):
        (IPC::ArgumentCoder<SHA1::Digest>::decode):
        * Platform/IPC/ArgumentCoders.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::storeDerivedDataToCache):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didRetrieveDerivedData):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2017-01-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Use DEFAULT_EXPERIMENTAL_FEATURES_ENABLED as the default value for modern media controls, which is true.

        * Shared/WebPreferencesDefinitions.h:

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        ENABLE(USER_TIMING) Not Defined for Apple Windows or OS X Ports
        https://bugs.webkit.org/show_bug.cgi?id=116551
        <rdar://problem/13949830>

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2017-01-17  Filip Pizlo  <fpizlo@apple.com>

        JSCell::classInfo() shouldn't have a bunch of mitigations for being called during destruction
        https://bugs.webkit.org/show_bug.cgi?id=167066

        Reviewed by Keith Miller and Michael Saboff.
        
        Just remove now-erroneous use of jsCast<>.

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

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unnecessary includes
        https://bugs.webkit.org/show_bug.cgi?id=167114

        Reviewed by Alex Christensen.

        * WebProcess/WebPage/ios/WebPageIOS.mm:

2017-01-17  Brady Eidson  <beidson@apple.com>

        An update to one gamepad's values should only change that gamepad's modified timestamp.
        <rdar://problem/28620865> and https://bugs.webkit.org/show_bug.cgi?id=167139

        Reviewed by Andy Estes.

        Track the lastModifiedTime for a gamepad in the UI process, and pass it along to web processes.

        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::GamepadData):
        (WebKit::GamepadData::encode):
        (WebKit::GamepadData::decode):
        * Shared/Gamepad/GamepadData.h:
        (WebKit::GamepadData::lastUpdateTime):

        * UIProcess/Gamepad/UIGamepad.cpp:
        (WebKit::UIGamepad::UIGamepad):
        (WebKit::UIGamepad::updateFromPlatformGamepad):
        (WebKit::UIGamepad::condensedGamepadData):
        (WebKit::UIGamepad::fullGamepadData):
        * UIProcess/Gamepad/UIGamepad.h:

        * WebProcess/Gamepad/WebGamepad.cpp:
        (WebKit::WebGamepad::updateValues):

2017-01-17  Anders Carlsson  <andersca@apple.com>

        It's not possible to perform a POST request with HTTPBody content in a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=167131
        rdar://problem/20464240

        Reviewed by Beth Dakin.

        Encode/decode the form data if necessary.

        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode):
        (WebKit::LoadParameters::decode):

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        Crash when closing tab with debugger paused
        https://bugs.webkit.org/show_bug.cgi?id=161746
        <rdar://problem/15607819>

        Reviewed by Brian Burg and Brent Fulgham.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::DeferredPageDestructor::createDeferredPageDestructor):
        (WebKit::DeferredPageDestructor::DeferredPageDestructor):
        (WebKit::DeferredPageDestructor::tryDestruction):
        (WebKit::WebPage::close):
        Defer destruction of the Page and WebPage if we are in a nested runloop.
        Also, proactively close all inspector frontends, including remote frontends.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::completeSyntheticClick):
        Return early in some cases where a nested run loop may have closed
        the WebPage on us while handling JavaScript events.

2017-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Remove the REQUEST_ANIMATION_FRAME flag
        https://bugs.webkit.org/show_bug.cgi?id=156980
        <rdar://problem/25906849>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::syncDisplayState):
        (WebKit::CompositingCoordinator::nextAnimationServiceTime):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::scheduleAnimation):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.h:

2017-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Accept-language could be set twice in a row for the default context
        https://bugs.webkit.org/show_bug.cgi?id=167089

        Reviewed by Žan Doberšek.

        * NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        (WebKit::CustomProtocolManager::registerScheme): Use NetworkStorageSession::getOrCreateSoupNetworkSession().
        * NetworkProcess/efl/NetworkProcessMainEfl.cpp:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::userPreferredLanguagesChanged): Only set the languages if NetworkStorageSession has a
        SoupNetworkSession.
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::soupSession): Use NetworkStorageSession::getOrCreateSoupNetworkSession().
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage): Ditto.
        * WebProcess/efl/WebProcessMainEfl.cpp:

2017-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Fix handling of accept language property
        https://bugs.webkit.org/show_bug.cgi?id=166969

        Reviewed by Michael Catanzaro.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::buildAcceptLanguages): Moved from WebCore.
        (WebKit::NetworkProcess::userPreferredLanguagesChanged): Build the accept language string from the vector and
        pass set it to SoupNetworkSession to be used for new sessions, and also to all other existing sessions.

2017-01-14  Tim Horton  <timothy_horton@apple.com>

        Remove unused WKView initializer parameter
        https://bugs.webkit.org/show_bug.cgi?id=167046

        Reviewed by Dan Bernstein.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView initWithFrame:configurationRef:]):
        (-[WKView initWithFrame:processPool:configuration:webView:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        Ever since WKWebView stopped having WKView inside it, this parameter
        has never been used. Now, it only leads to confusion.

2017-01-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(DETAILS_ELEMENT) guards
        https://bugs.webkit.org/show_bug.cgi?id=167042

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2017-01-13  Brady Eidson  <beidson@apple.com>

        Crash when visiting a webpage that uses Gamepads in a new WebProcess after a previous page has used gamepads..
        https://bugs.webkit.org/show_bug.cgi?id=167033

        Reviewed by Alex Christensen.

        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::processPoolStartedUsingGamepads): Don't schedule a state update here.
        (WebKit::UIGamepadProvider::processPoolStoppedUsingGamepads): Ditto.
        * UIProcess/Gamepad/UIGamepadProvider.h:
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::startedUsingGamepads): Populate the WebProcess with initial gamepads.

2017-01-11  Darin Adler  <darin@apple.com>

        Remove PassRefPtr from more of "platform"
        https://bugs.webkit.org/show_bug.cgi?id=166809

        Reviewed by Sam Weinig.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextureMapperAnimation>::encode): Updated since timing function
        returns a raw pointer.
        (IPC::ArgumentCoder<TextureMapperAnimation>::decode): Updated since timing function
        setters now takes an rvalue reference.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::createScrollbar): Updated since addChild now takes a reference.

2017-01-13  Chris Dumez  <cdumez@apple.com>

        [WK2] Add diagnostic logging to measure WebGL usage
        https://bugs.webkit.org/show_bug.cgi?id=166730
        <rdar://problem/29883469>

        Reviewed by Alex Christensen.

        Add diagnostic logging to measure high performance WebGL usage. We report
        at regular intervals in which WebGL state Safari is:
        - Inactive
        - ActiveInForegroundTab
        - ActiveInBackgroundTabOnly

        This should give us an estimate of:
        - What % of the time is Safari using high performance graphics
        - What % of this time is only due to background tabs

        * UIProcess/HighPerformanceGraphicsUsageSampler.cpp: Added.
        (WebKit::HighPerformanceGraphicsUsageSampler::HighPerformanceGraphicsUsageSampler):
        (WebKit::HighPerformanceGraphicsUsageSampler::timerFired):
        * UIProcess/HighPerformanceGraphicsUsageSampler.h: Copied from Source/WebCore/platform/graphics/GraphicsContext3DAttributes.h.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setIsUsingHighPerformanceWebGL):
        (WebKit::WebPageProxy::isUsingHighPerformanceWebGL):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_highPerformanceGraphicsUsageSampler):
        * UIProcess/WebProcessPool.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):

2017-01-13  Matt Rajca  <mrajca@apple.com>

        Defer use of autoplay heuristics to clients
        https://bugs.webkit.org/show_bug.cgi?id=167010

        Reviewed by Alex Christensen.

        Switch the autoplay policy tristate to an on/off option since clients should run any
        heuristics and simply send their final decision to WebKit.

        * Shared/WebsitePolicies.h:
        (WebKit::WebsitePolicies::encode):
        (WebKit::WebsitePolicies::decode):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesGetAutoplayEnabled):
        (WKWebsitePoliciesSetAutoplayEnabled):
        (WKWebsitePoliciesGetAutoplayPolicy): Replaced.
        (WKWebsitePoliciesSetAutoplayPolicy): Replaced.
        * UIProcess/API/C/WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setAutoplayEnabled:]):
        (-[_WKWebsitePolicies autoplayEnabled]):
        (-[_WKWebsitePolicies setAutoplayPolicy:]): Replaced.
        (-[_WKWebsitePolicies autoplayPolicy]): Replaced.

2017-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Simplify cookie storage handling
        https://bugs.webkit.org/show_bug.cgi?id=166967

        Reviewed by Sergio Villar Senin.

        Get the SoupSession from NetworkStorageSession::defaultStorageSession().

        * NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        (WebKit::CustomProtocolManager::registerScheme): Get the SoupSession from NetworkStorageSession::defaultStorageSession().
        * NetworkProcess/efl/NetworkProcessMainEfl.cpp: Ditto.
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::userPreferredLanguagesChanged): Ditto.
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): SoupNetworkSession::clearOldSoupCache is static.
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy): Use the cookie storage from NetworkStorageSession::defaultStorageSession().
        (WebKit::WebCookieManager::setCookiePersistentStorage): Ditto.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Ditto.
        * WebProcess/efl/WebProcessMainEfl.cpp:

2017-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Do not use the legacy session ID in WebFrameNetworkingContext::storageSession()
        https://bugs.webkit.org/show_bug.cgi?id=166970

        Reviewed by Sergio Villar Senin.

        Get the session for the current page instead.

        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::storageSession):

2017-01-12  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unnecessary includes of Page.h
        https://bugs.webkit.org/show_bug.cgi?id=166996

        Reviewed by Yusuke Suzuki.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:

2017-01-12  Chris Dumez  <cdumez@apple.com>

        Add KEYBOARD_KEY_ATTRIBUTE / KEYBOARD_CODE_ATTRIBUTE to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=166995

        Reviewed by Jer Noble.

        Add KEYBOARD_KEY_ATTRIBUTE / KEYBOARD_CODE_ATTRIBUTE to FeatureDefines.xcconfig
        as some people are having trouble building without it.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):

2017-01-12  Chris Dumez  <cdumez@apple.com>

        [iOS] HTML form validation popover sometimes does not go away
        https://bugs.webkit.org/show_bug.cgi?id=166990
        <rdar://problem/29985957>

        Reviewed by Tim Horton.

        Update code using ValidationBubble now that it is RefCounted.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createValidationBubble):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createValidationBubble):

2017-01-12  Enrica Casucci  <enrica@apple.com>

        Do not allow selection of editable content when not editing.
        https://bugs.webkit.org/show_bug.cgi?id=166897
        <rdar://problem/29388806>

        Reviewed by Tim Horton.

        Test: fast/events/touch/ios/long-press-on-editable.html

        When retrieving the position information, we should not consider
        as candidates for selection editable elements, since this is only
        used for non editable selections.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isAssistableElement): Moved within the file.
        (WebKit::WebPage::getPositionInformation):

2017-01-12  Megan Gardner  <megan_gardner@apple.com>

        Double Check URLs on UI side before putting in pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=166945
        <rdar://problem/11187315>

        Reviewed by Tim Horton.

        Check URLs sent from the web process before putting the on pasteboard.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::setPasteboardPathnamesForType):
        Add a check to make sure the URLs we've received are valid and not compromising to the user's system.

        * UIProcess/WebPasteboardProxy.cpp:
        (WebKit::WebPasteboardProxy::addWebProcessProxy):
        Keep track of the webProcesses associated with the pasteboard proxies specifically, so that we can
        use it to check the URLs before putting them on pasteboard.
        (WebKit::WebPasteboardProxy::removeWebProcessProxy):
        Remove dead webProcesses.

        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        Allow for the connection to be passed in, so that we can determine which webProcess we need to
        check the URLs of.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        Make sure to remove WebProcessProxys from the list stored in WebPasteboardProxy

2017-01-12  Chris Dumez  <cdumez@apple.com>

        [iOS] Implement support for KeyboardEvent.code
        https://bugs.webkit.org/show_bug.cgi?id=166932
        <rdar://problem/29972518>

        Reviewed by Darin Adler.

        Make sure KeyboardEvent.code is properly initialized on
        iOS WK2.

        * Shared/WebEvent.h:
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebKeyboardEvent):

2017-01-12  Andreas Kling  <akling@apple.com>

        WebBackForwardListProxy should remove restored session history items from PageCache on close.
        <https://webkit.org/b/166972>
        <rdar://problem/28904157>

        Reviewed by Brady Eidson.

        Register history item ID's from the UIProcess with the associated-items map
        so that we can remove any PageCache entries associated with them immediately
        when closing a WebPage.

        Otherwise they might not get removed until the next PageCache pruning happens.
        This patch is a speculative fix for what looks like it might be weirdness
        related to a PageCache entry outliving its originating Page.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItemFromUIProcess):
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSessionInternal):

2017-01-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Correct license on WebKitSecurityOrigin headers

        These ought to be LGPLv2+, because the rest of the GTK+ API is LPGLv2+.

        * UIProcess/API/gtk/WebKitSecurityOrigin.cpp:
        * UIProcess/API/gtk/WebKitSecurityOrigin.h:
        * UIProcess/API/gtk/WebKitSecurityOriginPrivate.h:

2017-01-12  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream, Mac] Render media stream audio buffers
        https://bugs.webkit.org/show_bug.cgi?id=159836
        <rdar://problem/27380390>

        Unreviewed, revert accidental change.

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

2017-01-11  Brady Eidson  <beidson@apple.com>

        Add IconLoadingDelegate functionality to WKView.
        https://bugs.webkit.org/show_bug.cgi?id=166951

        Reviewed by Tim Horton.
        
        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView maybeInstallIconLoadingClient]): If the subclass implements the delegate method, install the
          icon loading client. Otherwise, maintain the normal IconDatabase loading behavior.
        (-[WKView initWithFrame:processPool:configuration:webView:]):

2017-01-11  Brent Fulgham  <bfulgham@apple.com>

        [WK2][Cocoa] Avoid null dereference in FullScreen code.
        https://bugs.webkit.org/show_bug.cgi?id=166957
        <rdar://problem/27745004>

        Reviewed by Eric Carlson.

        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::didSetupFullscreen): Use protected reference to 'this', and check for valid
        page before attempting to use it.

2017-01-11  Anders Carlsson  <andersca@apple.com>

        navigator.plugins.refresh and WKContextRefreshPlugIns doesn't pick up changes to already-present plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=166942
        rdar://problem/29839194

        Reviewed by Sam Weinig.

        Use _CFBundleCreateUnique so the resulting bundle won't be cached.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):

2017-01-11  Anders Carlsson  <andersca@apple.com>

        REGRESSION: Crash in com.apple.WebKit: IPC::Connection::sendMessage(std::__1::unique_ptr<IPC::MachMessage, std::__1::default_delete<IPC::MachMessage> >) + 27
        https://bugs.webkit.org/show_bug.cgi?id=165854
        rdar://problem/29757269

        Reviewed by Tim Horton.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendMessage):
        Add assertion.

        (IPC::Connection::initializeSendSource):
        Turns out the event handler can be called spuriously, so guard against that.

2017-01-11  Chris Dumez  <cdumez@apple.com>

        [iOS][WK2] KeyboardEvent.key always returns an empty string
        https://bugs.webkit.org/show_bug.cgi?id=166918
        <rdar://problem/29861147>

        Reviewed by Wenson Hsieh.

        Make sure that KeyboardEvent.key gets properly initialized on iOS / WK2.

        * Shared/WebEvent.h:
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebKeyboardEvent):

2017-01-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] No way for applications to set notification permissions without waiting for permission request
        https://bugs.webkit.org/show_bug.cgi?id=163366

        Reviewed by Carlos Garcia Campos.

        Websites can check the Notification.permission DOM property to check if they have permission
        to show notifications *without triggering a permission request*. But the WebKitGTK+ API has
        no way to affirmatively indicate notifications are allowed without a permission request. The
        only way is via the permission request API, which is too late. It's a problem for Epiphany.
        For example, open the Riot Matrix client in a web app; you will immediately see an info bar
        informing the user that Riot does not have permission to send desktop notifications, even
        though Epiphany automatically grants notification permission in web app mode when requested.
        This problem is not exclusive to web apps; there is simply no way for notification
        permission to be set correctly prior to a permission request for it. Fix this by introducing
        a webkit_web_context_initialize_notification_permissions() API, and add a signal
        WebKitWebContext::initialize-notification-permissions to indicate when it should be called.

        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (notificationPermissionsCallback):
        (WebKitNotificationProvider::create):
        (WebKitNotificationProvider::WebKitNotificationProvider):
        (WebKitNotificationProvider::notificationPermissions):
        (WebKitNotificationProvider::setNotificationPermissions):
        * UIProcess/API/gtk/WebKitNotificationProvider.h:
        * UIProcess/API/gtk/WebKitSecurityOrigin.cpp:
        (webkitSecurityOriginGetSecurityOrigin):
        * UIProcess/API/gtk/WebKitSecurityOriginPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_class_init):
        (addOriginToMap):
        (webkit_web_context_initialize_notification_permissions):
        (webkitWebContextInitializeNotificationPermissions):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:

2017-01-10  Keith Rollin  <krollin@apple.com>

        Record/replay: fix range used for fuzzy matching
        https://bugs.webkit.org/show_bug.cgi?id=166041

        Reviewed by Darin Adler and Alex Christensen.

        Because of two bugs, the attempt to determine the range of URLs to
        check as part of the process of fuzzy matching was failing. The intent
        was to find the range of URLs that started with the same
        <scheme://host:port> as a given URL. However, because of a reversed
        test, the upper end of the range ended up being the "end()" iterator
        of the entire collection of URLs. With that fixed, there was another
        bug due to one URL being given as <scheme://host:port> and the other
        given as <scheme://host:port/> (note the trailing slash). Both of
        these issues are now fixed.

        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        (WebKit::NetworkCapture::Manager::initialize):
        (WebKit::NetworkCapture::Manager::findBestFuzzyMatch):
        (WebKit::NetworkCapture::Manager::urlIdentifyingCommonDomain):
        * NetworkProcess/capture/NetworkCaptureManager.h:
        * NetworkProcess/capture/NetworkCaptureResource.cpp:
        (WebKit::NetworkCapture::Resource::url):
        (WebKit::NetworkCapture::Resource::urlIdentifyingCommonDomain):
        (WebKit::NetworkCapture::Resource::baseURL): Deleted.
        * NetworkProcess/capture/NetworkCaptureResource.h:

2017-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement "proximity" scroll snapping
        https://bugs.webkit.org/show_bug.cgi?id=135994
        <rdar://problem/18162418>

        Reviewed by Dean Jackson.

        Adds boilerplate support for plumbing lists of snap offset ranges from the web process to the UI process
        alongside the list of snap offsets.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ScrollOffsetRange<float>>::encode):
        (IPC::ArgumentCoder<ScrollOffsetRange<float>>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:

        Adjust mainframe proximity scroll snapping logic to not subtract out the top content inset when there is no
        active snap offset (i.e. when snapping rests in a snap offset range). Attempting to subtract out the top inset
        in this case caused the scroll offset to jump after ending a drag with no momentum in a snap offset range.

        (WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping):
        (WebKit::RemoteScrollingCoordinatorProxy::shouldSnapForMainFrameScrolling):
        (WebKit::RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling):

2017-01-10  Zan Dobersek  <zdobersek@igalia.com>

        ThreadedCoordinatedLayerTreeHost::renderNextFrame() should short-cut to layer flushing
        https://bugs.webkit.org/show_bug.cgi?id=157614

        Reviewed by Carlos Garcia Campos.

        CoordinatedLayerTreeHost prevents any layer flushes while a previously-commited scene
        state is still being rendered on the composition thread. renderNextFrame() is called
        once that is complete, and a new layer flush is scheduled.

        This change improves the whole ordeal by immediately performing the layer flush only if
        it was requested during the time we were waiting on the renderer (i.e. when the latest
        scene state was being composited), instead of scheduling it unconditionally.
        m_scheduledWhileWaitingForRenderer member variable is added to track that occurrence.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::scheduleLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::renderNextFrame):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2017-01-09  Chris Dumez  <cdumez@apple.com>

        [iOS] Drop VNodeTracker
        https://bugs.webkit.org/show_bug.cgi?id=166868
        <rdar://problem/29937587>

        Reviewed by Andreas Kling.

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

2017-01-09  Enrica Casucci  <enrica@apple.com>

        Selection animation flashing on editable content when zooming.
        https://bugs.webkit.org/show_bug.cgi?id=166863
        rdar://problem/29931470

        Reviewed by Tim Horton.

        Implementing _allowAnimatedUpdateSelectionRectView and returning NO,
        prevents the selection animation in UIKit.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _allowAnimatedUpdateSelectionRectViews]):

2017-01-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Should support key and code properties on keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=166759

        Reviewed by Carlos Garcia Campos.

        * Shared/WebEvent.h:
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent): accept web key value and code on construction.
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent): pass web key value and code on construction.

2017-01-08  Antti Koivisto  <antti@apple.com>

        Move cache coders to WTF
        https://bugs.webkit.org/show_bug.cgi?id=166825

        Rubber-stamped by Sam Weinig.

        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheCoder.h: Removed.
        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::Coder<AtomicString>::encode): Deleted.
        (WebKit::NetworkCache::Coder<AtomicString>::decode): Deleted.
        (WebKit::NetworkCache::Coder<CString>::encode): Deleted.
        (WebKit::NetworkCache::Coder<CString>::decode): Deleted.
        (WebKit::NetworkCache::Coder<String>::encode): Deleted.
        (WebKit::NetworkCache::decodeStringText): Deleted.
        (WebKit::NetworkCache::Coder<String>::decode): Deleted.
        (WebKit::NetworkCache::Coder<SHA1::Digest>::encode): Deleted.
        (WebKit::NetworkCache::Coder<SHA1::Digest>::decode): Deleted.
        (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::encode): Deleted.
        (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::decode): Deleted.
        * NetworkProcess/cache/NetworkCacheCoders.h:
        (): Deleted.
        (WebKit::NetworkCache::Coder<std::optional<T>>::encode): Deleted.
        (WebKit::NetworkCache::Coder<std::optional<T>>::decode): Deleted.
        * NetworkProcess/cache/NetworkCacheCodersCocoa.cpp:
        (WebKit::NetworkCache::encodeCFData): Deleted.
        (WebKit::NetworkCache::decodeCFData): Deleted.
        (WebKit::NetworkCache::encodeSecTrustRef): Deleted.
        (WebKit::NetworkCache::decodeSecTrustRef): Deleted.
        (WebKit::NetworkCache::encodeCertificateChain): Deleted.
        (WebKit::NetworkCache::decodeCertificateChain): Deleted.
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode): Deleted.
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode): Deleted.
        * NetworkProcess/cache/NetworkCacheDecoder.cpp: Removed.
        * NetworkProcess/cache/NetworkCacheDecoder.h: Removed.
        * NetworkProcess/cache/NetworkCacheEncoder.cpp: Removed.
        * NetworkProcess/cache/NetworkCacheEncoder.h: Removed.
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::encodeAsStorageRecord):
        (WebKit::NetworkCache::Entry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::encode):
        (WebKit::NetworkCache::Key::decode):
        * NetworkProcess/cache/NetworkCacheKey.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeRecordMetaData):
        (WebKit::NetworkCache::encodeRecordMetaData):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourceInfo::decode):
        (WebKit::NetworkCache::SubresourcesEntry::encodeAsStorageRecord):
        (WebKit::NetworkCache::SubresourcesEntry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::encodeContentExtensionMetaData):
        (API::decodeContentExtensionMetaData):
        * WebKit2.xcodeproj/project.pbxproj:

2017-01-09  Tomas Popela  <tpopela@redhat.com>

        [GTK] Replace WebKitWebSettings with WebKitSettings in documentation
        https://bugs.webkit.org/show_bug.cgi?id=166836

        Reviewed by Carlos Garcia Campos.

        Don't use WebKitWebSettings (it was a WebKit1 thing) in documentation,
        but replace it with WebKitSettings.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_class_init):
        * UIProcess/API/gtk/WebKitWebView.cpp:

2017-01-06  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from "inspector", "platform/sql", and "platform/text"
        https://bugs.webkit.org/show_bug.cgi?id=166797

        Reviewed by Alex Christensen.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestCheckingOfString): Take a reference
        instead of a PassRefPtr.
        * WebProcess/WebCoreSupport/WebEditorClient.h: Updated for above change.

2017-01-07  Andy Estes  <aestes@apple.com>

        [QuickLook] Consolidate usage of QuickLookHandle into SubresourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=166713

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse): Removed QuickLook code.
        (WebKit::WebResourceLoader::didReceiveData): Ditto.
        (WebKit::WebResourceLoader::didFinishResourceLoad): Ditto.
        (WebKit::WebResourceLoader::didFailResourceLoad): Ditto.
        (WebKit::WebResourceLoader::didReceiveResource): Ditto.

2017-01-06  Daniel Bates  <dabates@apple.com>

        Attempt to fix the EFL build following <http://trac.webkit.org/changeset/210461>
        (https://bugs.webkit.org/show_bug.cgi?id=166781)

        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesGetAutoplayPolicy): Invoke ASSERT_NOT_REACHED() and return kWKWebsiteAutoplayPolicyUseHeuristics
        if the specified policy is not covered by a switch case.
        (WKWebsitePoliciesSetAutoplayPolicy): Substituted "return" for "break" in each switch case and
        invoke ASSERT_NOT_REACHED() if the specified policy is not covered by a switch case.

2017-01-06  Matt Rajca  <mrajca@apple.com>

        Add infrastructure for sending autoplay website policies to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=166781

        Reviewed by Alex Christensen.

        * Shared/WebsitePolicies.h:
        (WebKit::WebsitePolicies::encode):
        (WebKit::WebsitePolicies::decode):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesGetAutoplayPolicy):
        (WKWebsitePoliciesSetAutoplayPolicy):
        * UIProcess/API/C/WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setAutoplayPolicy:]):
        (-[_WKWebsitePolicies autoplayPolicy]):

2017-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Network process crash in WebKit::CustomProtocolManagerImpl::didFailWithError
        https://bugs.webkit.org/show_bug.cgi?id=165082

        Reviewed by Alex Christensen.

        CustomProtocolManager uses a Workqueue to receive the IPC messages since r149194. Then we added the Soup
        implementation adopting that approach, but without making our implementation thread safe. The crash happens
        because the CustomProtocolManager implementation is used by two threads at the same time, the main thread
        because of a ping load (probably caused by an image load in the unload handler, I haven't been able to
        reproduce the crash) and the work queue thread. The reasons to make CustomProtocolManager use a WorkQueue
        are no longer valid because CustomProtocolManager is now only used in the network process and sync loads don't
        use any nested run loop, they are just an IPC sync message. So this patch makes CustomProtocolManager a normal
        message receiver again to ensure messages are handled in the main thread. It also adds the common implementation
        to a new CustomProtocolManager.cpp file shared by Cocoa and Soup based ports.

        * CMakeLists.txt: Add CustomProtocolManager.cpp.
        * NetworkProcess/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]): Use new CustomProtocolManager API.
        (-[WKCustomProtocol startLoading]): Ditto.
        (-[WKCustomProtocol stopLoading]): Ditto.
        (WebKit::CustomProtocolManager::registerProtocolClass): Register the NSURLProtocol class when not using the
        network session.
        (WebKit::CustomProtocolManager::didFailWithError): removeCustomProtocol now receives an ID.
        (WebKit::CustomProtocolManager::didFinishLoading): Ditto.
        * NetworkProcess/CustomProtocols/CustomProtocolManager.cpp: Added.
        (WebKit::generateCustomProtocolID): Moved from CustomProtocolManagerCocoa.mm and CustomProtocolManagerSoup.cpp.
        (WebKit::CustomProtocolManager::supplementName): Ditto.
        (WebKit::CustomProtocolManager::CustomProtocolManager): Also removes the work queue initialization.
        (WebKit::CustomProtocolManager::initialize): Copied and modernized the loop.
        (WebKit::CustomProtocolManager::addCustomProtocol): Copied from CustomProtocolManagerCocoa.mm.
        (WebKit::CustomProtocolManager::removeCustomProtocol): Ditto.
        (WebKit::CustomProtocolManager::startLoading): Send the StartLoading message to the proxy.
        (WebKit::CustomProtocolManager::stopLoading): Send the StopLoading message to the proxy.
        * NetworkProcess/CustomProtocols/CustomProtocolManager.h:
        * NetworkProcess/CustomProtocols/soup/CustomProtocolManagerImpl.cpp: Removed.
        * NetworkProcess/CustomProtocols/soup/CustomProtocolManagerImpl.h: Removed.
        * NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp: Moved the implementation from
        CustomProtocolManagerImpl and updated to the new CustomProtocolManager API.
        (WebKit::CustomProtocolManager::WebSoupRequestAsyncData::WebSoupRequestAsyncData):
        (WebKit::CustomProtocolManager::WebSoupRequestAsyncData::~WebSoupRequestAsyncData):
        (WebKit::CustomProtocolManager::registerProtocolClass):
        (WebKit::CustomProtocolManager::registerScheme):
        (WebKit::CustomProtocolManager::supportsScheme):
        (WebKit::CustomProtocolManager::didFailWithError):
        (WebKit::CustomProtocolManager::didLoadData):
        (WebKit::CustomProtocolManager::didReceiveResponse):
        (WebKit::CustomProtocolManager::didFinishLoading):
        (WebKit::CustomProtocolManager::wasRedirectedToRequest):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::globalCustomProtocolManager):
        (WebKit::NetworkSessionCocoa::defaultSession):
        CustomProtocolManager is no longer refcounted, so just pass a pointer.
        A static pointer has the same lifetime as the NetworkProcess object in the NetworkProcess,
        and in the WebProcess it will remain nullptr, just like it used to.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebKit2.xcodeproj/project.pbxproj:

2017-01-05  Antti Koivisto  <antti@apple.com>

        Use WTF::Function instead of std::function in network cache code
        https://bugs.webkit.org/show_bug.cgi?id=166721

        Reviewed by Andreas Kling.

        Use better move-only type. Fix some unnecessary function copies.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::clear):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheData.h:
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::apply):
        * NetworkProcess/cache/NetworkCacheDataSoup.cpp:
        (WebKit::NetworkCache::Data::apply):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::traverseDirectory):
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::canRetrieve):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve):

            Split retrieve() to canRetrieve() and retrieve() functions.
            This avoids the need to copy the completion handler in the caller.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::ReadOperation::ReadOperation):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2017-01-05  Enrica Casucci  <enrica@apple.com>

        Unreviewed build fix after https://trac.webkit.org/changeset/210360

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::performDragOperation):

2017-01-05  Enrica Casucci  <enrica@apple.com>

        Support File Promise during drag for macOS.
        https://bugs.webkit.org/show_bug.cgi?id=165204
        rdar://problem/19595567

        Reviewed by Tim Horton.

        Adds support for dropping a File Promise in a WKWebView.
        The implementation uses new File Promise API available in Sierra.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode):
        * Shared/mac/PasteboardTypes.mm:
        (WebKit::PasteboardTypes::forURL):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::createSandboxExtensionsIfNeeded):
        (WebKit::WebViewImpl::performDragOperation):
        (WebKit::maybeCreateSandboxExtensionFromPasteboard): Deleted.
        (WebKit::createSandboxExtensionsForFileUpload): Deleted.

2017-01-05  Andreas Kling  <akling@apple.com>

        Remove ChromeClient::needTouchEvents().
        <https://webkit.org/b/166723>

        Rubber-stamped by Antti Koivisto.

        * WebProcess/WebCoreSupport/WebChromeClient.h:

2017-01-04  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from the "html" directory, other improvements
        https://bugs.webkit.org/show_bug.cgi?id=166635

        Reviewed by Alex Christensen.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::loadIconForFiles): Take a reference instead of a pointer.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto.

2017-01-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove runtime flag for variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=164251

        Reviewed by Dean Jackson.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2017-01-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210287.

        This change caused editing test failures on macOS.

        Reverted changeset:

        "Support File Promise during drag for macOS."
        https://bugs.webkit.org/show_bug.cgi?id=165204
        http://trac.webkit.org/changeset/210287

2017-01-04  Enrica Casucci  <enrica@apple.com>

        Support File Promise during drag for macOS.
        https://bugs.webkit.org/show_bug.cgi?id=165204
        rdar://problem/19595567

        Reviewed by Tim Horton.

        Adds support for dropping a File Promise in a WKWebView.
        The implementation uses new File Promise API available in Sierra.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode):
        * Shared/mac/PasteboardTypes.mm:
        (WebKit::PasteboardTypes::forURL):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::createSandboxExtensionsIfNeeded):
        (WebKit::WebViewImpl::performDragOperation):
        (WebKit::maybeCreateSandboxExtensionFromPasteboard): Deleted.
        (WebKit::createSandboxExtensionsForFileUpload): Deleted.

2017-01-04  Jeremy Jones  <jeremyj@apple.com>

        Release pointer lock when page state is reset for any reason, not just for process exited.
        https://bugs.webkit.org/show_bug.cgi?id=166654
        <rdar://problem/29849769>

        Reviewed by Tim Horton.

        Pointer lock was not being released when the window is closed.
        Move the pointer lock to resetState() so it happens whenever the page is
        reset, not just when it is reset after process exit.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState): Release here.
        (WebKit::WebPageProxy::resetStateAfterProcessExited): Don't release here.

2017-01-03  Tim Horton  <timothy_horton@apple.com>

        NSSpellChecker's recordResponse isn't called for unseen automatic corrections
        https://bugs.webkit.org/show_bug.cgi?id=166450
        <rdar://problem/29447824>

        Reviewed by Darin Adler.

        * UIProcess/mac/CorrectionPanel.h:
        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::recordAutocorrectionResponse):
        (WebKit::CorrectionPanel::handleAcceptedReplacement):
        Funnel all calls to recordResponse:toCorrection:forWord:language:inSpellDocumentWithTag:
        through recordAutocorrectionResponse, for debugging's sake.
        Drop the NSView parameter because we don't need it, just the tag.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::toCorrectionResponse):
        (WebKit::PageClientImpl::recordAutocorrectionResponse):
        Convert the new AutocorrectionResponseType value to its corresponding
        NSCorrectionResponse value.

2017-01-03  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Apple Sierra Release 32-bit Build following <https://trac.webkit.org/changeset/210075>
        (https://bugs.webkit.org/show_bug.cgi?id=166367)

        Guard more code in WebViewImpl::handleRequestedCandidates() inside HAVE(TOUCH_BAR).
        Remove unused local variable weakThis.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleRequestedCandidates):

2017-01-03  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Sierra Release 32-bit Build following <https://trac.webkit.org/changeset/210075>
        (https://bugs.webkit.org/show_bug.cgi?id=166367)

        Add HAVE(TOUCH_BAR)-guard around code that messages candidateListTouchBarItem() as
        candidateListTouchBarItem() is only defined when building with Touch Bar support.

        Also added an inline comment to help demarcate the code when building without Touch Bar
        support. We should look to clean up WebViewImpl.mm including extracting out the Touch
        Bar code to another file or better demarcating it so as to improve the hackability of
        this code and prevent breaking the build when building without Touch Bar support.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleRequestedCandidates):

2017-01-03  Michael Catanzaro  <mcatanzaro@igalia.com> and Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose WebKitSecurityOrigin API
        https://bugs.webkit.org/show_bug.cgi?id=166632

        Reviewed by Carlos Garcia Campos.

        This API will be useful to have for various purposes, such as setting initial notification
        permissions.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitAutocleanups.h:
        * UIProcess/API/gtk/WebKitSecurityOrigin.cpp: Added.
        (_WebKitSecurityOrigin::_WebKitSecurityOrigin):
        (webkitSecurityOriginCreate):
        (webkit_security_origin_new):
        (webkit_security_origin_new_for_uri):
        (webkit_security_origin_ref):
        (webkit_security_origin_unref):
        (webkit_security_origin_get_protocol):
        (webkit_security_origin_get_host):
        (webkit_security_origin_get_port):
        (webkit_security_origin_is_opaque):
        (webkit_security_origin_to_string):
        * UIProcess/API/gtk/WebKitSecurityOrigin.h: Added.
        * UIProcess/API/gtk/WebKitSecurityOriginPrivate.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:

2017-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Load options allowStoredCredentials = DoNotAllowStoredCredentials with clientCredentialPolicy = MayAskClientForCredentials doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=164471

        Reviewed by Michael Catanzaro.

        When DoNotAllowStoredCredentials is used we disable the SoupAuthManager feature for the message, but that
        disables all HTTP authentication, causing the load to always fail with Authorization required even when
        clientCredentialPolicy allows to ask the user for credentials. The problem is that even if we don't use the
        WebCore credentials for that request, libsoup will always use its internal cache of SoupAuth if we enable the
        SoupAuthManager feature. Libsoup 2.57.1 has new API to disable the use of cached credentials for a particular
        message, adding the new message flag SOUP_MESSAGE_DO_NOT_USE_AUTH_CACHE.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest): Set SOUP_MESSAGE_DO_NOT_USE_AUTH_CACHE flag to disable cached
        credentials for the message if libsoup >= 2.57.1 is used.

2017-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] HTTP auth layout tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=158919

        Reviewed by Michael Catanzaro.

        Implement NetworkSession::clearCredentials() for soup using the new libsoup API when available.

        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::clearCredentials):
        * NetworkProcess/soup/NetworkSessionSoup.h:

2017-01-01  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2017
        https://bugs.webkit.org/show_bug.cgi?id=166278

        Reviewed by Dan Bernstein.

        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseService/Info.plist:
        * Info.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX-10.9-10.10.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-iOS.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64-10.9-10.10.Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX-10.9-10.10.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist:

2016-12-30  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from the "dom" directory, related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=166569

        Reviewed by Alex Christensen.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveTitle): Updated to use struct.
        (WebKit::WebFrameLoaderClient::updateGlobalHistory): Ditto.
        (WebKit::WebFrameLoaderClient::setTitle): Ditto.

2016-12-27  Alex Christensen  <achristensen@webkit.org>

        reduce PassRefPtr use in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=166452

        Reviewed by Yusuke Suzuki.

        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateCGImage):
        (WKImageCreateFromCGImage):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::createHandle):
        * Shared/ShareableBitmap.h:
        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):
        * Shared/WebImage.cpp:
        (WebKit::WebImage::create):
        (WebKit::WebImage::WebImage):
        * Shared/WebImage.h:
        (WebKit::WebImage::bitmap):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didGetImageForFindMatch):
        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient didGetImageForMatchResult:]):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::takeScreenshot):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle renderedImageWithOptions:]):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        (WebKit::InjectedBundleNodeHandle::renderedImage):
        (WebKit::InjectedBundleNodeHandle::visibleRange):
        (WebKit::InjectedBundleNodeHandle::htmlTableCellElementCellAbove):
        (WebKit::InjectedBundleNodeHandle::documentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlFrameElementContentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::takeSnapshot):
        (WebKit::WebPage::snapshotAtSize):
        (WebKit::WebPage::snapshotNode):
        (WebKit::WebPage::drawRectToImage):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setTopOverhangImage):
        (WebKit::WebPage::setBottomOverhangImage):

2016-12-27  Emanuele Aina  <emanuele.aina@collabora.com>

        Ensure NetworkProcess is ready before whitelisting TLS certificates
        https://bugs.webkit.org/show_bug.cgi?id=162962

        Reviewed by Alex Christensen.

        If the API user tries to whitelist TLS certificates before any web
        view has been created, the action will be ignored because the
        NetworkProcess hasn't been fired up yet.

        For example, the snippet below using the GTK+ API does not work,
        unless the whitelisting is moved after the web view creation:

          webkit_web_context_allow_tls_certificate_for_host(webkit_web_context_get_default(), crt, host);
          webView = webkit_web_view_new();

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::allowSpecificHTTPSCertificateForHost): Ensure
        that the NetworkProcess has been already fired up when adding
        certificates, so they can be whitelisted before the first web view is
        instantiated.

2016-12-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        Propagate the source origin as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=166348

        Reviewed by Darin Adler.

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

2016-12-22  Andy Estes  <aestes@apple.com>

        Reduce QuickLook.h include overhead
        https://bugs.webkit.org/show_bug.cgi?id=166454

        Reviewed by Andreas Kling.

        * WebProcess/Network/WebLoaderStrategy.cpp: Included QuickLook.h for QLPreviewProtocol().
        * WebProcess/Network/WebResourceLoader.cpp: Included QuickLook.h for QuickLookHandle.
        * WebProcess/Network/WebResourceLoader.h: Stopped including QuickLook.h.

2016-12-22  Tim Horton  <timothy_horton@apple.com>

        Null deref under WebPageProxy::applicationDidFinishSnapshottingAfterEnteringBackground
        https://bugs.webkit.org/show_bug.cgi?id=166433
        <rdar://problem/29732407>

        Reviewed by Daniel Bates.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidFinishSnapshottingAfterEnteringBackground):
        m_drawingArea can be null if the process is not valid.

2016-12-22  Andy Estes  <aestes@apple.com>

        Make WebCore::EditorInsertAction an enum class
        https://bugs.webkit.org/show_bug.cgi?id=166424

        Reviewed by Brent Fulgham.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (WebKit::toAPI):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (toWK):

2016-12-22  Zhuo Li  <zachli@apple.com>

        [Cocoa] SPI for setloadsImagesAutomatically
        https://bugs.webkit.org/show_bug.cgi?id=166401

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKPreferences.mm: Call the C API under the hood.
        (-[WKPreferences _loadsImagesAutomatically]):
        (-[WKPreferences _setLoadsImagesAutomatically:]):

        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        Add `_loadsImagesAutomatically` property.

2016-12-22  Eric Carlson  <eric.carlson@apple.com>

        AVPlayerLayer isn't available on every system
        https://bugs.webkit.org/show_bug.cgi?id=166399

        Reviewed by Jer Noble.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm: Use SOFT_LINK_CLASS_OPTIONAL.

2016-12-22  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        MediaStream: ASSERTION FAILED: m_ids.size() == m_handles.size() in MediaDeviceSandboxExtensions
        https://bugs.webkit.org/show_bug.cgi?id=166328

        Reviewed by Eric Carlson.

        This assertion failure happens for ports with sandbox extensions disabled. SandboxExtension is empty and
        HandleArray:size() always returns 0. Disable creation of MediaDevicesSandboxExtension in UserMediaProcessManager
        when building without support of sandbox extension. Disable also WebPage::grantUserMediaDeviceSandboxExtensions
        and WebPage::revokeUserMediaDeviceSandboxExtensions which can be avoided when sandbox extension is empty.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        (WebKit::UserMediaProcessManager::endedCaptureSession):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-12-22  Alejandro G. Castro  <alex@igalia.com>

        [WebRTC] Add support for runtime PeeConnection setting, required after r209757
        https://bugs.webkit.org/show_bug.cgi?id=166346

        Reviewed by Carlos Garcia Campos.

        After that commit we have to enable the peerConnection runtime
        flag if we want webrtc to work. We are not adding a new API for
        the moment to control the peerConnection feature.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_set_enable_media_stream): Use the mediaStream
        setting to control the peerConnection

2016-12-21  Brent Fulgham  <bfulgham@apple.com>

        [Mac][WK2] Stop using file* rules in WebProcess sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=165824
        <rdar://problem/14024823>

        Reviewed by Alexey Proskuryakov

        Switch from blanket 'file*' sandbox rules, to the specific 'file-read*' and 'file-write*' rules
        we actually need.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2016-12-21  Beth Dakin  <bdakin@apple.com>

        Holding down on candidates in the TouchBar should show panel on screen
        https://bugs.webkit.org/show_bug.cgi?id=166367
        -and corresponding-
        <rdar://problem/28479236>

        Reviewed by Tim Horton.

        The showCandidates() helper function is not needed. We can call the AppKit method 
        directly at the one call site.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:

        The panel should appear under the selection, so offset the selection rect.
        (WebKit::WebViewImpl::handleRequestedCandidates):

        No more showCandidates() since we can call it directly. 
        (WebKit::WebViewImpl::showCandidates): Deleted.

2016-12-20  Taras Tsugrii  <ttsugrii@fb.com>

        Fix undefined behavior caused by macro expansion producing 'defined'
        https://bugs.webkit.org/show_bug.cgi?id=166047

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/WKFoundation.h:

2016-12-20  Brent Fulgham  <bfulgham@apple.com>

        Address some style problems found by static analysis
        https://bugs.webkit.org/show_bug.cgi?id=165975

        Reviewed by Alex Christensen.

        Avoid passing large ANGLE data structures through the ANGLEWebKitBridge methods.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * Shared/WebBackForwardListItem.h:

2016-12-20  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Switching or closing a tab leads to all-white tab content if the status bar is double height
        https://bugs.webkit.org/show_bug.cgi?id=166286
        rdar://problem/29593525

        Reviewed by Tim Horton.

        A double-height status bar triggers view resize while snapshotting in the background,
        which also triggers calls to _endAnimatedResize on tab resume. However, it was possible
        for _endAnimatedResize to re-enter via synchronizeDynamicViewportUpdate()/didCommitLayerTree(),
        causing us to use a nil _resizeAnimationView for scale computations, thus setting a zero
        scale on the WKContentView.

        Fix by checking _dynamicViewportUpdateMode again after the call to synchronizeDynamicViewportUpdate(),
        and do a belt-and-braces check for a nil _resizeAnimationView.

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

2016-12-20  Andy Estes  <aestes@apple.com>

        [Cocoa] REGRESSION (r209558): Calling decisionHandler multiple times in webView:decidePolicyForNavigationAction:decisionHandler: leads to a crash
        https://bugs.webkit.org/show_bug.cgi?id=165992
        <rdar://problem/29693817>

        Reviewed by Brady Eidson.

        r209558 added additional move semantics to the decisionHandler block passed to
        -webView:decidePolicyForNavigationAction:decisionHandler:, resulting in a null pointer
        dereference in clients that call the decisionHandler block more than once.

        None of the completion handlers we expose in the WebKit API are intended to be called more
        than once, and we ASSERT in CompletionHandlerCallChecker::didCallCompletionHandler() that
        this doesn't happen.

        This change strenghtens that protection by returning immediately in completion handlers
        called more than once. And in programs linked on or after WebKit 603.1.17, an NSException is
        thrown if a completion handler is called a second time, like we do for completion handlers
        that are never called.

        New API test: WebKit2.DuplicateCompletionHandlerCalls

        * Shared/Cocoa/CompletionHandlerCallChecker.h: Declared completionHandlerHasBeenCalled().
        * Shared/Cocoa/CompletionHandlerCallChecker.mm:
        (WebKit::shouldThrowExceptionForDuplicateCompletionHandlerCall): Added. Returns true if the
        program is linked on or after
        LibraryVersion::FirstWithExceptionsForDuplicateCompletionHandlerCalls.
        (WebKit::CompletionHandlerCallChecker::completionHandlerHasBeenCalled): Added. Returns
        whether or not the completion handler has been called. If it has, and
        shouldThrowExceptionForDuplicateCompletionHandlerCall() returns true, throws an
        NSInternalInconsistencyException.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setInputDelegate:]): Added an early return if the completion handler has
        already been called.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): Ditto.
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse): Ditto.
        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge): Ditto.
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert): Ditto.
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm): Ditto.
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt): Ditto.
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota): Ditto.
        (WebKit::UIDelegate::UIClient::runOpenPanel): Ditto.
        (WebKit::UIDelegate::UIClient::reachedApplicationCacheOriginQuota): Ditto.
        * UIProcess/Cocoa/VersionChecks.h: Added
        FirstWithExceptionsForDuplicateCompletionHandlerCalls with the version number for 603.1.17.

2016-12-20  Dean Jackson  <dino@apple.com>

        Remove INDIE_UI
        https://bugs.webkit.org/show_bug.cgi?id=165881
        <rdar://problem/29672532>

        Reviewed by Simon Fraser.

        The Indie UI work has been discontinued.

        * Configurations/FeatureDefines.xcconfig:

2016-12-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement the updated port/area-based Scroll Snap Module Level 1 Spec
        https://bugs.webkit.org/show_bug.cgi?id=165317
        <rdar://problem/29490956>

        Reviewed by Dean Jackson.

        Remove unused code for adopting scroll snapping in the PDF plugin.

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

2016-12-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Enable ES6 Modules
        https://bugs.webkit.org/show_bug.cgi?id=165849

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetES6ModulesEnabled): Deleted.
        (WKPreferencesGetES6ModulesEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-12-19  Keith Rollin  <krollin@apple.com>

        Fix unwanted deletion of record/replay files
        https://bugs.webkit.org/show_bug.cgi?id=166040

        Reviewed by Alex Christensen.

        As part of some refactoring, the objects that create the meta files
        that are part of the record/replay cache would get deleted. They were
        always getting opened in "write" mode", which would truncate the
        files. Fix this so that the files are opened in the right modes for
        record, replay, and neither.

        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        (WebKit::NetworkCapture::Manager::initialize):

2016-12-19  Gavin Barraclough  <barraclough@apple.com>

        [CSS Parser] Enable CSS Deferred Parsing
        https://bugs.webkit.org/show_bug.cgi?id=165869

        Unreviewed rollout – looks like this regressed performance.

        * Shared/WebPreferencesDefinitions.h:

2016-12-19  Anders Carlsson  <andersca@apple.com>

        REGRESSION: Crash in com.apple.WebKit:IPC::Connection::platformCanSendOutgoingMessages() const + 0
        https://bugs.webkit.org/show_bug.cgi?id=165817
        rdar://problem/29626731

        Reviewed by Dan Bernstein.

        If the receive right is invalidated before we send the message, the kernel won't be able to create a send right,
        and we'll crash due to mach_msg returning MACH_SEND_INVALID_RIGHT.
        
        Fix this by immediately creating a send right, and passing MACH_MSG_TYPE_MOVE_SEND to the attachment constructor.

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

2016-12-18  Simon Fraser  <simon.fraser@apple.com>

        Expose a way for MiniBrowser to simulate header and footer banners
        https://bugs.webkit.org/show_bug.cgi?id=166005

        Reviewed by Wenson Hsieh.
        
        Expose testing SPI that allows a client to simulate the presence of header
        and footer banners. These are simply plumbed through to set FrameView's
        m_headerHeight and m_footerHeight.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setHeaderBannerHeightForTesting:]):
        (-[WKWebView _setFooterBannerHeightForTesting:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setHeaderBannerHeightForTesting):
        (WebKit::WebPageProxy::setFooterBannerHeightForTesting):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setHeaderBannerHeightForTesting):
        (WebKit::WebPage::setFooterBannerHeightForTesting):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-12-16  Dave Hyatt  <hyatt@apple.com>

        [CSS Values] Make separate wrapper classes for the deprecated CSS Values OM
        https://bugs.webkit.org/show_bug.cgi?id=165968

        Reviewed by Andreas Kling.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValue.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapCSSValue):
        (webkit_dom_css_value_constructor):
        (webkit_dom_css_value_get_css_text):
        (webkit_dom_css_value_set_css_text):
        (webkit_dom_css_value_get_css_value_type):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValuePrivate.h:

2016-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Visual viewports: bottom fixed elements disappear behind the keyboard
        https://bugs.webkit.org/show_bug.cgi?id=165983
        <rdar://problem/29409852>

        Reviewed by Simon Fraser.

        Accounts for input view bounds in WebPageProxy::computeCustomFixedPositionRect. To do this, we introduce and
        pass unobscuredContentRectRespectingInputViewBounds along with the regular unobscuredContentRect (which does not
        respect the obscuring keyboard rect). This unobscuredContentRectRespectingInputViewBounds is then used when
        computing the origin of the updated layout viewport rect (and also, when we are _not_ below minimum scale),
        
        Additionally, the size is computed using the (unconstrained) unobscured rect. This is because we previously
        would use the document-constrained version of the unobscured rect, which caused the layout viewport to shrink
        when approaching the max scroll extents of the document while the keyboard is up, since the unobscured rect
        would spill out of the document rect. However, using this unconstrained rect's size also means that if the user
        rubber-bands out of the document rect, we would end up pushing the layout viewport rect out of the document,
        with no way of adjusting it back in without the user scrolling to push the layout viewport into back document
        bounds. To address this, we move the layout rect to be within document bounds after computing its size and
        location.

        Added a new layout test: fast/visual-viewport/ios/fixed-element-on-bottom-with-keyboard.html, and also tweaked
        fixed-caret-position-after-scroll.html to cover these changes.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::unobscuredContentRectRespectingInputViewBounds):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateContentRectsWithState:]):
        (-[WKWebView _inputViewBounds]):

        Returns the current bounds of the input view. For testing purposes.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::unobscuredContentRectRespectingInputViewBounds):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::customFixedPositionRect):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _computeUnobscuredContentRectRespectingInputViewBounds:unobscuredContentRect:inputViewBounds:scale:]):

        Helper to compute the unobscured rect, accounting for the bounds of the current input view.

        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView _didCommitLayerTree:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):

2016-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Deleting a character converted from pinyin after an image causes a Safari crash
        https://bugs.webkit.org/show_bug.cgi?id=165839

        Reviewed by Darin Adler.

        The crash was caused by the payload of the IPC not being decoded correctly when the encoded attributed string
        contains a NSTextAttachment but send<> would still gladly send it to the UIProcess.

        Fixed it by omitting the image as done in r176412 since encoding NSFileWrapper, etc... would require
        quite a bit of work, and IME doesn't really need to see the image in its attributed string.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync): Fixed the bug.

2016-12-16  Andy Estes  <aestes@apple.com>

        Add a setting to suppress keyboard input during provisional navigation
        https://bugs.webkit.org/show_bug.cgi?id=165830

        Reviewed by Brent Fulgham.

        * Shared/WebPreferencesDefinitions.h: Defined
        shouldSuppressKeyboardDOMEventsDuringProvisionalNavigation.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetShouldSuppressKeyboardInputDuringProvisionalNavigation): Added.
        (WKPreferencesGetShouldSuppressKeyboardInputDuringProvisionalNavigation): Added.
        * UIProcess/API/C/WKPreferencesRefPrivate.h: Declared a getter and setter for the new
        preference.
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _shouldSuppressKeyboardInputDuringProvisionalNavigation]): Added.
        (-[WKPreferences _setShouldSuppressKeyboardInputDuringProvisionalNavigation:]): Added.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Declared a property for the new preference.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Mapped the new preference to its corresponding
        WebCore::Setting.

2016-12-16  Chris Dumez  <cdumez@apple.com>

        HTML form validation bubble should be dismissed on navigation
        https://bugs.webkit.org/show_bug.cgi?id=165960
        <rdar://problem/29668086>

        Reviewed by Simon Fraser.

        Dismiss HTML form validation bubble on top-level navigation on WK2.

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

2016-12-16  Jer Noble  <jer.noble@apple.com>

        Small refactor: Use HashCountedSet rather than HashMap<..., int> to store client counts in WebPlaybackSessionManager{,Proxy}.
        https://bugs.webkit.org/show_bug.cgi?id=165807

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.mm:
        (WebKit::WebPlaybackSessionManagerProxy::addClientForContext):
        (WebKit::WebPlaybackSessionManagerProxy::removeClientForContext):
        * WebProcess/cocoa/WebPlaybackSessionManager.h:
        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::addClientForContext):
        (WebKit::WebPlaybackSessionManager::removeClientForContext):

2016-12-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Visual viewports: carets and selection UI are incorrectly positioned when editing fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=165767
        <rdar://problem/29602382>

        Reviewed by Simon Fraser.

        When focusing an input, the position of the caret on iOS is determined by the overridden layout viewport rect in
        the web process. However, this rect is not updated until the end the scroll gesture. Whereas this is fine for
        non-fixed inputs since their document location does not change, fixed inputs effectively change their position
        in the document as the user scrolls. This causes the caret to be 'left behind' in the document position it was
        in at the start of the scroll. To fix this, we deactivate the selection when exiting stable state if the
        assisted node is in a fixed position container, and reenable it upon receiving the next stable state EditorState
        update (as indicated by postLayoutData().isStableStateUpdate). Additionally, we apply similar treatment to the
        web selection assistant -- this time, we need to force the selection view to hide (analagous to deactivating
        the text selection assistant) and show it again upon receiving the next selection change update when the WebPage
        (in the web process) is stable.

        Furthermore, adds test support for querying text caret and selection rects, as well as perform a callback after
        the WebPage has indicated that it is stable, both as SPI on the WKWebView.

        Covered by 4 new layout tests in fast/editing/caret/ios and fast/editing/selection/ios.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:

        Introduce isStableStateUpdate, which is true when the WebPage is known to be in stable state, as well as
        insideFixedPosition, which is true when the current selection is inside a fixed position container.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::isInStableState):
        (WebKit::RemoteLayerTreeTransaction::setIsInStableState):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::description):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _uiTextCaretRect]):

        Introduced a new SPI method for fetching the current rect of the text assistant's caret view, at keyPath
        "selectionView.selection.caretRect".

        (-[WKWebView _uiTextSelectionRects]):

        Renamed (and refactored) from _uiTextSelectionRectViews, which was previously fetching an array of UIViews. I
        found this to cause character-granularity-rect.html to fail due to the array of UIViews here being empty, so I
        refactored this to simply return an array of rects from the keyPath "selectionView.selection.selectionRects" for
        the text selection assistant and @"selectionView.selectionRects" for the web selection assistant.

        (-[WKWebView _doAfterNextStablePresentationUpdate:]):

        Runs the given block after both the UI process and web processes agree that the visible content rect state is 
        stable. To do this, we fire presentation updates until the UI process (via RemoteLayerTreeTransactions)
        discovers that the web page is in stable state. This is used solely for testing purposes.

        (-[WKWebView _firePresentationUpdateForPendingStableStatePresentationCallbacks]):
        (-[WKWebView _uiTextSelectionRectViews]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::inStableState):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didExitStableState]):

        Deactivate the text selection if the assisted node is inside a fixed container.

        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView shouldHideSelectionWhenScrolling]):
        (-[WKContentView _uiTextSelectionRects]):
        (-[WKContentView _didEndScrollingOrZooming]):
        (-[WKContentView _updateChangedSelection:]):

        If the EditorState was created after a stable state update, reactivate the text selection assistant if it exists.
        Additionally, if we are deferring the end scrolling selection update until after the first stable editor state
        update arrives from the web process, we need to also call [_textSelectionAssistant didEndScrollingOverflow]
        and [_webSelectionAssistant didEndScrollingOrZoomingPage] here instead of doing so immediately after scrolling
        finishes. This ensures that selection UI (the callout and selection highlights) do not flicker from their old
        position to the new position when scrolling finishes.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState):
        (WebKit::WebPage::updateVisibleContentRects):

        When updating the layout viewport override rect, also recompute the caret if needed and send an updated
        EditorState over to the UI process.

2016-12-16  Claudio Saavedra  <csaavedra@igalia.com>

        [WK2] SharedMemory: include cleanups
        https://bugs.webkit.org/show_bug.cgi?id=165950

        Reviewed by Žan Doberšek.

        The WTFString include is not needed in the header, so move to the
        Unix file. Use the existing UNIX_DOMAIN_SOCKETS define. Also
        include the WTFOptional header where needed.

        * Platform/SharedMemory.h:
        * Platform/unix/SharedMemoryUnix.cpp:

2016-12-16  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix build break since r209907. Unreviewed.
        https://bugs.webkit.org/show_bug.cgi?id=165954

        * UIProcess/efl/TextCheckerEfl.cpp: Change the remaining TextBreakIterator to UBreakIterator
        (WebKit::nextWordOffset):
        (WebKit::TextChecker::checkTextOfParagraph):

2016-12-15  Darin Adler  <darin@apple.com>

        Use asString instead of toWTFString, toString, or getString when we already checked isString
        https://bugs.webkit.org/show_bug.cgi?id=165895

        Reviewed by Yusuke Suzuki.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant): Use asString/value instead of toWTFString.

2016-12-15  Chris Dumez  <cdumez@apple.com>

        Make sure HTML validation bubble's state is updated after layout
        https://bugs.webkit.org/show_bug.cgi?id=165922
        <rdar://problem/29694730>

        Reviewed by Simon Fraser.

        Make sure HTML validation bubble's state is updated after layout.
        In particular, if the validation bubble's associated element has
        moved or is no longer visible, we now hide the bubble.

        * WebProcess/WebCoreSupport/WebValidationMessageClient.cpp:
        (WebKit::WebValidationMessageClient::showValidationMessage):
        (WebKit::WebValidationMessageClient::hideValidationMessage):
        (WebKit::WebValidationMessageClient::updateValidationBubbleStateIfNeeded):
        * WebProcess/WebCoreSupport/WebValidationMessageClient.h:

2016-12-15  Alex Christensen  <achristensen@webkit.org>

        Improve NetworkSession logging
        https://bugs.webkit.org/show_bug.cgi?id=165941

        Reviewed by Tim Horton.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        One of the "didReceiveResponse completionHandler (cancel)" messages was wrong,
        and other messages could have more useful information without being overwhelming.

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=165937

        Reviewed by Simon Fraser.

        * WebKit2.xcodeproj/project.pbxproj:

2016-12-15  Anders Carlsson  <andersca@apple.com>

        Add more mach_msg logging instrumentation
        https://bugs.webkit.org/show_bug.cgi?id=165914

        Reviewed by Darin Adler.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendMessage):
        (IPC::Connection::sendOutgoingMessage):
        * Platform/IPC/mac/MachMessage.h:
        (IPC::MachMessage::messageName):
        (IPC::MachMessage::setMessageName):

2016-12-15  Konstantin Tokarev  <annulen@yandex.ru>

        Added missing override and final specifiers
        https://bugs.webkit.org/show_bug.cgi?id=165903

        Reviewed by Darin Adler.

        * UIProcess/API/gtk/WebKitGeolocationProvider.h:
        * UIProcess/WebFormSubmissionListenerProxy.h:
        * UIProcess/WebFramePolicyListenerProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/GObjectXPathNSResolver.h:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        * WebProcess/WebCoreSupport/WebPlugInClient.h:
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        * WebProcess/WebPage/FindController.h:

2016-12-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Don't disable position:fixed when a form element has focus
        https://bugs.webkit.org/show_bug.cgi?id=165891
        rdar://problem/29271694

        Reviewed by Wenson Hsieh.

        Before visual viewports, we had to lay out position:fixed relative to the document rect (effectively
        disabling position:fixed) when a form element was focused, to ensure that we could scroll to inputs
        inside position:Fixed.

        When visual viewports are enabled, we can do a better job of this, and keep position:fixed active.
        
        Test: fast/visual-viewport/ios/zoomed-focus-in-fixed.html

        * UIProcess/API/Cocoa/WKWebView.mm: 
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]): Soon this will use
        insideFixed to have better scroll-into-view behavior.
        (-[WKWebView _zoomToFocusRect:selectionRect:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):
        (-[WKContentView _zoomToFocusRect:selectionRect:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]): Deleted.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect): Don't fall back to using the documentRect as the fixed
        position rect if visual viewports are enabled.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation): Don't reset the customtFixedPositionRect around computing element
        coordinates if visual viewports are enabled.

2016-12-15  Andreas Kling  <akling@apple.com>

        Always clear RenderLayer backing stores when going into page cache.
        <https://webkit.org/b/165901>

        Reviewed by Simon Fraser.

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

2016-12-15  Darin Adler  <darin@apple.com>

        Remove custom binding for MediaDevices
        https://bugs.webkit.org/show_bug.cgi?id=165894

        Reviewed by Eric Carlson.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        Added include of MediaConstraintsImpl.h, now needed because we
        removed some unneeded includes from the WebCore headers.

2016-12-15  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Enable CSS Deferred Parsing
        https://bugs.webkit.org/show_bug.cgi?id=165869

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefinitions.h:

2016-12-14  Andreas Kling  <akling@apple.com>

        Only send Messages::WebPageProxy::DidSaveToPageCache once when entering page cache.
        <https://webkit.org/b/165887>

        Reviewed by Brady Eidson.

        We were sending one of these IPC messages per frame when a page enters the page cache,
        and we really only need one, so only do it for the main frame.

        (This message is used to adopt the page cache on the UI process side, in case another
        web process currently owns the cache. That happens in WebProcessPool::processDidCachePage().)

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

2016-12-14  Simon Fraser  <simon.fraser@apple.com>

        Fix cause of viewport-related flakiness in iOS tests
        https://bugs.webkit.org/show_bug.cgi?id=165878

        Reviewed by Tim Horton.

        When TestController::platformConfigureViewForTest() changes the view size for a flexible
        viewport test, the page would not have updated with the new scale by the time the load event
        fired, causing flakiness depending on test order.

        This was caused by code added in r170325 that delayed visible content rect updates until
        after the UI process has received the transaction after didCommitLoad. So fix by overriding
        this mechanism if the view has been resized.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::isFirstUpdateForNewViewSize):
        (WebKit::operator==):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateContentRectsWithState:]):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setSize):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

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

        [WebIDL] Add support for converting dictionaries to JS
        https://bugs.webkit.org/show_bug.cgi?id=165367

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        Add missing directories to look in for headers.

2016-12-14  Anders Carlsson  <andersca@apple.com>

        Add WKContextRefreshPlugIns
        https://bugs.webkit.org/show_bug.cgi?id=165879
        rdar://problem/29602414

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextRefreshPlugIns):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::refreshPlugins):
        * UIProcess/WebProcessPool.h:
        * WebProcess/Plugins/WebPluginInfoProvider.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::refreshPlugins):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-12-14  Tim Horton  <timothy_horton@apple.com>

        API Test Fullscreen.TopContentInset is asserting on Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=165877

        Reviewed by Brady Eidson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setTopContentInset):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        We don't use fences on Yosemite, but this codepath still tried to.
        Instead of guarding with PLATFORM(COCOA), make use of the more accurate
        HAVE(COREANIMATION_FENCES) guard.

2016-12-14  Anders Carlsson  <andersca@apple.com>

        Add some instrumentation to try to detect a crash on the bots
        https://bugs.webkit.org/show_bug.cgi?id=165866

        Reviewed by Sam Weinig.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendMessage):

2016-12-14  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Implement deferred parsing of properties, @media, @supports and @keyframes
        https://bugs.webkit.org/show_bug.cgi?id=165743

        Reviewed by Dean Jackson.

        Repurpose the newCSSParserEnabled preference for deferred parsing. Just change the name
        from "new" to "deferred."

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetDeferredCSSParserEnabled):
        (WKPreferencesGetDeferredCSSParserEnabled):
        (WKPreferencesSetNewCSSParserEnabled): Deleted.
        (WKPreferencesGetNewCSSParserEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-12-14  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r209806.

        Plugin-common doesn't define 'home-subpath'. Instead it has 'home-library-subpath'. Switch to the correct
        function. Also, 'home-library-subpath' adds '/Library' to the path, so revise the arguments so that we
        do not generate paths like '/home/username/Library/Library/Keychains'.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:

2016-12-14  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r209779.

        The 'Keygen' element requires the ability to create new keys in '$HOME/Library/Keychains'. Remove the
        WebProcess and Plugin sandbox restrictions on per-user Keychain creation to support this use.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2016-12-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use JSValue::toWTFString instead of calling toString(exec) and value(exec)
        https://bugs.webkit.org/show_bug.cgi?id=165795

        Reviewed by Saam Barati.

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

2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>

        REGRESSION(r207879-207891): [GStreamer] Introduced many layout test failures and crashes, bots exiting early
        https://bugs.webkit.org/show_bug.cgi?id=164022

        Reviewed by Xabier Rodriguez-Calvar.

        * Shared/WebPreferencesDefinitions.h:
        New GStreamerEnabled preference, defaults to true.
        * WebProcess/WebPage/WebPage.cpp: Ditto.
        (WebKit::WebPage::updatePreferences):

2016-12-13  Commit Queue  <commit-queue@webkit.org>

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

        Cause build failures (Requested by yusukesuzuki on #webkit).

        Reverted changeset:

        "Use JSValue::toWTFString instead of calling toString(exec)
        and value(exec)"
        https://bugs.webkit.org/show_bug.cgi?id=165795
        http://trac.webkit.org/changeset/209792

2016-12-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use JSValue::toWTFString instead of calling toString(exec) and value(exec)
        https://bugs.webkit.org/show_bug.cgi?id=165795

        Reviewed by Saam Barati.

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

2016-12-13  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2016-12-13  Jer Noble  <jer.noble@apple.com>

        Fullscreen in WebKit2 does not restore topContentInset upon exiting; leaves top of page not visible
        https://bugs.webkit.org/show_bug.cgi?id=165697

        Delegate the values of topContentInset() from WebViewImpl (used by WKWebView and WKView) to the
        WebPageProxy, so that setting the topContentInset() on WebPageProxy is reflected in the getters
        for the two view classes.

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::topContentInset): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateContentInsetsIfAutomatic):
        (WebKit::WebViewImpl::topContentInset):
        (WebKit::WebViewImpl::setTopContentInset):
        (WebKit::WebViewImpl::dispatchSetTopContentInset):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController _saveTopContentInset]): Deleted.
        (-[WKFullScreenWindowController _restoreTopContentInset]): Deleted.

2016-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Mac][WK2] Tighten Keychain directory access
        https://bugs.webkit.org/show_bug.cgi?id=165818
        <rdar://problem/16863857>

        Reviewed by Anders Carlsson.

        Lock down Keychain directory access to just the file-read-data, file-read-metadata, and
        file-write-data operations we actually need.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2016-12-13  Andy Estes  <aestes@apple.com>

        [Cocoa] Implement -shouldInsertText: on WKWebProcessPlugInEditingDelegate
        https://bugs.webkit.org/show_bug.cgi?id=165785
        <rdar://problem/26929398>

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInEditingDelegate.h: Defined
        WKEditorInsertAction and declared
        -_webProcessPlugInBrowserContextController:shouldInsertText:replacingRange:givenAction:.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (toWK): Added. Mapped a WebCore::EditorInsertAction to a WKEditorInsertAction.
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]): Implemented
        EditorClient::shouldInsertText() by calling
        -_webProcessPlugInBrowserContextController:shouldInsertText:replacingRange:givenAction: with
        the text, wrapped range handle, and action. Added shouldInsertText to DelegateMethods and
        initialized it according to whether the delegate responds to shouldInsertText:.

2016-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        NSArray leaks seen in Safari, allocated under WKIconDatabaseTryCopyCGImageArrayForURL
        https://bugs.webkit.org/show_bug.cgi?id=165809

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        (WKIconDatabaseTryCopyCGImageArrayForURL):
        Avoid an extra retain on already newly created array.

2016-12-13  Eric Carlson  <eric.carlson@apple.com>

        Annotate MediaStream and WebRTC idl with EnabledAtRuntime flag
        https://bugs.webkit.org/show_bug.cgi?id=165251

        Reviewed by Youenn Fablet.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Update the media stream and peer connection runtime
        feature instead of the setting.

2016-12-13  Sergio Villar Senin  <svillar@igalia.com>

        Fix GTK build after r209733
        https://bugs.webkit.org/show_bug.cgi?id=165794

        Document::visibilityState() now returns an IDL string enumeration.

        Reviewed by Žan Doberšek.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp:
        (webkit_dom_document_get_visibility_state):

2016-12-12  Dean Jackson  <dino@apple.com>

        [iOS] MediaDocument "Done" button should navigate the page back
        https://bugs.webkit.org/show_bug.cgi?id=165779

        Reviewed by Sam Weinig.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenModelContext::requestFullscreenMode):
        (WebKit::WebVideoFullscreenManagerProxy::requestFullscreenMode):
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.messages.in:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::requestFullscreenMode):

2016-12-12  Tim Horton  <timothy_horton@apple.com>

        Provide SPI to avoid blocking on painting when coming into view
        https://bugs.webkit.org/show_bug.cgi?id=165780
        <rdar://problem/29009559>

        Reviewed by Simon Fraser.

        By default, when parenting a WKWebView which was previously in-window,
        we block on painting to ensure that we don't flash stale content.
        We added SPI to disable this behavior to WKWebViewConfiguration, but
        some clients might want the behavior most of the time, but sometimes
        instead want to not block the UI process main thread, but instead do
        their own work (e.g. removing a snapshot) when painting eventually occurs.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForPainting:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Tell WebPageProxy not to block on painting next time we are parented,
        and use doAfterNextPresentationUpdate to call the block when the painting
        does eventually happen. This SPI must be called before - but in the same
        runloop cycle - the WKWebView is brought back in-window to work correctly.
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::skipWaitingForPaintAfterNextViewDidMoveToWindow):
        If we would block because we're coming in-window, but the bit to skip
        blocking the next time we get brought in-window is set, reset the bit, 
        and avoid blocking.

2016-12-12  Chris Dumez  <cdumez@apple.com>

        Document.visibilityState should use an IDL string enumeration
        https://bugs.webkit.org/show_bug.cgi?id=165774

        Reviewed by Daniel Bates.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toPageVisibilityState):

2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed attempt to fix EFL and Mac/cmake builds after r209665.
        https://bugs.webkit.org/show_bug.cgi?id=165686

        * PlatformEfl.cmake: WebKit2 should precede other target so that right
        config.h comes first in include path.

2016-12-11  Tim Horton  <timothy_horton@apple.com>

        Quarter-second stalls scrolling images that are links because of sync getPositionInformation
        https://bugs.webkit.org/show_bug.cgi?id=165707

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView positionInformationForActionSheetAssistant:]):
        (-[WKContentView updatePositionInformationForActionSheetAssistant:]):
        For now, synchronously block when presenting the action sheet if we
        don't have a snapshot ready.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        Respect includeSnapshot in another place in getPositionInformation,
        so that many getPositionInformations don't have to do extra snapshotting work.

2016-12-10  Filip Pizlo  <fpizlo@apple.com>

        The DOM should have an advancing wavefront opaque root barrier
        https://bugs.webkit.org/show_bug.cgi?id=165712

        Reviewed by Yusuke Suzuki.
        
        Propagate the JSDOMWindowBase::commonVM() -> commonVM() change.

        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::WebMemorySampler::sampleWebKit):
        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::javaScriptObjectsCount):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        (WebKit::WebPage::getBytecodeProfile):
        (WebKit::WebPage::getSamplingProfilerOutput):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getWebCoreStatistics):

2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed build fix for EFL after r209665

        * UIProcess/efl/TextCheckerClientEfl.h:

2016-12-10  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Include WTF, JSC, and WebCore headers automatically to targers using them
        https://bugs.webkit.org/show_bug.cgi?id=165686

        Reviewed by Michael Catanzaro.

        This change reduces duplication of include path lists between modules,
        and reduces future need for fixes like r209605 (broken build because of
        WebCore header suddenly becoming used in WebKit2).

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:

2016-12-10  Antti Koivisto  <antti@apple.com>

        CrashTracer: com.apple.WebKit.Networking at WTF::ThreadSafeRefCounted<WebKit::NetworkCache::IOChannel>::deref
        https://bugs.webkit.org/show_bug.cgi?id=165659
        <rdar://problem/27077977>

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::~IOChannel):

            Add non-inlined destructor and release assert against double deletion to narrow down this crash.

2016-12-09  Brent Fulgham  <bfulgham@apple.com>

        WebCore::Timer is not compatible with UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=165706
        <rdar://problem/29360564>

        Reviewed by Andy Estes.

        Anders has explained to me (at least twice) that WebCore::Timer must not
        be used in UIProcess code. A recent bug fix introduced a WebCore::Timer,
        which led to another crash.
        
        This patch switches from WebCore::Timer to WTF::RunLoop::Timer to avoid
        the problem.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationState):

2016-12-09  Eric Carlson  <eric.carlson@apple.com>

        Annotate MediaStream and WebRTC idl with EnabledAtRuntime flag
        https://bugs.webkit.org/show_bug.cgi?id=165251

        Reviewed by Dean Jackson.

        Based on a patch by Dr Alex Gouaillard <agouaillard@gmail.com>

        * Shared/WebPreferencesDefinitions.h: Add peerConnectionEnabled.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPeerConnectionEnabled): Added.
        (WKPreferencesGetPeerConnectionEnabled): Added.
        * UIProcess/API/C/WKPreferencesRef.h:

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Add WebKitMediaStreamEnabled
          and WebKitPeerConnectionEnabled.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Initialize the peerConnection preference.

2016-12-09  Brady Eidson  <beidson@apple.com>

        Re-landing:
        Add _WKIconLoadingDelegate SPI.
        https://bugs.webkit.org/show_bug.cgi?id=164894

        Reviewed by Alex Christensen.

        With this client, WebCore will ask the FrameLoaderClient about each icon found in the <head>.

        WebKit2 will then ask the embedding app - for each icon - if it wants that icon to load.

        For icons the app decides to load, WebKit will pass the data to the app without storing locally.

        * UIProcess/API/APIIconLoadingClient.h: Copied from Source/WebCore/html/LinkIconCollector.h.
        (API::IconLoadingClient::~IconLoadingClient):
        (API::IconLoadingClient::getLoadDecisionForIcon):

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

        * UIProcess/API/Cocoa/_WKIconLoadingDelegate.h: Copied from Source/WebCore/html/LinkIconCollector.h.

        * UIProcess/API/Cocoa/_WKLinkIconParameters.h: Copied from Source/WebCore/html/LinkIconCollector.h.
        * UIProcess/API/Cocoa/_WKLinkIconParameters.mm: Copied from Source/WebCore/html/LinkIconCollector.h.
        (-[_WKLinkIconParameters _initWithLinkIcon:]):
        (-[_WKLinkIconParameters url]):
        (-[_WKLinkIconParameters mimeType]):
        (-[_WKLinkIconParameters size]):
        (-[_WKLinkIconParameters iconType]):
        * UIProcess/API/Cocoa/_WKLinkIconParametersInternal.h: Copied from Source/WebCore/html/LinkIconCollector.h.

        * UIProcess/Cocoa/IconLoadingDelegate.h: Copied from Source/WebCore/html/LinkIconCollector.h.
        * UIProcess/Cocoa/IconLoadingDelegate.mm: Added.
        (WebKit::IconLoadingDelegate::IconLoadingDelegate):
        (WebKit::IconLoadingDelegate::~IconLoadingDelegate):
        (WebKit::IconLoadingDelegate::createIconLoadingClient):
        (WebKit::IconLoadingDelegate::delegate):
        (WebKit::IconLoadingDelegate::setDelegate):
        (WebKit::IconLoadingDelegate::IconLoadingClient::IconLoadingClient):
        (WebKit::IconLoadingDelegate::IconLoadingClient::~IconLoadingClient):
        (WebKit::IconLoadingDelegate::IconLoadingClient::getLoadDecisionForIcon):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setIconLoadingClient):
        (WebKit::WebPageProxy::getLoadDecisionForIcon):
        (WebKit::WebPageProxy::finishedLoadingIcon):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::iconLoadingClient):
        * UIProcess/WebPageProxy.messages.in:

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::useIconLoadingClient):
        (WebKit::WebFrameLoaderClient::getLoadDecisionForIcon):
        (WebKit::WebFrameLoaderClient::finishedLoadingIcon):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::WebFrameLoaderClient::setUseIconLoadingClient):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didGetLoadDecisionForIcon):
        (WebKit::WebPage::setUseIconLoadingClient):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-12-09  Simon Fraser  <simon.fraser@apple.com>

        Fix initialization of contentUpdateFrequency
        https://bugs.webkit.org/show_bug.cgi?id=165705
        rdar://problem/29602039

        Reviewed by Tim Horton.

        The value that controls web content update frequency was not being initialized.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):

2016-12-09  Anders Carlsson  <andersca@apple.com>

        Once we can send Mach messages again, make sure to send any pending outgoing messages
        https://bugs.webkit.org/show_bug.cgi?id=165693

        Reviewed by Brady Eidson.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::initializeSendSource):

2016-12-09  Beth Dakin  <bdakin@apple.com>

        Password fields should not show the emoji button in TouchBar
        https://bugs.webkit.org/show_bug.cgi?id=165673
        -and corresponding-
        rdar://problem/29235739

        Reviewed by Wenson Hsieh.

        This patch adds a new member variable for the password touch bar and password 
        candidateListTouchBarItem. Since this TouchBar will actually have a different set 
        of identifiers than the plain text TouchBar, it should just have its own variable.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:

        Return m_passwordTextCandidateListTouchBarItem when appropriate.
        (WebKit::WebViewImpl::candidateListTouchBarItem):

        The candidate list should be the only item for passwords.
        (WebKit::passwordTextTouchBarDefaultItemIdentifiers):

        Account for m_passwordTextTouchBar.
        (WebKit::WebViewImpl::updateTouchBarAndRefreshTextBarIdentifiers):
        (WebKit::WebViewImpl::setUpTextTouchBar):
        (WebKit::WebViewImpl::textTouchBar):

        The empty candidates array is not needed. We can just set @[ ] as the candidates 
        for the m_passwordTextCandidateListTouchBarItem. Safe guards already exist in the 
        other parts of the code to prevent us from requesting or setting other candidates 
        when in a password field. 
        (WebKit::WebViewImpl::updateTextTouchBar):

2016-12-09  Keith Rollin  <krollin@apple.com>

        Fix string specification in print format
        https://bugs.webkit.org/show_bug.cgi?id=165650

        Reviewed by Alex Christensen.

        Change "%{public}s" string specifier to something that can be changed
        to "%s" at compile time when the build environment doesn't support the
        former.

        * NetworkProcess/capture/NetworkCaptureLogging.h:
        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        (WebKit::NetworkCapture::Manager::initialize):
        (WebKit::NetworkCapture::Manager::findMatch):
        (WebKit::NetworkCapture::Manager::findExactMatch):
        (WebKit::NetworkCapture::Manager::findBestFuzzyMatch):
        (WebKit::NetworkCapture::Manager::fuzzyMatchURLs):
        (WebKit::NetworkCapture::Manager::logPlayedBackResource):
        (WebKit::NetworkCapture::Manager::openCacheFile):
        (WebKit::NetworkCapture::Manager::getLine):
        * NetworkProcess/capture/NetworkCaptureRecorder.cpp:
        (WebKit::NetworkCapture::Recorder::recordRequestSent):
        (WebKit::NetworkCapture::Recorder::recordResponseReceived):
        (WebKit::NetworkCapture::Recorder::recordRedirectReceived):
        (WebKit::NetworkCapture::Recorder::recordRedirectSent):
        (WebKit::NetworkCapture::Recorder::writeEvents):
        * NetworkProcess/capture/NetworkCaptureResource.cpp:
        (WebKit::NetworkCapture::Resource::url):
        (WebKit::NetworkCapture::Resource::EventStream::nextEvent):
        * NetworkProcess/capture/NetworkDataTaskReplay.cpp:
        (WebKit::NetworkCapture::NetworkDataTaskReplay::NetworkDataTaskReplay):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::~NetworkDataTaskReplay):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::resume):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::suspend):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::complete):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::invalidateAndCancel):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::enqueueEventHandler):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayRequestSent):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayResponseReceived):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayRedirectReceived):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayRedirectSent):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayDataReceived):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayFinished):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::didReceiveResponse):

2016-12-09  Jeremy Jones  <jeremyj@apple.com>

        WebView doesn't become first responder in element fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=165664
        rdar://problem/28927252

        Reviewed by Tim Horton.

        WebView was being set as the first responder while the contentView was still hidden.
        A view can not become first responder while it or its ancestor is hidden.

        This change waits until after the contentView is visible to make the web view the first responder.

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

2016-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix. Thanks to Konstantin Tokarev and Csaba Osztrogonác
        for pointing out the fix.

        * CMakeLists.txt: add WebCore/html/canvas to include paths.

2016-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Fix build after r209558
        https://bugs.webkit.org/show_bug.cgi?id=165653

        Unreviewed build fix.

        * UIProcess/API/APIPolicyClient.h: include WebsitePolicies.h.
        * UIProcess/API/gtk/WebKitPolicyClient.cpp: ditto.
        * UIProcess/API/gtk/WebKitPolicyDecision.cpp:
        (webkit_policy_decision_use):  pass empty structure to new required argument.

2016-12-09  Gavin Barraclough  <barraclough@apple.com>

        Revert - Add _WKIconLoadingDelegate SPI
        https://bugs.webkit.org/show_bug.cgi?id=164894

        Unreviewed rollout due to performance regression.

        * PlatformMac.cmake:
        * UIProcess/API/APIIconLoadingClient.h: Removed.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _iconLoadingDelegate]): Deleted.
        (-[WKWebView _setIconLoadingDelegate:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKIconLoadingDelegate.h: Removed.
        * UIProcess/API/Cocoa/_WKLinkIconParameters.h: Removed.
        * UIProcess/API/Cocoa/_WKLinkIconParameters.mm: Removed.
        * UIProcess/API/Cocoa/_WKLinkIconParametersInternal.h: Removed.
        * UIProcess/Cocoa/IconLoadingDelegate.h: Removed.
        * UIProcess/Cocoa/IconLoadingDelegate.mm: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setIconLoadingClient): Deleted.
        (WebKit::WebPageProxy::getLoadDecisionForIcon): Deleted.
        (WebKit::WebPageProxy::finishedLoadingIcon): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::iconLoadingClient): Deleted.
        * UIProcess/WebPageProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::useIconLoadingClient): Deleted.
        (WebKit::WebFrameLoaderClient::getLoadDecisionForIcon): Deleted.
        (WebKit::WebFrameLoaderClient::finishedLoadingIcon): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::WebFrameLoaderClient::setUseIconLoadingClient): Deleted.
        (): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didGetLoadDecisionForIcon): Deleted.
        (WebKit::WebPage::setUseIconLoadingClient): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-12-08  Keith Rollin  <krollin@apple.com>

        Move FileHandle to WebCore FileHandle.h
        https://bugs.webkit.org/show_bug.cgi?id=165562

        Reviewed by Alex Christensen.

        Move FileHandle from NetworkCaptureTypes.h (which can now be deleted)
        to WebCore. Update client code to use the new version.

        * NetworkProcess/capture/NetworkCaptureEvent.cpp:
        * NetworkProcess/capture/NetworkCaptureEvent.h:
        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        (WebKit::NetworkCapture::Manager::initialize):
        (WebKit::NetworkCapture::Manager::terminate):
        (WebKit::NetworkCapture::Manager::logRecordedResource):
        (WebKit::NetworkCapture::Manager::logLoadedResource):
        (WebKit::NetworkCapture::Manager::logPlayedBackResource):
        (WebKit::NetworkCapture::Manager::openCacheFile):
        (WebKit::NetworkCapture::Manager::ensureFileHandle): Deleted.
        (WebKit::NetworkCapture::Manager::printToFile): Deleted.
        * NetworkProcess/capture/NetworkCaptureManager.h:
        * NetworkProcess/capture/NetworkCaptureRecorder.cpp:
        (WebKit::NetworkCapture::Recorder::writeEvents):
        * NetworkProcess/capture/NetworkCaptureTypes.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2016-12-08  Anders Carlsson  <andersca@apple.com>

        Attempt to fix the iOS build.

        * Platform/IPC/mac/MachMessage.cpp:

2016-12-08  Anders Carlsson  <andersca@apple.com>

        Defer sending Mach messages if the queue is full
        https://bugs.webkit.org/show_bug.cgi?id=165622
        rdar://problem/29518036

        Reviewed by Brady Eidson.

        * Platform/IPC/Connection.cpp:
        Include MachMessage.h so the Connection destructor can do its thing.

        * Platform/IPC/Connection.h:
        Add new members.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate):
        Null out the pending outgoing mach message.

        (IPC::Connection::sendMessage):
        New helper that will send a Mach message. If we time out, store the message in m_pendingOutgoingMachMessage.
        When our send source will be triggered we'll try to send the message again.

        (IPC::Connection::platformCanSendOutgoingMessages):
        We can only send messages if we don't have a pending outgoing message.

        (IPC::Connection::sendOutgoingMessage):
        Call the newly added sendMessage function.

        (IPC::Connection::initializeSendSource):
        Add the DISPATCH_MACH_SEND_POSSIBLE mask (and DISPATCH_MACH_SEND_DEAD which was previously implicit).
        In our event handler, check for DISPATCH_MACH_SEND_POSSIBLE and try to send the pending outgoing message again.

        * Platform/IPC/mac/MachMessage.cpp:
        (IPC::MachMessage::create):
        Rename length to size.

        (IPC::MachMessage::MachMessage):
        Initialize m_shouldFreeDescriptors.

        (IPC::MachMessage::~MachMessage):
        Call mach_msg_destroy, which will free the descriptors.

        (IPC::MachMessage::leakDescriptors):
        Set m_shouldFreeDescriptors to false.

        * Platform/IPC/mac/MachMessage.h:
        (IPC::MachMessage::size):
        (IPC::MachMessage::length): Deleted.

2016-12-08  Chelsea Pugh  <cpugh@apple.com>

        [iOS] WKWebView should not allow app links to be opened on back or forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=165502

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Add a condition to shouldOpenAppLinks
        (which we use when creating a NavigationAction) that the navigationActionData is not a navigation
        of type BackForward. This way, we don't open app links when a navigation is done via back or
        forward.

2016-12-08  Filip Pizlo  <fpizlo@apple.com>

        Enable SharedArrayBuffer, remove the flag
        https://bugs.webkit.org/show_bug.cgi?id=165614

        Rubber stamped by Geoffrey Garen.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI for sending WebsiteSettings to WebProcess during navigation
        https://bugs.webkit.org/show_bug.cgi?id=165517
        <rdar://29341068>

        We add the ability for the navigation client to send settings to the WebProcess 
        based on the URL of the document being navigated to. This approach adds no new IPC 
        messages and allows the application to decide what settings to use during navigation 
        instead of declaratively before navigation. Right now there is only one setting, 
        whether to disable content blockers, but this infrastructure can be used for more settings.

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * Shared/WebsitePolicies.h: Added.
        (WebKit::WebsitePolicies::encode):
        (WebKit::WebsitePolicies::decode):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::decidePolicyForNavigationAction):
        (API::NavigationClient::decidePolicyForNavigationResponse):
        * UIProcess/API/APIPolicyClient.h:
        (API::PolicyClient::decidePolicyForNavigationAction):
        (API::PolicyClient::decidePolicyForNewWindowAction):
        (API::PolicyClient::decidePolicyForResponse):
        * UIProcess/API/APIWebsitePolicies.cpp: Added.
        (API::WebsitePolicies::create):
        * UIProcess/API/APIWebsitePolicies.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerUse):
        (WKFramePolicyListenerUseWithPolicies):
        * UIProcess/API/C/WKFramePolicyListener.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPagePolicyClient):
        * UIProcess/API/C/WKWebsitePolicies.cpp: Added.
        (WKWebsitePoliciesGetTypeID):
        (WKWebsitePoliciesCreate):
        (WKWebsitePoliciesSetContentBlockersEnabled):
        (WKWebsitePoliciesGetContentBlockersEnabled):
        * UIProcess/API/C/WKWebsitePolicies.h: Added.
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h: Added.
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm: Added.
        (-[_WKWebsitePolicies dealloc]):
        (-[_WKWebsitePolicies init]):
        (-[_WKWebsitePolicies setContentBlockersEnabled:]):
        (-[_WKWebsitePolicies contentBlockersEnabled]):
        (-[_WKWebsitePolicies description]):
        (-[_WKWebsitePolicies _apiObject]):
        * UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h: Added.
        (WebKit::wrapper):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::reloadBrowsingContext):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::tryAppLink):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):
        * UIProcess/WebFormSubmissionListenerProxy.cpp:
        (WebKit::WebFormSubmissionListenerProxy::continueSubmission):
        * UIProcess/WebFrameListenerProxy.cpp:
        (WebKit::WebFrameListenerProxy::receivedPolicyDecision):
        * UIProcess/WebFrameListenerProxy.h:
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::create):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::receivedPolicyDecision):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2016-12-08  Antti Koivisto  <antti@apple.com>

        Salt network cache hashes
        https://bugs.webkit.org/show_bug.cgi?id=164924

        Reviewed by Alex Christensen.

        To enhance privacy make cache content unidentifiable from file names alone.
        This is done by generating a unique persistent salt for each cache instance.
        It is used when computing hashes used in file names.

        The patch also replaces plain text partition directory names with salted hashes.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::makeCacheKey):
        (WebKit::NetworkCache::makeCacheKey): Deleted.
        * NetworkProcess/cache/NetworkCache.h:

            Increment cache version.

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::BlobStorage):
        (WebKit::NetworkCache::BlobStorage::add):
        (WebKit::NetworkCache::BlobStorage::get):

            Use salt for blob content hash.

        * NetworkProcess/cache/NetworkCacheBlobStorage.h:
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::computeSHA1):

            For simplicity all SHA1s are now salted.

        (WebKit::NetworkCache::makeSalt):
        (WebKit::NetworkCache::readOrMakeSalt):

            Read salt if it exists, generate and persist it otherwise.

        * NetworkProcess/cache/NetworkCacheData.h:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::Key):

            Remove the "No partition" string and just empty.
            That was only needed to have a directory name of some sort.

        (WebKit::NetworkCache::Key::computeHash):

            Use salt for key hash.

        (WebKit::NetworkCache::Key::computePartitionHash):

            Separate hash for partition.

        * NetworkProcess/cache/NetworkCacheKey.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::makeSubresourcesKey):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::saveToDiskIfReady):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveSubresourcesEntry):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::makeSaltFilePath):
        (WebKit::NetworkCache::Storage::open):

            Cache can't be opened if we can't read or persist a salt.

        (WebKit::NetworkCache::traverseRecordsFiles):
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::recordDirectoryPathForKey):

            Use the partition hash in the directory name instead of a plain text name.

        (WebKit::NetworkCache::decodeRecordHeader):
        (WebKit::NetworkCache::Storage::readRecord):
        (WebKit::NetworkCache::Storage::encodeRecord):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::salt):

2016-12-08  Eric Carlson  <eric.carlson@apple.com>

        Fix the EFL build.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Add another ENABLE(MEDIA_STREAM) guard.

2016-12-08  Tomas Popela  <tpopela@redhat.com>

        [GTK] Process accelerated compositing env variables only if they are really enabled
        https://bugs.webkit.org/show_bug.cgi?id=165300

        Don't process the WEBKIT_FORCE_COMPOSITING_MODE and
        WEBKIT_DISABLE_COMPOSITING_MODE env variables if they are disabled
        (eg. WEBKIT_DISABLE_COMPOSITING_MODE=0).

        Reviewed by Michael Catanzaro.

        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * CMakeLists.txt:
        Add the new NetworkProcess/capture include directory to find new headers from r209498.
        * NetworkProcess/capture/NetworkCaptureEvent.cpp:
        (WebKit::NetworkCapture::Response::Response):
        (WebKit::NetworkCapture::Error::Error):
        The String constructor was ambiguous after r209498 because URL has an operator NSString* and String has an NSString constructor.
        We should get rid of operator NSString* and operator String on URL.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        Add some ENABLE(MEDIA_STREAM) macros to fix the build without it enabled after r209512.

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        Fix iOS debug build after r209498
        https://bugs.webkit.org/show_bug.cgi?id=164527

        * NetworkProcess/capture/NetworkCaptureLogging.h:
        Logs were causing compile warnings/errors.  Disable logs for now.

2016-12-07  Dean Jackson  <dino@apple.com>

        Remove runtime toggle for pointer-lock
        https://bugs.webkit.org/show_bug.cgi?id=165577
        <rdar://problems/29566996>

        Reviewed by Jon Lee.

        Remove any runtime calls to check if pointer-lock is enabled. It's
        either compiled in or out.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPointerLockEnabled): Deleted.
        (WKPreferencesGetPointerLockEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-12-07  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream][Mac] Revoke sandbox extensions when capture ends
        https://bugs.webkit.org/show_bug.cgi?id=165476

        Reviewed by Brady Eidson.

        Track media capture by process so it is possible to revoke the sandbox extensions issued to
        a web process when capture stops. Allocate WK2 user media permission manager lazily rather
        than every time a page is created as most pages won't need one.

        * CMakeLists.txt: Add new files.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::UserMediaPermissionRequestManagerProxy): Register
          with process manager.
        (WebKit::UserMediaPermissionRequestManagerProxy::~UserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Move sandbox 
          extension code to the process manager.
        (WebKit::UserMediaPermissionRequestManagerProxy::stopCapture): New.
        (WebKit::UserMediaPermissionRequestManagerProxy::startedCaptureSession): New, report state
          change to the process manager.
        (WebKit::UserMediaPermissionRequestManagerProxy::endedCaptureSession): Ditto.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

        * UIProcess/UserMediaProcessManager.cpp: Added.
        (WebKit::ProcessState::ProcessState):
        (WebKit::ProcessState::managers):
        (WebKit::ProcessState::sandboxExtensionsGranted):
        (WebKit::ProcessState::setSandboxExtensionsGranted):
        (WebKit::stateMap):
        (WebKit::processState):
        (WebKit::ProcessState::addRequestManager):
        (WebKit::ProcessState::removeRequestManager):
        (WebKit::UserMediaProcessManager::singleton):
        (WebKit::UserMediaProcessManager::addUserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaProcessManager::removeUserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        (WebKit::UserMediaProcessManager::startedCaptureSession):
        (WebKit::UserMediaProcessManager::endedCaptureSession):
        * UIProcess/UserMediaProcessManager.h: Added.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Don't allocate m_userMediaPermissionRequestManager.
        (WebKit::WebPageProxy::resetState): Set m_userMediaPermissionRequestManager to null.
        (WebKit::WebPageProxy::userMediaPermissionRequestManager): Allocate m_userMediaPermissionRequestManager
          lazily as most pages don't need it.
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): Call userMediaPermissionRequestManager().
        (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): Ditto.
        (WebKit::WebPageProxy::clearUserMediaState): Ditto.
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Report capture state changes to the request
          manager proxy.
        * UIProcess/WebPageProxy.h:

        * WebKit2.xcodeproj/project.pbxproj: Add new files.

        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.cpp: Added.
        (WebKit::MediaDeviceSandboxExtensions::MediaDeviceSandboxExtensions):
        (WebKit::MediaDeviceSandboxExtensions::encode):
        (WebKit::MediaDeviceSandboxExtensions::decode):
        (WebKit::MediaDeviceSandboxExtensions::operator[]):
        (WebKit::MediaDeviceSandboxExtensions::size):
        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.h: Added.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::~UserMediaPermissionRequestManager): Sandbox extension
          is now in a HashMap, not a Vector.
        (WebKit::UserMediaPermissionRequestManager::grantUserMediaDeviceSandboxExtensions): Record
          IDs with extensions so they can be revoked later.
        (WebKit::UserMediaPermissionRequestManager::revokeUserMediaDeviceSandboxExtensions): New.
        (WebKit::UserMediaPermissionRequestManager::grantUserMediaDevicesSandboxExtension): Deleted.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::grantUserMediaDeviceSandboxExtensions):
        (WebKit::WebPage::revokeUserMediaDeviceSandboxExtensions):
        (WebKit::WebPage::grantUserMediaDevicesSandboxExtension): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-12-07  Jeremy Jones  <jeremyj@apple.com>

        One esc to exit fullscreen and pointer lock
        https://bugs.webkit.org/show_bug.cgi?id=165416
        rdar://problem/29430711

        Reviewed by Jer Noble.

        Fix a crash when didLosePointerLock is not specified.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):

2016-12-07  Keith Rollin  <krollin@apple.com>

        Network event record/replay
        https://bugs.webkit.org/show_bug.cgi?id=164527
        <rdar://problem/29168157>

        Reviewed by Alex Christensen.

        Add WebKit2/NetworkProcess/capture/* for recording the network events
        that occur when loading a page and for replaying them later. Update
        NetworkLoad to invoke capture facilities. Add preferences for enabling
        record or replay.

        * CMakeLists.txt:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::initializeForRecord):
        (WebKit::NetworkLoad::initializeForReplay):
        (WebKit::NetworkLoad::initialize):
        (WebKit::NetworkLoad::setDefersLoading):
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::sharedWillSendRedirectedRequest):
        (WebKit::NetworkLoad::notifyDidReceiveResponse):
        (WebKit::NetworkLoad::didReceiveData):
        (WebKit::NetworkLoad::didCompleteWithError):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::terminate):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/capture/NetworkCaptureEvent.cpp: Added.
        (WebKit::NetworkCapture::copyHeaders):
        (WebKit::NetworkCapture::KeyValuePair::KeyValuePair):
        (WebKit::NetworkCapture::ResourceRequest::ResourceRequest):
        (WebKit::NetworkCapture::ResourceRequest::operator WebCore::ResourceRequest):
        (WebKit::NetworkCapture::ResourceResponse::ResourceResponse):
        (WebKit::NetworkCapture::ResourceResponse::operator WebCore::ResourceResponse):
        (WebKit::NetworkCapture::ResourceError::ResourceError):
        (WebKit::NetworkCapture::ResourceError::operator WebCore::ResourceError):
        (WebKit::NetworkCapture::JSONCoder::encode):
        (WebKit::NetworkCapture::JSONCoder::decode):
        (WebKit::NetworkCapture::JSONCoder<String>::encode):
        (WebKit::NetworkCapture::JSONCoder<String>::decode):
        (WebKit::NetworkCapture::JSONCoder<CaptureTimeType>::encode):
        (WebKit::NetworkCapture::JSONCoder<CaptureTimeType>::decode):
        (WebKit::NetworkCapture::JSONCoder<KeyValuePair>::encode):
        (WebKit::NetworkCapture::JSONCoder<KeyValuePair>::decode):
        (WebKit::NetworkCapture::JSONCoder<Vector<T>>::encode):
        (WebKit::NetworkCapture::JSONCoder<Vector<T>>::decode):
        (WebKit::NetworkCapture::JSONCoder<ResourceRequest>::encode):
        (WebKit::NetworkCapture::JSONCoder<ResourceRequest>::decode):
        (WebKit::NetworkCapture::JSONCoder<ResourceResponse>::encode):
        (WebKit::NetworkCapture::JSONCoder<ResourceResponse>::decode):
        (WebKit::NetworkCapture::JSONCoder<ResourceError>::encode):
        (WebKit::NetworkCapture::JSONCoder<ResourceError>::decode):
        (WebKit::NetworkCapture::JSONCoder<WebCore::SharedBuffer>::encode):
        (WebKit::NetworkCapture::JSONCoder<WebCore::SharedBuffer>::decode):
        (WebKit::NetworkCapture::JSONCoder<RequestSentEvent>::encode):
        (WebKit::NetworkCapture::JSONCoder<RequestSentEvent>::decode):
        (WebKit::NetworkCapture::JSONCoder<ResponseReceivedEvent>::encode):
        (WebKit::NetworkCapture::JSONCoder<ResponseReceivedEvent>::decode):
        (WebKit::NetworkCapture::JSONCoder<RedirectReceivedEvent>::encode):
        (WebKit::NetworkCapture::JSONCoder<RedirectReceivedEvent>::decode):
        (WebKit::NetworkCapture::JSONCoder<RedirectSentEvent>::encode):
        (WebKit::NetworkCapture::JSONCoder<RedirectSentEvent>::decode):
        (WebKit::NetworkCapture::JSONCoder<DataReceivedEvent>::encode):
        (WebKit::NetworkCapture::JSONCoder<DataReceivedEvent>::decode):
        (WebKit::NetworkCapture::JSONCoder<FinishedEvent>::encode):
        (WebKit::NetworkCapture::JSONCoder<FinishedEvent>::decode):
        (WebKit::NetworkCapture::eventToString):
        (WebKit::NetworkCapture::stringToEvent):
        * NetworkProcess/capture/NetworkCaptureEvent.h: Added.
        (WebKit::NetworkCapture::TimedEvent::TimedEvent):
        * NetworkProcess/capture/NetworkCaptureLogging.h: Added.
        * NetworkProcess/capture/NetworkCaptureManager.cpp: Added.
        (WebKit::NetworkCapture::Manager::singleton):
        (WebKit::NetworkCapture::Manager::initialize):
        (WebKit::NetworkCapture::Manager::terminate):
        (WebKit::NetworkCapture::Manager::findMatch):
        (WebKit::NetworkCapture::Manager::findExactMatch):
        (WebKit::NetworkCapture::Manager::findBestFuzzyMatch):
        (WebKit::NetworkCapture::Manager::fuzzyMatchURLs):
        (WebKit::NetworkCapture::Manager::loadResources):
        (WebKit::NetworkCapture::Manager::reportLoadPath):
        (WebKit::NetworkCapture::Manager::reportRecordPath):
        (WebKit::NetworkCapture::Manager::reportReplayPath):
        (WebKit::NetworkCapture::Manager::requestToPath):
        (WebKit::NetworkCapture::Manager::stringToHash):
        (WebKit::NetworkCapture::Manager::hashToPath):
        (WebKit::NetworkCapture::Manager::logRecordedResource):
        (WebKit::NetworkCapture::Manager::logLoadedResource):
        (WebKit::NetworkCapture::Manager::logPlayedBackResource):
        (WebKit::NetworkCapture::Manager::ensureFileHandle):
        (WebKit::NetworkCapture::Manager::openCacheFile):
        (WebKit::NetworkCapture::Manager::readFile):
        (WebKit::NetworkCapture::Manager::getLine):
        (WebKit::NetworkCapture::Manager::getWord):
        (WebKit::NetworkCapture::Manager::printToFile):
        * NetworkProcess/capture/NetworkCaptureManager.h: Added.
        (WebKit::NetworkCapture::Manager::isRecording):
        (WebKit::NetworkCapture::Manager::isReplaying):
        (WebKit::NetworkCapture::Manager::mode):
        * NetworkProcess/capture/NetworkCaptureRecorder.cpp: Added.
        (WebKit::NetworkCapture::Recorder::recordRequestSent):
        (WebKit::NetworkCapture::Recorder::recordResponseReceived):
        (WebKit::NetworkCapture::Recorder::recordRedirectReceived):
        (WebKit::NetworkCapture::Recorder::recordRedirectSent):
        (WebKit::NetworkCapture::Recorder::recordDataReceived):
        (WebKit::NetworkCapture::Recorder::recordFinish):
        (WebKit::NetworkCapture::Recorder::writeEvents):
        * NetworkProcess/capture/NetworkCaptureRecorder.h: Added.
        (WebKit::NetworkCapture::Recorder::recordEvent):
        * NetworkProcess/capture/NetworkCaptureReplayer.cpp: Added.
        (WebKit::NetworkCapture::Replayer::replayResource):
        * NetworkProcess/capture/NetworkCaptureReplayer.h: Added.
        * NetworkProcess/capture/NetworkCaptureResource.cpp: Added.
        (WebKit::NetworkCapture::Resource::Resource):
        (WebKit::NetworkCapture::Resource::url):
        (WebKit::NetworkCapture::Resource::baseURL):
        (WebKit::NetworkCapture::Resource::queryParameters):
        (WebKit::NetworkCapture::Resource::eventStream):
        (WebKit::NetworkCapture::Resource::EventStream::EventStream):
        (WebKit::NetworkCapture::Resource::EventStream::nextEvent):
        * NetworkProcess/capture/NetworkCaptureResource.h: Added.
        * NetworkProcess/capture/NetworkCaptureTypes.h: Added.
        (WebKit::NetworkCapture::TypeHolder::forEachTypeImpl):
        (WebKit::NetworkCapture::TypeHolder::forEachType):
        * NetworkProcess/capture/NetworkDataTaskReplay.cpp: Added.
        (WebKit::NetworkCapture::NetworkDataTaskReplay::NetworkDataTaskReplay):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::~NetworkDataTaskReplay):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::resume):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::suspend):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::cancel):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::complete):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::invalidateAndCancel):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::enqueueEventHandler):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayRequestSent):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayResponseReceived):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayRedirectReceived):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayRedirectSent):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayDataReceived):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::replayFinished):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::didReceiveResponse):
        (WebKit::NetworkCapture::NetworkDataTaskReplay::didFinish):
        * NetworkProcess/capture/NetworkDataTaskReplay.h: Added.
        (WebKit::NetworkCapture::NetworkDataTaskReplay::create):
        * NetworkProcess/capture/json.hpp: Added.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebKit2.xcodeproj/project.pbxproj:
        * config.h:

2016-12-07  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):

2016-12-07  Anders Carlsson  <andersca@apple.com>

        Rename the connection sources to better indicate what data direction they are used for
        https://bugs.webkit.org/show_bug.cgi?id=165548

        Reviewed by Tim Horton.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::platformInitialize):
        (IPC::createReceiveSource):
        (IPC::Connection::initializeSendSource):
        (IPC::Connection::receiveSourceEventHandler):
        (IPC::createDataAvailableSource): Deleted.
        (IPC::Connection::initializeDeadNameSource): Deleted.
        Rename m_deadNameSource to m_sendSource, and m_receivePortDataAvailableSource to m_receiveSource.

        (IPC::Connection::open):
        Initialize the send source before we attempt to send a first message.

2016-12-07  Simon Fraser  <simon.fraser@apple.com>

        Fix use of enum in a WK2 C SPI header.
        rdar://problem/28725583

        Followup to correctly prefix the enum values.

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

2016-12-07  Simon Fraser  <simon.fraser@apple.com>

        Fix use of enum in a WK2 C SPI header.
        rdar://problem/28725583

        Reviewed by Dan Bernstein.

        Use correct enum style for a C SPI header and fix the callers.

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

2016-12-07  Beth Dakin  <bdakin@apple.com>

        Remove iCloud Pages and Keynote site-specific hacks
        https://bugs.webkit.org/show_bug.cgi?id=165544
        -and corresponding-
        rdar://problem/29082536

        Reviewed by Wenson Hsieh.

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

2016-12-05  Ada Chan  <adachan@apple.com>

        Add a getter for serverTrust in _WKObservablePageState
        https://bugs.webkit.org/show_bug.cgi?id=165433

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (-[WKObservablePageState serverTrust]):

2016-12-07  Jer Noble  <jer.noble@apple.com>

        Exiting Element Fullscreen mode loses focus on WKWebView.
        https://bugs.webkit.org/show_bug.cgi?id=165512

        Reviewed by Eric Carlson.

        Setting 'window.contentView.hidden = YES' will reset the first-responder (whereas
        previously setting 'window.contentView.layer.hidden = YES' did not). Grab the first-
        responder before doing so, so that it can be reset correctly when moving the WKWebView
        back to it's original window.

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

2016-12-07  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build after r209418.
        https://bugs.webkit.org/show_bug.cgi?id=165484

        * PlatformMac.cmake:

2016-12-07  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r209407.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage):
        * UIProcess/LegacySessionStateCodingNone.cpp:
        (WebKit::decodeLegacySessionState):

2016-12-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r209422.

        This change caused assertion failures during API tests.

        Reverted changeset:

        "[MediaStream][Mac] Revoke sandbox extensions when capture
        ends"
        https://bugs.webkit.org/show_bug.cgi?id=165476
        http://trac.webkit.org/changeset/209422

2016-12-06  Dean Jackson  <dino@apple.com>

        Include default value in Experimental Feature information
        https://bugs.webkit.org/show_bug.cgi?id=165509
        <rdar://problems/29547177>

        Reviewed by Tim Horton.

        Add a defaultValue member variable to experimental
        features, both the C++ and ObjC interfaces.

        * UIProcess/API/APIExperimentalFeature.cpp:
        (API::ExperimentalFeature::create):
        (API::ExperimentalFeature::ExperimentalFeature):
        * UIProcess/API/APIExperimentalFeature.h:
        * UIProcess/API/Cocoa/_WKExperimentalFeature.h:
        * UIProcess/API/Cocoa/_WKExperimentalFeature.mm:
        (-[_WKExperimentalFeature description]):
        (-[_WKExperimentalFeature defaultValue]):
        * UIProcess/WebPreferences.cpp:
        (WebKit::createExperimentalFeaturesVector):

2016-12-06  Commit Queue  <commit-queue@webkit.org>

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

        requires explicit nullptr checks so missing env vars don't
        flip AC mode (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "[GTK] Process accelerated compositing env variables only if
        they are really enabled"
        https://bugs.webkit.org/show_bug.cgi?id=165300
        http://trac.webkit.org/changeset/209391

2016-12-06  Alexey Proskuryakov  <ap@apple.com>

        Correct SDKROOT values in xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=165487
        rdar://problem/29539209

        Reviewed by Dan Bernstein.

        Fix suggested by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2016-12-06  Andreas Kling  <akling@apple.com>

        [Cocoa] Add some memory usage related information to sysdiagnose state dumps
        <https://webkit.org/b/165375>
        <rdar://problem/29057243>

        Reviewed by Darin Adler.

        Follow-up to address two more review comments.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::registerWithStateDumper): Use adoptNS() instead of autorelease for NSStrings.

2016-12-06  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream][Mac] Revoke sandbox extensions when capture ends
        https://bugs.webkit.org/show_bug.cgi?id=165476

        Reviewed by Brady Eidson.
        
        Track media capture by process so it is possible to revoke the sandbox extensions issued to
        a web process when capture stops.

        * CMakeLists.txt: Add new files.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::UserMediaPermissionRequestManagerProxy): Register
          with process manager.
        (WebKit::UserMediaPermissionRequestManagerProxy::~UserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Move sandbox 
          extension code to the process manager.
        (WebKit::UserMediaPermissionRequestManagerProxy::stopCapture): New.
        (WebKit::UserMediaPermissionRequestManagerProxy::startedCaptureSession): New, report state
          change to the process manager.
        (WebKit::UserMediaPermissionRequestManagerProxy::endedCaptureSession): Ditto.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

        * UIProcess/UserMediaProcessManager.cpp: Added.
        (WebKit::ProcessState::ProcessState):
        (WebKit::ProcessState::managers):
        (WebKit::ProcessState::sandboxExtensionsGranted):
        (WebKit::ProcessState::setSandboxExtensionsGranted):
        (WebKit::stateMap):
        (WebKit::processState):
        (WebKit::ProcessState::addRequestManager):
        (WebKit::ProcessState::removeRequestManager):
        (WebKit::UserMediaProcessManager::singleton):
        (WebKit::UserMediaProcessManager::addUserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaProcessManager::removeUserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        (WebKit::UserMediaProcessManager::startedCaptureSession):
        (WebKit::UserMediaProcessManager::endedCaptureSession):
        * UIProcess/UserMediaProcessManager.h: Added.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Report capture state changes to the request
          manager proxy.
        * UIProcess/WebPageProxy.h:

        * WebKit2.xcodeproj/project.pbxproj: Add new files.

        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.cpp: Added.
        (WebKit::MediaDeviceSandboxExtensions::MediaDeviceSandboxExtensions):
        (WebKit::MediaDeviceSandboxExtensions::encode):
        (WebKit::MediaDeviceSandboxExtensions::decode):
        (WebKit::MediaDeviceSandboxExtensions::operator[]):
        (WebKit::MediaDeviceSandboxExtensions::size):
        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.h: Added.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::~UserMediaPermissionRequestManager): Sandbox extension
          is now in a HashMap, not a Vector.
        (WebKit::UserMediaPermissionRequestManager::grantUserMediaDeviceSandboxExtensions): Record
          IDs with extensions so they can be revoked later.
        (WebKit::UserMediaPermissionRequestManager::revokeUserMediaDeviceSandboxExtensions): New.
        (WebKit::UserMediaPermissionRequestManager::grantUserMediaDevicesSandboxExtension): Deleted.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::grantUserMediaDeviceSandboxExtensions):
        (WebKit::WebPage::revokeUserMediaDeviceSandboxExtensions):
        (WebKit::WebPage::grantUserMediaDevicesSandboxExtension): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-12-06  Anders Carlsson  <andersca@apple.com>

        Add a new MachMessage class and use it for sending outgoing messages
        https://bugs.webkit.org/show_bug.cgi?id=165484

        Reviewed by Sam Weinig.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendOutgoingMessage):
        Instead of trying to randomly use memory from the stack as well as using mmap for the message data for out of line messages
        (which makes no sense at all, since the body data is already mmapped), just always create a MachMessage object and use it.
        
        (IPC::machMessageSize): Deleted.
        This has been moved to MachMessage::messageSize().
        
        * Platform/IPC/mac/MachMessage.cpp: Added.
        (IPC::MachMessage::create):
        Allocate extra memory to store the actual buffer.

        (IPC::MachMessage::MachMessage):
        Initialize variables. m_size isn't really used right now, but will be in a subsequent patch.

        (IPC::MachMessage::header):
        Return the header.
        
        * Platform/IPC/mac/MachMessage.h: Added.
        (IPC::MachMessage::length):

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2016-12-06  Simon Fraser  <simon.fraser@apple.com>

        Enable visual viewports by default on Mac, and iOS Wk2
        https://bugs.webkit.org/show_bug.cgi?id=165452

        Reviewed by Zalan Bujtas.

        Turn visual viewports on by default for WK2.

        * Shared/WebPreferencesDefinitions.h:

2016-12-06  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Plugins are disabled in new windows
        https://bugs.webkit.org/show_bug.cgi?id=165410

        Reviewed by Alex Christensen.

        Remove SPI exposed to explicitly toggle plugins from WebKitTestRunner.
        Instead we will update WebKitTestRunner to make use of the SPI
        WKBundleOverrideBoolPreferenceForTestRunner() to toggle plugins in
        all windows.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetPluginsEnabled): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPluginsEnabled): Deleted.

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

        Don't memcpy out of line data
        https://bugs.webkit.org/show_bug.cgi?id=165434

        Reviewed by Sam Weinig.

        Change the Decoder constructor to take a buffer deallocator parameter. If the buffer deallocator is null, the
        data will be copied as before. Otherwise, the memory will be adopted by the Decoder object, and will be deallocated
        by invoking the data deallocator.

        * Platform/IPC/Decoder.cpp:
        (IPC::copyBuffer):
        Add a new helper.

        (IPC::Decoder::Decoder):
        Copy the buffer if the deallocator is null.

        (IPC::Decoder::~Decoder):
        Invoke the deallocator or call fastFree if it is null.

        (IPC::Decoder::unwrapForTesting):
        Update constructor.
        
        (IPC::roundUpToAlignment):
        (IPC::Decoder::alignBufferPosition):
        (IPC::Decoder::decodeVariableLengthByteArray):
        (IPC::decodeValueFromBuffer):
        Change all these to deal with const pointers.

        * Platform/IPC/Decoder.h:
        Add new members.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::createMessageDecoder):
        When we have out of line data, pass a deallocator that calls vm_deallocate, instead of copying the data
        and then immediately throwing the original away.

2016-12-06  Tim Horton  <timothy_horton@apple.com>

        Almost half-second stall scrolling apple.com because of synchronous getPositionInformation
        https://bugs.webkit.org/show_bug.cgi?id=165403
        <rdar://problem/29493285>

        Reviewed by Enrica Casucci.

        When retrieving interaction information, we don't always need to do
        snapshots for 3D Touch or the action sheet, especially if we're
        synchronously blocking the UI process main thread waiting for the reply.

        Add a new InteractionInformationRequest, which allows callers of
        getPositionInformation and requestPositionInformation to specify which
        optional pieces of information they would like to compute.

        * Shared/AssistedNodeInformation.h:
        Fix a incorrect comment.

        * Shared/ios/InteractionInformationRequest.cpp: Added.
        (WebKit::InteractionInformationRequest::encode):
        (WebKit::InteractionInformationRequest::decode):
        (WebKit::InteractionInformationRequest::isValidForRequest):
        * Shared/ios/InteractionInformationRequest.h: Added.
        (WebKit::InteractionInformationRequest::InteractionInformationRequest):
        * WebKit2.xcodeproj/project.pbxproj:
        Add InteractionInformationRequest, which encapsulates all of the
        parameters required to generate an InteractionInformationAtPosition.
        Previously, that was just a point, but now we have two new parameters:
        whether we should generate a snapshot of the element, and whether
        we should generate a TextIndicator if the element is a link.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        (WebKit::InteractionInformationAtPosition::mergeCompatibleOptionalInformation):
        Adopt InteractionInformationRequest.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::getPositionInformation):
        (WebKit::WebPageProxy::requestPositionInformation):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant initialPresentationRectInHostViewForSheet]):
        (-[WKActionSheetAssistant presentationRectInHostViewForSheet]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView annotation:isBeingPressedAtPoint:controller:]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Adopt InteractionInformationRequest.
        
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showAttachmentSheet]):
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        If we have a outstanding asynchronous position information request
        for the current point, instead of sending a second separate request,
        just wait for the async one to come in.

        (-[WKContentView requestAsynchronousPositionInformationUpdate:]):
        If asked to do an asynchronous request with more optional bits than
        the current otherwise-valid response's request, update the position information.

        (-[WKContentView gestureRecognizerShouldBegin:]):
        The design of this mechanism is that during the highlight long press,
        we do an async position information update, and then when we actually
        begin a 3D Touch gesture, we hope to already have the requisite snapshots
        ready (so that we can avoid synchronously blocking for them, there).
        So, in the highlight long-press async request, ask for all the goodies.

        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsNearMarkedText:]):
        (-[WKContentView pointIsInAssistedNode:]):
        (-[WKContentView _didNotHandleTapAsClick:]):
        (-[WKContentView _positionInformationDidChange:]):
        If we get a position information update for the same point, but with less
        goodies attached (the snapshot/link indicator), copy them over from the old
        position information, so that we never accidentally "downgrade" our info.

        (-[WKContentView updatePositionInformationForActionSheetAssistant:]):
        (-[WKContentView actionSheetAssistant:willStartInteractionWithElement:]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):        
        More adoption.
        
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::commitPotentialTap):
        Adopt InteractionInformationRequest.

        (WebKit::WebPage::getPositionInformation):
        (WebKit::WebPage::requestPositionInformation):
        Copy the request into the response.
        Only snapshot if the request wants a snapshot.
        Only make a link indicator if the request wants one.

2016-12-06  Daniel Bates  <dabates@apple.com>

        Cleanup: Rename some HTTP 0.9-specific functions to conform to WebKit Code Style Guidelines
        https://bugs.webkit.org/show_bug.cgi?id=165451

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::didReceiveResponse):

2016-12-06  Daniel Bates  <dabates@apple.com>

        Remove unused InjectedBundle::overrideXSSAuditorEnabledForTestRunner()
        https://bugs.webkit.org/show_bug.cgi?id=165408

        Reviewed by Alex Christensen.

        InjectedBundle::overrideXSSAuditorEnabledForTestRunner() is unused. This function was only
        called by WKBundleOverrideXSSAuditorEnabledForTestRunner(), which was removed in r106005.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideXSSAuditorEnabledForTestRunner): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:

2016-12-04  Darin Adler  <darin@apple.com>

        Use ASCIICType more, and improve it a little bit
        https://bugs.webkit.org/show_bug.cgi?id=165360

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::capitalizeRFC822HeaderFieldName): Removed unneeded checks to simplify code.

2016-12-06  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Turn on the new CSS parser
        https://bugs.webkit.org/show_bug.cgi?id=165213

        Reviewed by Zalan Bujtas.

        * Shared/WebPreferencesDefinitions.h:

2016-12-06  Tomas Popela  <tpopela@redhat.com>

        [GTK] Process accelerated compositing env variables only if they are really enabled
        https://bugs.webkit.org/show_bug.cgi?id=165300

        Don't process the WEBKIT_FORCE_COMPOSITING_MODE and
        WEBKIT_DISABLE_COMPOSITING_MODE env variables if they are disabled
        (eg. WEBKIT_DISABLE_COMPOSITING_MODE=0).

        Reviewed by Michael Catanzaro.

        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):

2016-12-06  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for converting dictionaries to JS
        https://bugs.webkit.org/show_bug.cgi?id=165367

        Reviewed by Darin Adler and Alex Christensen.

        * CMakeLists.txt:
        Add missing directories to look in for headers.

2016-12-05  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS Simulator build.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::mapAllIOSurfaceBackingStore):

2016-12-03  Simon Fraser  <simon.fraser@apple.com>

        Minor reformat and renames in -didUpdateVisibleRect:
        https://bugs.webkit.org/show_bug.cgi?id=165365

        Reviewed by Dave Hyatt.
        
        didUpdateVisibleRect:... has lots of parameters. Put one on each line.

        Rename the rects to make it clear they are "content" rects (i.e. in document coordinates).

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):

2016-12-05  Tim Horton  <timothy_horton@apple.com>

        Adopt CAMachPort-as-layer-contents
        https://bugs.webkit.org/show_bug.cgi?id=141687
        <rdar://problem/19393233>

        Reviewed by Darin Adler.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::decode):
        On the UI process side, instead of actually looking up the surface,
        just keep the MachSendRight around, to later be turned into a CAMachPort.

        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        Make a CAMachPort and leak our send right into it. CAMachPort
        will adopt the port and destroy it when needed.

        (WebKit::RemoteLayerBackingStore::setBufferVolatility):
        Tiny style fix.

        * Shared/mac/RemoteLayerTreePropertyApplier.h:
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::prepareForAppSuspension):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidFinishSnapshottingAfterEnteringBackground):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::prepareForAppSuspension):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::mapAllIOSurfaceBackingStore):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        Two supporting changes in order to fix the two regressions that this
        caused when we tried to land it two years ago:

        When an app is being suspended, resolve all CAMachPort backing store
        into actual IOSurfaces. Otherwise, any live CAMachPorts will keep a
        +1 on their respective IOSurface's use count, causing us to fail to
        mark them volatile, keeping the app alive for more time (re-trying the
        volatility change), and increasing the likelihood of background jetsam.

        If the debugging tile map is enabled, do not use CAMachPort, because
        we don't have a great way to plumb the same CAMachPort to two layers
        (and it doesn't seem to work even if you do). Instead, just map the
        IOSurface into the UI process like we used to.

2016-12-05  Dean Jackson  <dino@apple.com>

        pointer lock needs to be feature detectable
        https://bugs.webkit.org/show_bug.cgi?id=165426
        <rdar://problem/29486715>

        Reviewed by Antoine Quint.

        Set the RuntimeEnabledFeature as preferences
        change.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPointerLockEnabled):
        (WKPreferencesGetPointerLockEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-12-05  Andreas Kling  <akling@apple.com>

        [Cocoa] Add some memory usage related information to sysdiagnose state dumps
        <https://webkit.org/b/165375>
        <rdar://problem/29057243>

        Reviewed by Darin Adler.

        Add two new entries to the sysdiagnose state dumps for WebContent processes:
        "Memory Usage Stats" and "JavaScript Object Counts".

        The first category contains all the interesting stuff from task_info()
        along with some WebCore and JavaScriptCore object/memory counters.

        The second category contains a list of all the JS object types currently live
        on the heap, along with a count.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::registerWithStateDumper): Add two new entries to the
        state dictionary: "Memory Usage Stats" and "JavaScript Object Counts".

2016-12-05  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed cmake buildfix after r209307.

        * PlatformMac.cmake:

2016-12-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose InjectedBundlePageEditorClient via the Objective-C bundle SPI
        https://bugs.webkit.org/show_bug.cgi?id=165276
        <rdar://problem/29467040>

        Reviewed by Darin Adler.

        Test: TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegate.mm

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject): Wrap InjectedBundleRangeHandle in WKWebProcessPlugInRangeHandle.

        * WebKit2.xcodeproj/project.pbxproj: Added references to new files, making
          WKWebProcessPlugInEditingDelegate.h and WKWebProcessPlugInRangeHandle.h private headers.

        * WebProcess/InjectedBundle/API/APIInjectedBundleEditorClient.h: Added. An base class
          based on InjectedBundlePageEditorClient.
        (API::InjectedBundle::EditorClient::~EditorClient):
        (API::InjectedBundle::EditorClient::shouldBeginEditing):
        (API::InjectedBundle::EditorClient::shouldEndEditing):
        (API::InjectedBundle::EditorClient::shouldInsertNode):
        (API::InjectedBundle::EditorClient::shouldInsertText):
        (API::InjectedBundle::EditorClient::shouldDeleteRange):
        (API::InjectedBundle::EditorClient::shouldChangeSelectedRange):
        (API::InjectedBundle::EditorClient::shouldApplyStyle):
        (API::InjectedBundle::EditorClient::didBeginEditing):
        (API::InjectedBundle::EditorClient::didEndEditing):
        (API::InjectedBundle::EditorClient::didChange):
        (API::InjectedBundle::EditorClient::didChangeSelection):
        (API::InjectedBundle::EditorClient::willWriteToPasteboard):
        (API::InjectedBundle::EditorClient::getPasteboardDataForRange):
        (API::InjectedBundle::EditorClient::didWriteToPasteboard):

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInEditingDelegate.h: Added. Declares
          the new delegate protocol, currently comprising three methods corresponding to
          willWriteToPasteboard, getPasteboardDataForRange, and didWriteToPasteboard.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame jsRangeForRangeHandle:inWorld:]): Added. Gets the JS wrapper for
          the specified range handle.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.h: Added.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm: Added.
        (-[WKWebProcessPlugInRangeHandle dealloc]): Call the InjectedBundleRangeHandle destructor.
        (+[WKWebProcessPlugInRangeHandle rangeHandleWithJSValue:inContext:]): Get or create an
          InjectedBundleRangeHandle for the specified object.
        (-[WKWebProcessPlugInRangeHandle frame]): Return the range’s owner document’s frame.
        (-[WKWebProcessPlugInRangeHandle _rangeHandle]): Return the InjectedBundleRangeHandle.
        (-[WKWebProcessPlugInRangeHandle _apiObject]): Ditto.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandleInternal.h: Added.
        (WebKit::wrapper):

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetEditorClient): Updated for WebPage change.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _editingDelegate]): Added. Returns the
          delegate.
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]): Added. Defines a
          Client class, which derives from API::InjectedBundle::EditorClient, and invokes the
          delegate methods. Instantiates a Client and sets it on the WebPage.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:
          Declared new _editingDelegate property.

        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::document): Added. Returns an InjectedBundleNodeHandle
          for the range’s owner document.
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.h:

        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::InjectedBundlePageEditorClient): Added. Calls
          initialize().
        (WebKit::InjectedBundlePageEditorClient::shouldBeginEditing): Updated for type change.
        (WebKit::InjectedBundlePageEditorClient::shouldEndEditing): Ditto.
        (WebKit::InjectedBundlePageEditorClient::shouldInsertNode): Ditto.
        (WebKit::InjectedBundlePageEditorClient::shouldInsertText): Ditto.
        (WebKit::InjectedBundlePageEditorClient::shouldDeleteRange): Ditto.
        (WebKit::InjectedBundlePageEditorClient::shouldChangeSelectedRange): Ditto.
        (WebKit::InjectedBundlePageEditorClient::shouldApplyStyle): Ditto.
        (WebKit::InjectedBundlePageEditorClient::didBeginEditing): Ditto.
        (WebKit::InjectedBundlePageEditorClient::didEndEditing): Ditto.
        (WebKit::InjectedBundlePageEditorClient::didChange): Ditto.
        (WebKit::InjectedBundlePageEditorClient::didChangeSelection): Ditto.
        (WebKit::InjectedBundlePageEditorClient::willWriteToPasteboard): Ditto.
        (WebKit::InjectedBundlePageEditorClient::getPasteboardDataForRange): Ditto.
        (WebKit::InjectedBundlePageEditorClient::didWriteToPasteboard): Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h: Now derives from
          API::InjectedBundle::EditorClient.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldDeleteRange): Ditto.
        (WebKit::WebEditorClient::shouldBeginEditing): Ditto.
        (WebKit::WebEditorClient::shouldEndEditing): Ditto.
        (WebKit::WebEditorClient::shouldInsertNode): Ditto.
        (WebKit::WebEditorClient::shouldInsertText): Ditto.
        (WebKit::WebEditorClient::shouldChangeSelectedRange): Ditto.
        (WebKit::WebEditorClient::shouldApplyStyle): Ditto.
        (WebKit::WebEditorClient::didBeginEditing): Ditto.
        (WebKit::WebEditorClient::respondToChangedContents): Ditto.
        (WebKit::WebEditorClient::respondToChangedSelection): Ditto.
        (WebKit::WebEditorClient::didEndEditing): Ditto.
        (WebKit::WebEditorClient::didWriteSelectionToPasteboard): Ditto.
        (WebKit::WebEditorClient::willWriteSelectionToPasteboard): Ditto.
        (WebKit::WebEditorClient::getClientPasteboardDataForRange): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize m_editorClient.
        (WebKit::WebPage::setInjectedBundleEditorClient): Replaces
          initializeInjectedBundleEditorClient and just sets m_editorClient.
        (WebKit::WebPage::close): Resets m_editorClient.

        * WebProcess/WebPage/WebPage.h: Changed m_editorClient to a unique_ptr.

2016-12-02  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] Add a WebView private configuration for changing the WebContent update frequency
        https://bugs.webkit.org/show_bug.cgi?id=165289
        <rdar://problem/29472577>

        Reviewed by Tim Horton.
        
        Expose a preference which allows us to control the fps of web content updates.

        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::contentUpdateFrequency):
        (API::PageConfiguration::setContentUpdateFrequency):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _contentUpdateFrequency]):
        (-[WKWebViewConfiguration _setContentUpdateFrequency:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[WKOneShotDisplayLinkHandler initWithDrawingAreaProxy:]):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::contentUpdateFrequency):

2016-12-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Adopt the PRODUCT_BUNDLE_IDENTIFIER build setting
        https://bugs.webkit.org/show_bug.cgi?id=164492

        Reviewed by Dan Bernstein.

        * Configurations/DatabaseService.xcconfig: Set PRODUCT_BUNDLE_IDENTIFIER to
        $(PRODUCT_NAME).
        * Configurations/NetworkService.xcconfig: Ditto.
        * Configurations/PluginService.32.xcconfig: Ditto.
        * Configurations/PluginService.64.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.
        * Configurations/WebKit.xcconfig: Set PRODUCT_BUNDLE_IDENTIFIER to
        com.apple.$(PRODUCT_NAME:rfc1034identifier).
        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseService/Info.plist: Changed
        CFBundleIdentifier's value from ${PRODUCT_NAME} to ${PRODUCT_BUNDLE_IDENTIFIER}.
        * Info.plist: Changed CFBundleIdentifier's value from com.apple.${PRODUCT_NAME} to
        ${PRODUCT_BUNDLE_IDENTIFIER}.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX-10.9-10.10.plist: Changed
        CFBundleIdentifier's value from ${PRODUCT_NAME} to ${PRODUCT_BUNDLE_IDENTIFIER}.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist: Ditto.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-iOS.plist: Ditto.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64-10.9-10.10.Info.plist: Ditto.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist: Ditto.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX-10.9-10.10.plist: Ditto.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist: Ditto.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist: Ditto.

2016-12-02  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Update sandbox profiles to use modern syntax and avoid duplication
        https://bugs.webkit.org/show_bug.cgi?id=165332
        <rdar://problem/26898991>

        Reviewed by Anders Carlsson.

        Update the Mac sandbox profiles to reflect that modern Cocoa applications
        communicate with cfprefsd, rather than plists on disk (and have done so
        for the past several releases).

        Get rid of some duplicated rules, as well as old compatibility rules that
        are never triggered under supported operating systems.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2016-12-02  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Fix build break when disabling some features.
        https://bugs.webkit.org/show_bug.cgi?id=165254

        The EFL port was broken if SPELLCHECK was disabled or
        PLUGIN_ARCHITECTURE is not x11.

        Reviewed by Michael Catanzaro.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::checkSpellingOfString):
        Fix UNUSED_PARAM() usage if SPELLCHECK is disabled.
        * UIProcess/efl/WebPageProxyEfl.cpp:
        Isolate methods within #if PLUGIN_ARCHITECTURE(X11).

2016-12-01  Jiewen Tan  <jiewen_tan@apple.com>

        Add a runtime flag for SubtleCrypto
        https://bugs.webkit.org/show_bug.cgi?id=164982

        Reviewed by Brent Fulgham.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetSubtleCryptoEnabled):
        (WKPreferencesGetSubtleCryptoEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-12-01  Saam Barati  <sbarati@apple.com>

        Rename CallFrame::callee() to CallFrame::jsCallee()
        https://bugs.webkit.org/show_bug.cgi?id=165293

        Reviewed by Keith Miller.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::callMethod):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::callNPJSObject):
        (WebKit::constructWithConstructor):

2016-12-01  Chris Dumez  <cdumez@apple.com>

        [iOS][WK2] Tapping an element generates a 'click' event that has 0 as timeStamp
        https://bugs.webkit.org/show_bug.cgi?id=165270
        <rdar://problem/29224355>

        Reviewed by Simon Fraser.

        Tapping an element generates a 'click' event that has 0 as timeStamp
        instead of having a proper timeStamp value. This is breaking some
        sites.

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

2016-12-01  Tim Horton  <timothy_horton@apple.com>

        Try to fix the EFL/Gtk build

        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):

2016-12-01  Tim Horton  <timothy_horton@apple.com>

        Every WKWebView initialization spends a few milliseconds hitting the disk
        https://bugs.webkit.org/show_bug.cgi?id=165268
        <rdar://problem/29010113>

        Reviewed by Brady Eidson.

        Every WKWebView init currently involves doing directory creation and
        symlink resolution for a number of paths (to create sandbox extensions
        for all of our storage directories), which means touching the disk a
        lot during init. All of these paths are immutable per-WebProcessPool,
        so, instead, cache them on WebProcessPool and create sandbox extensions
        from the already-resolved paths. This is a sizable (~4x) speedup when
        initializing subsequent web views.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandleWithoutResolvingPath):
        Add createHandleWithoutResolvingPath, which makes a sandbox extension
        handle without doing symlink resolution.

        (WebKit::resolvePathForSandboxExtension):
        (WebKit::resolveAndCreateReadWriteDirectoryForSandboxExtension):
        Add two functions that do the same resolution that SandboxExtension::createHandle
        and ::createHandleForReadWriteDirectory do, but just return the paths,
        for later use with createHandleWithoutResolvingPath.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::resolveAndCreateReadWriteDirectoryForSandboxExtension):
        (WebKit::resolvePathForSandboxExtension):
        (WebKit::SandboxExtension::createHandleWithoutResolvingPath):
        (WebKit::SandboxExtension::createHandle):
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        Implement the aforementioned functions, and reimplement the existing
        createHandle{ForReadWriteDirectory} functions in terms of them.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformDefaultIconDatabasePath):
        Stop wasting time generating and resolving a platform default icon
        database path, since we don't actually use it for anything anymore except
        to determine whether the icon database is enabled, and we only want to
        enable it if the client has provided a path.

        (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingTimer):
        (WebKit::WebProcessPool::resolvePathsForSandboxExtensions):
        (WebKit::WebProcessPool::createNewWebProcess):
        * UIProcess/WebProcessPool.h:
        Resolve paths in resolvePathsForSandboxExtensions, and use the resolved
        paths along with createHandleWithoutResolvingPath in order to effectively
        cache the resolution operation.

2016-12-01  Antti Koivisto  <antti@apple.com>

        Revert r208931
        https://bugs.webkit.org/show_bug.cgi?id=164924

        PLT regression.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeCacheKey):
        (WebKit::NetworkCache::Cache::makeCacheKey): Deleted.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::BlobStorage):
        (WebKit::NetworkCache::BlobStorage::add):
        (WebKit::NetworkCache::BlobStorage::get):
        * NetworkProcess/cache/NetworkCacheBlobStorage.h:
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::computeSHA1):
        (WebKit::NetworkCache::makeSalt): Deleted.
        (WebKit::NetworkCache::readOrMakeSalt): Deleted.
        * NetworkProcess/cache/NetworkCacheData.h:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::noPartitionString):
        (WebKit::NetworkCache::Key::Key):
        (WebKit::NetworkCache::Key::hasPartition):
        (WebKit::NetworkCache::Key::computeHash):
        (WebKit::NetworkCache::Key::hashAsString):
        (WebKit::NetworkCache::Key::computePartitionHash): Deleted.
        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCache::Key::hash):
        (WebKit::NetworkCache::Key::partitionHash): Deleted.
        (WebKit::NetworkCache::Key::hashAsString): Deleted.
        (WebKit::NetworkCache::Key::partitionHashAsString): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::makeSubresourcesKey):
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::saveToDiskIfReady):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveSubresourcesEntry):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::open):
        (WebKit::NetworkCache::traverseRecordsFiles):
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::recordDirectoryPathForKey):
        (WebKit::NetworkCache::decodeRecordHeader):
        (WebKit::NetworkCache::Storage::readRecord):
        (WebKit::NetworkCache::Storage::encodeRecord):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::makeSaltFilePath): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::salt): Deleted.

2016-11-30  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for File and Blob constructors
        https://bugs.webkit.org/show_bug.cgi?id=165218

        Reviewed by Darin Adler.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        Avoid copies of the BlobPart Vector.

2016-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] UI process crash in WebKit::WaylandCompositor::Surface::prepareTextureForPainting
        https://bugs.webkit.org/show_bug.cgi?id=164911

        Reviewed by Michael Catanzaro.

        The problem is that m_buffer is nullptr in Surface::prepareTextureForPainting() even though we have already an
        image. We only use the buffer to get the image size, so we could save the image size when the image is created,
        and then we don't need to care about the buffer anymore.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::Surface::prepareTextureForPainting):
        (WebKit::WaylandCompositor::Surface::commit):
        * UIProcess/gtk/WaylandCompositor.h:

2016-11-30  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Add an HTML comment flag to turn the feature on
        https://bugs.webkit.org/show_bug.cgi?id=165226

        Reviewed by Dean Jackson.

        Add new methods to set the Modern Media Controls preference.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetModernMediaControlsEnabled):
        (WKPreferencesGetModernMediaControlsEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2016-11-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add separate settings and preferences to enable/disable async decoding for large images and animated images
        https://bugs.webkit.org/show_bug.cgi?id=165177

        Reviewed by Simon Fraser.
        
        Hook up the async image decoding settings for WebKit2.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _largeImageAsyncDecodingEnabled]):
        (-[WKPreferences _setLargeImageAsyncDecodingEnabled:]):
        (-[WKPreferences _animatedImageAsyncDecodingEnabled]):
        (-[WKPreferences _setAnimatedImageAsyncDecodingEnabled:]):
        (-[WKPreferences _asyncImageDecodingEnabled]): Deleted.
        (-[WKPreferences _setAsyncImageDecodingEnabled:]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-11-30  Chris Dumez  <cdumez@apple.com>

        [iOS][WK2] Turn on HTML interactive form validation feature
        https://bugs.webkit.org/show_bug.cgi?id=165212
        <rdar://problem/29444356>

        Reviewed by Simon Fraser.

        Turn on HTML interactive form validation feature on iOS WK2
        now that we have a native UI.

        * Shared/WebPreferencesDefinitions.h:

2016-11-30  Brent Fulgham  <bfulgham@apple.com>

        Correct plugin sandbox after r208611
        https://bugs.webkit.org/show_bug.cgi?id=165187
        <rdar://problem/29431165>

        Reviewed by Alex Christensen.

        In r208611 I removed the 'else' clause of a Scheme conditional
        that was needed to properly run plugins (such as Flash Player).

        This change retains the relevant current sandbox content, while
        still stripping out the old code that is no longer needed.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:

2016-11-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Database process should not initialize gtk
        https://bugs.webkit.org/show_bug.cgi?id=165138

        Reviewed by Sergio Villar Senin.

        It doesn't use GTK+ at all.

        * DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp:
        (WebKit::DatabaseProcessMainUnix):
        (): Deleted.

2016-11-29  Gavin Barraclough  <barraclough@apple.com>

        Remove WebPage::SetPageSuppressed
        https://bugs.webkit.org/show_bug.cgi?id=165158

        Unreviewed revert accidental change.

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

2016-11-29  Gavin Barraclough  <barraclough@apple.com>

        Remove WebPage::SetPageSuppressed
        https://bugs.webkit.org/show_bug.cgi?id=165158

        Reviewed by Tim Horton.

        This was scaffolding. We've now refactored to the point that the information driving throttling originates
        from the UI process (so UI and web processes can have a consistent view of what should throttle), but we
        don't need a separate message to handle this - necessary state to determine is provided in ActivityState.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateThrottleState):
            - used to send SetPageSuppressed; no longer does.
        * UIProcess/WebPageProxy.h:
            - removed m_pageSuppressed (was used to avoid duplicated messages).
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateThrottleState):
            - compute throttle state based on m_activityState.
        (WebKit::WebPage::setActivityState):
            - update throttle state whenever activity state changes.
        (WebKit::WebPage::updatePreferences):
            - update throttle state whenever preferences change (throttling can be disabled via preference).
        (WebKit::WebPage::setPageSuppressed): Deleted.
            - Removed WebPage::SetPageSuppressed.
        * WebProcess/WebPage/WebPage.h:
            - Removed WebPage::SetPageSuppressed.
            - Added m_processSuppressionEnabled, to cache preference state.
        * WebProcess/WebPage/WebPage.messages.in:
            - Removed WebPage::SetPageSuppressed.

2016-11-29  Andy Estes  <aestes@apple.com>

        [Cocoa] Enable two clang warnings recommended by Xcode
        https://bugs.webkit.org/show_bug.cgi?id=164498

        Reviewed by Mark Lam.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.

2016-11-29  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Don't request user permission for a device if it has already been granted in the current browsing context
        https://bugs.webkit.org/show_bug.cgi?id=164760
        <rdar://problem/29261266>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::FrameAuthorizationState::FrameAuthorizationState):
        (WebKit::FrameAuthorizationState::hasPermissionToUseCaptureDevice):
        (WebKit::FrameAuthorizationState::setHasPermissionToUseCaptureDevice):
        (WebKit::FrameAuthorizationState::reset):
        (WebKit::FrameAuthorizationState::securityOriginsAreEqual):
        (WebKit::UserMediaPermissionRequestManagerProxy::stateForRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::invalidateRequests):
        (WebKit::UserMediaPermissionRequestManagerProxy::createRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        (WebKit::FrameAuthorizationState::~FrameAuthorizationState):
        (WebKit::FrameAuthorizationState::frameID):
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::frameID):
        (WebKit::UserMediaPermissionRequestProxy::userMediaDocumentSecurityOrigin):
        (WebKit::UserMediaPermissionRequestProxy::topLevelDocumentSecurityOrigin):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::removeMediaRequestFromMaps):

2016-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Scroll snapping on Mac should use AppKit animations
        https://bugs.webkit.org/show_bug.cgi?id=147261
        <rdar://problem/29395293>

        Reviewed by Brent Fulgham.

        Add some logic to plumb filtered wheel velocity over to WebCore in the case of mainframe scrolling. See
        WebCore/ChangeLog for more details.

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

2016-11-21  Brian Burg  <bburg@apple.com>

        Web Automation: add ObjC SPI to set whether a page is controlled by automation
        https://bugs.webkit.org/show_bug.cgi?id=165001
        <rdar://problem/29350432>

        Reviewed by Dan Bernstein.

        Add SPI property to WKWebViewConfiguration and plumb it through to
        initialize WebPageProxy::m_controlledByAutomation. This is propagated
        to the WebProcess on creation via WebPageCreationParameters.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::isControlledByAutomation):
        (API::PageConfiguration::setControlledByAutomation):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _isControlledByAutomation]):
        (-[WKWebViewConfiguration _setControlledByAutomation:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):

2016-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] BadDamage X Window System error in WebKit::AcceleratedBackingStoreX11::update when called from WebPageProxy::exitAcceleratedCompositingMode
        https://bugs.webkit.org/show_bug.cgi?id=164303

        Reviewed by Michael Catanzaro.

        Trap also BadDrawable and BadDamage X errors when creating the surface and damage.

        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::update):

2016-11-28  Chris Dumez  <cdumez@apple.com>

        [Mac][WK2] Enable HTML interactive form validation
        https://bugs.webkit.org/show_bug.cgi?id=165123
        <rdar://problem/28944652>

        Reviewed by Simon Fraser.

        Enable HTML interactive form validation now that we have a native UI
        for it.

        * Shared/WebPreferencesDefinitions.h:

2016-11-28  Brent Fulgham  <bfulgham@apple.com>

        Generated sandbox profile is not being put in the correct Resources directory
        https://bugs.webkit.org/show_bug.cgi?id=165126

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj: Copy the generated file to the 'PlugInSandboxProfiles'
        sub-directory.

2016-11-28  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r209008.

        This change appears to have caused two fast/mediastrem
        LayoutTests to fail.

        Reverted changeset:

        "[MediaStream] Don't request user permission for a device if
        it has already been granted in the current browsing context"
        https://bugs.webkit.org/show_bug.cgi?id=164760
        http://trac.webkit.org/changeset/209008

2016-11-28  Andrew Gold  <agold@apple.com>

        Support for HTML Media Capture API
        https://bugs.webkit.org/show_bug.cgi?id=43239

        Reviewed by Tim Horton.

        In order to enable media capture on iOS, we must first use the AVFoundation API to 
        check/request capture permission from the user for Safari. Then, Safari must request
        permission on behalf of the webpage to use the capture devices. Additionally, Safari
        must present UI when the capture is taking place, so WebKit needs to notify the client
        of a capture session beginning and ending. To do this, we added four methods to 
        WKUIDelegatePrivate to request permission from the user, check for permissions, notify
        that a capture session has begun, and notify that a capture session has ended. Additionally,
        we added a private method to WKWebView that allows the client to stop a capture session.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didBeginCaptureSession): Notifies the client of a capture session beginning.
        (API::UIClient::didEndCaptureSession): Notifies the client of a capture session ending.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Added new delegate methods to request permission,
        check for permission, notify of a capture session beginning, and notify of a capture session
        ending.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _stopMediaCapture]): Cancels a media capture session.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate): Added the new delegate methods.
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        First checks if the user has authorized the client application access capture devices,
        then uses the WKUIDelegate to request permission for a site from the user.
        (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin): Checks the client
        for permission to access capture devices.
        (WebKit::UIDelegate::UIClient::didBeginCaptureSession): Notifies the client of a capture
        session beginning.
        (WebKit::UIDelegate::UIClient::didEndCaptureSession): Notifies the client of a capture
        session ending.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Calls UIDelegate method to notify the
        client of a capture session beginning/ending.

2016-11-28  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Don't request user permission for a device if it has already been granted in the current browsing context
        https://bugs.webkit.org/show_bug.cgi?id=164760
        <rdar://problem/29261266>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::FrameAuthorizationState::FrameAuthorizationState):
        (WebKit::FrameAuthorizationState::hasPermissionToUseCaptureDevice):
        (WebKit::FrameAuthorizationState::setHasPermissionToUseCaptureDevice):
        (WebKit::FrameAuthorizationState::reset):
        (WebKit::FrameAuthorizationState::securityOriginsAreEqual):
        (WebKit::UserMediaPermissionRequestManagerProxy::stateForRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::invalidateRequests):
        (WebKit::UserMediaPermissionRequestManagerProxy::createRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        (WebKit::FrameAuthorizationState::~FrameAuthorizationState):
        (WebKit::FrameAuthorizationState::frameID):
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::frameID):
        (WebKit::UserMediaPermissionRequestProxy::userMediaDocumentSecurityOrigin):
        (WebKit::UserMediaPermissionRequestProxy::topLevelDocumentSecurityOrigin):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::removeMediaRequestFromMaps):

2016-11-27  Dean Jackson  <dino@apple.com>

        Removed a WTFLogAlways I left in with a recent commit.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKAccessibilitySettingsObserver _settingsDidChange:]):

2016-11-27  Csaba Osztrogonác  <ossy@webkit.org>

        Fix unused-private-field build warning in WebKit2/Platform/SharedMemory.h
        https://bugs.webkit.org/show_bug.cgi?id=165069

        Reviewed by Darin Adler.

        * Platform/SharedMemory.h:

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

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

2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Import std::optional reference implementation as WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=164199

        Reviewed by Saam Barati and Sam Weinig.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::didReceiveResponse):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::responseHasExpired):
        * NetworkProcess/cache/NetworkCacheCoders.h:
        (WebKit::NetworkCache::Coder<std::optional<T>>::encode):
        (WebKit::NetworkCache::Coder<std::optional<T>>::decode):
        (WebKit::NetworkCache::Coder<Optional<T>>::encode): Deleted.
        (WebKit::NetworkCache::Coder<Optional<T>>::decode): Deleted.
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::readOrMakeSalt):
        * NetworkProcess/cache/NetworkCacheData.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::PreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::revalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::addPreloadedEntry):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCache::Statistics::recordRetrievalFailure):
        (WebKit::NetworkCache::Statistics::queryWasEverRequested):
        * NetworkProcess/cache/NetworkCacheStatistics.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::storeBodyAsBlob):
        (WebKit::NetworkCache::Storage::encodeRecord):
        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<std::optional<T>>::encode):
        (IPC::ArgumentCoder<std::optional<T>>::decode):
        (IPC::ArgumentCoder<WTF::Optional<T>>::encode): Deleted.
        (IPC::ArgumentCoder<WTF::Optional<T>>::decode): Deleted.
        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithReply):
        * Platform/SharedMemory.h:
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::map):
        * Scripts/webkit/messages.py:
        (class_template_headers):
        * Shared/API/APISecurityOrigin.h:
        (API::SecurityOrigin::create):
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginGetPort):
        * Shared/SessionState.h:
        * Shared/WebPageCreationParameters.h:
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::typeFromObject):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        * UIProcess/API/Cocoa/WKSecurityOrigin.mm:
        (-[WKSecurityOrigin port]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _navigationGestureDidEnd]):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataType):
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::setCursor):
        * UIProcess/API/mac/WKView.mm:
        (toCoreScrollbarStyle):
        (toAPIScrollbarStyle):
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::completeShippingMethodSelection):
        (WebKit::WebPaymentCoordinatorProxy::completeShippingContactSelection):
        (WebKit::WebPaymentCoordinatorProxy::completePaymentMethodSelection):
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKPaymentSummaryItem):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingMethodSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingContactSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentMethodSelection):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::webFrameIDForHandle):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::computeElementLayout):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateViewExposedRect):
        (WebKit::WebViewImpl::setOverlayScrollbarStyle):
        (WebKit::WebViewImpl::overlayScrollbarStyle):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setViewExposedRect):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::viewExposedRect):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::didReceiveSocketStreamData):
        * UIProcess/InspectorServer/WebSocketServerConnection.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::fileCreationTime):
        (WebKit::fileModificationTime):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backForwardListState):
        (WebKit::WebBackForwardList::restoreFromState):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setOverlayScrollbarStyle):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::overlayScrollbarStyle):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::transformFromScene):
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _scrollOffsetForEvent:]):
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeFormDataElement):
        (WebKit::decodeFormDataElement):
        (WebKit::decodeV1SessionHistory):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::setViewExposedRect):
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::completeShippingMethodSelection):
        (WebKit::WebPaymentCoordinator::completeShippingContactSelection):
        (WebKit::WebPaymentCoordinator::completePaymentMethodSelection):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetEventThrottlingBehaviorOverride):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::convertFromPDFViewToRootView):
        (WebKit::PDFPlugin::convertFromPDFViewToScreen):
        (WebKit::PDFPlugin::boundsOnScreen):
        (WebKit::PDFPlugin::geometryDidChange):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::geometryDidChange):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        (WebKit::PluginView::evaluate):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::pluginLoadClientPolicyForHost):
        * WebProcess/Plugins/WebPluginInfoProvider.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFormData):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::preferredScrollbarOverlayStyle):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::certificateInfo):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):
        (WebKit::WebPage::setScrollbarOverlayStyle):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::scrollbarOverlayStyle):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setViewExposedRect):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setViewExposedRect):

2016-11-26  Sam Weinig  <sam@webkit.org>

        Convert IntersectionObserver over to using RuntimeEnabledFeatures so it can be properly excluded from script
        https://bugs.webkit.org/show_bug.cgi?id=164965

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetIntersectionObserverEnabled):
        (WKPreferencesGetIntersectionObserverEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Add a preference, defaulting to off, for enabling IntersectionObserver.

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Migrate some layout timer-related code from std::chrono to Seconds and MonotonicTime
        https://bugs.webkit.org/show_bug.cgi?id=164992

        Reviewed by Darin Adler.
        
        No more ugly conversion from seconds to milliseconds.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::eventThrottlingDelay):

2016-11-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Follow-up fixes to r208974
        https://bugs.webkit.org/show_bug.cgi?id=164771

        Unreviewed, implement Carlos's review feedback.

        * UIProcess/API/gtk/WebKitNotification.cpp:
        (webkit_notification_get_tag):
        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::withdrawAnyPreviousNotificationMatchingTag):
        (WebKitNotificationProvider::show):
        * UIProcess/API/gtk/WebKitNotificationProvider.h:

2016-11-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Notifications API does not expose or respect the "tag" attribute
        https://bugs.webkit.org/show_bug.cgi?id=164771

        Reviewed by Gustavo Noronha Silva.

        Expose a tag property on WebKitNotification. Ensure that any previous notification with the
        same tag is closed when showing a new notification with that tag.

        * UIProcess/API/gtk/WebKitNotification.cpp:
        (webkit_notification_class_init):
        (webkitNotificationCreate):
        (webkit_notification_get_tag):
        * UIProcess/API/gtk/WebKitNotification.h:
        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::withdrawAnyPreviousNotificationMatchingTag):
        (WebKitNotificationProvider::show):
        * UIProcess/API/gtk/WebKitNotificationProvider.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:

2016-11-22  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Fix introspection warning
        https://bugs.webkit.org/show_bug.cgi?id=165026

        Reviewed by Michael Catanzaro.

        This fixes an introspection annotation for a new API added in r208532.

        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkit_web_page_class_init):

2016-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Simplify custom protocols handler implementation
        https://bugs.webkit.org/show_bug.cgi?id=164922

        Reviewed by Michael Catanzaro.

        We are using too many classes for this and also the C API that is not needed, because both GTK+ and EFL have
        their own APIs and this is not used by WTR at all.

        * PlatformEfl.cmake: Remove files from compilation.
        * PlatformGTK.cmake: Ditto.
        * Shared/API/c/WKBase.h:
        * Shared/API/c/soup/WKBaseSoup.h: Removed.
        * UIProcess/API/APICustomProtocolManagerClient.h: Added.
        (API::CustomProtocolManagerClient::~CustomProtocolManagerClient):
        (API::CustomProtocolManagerClient::startLoading):
        (API::CustomProtocolManagerClient::stopLoading):
        (API::CustomProtocolManagerClient::invalidate):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/soup/WKAPICastSoup.h: Removed.
        * UIProcess/API/C/soup/WKContextSoup.h: Removed.
        * UIProcess/API/C/soup/WKSoupCustomProtocolRequestManager.cpp: Removed.
        * UIProcess/API/C/soup/WKSoupCustomProtocolRequestManager.h: Removed.
        * UIProcess/API/C/soup/WKSoupRequestManager.h: Removed.
        * UIProcess/API/efl/ewk_context.cpp: Remove unneeded include.
        * UIProcess/API/efl/ewk_url_scheme_request.cpp: Use CustomProtocolManagerProxy instead of WKSoupCustomProtocolRequestManagerRef.
        (EwkUrlSchemeRequest::EwkUrlSchemeRequest):
        (EwkUrlSchemeRequest::finish):
        (EwkUrlSchemeRequest::invalidate):
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (EwkUrlSchemeRequest::create):
        (EwkUrlSchemeRequest::manager):
        * UIProcess/API/gtk/WebKitCustomProtocolManagerClient.cpp: Added.
        (attachCustomProtocolManagerClientToContext):
        * UIProcess/API/gtk/WebKitCustomProtocolManagerClient.h: Renamed from Source/WebKit2/UIProcess/API/gtk/WebKitRequestManagerClient.h.
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp: Removed.
        * UIProcess/API/gtk/WebKitRequestManagerClient.h: Removed.
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp: Use CustomProtocolManagerProxy instead of WebSoupCustomProtocolRequestManager.
        (webkitURISchemeRequestCreate):
        (webkitURISchemeRequestCancel):
        (webkitURISchemeRequestGetManager):
        (webkitURISchemeRequestInvalidate):
        (webkitURISchemeRequestReadCallback):
        (webkit_uri_scheme_request_finish_error):
        * UIProcess/API/gtk/WebKitURISchemeRequestPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkitWebContextDispose):
        (webkit_web_context_register_uri_scheme):
        (webkitWebContextStartLoadingCustomProtocol):
        (webkitWebContextInvalidateCustomProtocolRequests):
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (WebKit::CustomProtocolManagerProxy::processDidClose):
        * UIProcess/Network/CustomProtocols/soup/CustomProtocolManagerProxySoup.cpp:
        (WebKit::CustomProtocolManagerProxy::processDidClose): Invalidate the client.
        (WebKit::CustomProtocolManagerProxy::startLoading): Notify the client.
        (WebKit::CustomProtocolManagerProxy::stopLoading): Ditto.
        (WebKit::CustomProtocolManagerProxy::didReceiveResponse): Notify the network process.
        (WebKit::CustomProtocolManagerProxy::didLoadData): Ditto.
        (WebKit::CustomProtocolManagerProxy::didFailWithError): Ditto.
        (WebKit::CustomProtocolManagerProxy::didFinishLoading): Ditto.
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp: Removed.
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.h: Removed.
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManagerClient.cpp: Removed.
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManagerClient.h: Removed.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose): Notify the CustomProtocolManagerProxy.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool): Initialize the CustomProtocolManagerClient and remove the all supplement.
        (WebKit::WebProcessPool::setCustomProtocolManagerClient):
        (WebKit::WebProcessPool::registerSchemeForCustomProtocol): In case of soup cache the given protocol.
        (WebKit::WebProcessPool::unregisterSchemeForCustomProtocol): In case of soup delete the given protocol from the cache.
        * UIProcess/WebProcessPool.h:
        * UIProcess/efl/RequestManagerClientEfl.cpp: Do not use the C API, but API::CustomProtocolManagerClient.
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::registerURLSchemeHandler):
        * UIProcess/efl/RequestManagerClientEfl.h:
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Use m_urlSchemesRegisteredForCustomProtocols to
        build the list of custom protocols to send to the network process.

2016-11-21  Alex Christensen  <achristensen@webkit.org>

        Fix Sierra CMake build after r208452
        https://bugs.webkit.org/show_bug.cgi?id=164437

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateMediaTouchBar):
        I haven't enabled VIDEO_PRESENTATION_MODE in the CMake build yet.
        It's needed for WebPlaybackSessionInterfaceMac to exist.

2016-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.15.2 release.

        * gtk/NEWS: Add release notes for 2.15.2.

2016-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove m_customProtocolManagerProxy from WebProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=164908

        Reviewed by Andreas Kling.

        Since the network process is mandatory, the custom protocol manager proxy of WebProcessProxy is unused and can
        be removed.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        * UIProcess/WebProcessProxy.h:

2016-11-20  Zan Dobersek  <zdobersek@igalia.com>

        [EncryptedMedia] Make EME API runtime-enabled
        https://bugs.webkit.org/show_bug.cgi?id=164927

        Reviewed by Jer Noble.

        Add the new EncryptedMediaAPI preference. Set the same feature
        flag on the shared RuntimeEnabledFeatures object to the
        corresponding value that's stored in the WebPreferencesStore.

        InjectedBundle::overrideBoolPreferenceForTestRunner() does the
        same when the 'WebKitEncryptedMediaAPIEnabled' preference is
        overridden in WKTR for testing purposes.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-11-19  Antti Koivisto  <antti@apple.com>

        Salt network cache hashes
        https://bugs.webkit.org/show_bug.cgi?id=164924

        Reviewed by Alex Christensen.

        To enhance privacy make cache content unidentifiable from file names alone.
        This is done by generating a unique persistent salt for each cache instance.
        It is used when computing hashes used in file names.

        The patch also replaces plain text partition directory names with salted hashes.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::makeCacheKey):
        (WebKit::NetworkCache::makeCacheKey): Deleted.
        * NetworkProcess/cache/NetworkCache.h:

            Increment cache version.

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::BlobStorage):
        (WebKit::NetworkCache::BlobStorage::add):
        (WebKit::NetworkCache::BlobStorage::get):

            Use salt for blob content hash.

        * NetworkProcess/cache/NetworkCacheBlobStorage.h:
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::computeSHA1):

            For simplicity all SHA1s are now salted.

        (WebKit::NetworkCache::makeSalt):
        (WebKit::NetworkCache::readOrMakeSalt):

            Read salt if it exists, generate and persist it otherwise.

        * NetworkProcess/cache/NetworkCacheData.h:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::Key):

            Remove the "No partition" string and just empty.
            That was only needed to have a directory name of some sort.

        (WebKit::NetworkCache::Key::computeHash):

            Use salt for key hash.

        (WebKit::NetworkCache::Key::computePartitionHash):

            Separate hash for partition.

        * NetworkProcess/cache/NetworkCacheKey.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::makeSubresourcesKey):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::saveToDiskIfReady):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveSubresourcesEntry):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::makeSaltFilePath):
        (WebKit::NetworkCache::Storage::open):

            Cache can't be opened if we can't read or persist a salt.

        (WebKit::NetworkCache::traverseRecordsFiles):
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::recordDirectoryPathForKey):

            Use the partition hash in the directory name instead of a plain text name.

        (WebKit::NetworkCache::decodeRecordHeader):
        (WebKit::NetworkCache::Storage::readRecord):
        (WebKit::NetworkCache::Storage::encodeRecord):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::salt):

2016-11-19  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] When zoomed in and panning on pages with fixed bars, parts of the bars are sometimes missing
        https://bugs.webkit.org/show_bug.cgi?id=164855

        Reviewed by Sam Weinig.

        During UI-process panning and zooming, we send visible rect updates to the web process
        with inStableState=false, and don't update GraphicsLayers until we get into a stable state.

        This causes a problem where the web process has a stale notion of where the GraphicsLayers
        for position:fixed elements are, but is then told to update tiling coverage with an up-to-date
        visible rect. The existing "sync layer positions" path isn't useful to fix this, because it
        breaks the relationship between the GraphicsLayer positions and their FixedPositionViewportConstraints
        in the scrolling tree.

        To address this, add the notion of an Optional<> approximatePosition on GraphicsLayers. This is used
        only by the coverageRect computation code path, and is cleared by a setPosition(). ApproximatePositions
        are pushed onto GraphicsLayers via the syncViewportConstrainedLayerPositions() code path (renamed to
        reconcileViewportConstrainedLayerPositions).

        Tested by scrollingcoordinator/ios/non-stable-viewport-scroll.html

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects): Always push the custom fixed position rect down, but send
        ScrollingLayerPositionAction::SetApproximate if the state is not stable.
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2016-11-18  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test non-stable-state scrolling on iOS
        https://bugs.webkit.org/show_bug.cgi?id=164905

        Reviewed by Dan Bernstein.

        Make it possible for an iOS layout test to force every visible rect update
        from the UI process to the web process to be in a non-stable state. This emulates
        what happens during panning and zooming interactions, and allows us to test the
        scrolling and layer trees in these transient states.

        This is done by adding a testing property on WKWebView, _stableStateOverride, whose
        getters and setters are overridden in TestRunnerWKWebView. When non-nil, we _updateVisibleContentRectAfterScrollInView
        consults the NSNumber's boolValue and uses it to override the stable state.

        To facilitate this kind of testing, also add immediateScrollToOffset() and
        immediateZoomToScale() to UIScriptController. Finally, add doAfterPresentationUpdate()
        which provides a callback that fires after one trip to the web process and back.

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

2016-11-18  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Eliminate a source of flakiness in layout tests by forcing WebPage into "responsive" mode for all tests, with an internals override
        https://bugs.webkit.org/show_bug.cgi?id=164980

        Reviewed by Chris Dumez.

        WebPage::eventThrottlingDelay() uses a latency estimate based on the round-trip time from the UI process
        to affect behavior, including whether scroll events are fired. This also affects the FrameView "scrolledByUser"
        flag that impacts tile coverage.

        During testing, latency falling above or below the 16ms threshold could affect behavior. Fix by forcing
        WebPage into "responsive" mode while running tests, via InjectedBundlePage::prepare().

        Add a nullable internals property so that a test can specify responsive, unresponsive or default behavior.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetEventThrottlingBehaviorOverride):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::eventThrottlingDelay):

2016-11-18  Simon Fraser  <simon.fraser@apple.com>

        Remove use of std::chrono in WebPage and entrained code
        https://bugs.webkit.org/show_bug.cgi?id=164967

        Reviewed by Tim Horton.

        Replace std::chrono with Seconds and Monotonic Time.

        Use more C++11 initialization for WebPage data members.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::timestamp):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MonotonicTime>::encode):
        (IPC::ArgumentCoder<MonotonicTime>::decode):
        (IPC::ArgumentCoder<Seconds>::encode):
        (IPC::ArgumentCoder<Seconds>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/ios/WKContentView.mm:
        (WebKit::HistoricalVelocityData::HistoricalVelocityData):
        (WebKit::HistoricalVelocityData::velocityForNewData):
        (WebKit::HistoricalVelocityData::append):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::eventThrottlingDelay):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::m_userActivityHysteresis):
        (WebKit::WebPage::didFlushLayerTreeAtTime):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::eventThrottlingDelay):
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2016-11-18  Dean Jackson  <dino@apple.com>

        AX: "(inverted-colors)" media query only matches on page reload; should match on change
        https://bugs.webkit.org/show_bug.cgi?id=163564
        <rdar://problem/28807350>

        Reviewed by Simon Fraser.

        Listen for the appropriate notifications that accessibility settings
        have changed. This is a single notification on macOS, which uses WebViewImpl,
        and more fine-grained notifications on iOS, using WKWebView.

        When we see the notification, send a message to the WebProcess which will
        then tell the WebCore::Page.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _accessibilitySettingsDidChange:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKAccessibilitySettingsObserver initWithImpl:]):
        (-[WKAccessibilitySettingsObserver dealloc]):
        (-[WKAccessibilitySettingsObserver _settingsDidChange:]):
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::accessibilitySettingsDidChange):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::accessibilitySettingsDidChange):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::accessibilitySettingsDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-11-18  Jeremy Jones  <jeremyj@apple.com>

        USE WK_MAC_TBA for version number in _webViewRequestPointerLock:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12))
        https://bugs.webkit.org/show_bug.cgi?id=164962

        Reviewed by Dean Jackson.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

2016-11-18  Enrica Casucci  <enrica@apple.com>

        Refactor drag and drop for WebKit2 to encode DragData message exchange.
        https://bugs.webkit.org/show_bug.cgi?id=164945

        Reviewed by Tim Horton.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction):
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::willPerformDragDestinationAction):
        (WebKit::WebDragClient::actionMaskForDrag):
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-11-18  Jeremy Jones  <jeremyj@apple.com>

        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
        https://bugs.webkit.org/show_bug.cgi?id=163801

        Reviewed by Simon Fraser.

        Add SPI to notify client of pointer lock and for client to allow or deny.
        Unlock pointer when view is not longer active.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::requestPointerLock):
        (API::UIClient::didLosePointerLock):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        (WKPageDidAllowPointerLock):
        (WKPageDidDenyPointerLock):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::requestPointerLock):
        (WebKit::UIDelegate::UIClient::didLosePointerLock):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::requestPointerLock):
        (WebKit::WebPageProxy::didAllowPointerLock):
        (WebKit::WebPageProxy::didDenyPointerLock):
        (WebKit::WebPageProxy::requestPointerUnlock):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        Downloads started by context menu actions should also have a web view associated
        https://bugs.webkit.org/show_bug.cgi?id=164364

        Reviewed by Michael Catanzaro.

        When a request is converted to a download WebPageProxy calls handleDownloadRequest() and clients handle that to
        associate the web view to the download. When a download is started by a context menu action, WebPageProxy calls
        WebProcessPool::download() with this as initiatingPage parameter, but clients are not notified in this case.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkitDownloadCreateForRequest): Deleted.
        * UIProcess/API/gtk/WebKitDownloadPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextStartDownload): Use webkitWebContextGetOrCreateDownload() after WebProcessPool::download()
        because the WebKitDownload could have already been created by the web view download handler at this point.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_download_uri): We no longer need to associate the web view to the download here.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download): If an initiatingPage has been passed, call handleDownloadRequest() to notify
        the page client.

2016-11-17  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: API test _WKDownload.ConvertResponseToDownload is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=164631

        Reviewed by Carlos Garcia Campos.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::convertToDownload):
        I could reproduce the flaky failure 100% of the time when not using NETWORK_SESSION
        by adding a usleep(1000000) in NetworkResourceLoader::convertToDownload.  m_networkLoad
        was not being set to nullptr before it was being checked in NetworkResourceLoader::abort

2016-11-17  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build after r208865
        https://bugs.webkit.org/show_bug.cgi?id=164894

        * PlatformMac.cmake:
        Add new files.

2016-11-17  Ryosuke Niwa  <rniwa@webkit.org>

        WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled should keep text replacement enabled
        https://bugs.webkit.org/show_bug.cgi?id=164857
        <rdar://problem/27721742>

        Reviewed by Wenson Hsieh.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementSpellcheckEnabled):

2016-11-17  John Wilander  <wilander@apple.com>

        Resource load statistics: Cover further data records, count removed data records, and only fire handler when needed
        https://bugs.webkit.org/show_bug.cgi?id=164659

        Reviewed by Andy Estes.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::removeDataRecords):
            Consistent naming with 'remove' rather than 'delete'.
            Now removes localStorage, IndexDB, disk cache, and memory cache too.
            Updates statistics with number of times it has removed data records.
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
            No longer checks whether it has enough data since the classification rules
            are absolute, not relative.
        (WebKit::WebResourceLoadStatisticsStore::clearDataRecords): Deleted.
        * UIProcess/WebResourceLoadStatisticsStore.h:
            Consistent naming with 'remove' rather than 'delete'.

2016-11-17  Brady Eidson  <beidson@apple.com>

        Add _WKIconLoadingDelegate SPI.
        https://bugs.webkit.org/show_bug.cgi?id=164894

        Reviewed by Alex Christensen.

        With this client, WebCore will ask the FrameLoaderClient about each icon found in the <head>.

        WebKit2 will then ask the embedding app - for each icon - if it wants that icon to load.

        For icons the app decides to load, WebKit will pass the data to the app without storing locally.

        * UIProcess/API/APIIconLoadingClient.h: Copied from Source/WebCore/html/LinkIconCollector.h.
        (API::IconLoadingClient::~IconLoadingClient):
        (API::IconLoadingClient::getLoadDecisionForIcon):

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

        * UIProcess/API/Cocoa/_WKIconLoadingDelegate.h: Copied from Source/WebCore/html/LinkIconCollector.h.

        * UIProcess/API/Cocoa/_WKLinkIconParameters.h: Copied from Source/WebCore/html/LinkIconCollector.h.
        * UIProcess/API/Cocoa/_WKLinkIconParameters.mm: Copied from Source/WebCore/html/LinkIconCollector.h.
        (-[_WKLinkIconParameters _initWithLinkIcon:]):
        (-[_WKLinkIconParameters url]):
        (-[_WKLinkIconParameters mimeType]):
        (-[_WKLinkIconParameters size]):
        (-[_WKLinkIconParameters iconType]):
        * UIProcess/API/Cocoa/_WKLinkIconParametersInternal.h: Copied from Source/WebCore/html/LinkIconCollector.h.

        * UIProcess/Cocoa/IconLoadingDelegate.h: Copied from Source/WebCore/html/LinkIconCollector.h.
        * UIProcess/Cocoa/IconLoadingDelegate.mm: Added.
        (WebKit::IconLoadingDelegate::IconLoadingDelegate):
        (WebKit::IconLoadingDelegate::~IconLoadingDelegate):
        (WebKit::IconLoadingDelegate::createIconLoadingClient):
        (WebKit::IconLoadingDelegate::delegate):
        (WebKit::IconLoadingDelegate::setDelegate):
        (WebKit::IconLoadingDelegate::IconLoadingClient::IconLoadingClient):
        (WebKit::IconLoadingDelegate::IconLoadingClient::~IconLoadingClient):
        (WebKit::IconLoadingDelegate::IconLoadingClient::getLoadDecisionForIcon):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setIconLoadingClient):
        (WebKit::WebPageProxy::getLoadDecisionForIcon):
        (WebKit::WebPageProxy::finishedLoadingIcon):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::iconLoadingClient):
        * UIProcess/WebPageProxy.messages.in:

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::useIconLoadingClient):
        (WebKit::WebFrameLoaderClient::getLoadDecisionForIcon):
        (WebKit::WebFrameLoaderClient::finishedLoadingIcon):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::WebFrameLoaderClient::setUseIconLoadingClient):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didGetLoadDecisionForIcon):
        (WebKit::WebPage::setUseIconLoadingClient):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-11-17  Saam Barati  <sbarati@apple.com>

        Remove async/await compile time flag and enable tests
        https://bugs.webkit.org/show_bug.cgi?id=164828
        <rdar://problem/28639334>

        Reviewed by Yusuke Suzuki.

        * Configurations/FeatureDefines.xcconfig:

2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] WTF::TemporaryChange with WTF::SetForScope
        https://bugs.webkit.org/show_bug.cgi?id=164761

        Reviewed by Saam Barati.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (createEncodedObject):
        (decodeObject):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateTextTouchBar):
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::commitStateAfterChildren):
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        (WebKit::WebPasteboardProxy::writeToClipboard):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        (WebKit::CompositingCoordinator::purgeBackingStores):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::dispatchTouchEvent):
        (WebKit::WebPage::setInitialFocus):
        (WebKit::WebPage::insertTextAsync):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2016-11-16  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r208589

        The generated com.apple.WebKit.plugin-common.sb file was not getting copied into
        the Resources folder, so was not deployed with WebKit. We need to treat it like
        com.apple.WebProcess.sb and the other generated files.

        * WebKit2.xcodeproj/project.pbxproj: Tell Xcode to include the generated file in
        the framework Resources.

2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=164827

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        Annotated ES6 Modules option with DEFAULT_EXPERIMENTAL_FEATURES_ENABLED.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetES6ModulesEnabled):
        (WKPreferencesGetES6ModulesEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-11-16  Simon Fraser  <simon.fraser@apple.com>

        Add logging support to VisibleContentRectUpdateInfo
        https://bugs.webkit.org/show_bug.cgi?id=164825

        Reviewed by Zalan Bujtas.

        Add TextStream output to VisibleContentRectUpdateInfo. Just piping it into a logging
        stream does single-line output, so also make a convenience dump() function that will
        product multiline output. Result look like:

            (VisibleContentRectUpdateInfo
              (lastLayerTreeTransactionID 54)
              (exposedContentRect (523.44,1258.63) width=676.20 height=901.60)
              (unobscuredContentRect (523.44,1293.41) width=676.20 height=866.82)
              (unobscuredRectInScrollViewCoordinates (0,39.50) width=768 height=984.50)
              (customFixedPositionRect (219.64,935) width=980 height=1225)
              (obscuredInset width=0 height=39.50)
              (scale 1.14)
              (inStableState 0)
              (timestamp 736446.61)
              (verticalVelocity -11.36))

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::dump):
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):

2016-11-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Scroll view scrolling and zooming animations can keep running across page loads
        https://bugs.webkit.org/show_bug.cgi?id=164810

        Reviewed by Tim Horton.
        
        Scrolling and zooming animations can leak across page loads, which makes tests flakey,
        and is unexpected by users.

        Tested by scrollingcoordinator/ios/sync-layer-positions-after-scroll.html followed by
        scrollingcoordinator/ios/ui-scrolling-tree.html

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

2016-11-15  Jon Lee  <jonlee@apple.com>

        Report active video and audio capture devices separately
        https://bugs.webkit.org/show_bug.cgi?id=164769

        Reviewed by Eric Carlson.

        Replace kWKMediaHasActiveCaptureDevice with kWKMediaHasActiveAudioCaptureDevice and
        kWKMediaHasActiveVideoCaptureDevice

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetMediaState):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Update the mask to include the two
        bits.

2016-11-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Implement support for visual viewports
        https://bugs.webkit.org/show_bug.cgi?id=164765

        Reviewed by Tim Horton.

        Adopt the visual viewport scrolling model in iOS WK2.

        Pass the parameters used for computing the layout viewport up to WK2 via RemoteLayerTreeTransaction.
        These are stored on WebPageProxy. When they change, _didCommitLayerTree triggers a -_updateVisibleContentRects.
        
        WebPageProxy::computeCustomFixedPositionRect() is the function that computes the "override" layout viewport.
        It starts with the baseLayoutViewportSize from the web process (which is based on the initial containing block
        size), then ensures that it's no smaller than the unobscured content rect, since it makes no sense for the
        layout viewport to be smaller than the visual viewport. The static FrameView::computeLayoutViewportOrigin()
        is then use to "push" the layout viewport around as the visual viewport changes.

        * Shared/VisibleContentRectUpdateInfo.h:
        * Shared/WebCoreArgumentCoders.cpp: Encode LayoutSize and LayoutPoint.
        (IPC::ArgumentCoder<LayoutSize>::encode):
        (IPC::ArgumentCoder<LayoutSize>::decode):
        (IPC::ArgumentCoder<LayoutPoint>::encode):
        (IPC::ArgumentCoder<LayoutPoint>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::baseLayoutViewportSize):
        (WebKit::RemoteLayerTreeTransaction::setBaseLayoutViewportSize):
        (WebKit::RemoteLayerTreeTransaction::minStableLayoutViewportOrigin):
        (WebKit::RemoteLayerTreeTransaction::setMinStableLayoutViewportOrigin):
        (WebKit::RemoteLayerTreeTransaction::maxStableLayoutViewportOrigin):
        (WebKit::RemoteLayerTreeTransaction::setMaxStableLayoutViewportOrigin):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::description):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        (WebKit::RemoteScrollingCoordinatorProxy::visualViewportEnabled): Accessor.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::customFixedPositionRect):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::customFixedPositionRect):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView _didCommitLayerTree:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect): When visual viewports are enabled, compute
        the layout viewport rect, taking the baseLayoutViewportSize and the current unobscured rect into account.
        (WebKit::WebPageProxy::updateLayoutViewportParameters):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * WebProcess/WebPage/WebPage.cpp: Encode in the transaction the layout viewport parameters (with minor refactor).
        (WebKit::WebPage::willCommitLayerTree):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects): This is where the web process receives the new override layout viewport
        from the web process (with some logging).

2016-11-15  Jon Lee  <jonlee@apple.com>

        Remove HasMediaCaptureDevice
        https://bugs.webkit.org/show_bug.cgi?id=164767
        <rdar://problem/29263696>

        Reviewed by Eric Carlson.

        * UIProcess/API/C/WKPage.cpp: Remove kWKMediaHasCaptureDevice.
        (WKPageGetMediaState):
        * UIProcess/API/C/WKPagePrivate.h:

2016-11-15  Daniel Bates  <dabates@apple.com>

        Disallow loads using HTTP 0.9 at the ResourceHandle/NetworkDataTask level
        https://bugs.webkit.org/show_bug.cgi?id=164662
        <rdar://problem/29268514>

        Reviewed by Alex Christensen and Brady Eidson.

        Make changes to NetworkDataTask similar to the changes made to ResourceHandle so as to
        disallow non-default port HTTP 0.9 loads when using the ENABLE(NETWORK_SESSION) networking
        code path in WebKit2.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::didReceiveResponse): Added. Fail the load if it is using HTTP 0.9.
        Otherwise notify the client that we received a response.
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::resume): Substitute dispatchDidReceiveResponse() for didReceiveResponse()
        as the latter has been renamed to the former.
        (WebKit::NetworkDataTaskBlob::getSizeForNext): Ditto.
        (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse): Renamed from didReceiveResponse().
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::didReceiveResponse): Deleted.
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::didSendRequest): Substitute dispatchDidReceiveResponse() for didReceiveResponse()
        as the latter has been renamed to the former.
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse): Renamed from didReceiveResponse(). Also
        remove the local variable response and inline its value into the call to ResourceHandle::didReceiveResponse()
        as this variable is used exactly once in this function and its name does not describe its purpose any more
        than its value.
        (WebKit::NetworkDataTaskSoup::didRequestNextPart): Substitute dispatchDidReceiveResponse() for didReceiveResponse()
        as the latter has been renamed to the former.
        * NetworkProcess/soup/NetworkDataTaskSoup.h:

2016-11-14  Alex Christensen  <achristensen@webkit.org>

        Move SecurityOrigin::createFromDatabaseIdentifier to SecurityOriginData
        https://bugs.webkit.org/show_bug.cgi?id=164720

        Reviewed by Brady Eidson.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::indexedDatabaseOrigins):
        * DatabaseProcess/DatabaseProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginCreateFromDatabaseIdentifier):
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::Entry::encode):
        (WebKit::WebsiteData::Entry::decode):
        * Shared/WebsiteData/WebsiteData.h:
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
        (WebKit::LocalStorageDatabaseTracker::origins):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::reachedApplicationCacheOriginQuota):
        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::mediaKeyOrigins):
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetDatabaseQuota):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins):
        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::create):
        (WebKit::StorageAreaImpl::StorageAreaImpl):
        (WebKit::StorageAreaImpl::securityOrigin):
        * WebProcess/Storage/StorageAreaImpl.h:
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        * WebProcess/Storage/StorageAreaMap.h:
        (WebKit::StorageAreaMap::securityOrigin):
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::didDestroyStorageAreaMap):
        (WebKit::StorageNamespaceImpl::storageArea):
        * WebProcess/Storage/StorageNamespaceImpl.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::fetchWebsiteData):

2016-11-14  Brent Fulgham  <bfulgham@apple.com>

        [Mac][iOS][WK2] Tighten permissions to change CapsLock delay
        https://bugs.webkit.org/show_bug.cgi?id=164725
        <rdar://problem/28970910>

        Reviewed by Alexey Proskuryakov.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: Limit access
        to the IOKit connection that actually needs it.

2016-11-14  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed sandbox fix after r208702

        Correct version check to avoid breaking users in Safari Technology Preview
        or WebKit nightlies.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2016-11-14  Pranjal Jumde  <pjumde@apple.com>

        Keychain access in WebKit should be limited to a single process. Earlier this was blocked on the networking framework requiring direct access to keychain, this will be resolved in the upcoming version of macOS.
        https://bugs.webkit.org/show_bug.cgi?id=163710
        <rdar://problem/24357468>

        Reviewed by Darin Adler.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2016-11-13  Darin Adler  <darin@apple.com>

        Remove many includes of ExceptionCode.h
        https://bugs.webkit.org/show_bug.cgi?id=164706

        Reviewed by Alex Christensen.

        * WebProcess/Storage/StorageAreaImpl.cpp: Removed include of ExceptionCode.h.

2016-11-13  Darin Adler  <darin@apple.com>

        Fix exception handling in SQL database code, streamline and update code
        https://bugs.webkit.org/show_bug.cgi?id=164685

        Reviewed by Sam Weinig.

        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseManager::getDatabaseOrigins): Update for change to the
        DatabaseTracker::origins function.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData): Use DatabaseTracker.
        (WebKit::WebsiteDataStore::removeData): Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetDatabaseQuota): Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::processWillSuspendImminently): Ditto.

2016-11-12  Simon Fraser  <simon.fraser@apple.com>

        Add a way to get the UI-side scrolling tree as text via UIScriptController
        https://bugs.webkit.org/show_bug.cgi?id=164697

        Reviewed by Zalan Bujtas.

        Add a property to WKWebView to retrieve the scrolling tree as text, for testing.
        Expose it via the RemoteScrollingCoordinatorProxy.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollingTreeAsText]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeAsText):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:

2016-11-12  Daniel Bates  <dabates@apple.com>

        Incorrect release log message emitted when waiting/not waiting for the WebProcess continue a load
        https://bugs.webkit.org/show_bug.cgi?id=164605

        Reviewed by Darin Adler.

        Currently we emit a release log message of the form "didReceiveResponse: Should wait for
        message from WebContent process ..." when we are not waiting for the WebProcess and emit
        a message of the form "didReceiveResponse: Should not wait for message from WebContent
        process" when we are waiting on the WebProcess. Invert these messages to reflect whether
        we are waiting for the WebProcess to send message NetworkResourceLoader::ContinueDidReceiveResponsewhether.

        For the main resource NetworkResourceLoader::didReceiveResponse() returns ShouldContinueDidReceiveResponse::No
        because we are waiting for the WebProcess to send message NetworkResourceLoader::ContinueDidReceiveResponse
        to continue the load. For a subresource we do not need to wait for the WebProcess to allow the load to continue
        and hence NetworkResourceLoader::didReceiveResponse() returns ShouldContinueDidReceiveResponse::Yes.

        * NetworkProcess/NetworkResourceLoader.cpp:

2016-11-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Share some code with Mac for post-async-scroll state reconciliation
        https://bugs.webkit.org/show_bug.cgi?id=164694

        Reviewed by Zalan Bujtas.

        Rather than calling FrameView directly, call reconcileScrollingState() on the scrolling
        coordinator.

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

2016-11-12  Brian Burg  <bburg@apple.com>

        Web Automation: terminate the automation session if the web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=164671
        <rdar://problem/29028964>

        Reviewed by Joseph Pecoraro.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::disconnect):
        (WebKit::WebAutomationSession::terminate):
        Factor out code that disconnects the remote, unpairs, and notifies the client.
        Then, expose terminate() which can be called without a FrontendChannel.
        Calling this causes the _WKAutomationDelegate to clear the local-side session in the
        browser, and disconnecting from the remote will hang up the remote-side session.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash):
        Terminate the session.

2016-11-11  Alex Christensen  <achristensen@webkit.org>

        Use SecurityOriginData as keys in StorageManager
        https://bugs.webkit.org/show_bug.cgi?id=159834
        <rdar://problem/27346948>

        Reviewed by Brady Eidson.

        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunctionImpl):
        Add a missing std::forward so we can use this callMemberFunctionImpl with rvalues.
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerDeleteEntriesForOrigin):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetCacheOrigins):
        (WKResourceCacheManagerClearCacheForOrigin):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        (WebKit::LocalStorageDatabase::openDatabase):
        (WebKit::LocalStorageDatabase::close):
        * UIProcess/Storage/LocalStorageDatabase.h:
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasePath):
        (WebKit::LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin):
        (WebKit::LocalStorageDatabaseTracker::deleteDatabaseWithOrigin):
        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
        (WebKit::LocalStorageDatabaseTracker::origins):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::securityOrigin):
        (WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::TransientLocalStorageNamespace::origins):
        (WebKit::StorageManager::TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::StorageManager::StorageArea::StorageArea):
        (WebKit::StorageManager::StorageArea::clone):
        (WebKit::StorageManager::StorageArea::items):
        (WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded):
        (WebKit::StorageManager::LocalStorageNamespace::didDestroyStorageArea):
        (WebKit::StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::StorageManager::LocalStorageNamespace::clearAllStorageAreas):
        (WebKit::StorageManager::SessionStorageNamespace::origins):
        (WebKit::StorageManager::SessionStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::StorageManager::SessionStorageNamespace::cloneTo):
        (WebKit::StorageManager::getSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createTransientLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
        (WebKit::StorageManager::StorageArea::create): Deleted.
        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea): Deleted.
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea): Deleted.
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::displayNameForOrigin):
        (WebKit::WebsiteDataRecord::add):
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::mediaKeyOrigins):
        (WebKit::WebsiteDataStore::removeMediaKeys):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Fewer SecurityOrigin uses in the UIProcess!  Hooray!

2016-11-11  Ryosuke Niwa  <rniwa@webkit.org>

        Hovering over a slotted Text node clears hover state
        https://bugs.webkit.org/show_bug.cgi?id=164002
        <rdar://problem/29040471>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):

2016-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] autocorrect and autocapitalize attributes do not work in contenteditable elements
        https://bugs.webkit.org/show_bug.cgi?id=164538
        <rdar://problem/8418711>

        Reviewed by Ryosuke Niwa.

        Consult HTMLElement::autocorrect() and HTMLElement::autocapitalizeType() when assembling the assisted node
        information for the currently assisted node.

        * Shared/AssistedNodeInformation.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toUITextAutocapitalize):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2016-11-11  Beth Dakin  <bdakin@apple.com>

        Move to modern TouchBar methods
        https://bugs.webkit.org/show_bug.cgi?id=164655
        -and corresponding-
        rdar://problem/29226911

        Reviewed by Wenson Hsieh.

        customizationDefaultItemIdentifiers -> defaultItemIdentifiers
        itemIdentifiers -> defaultItemIdentifiers
        defaultItems -> templateItems

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::plainTextTouchBarDefaultItemIdentifiers):
        (WebKit::richTextTouchBarDefaultItemIdentifiers):
        (WebKit::WebViewImpl::setUpTextTouchBar):
        (WebKit::WebViewImpl::updateTextTouchBar):
        (WebKit::plainTextTouchBarCustomizationDefaultItemIdentifiers): Deleted.
        (WebKit::richTextTouchBarCustomizationDefaultItemIdentifiers): Deleted.

2016-11-11  Brent Fulgham  <bfulgham@apple.com>

        Get rid of old sandbox rules for OS's we no longer support
        https://bugs.webkit.org/show_bug.cgi?id=164638

        Reviewed by Simon Fraser.

        Clean up the various sandbox profiles to get rid of rules that applied to operating system
        versions we no longer support, or were added in support of bugs that have long since been
        fixed.

        This should introduce no change in behavior.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2016-11-11  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: "close pending flag" and firing blocked events all need fixing.
        https://bugs.webkit.org/show_bug.cgi?id=164641

        Reviewed by Alex Christensen.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::databaseConnectionPendingClose):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

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

        [MediaStream] defer resolution of getUserMedia promise made in a background tab
        https://bugs.webkit.org/show_bug.cgi?id=164643
        <rdar://problem/29048317>

        Reviewed by Brady Eidson.

        Do not ask for user for access to capture devices when the document does not
        allow media to play, wait until playback is allowed.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::mediaCanStart):
        (WebKit::UserMediaPermissionRequestManager::grantUserMediaDevicesSandboxExtension):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::mediaCanStart):
        * WebProcess/Plugins/PluginView.h:

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

        Move Node from ExceptionCode to ExceptionOr
        https://bugs.webkit.org/show_bug.cgi?id=164515

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        (webkit_dom_html_select_element_remove): Updated exception handling.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNode.cpp:
        (webkit_dom_node_insert_before): Ditto.
        (webkit_dom_node_replace_child): Ditto.
        (webkit_dom_node_remove_child): Ditto.
        (webkit_dom_node_append_child): Ditto.
        (webkit_dom_node_clone_node_with_error): Ditto.
        (webkit_dom_node_set_node_value): Ditto.
        (webkit_dom_node_set_text_content): Ditto.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode insertNode:before:]): Ditto.
        (-[WKDOMNode appendChild:]): Ditto.
        (-[WKDOMNode removeChild:]): Ditto.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin): Removed unneeded ASSERT_NO_EXCEPTION.
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement): Ditto.

2016-11-11  Megan Gardner  <megan_gardner@apple.com>

        [Cocoa] Support wide gamut for Drag Image UI
        https://bugs.webkit.org/show_bug.cgi?id=164490

        Reviewed by Tim Horton.

        Fixed an error in the gating for the new wide gamut support in ShareableBitmap.
        We should always respect the flags straight out, and not make decisions later, it can lead to mismatched data and data storage.
        Added support for wide gamut in createCGImage.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::bitmapInfo):
        (WebKit::colorSpace):
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::createCGImage):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):
        (WebKit::WebDragClient::startDrag):

2016-11-11  Beth Dakin  <bdakin@apple.com>

        Get touch bar code building for open source builds
        https://bugs.webkit.org/show_bug.cgi?id=164610

        Reviewed by Wenson Hsieh.

        * config.h:

2016-11-10  Brent Fulgham  <bfulgham@apple.com>

        Remove unused FontService from sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=164625
        <rdar://problem/26899976>

        Reviewed by Alex Christensen.

        Part of some general sandbox profile gardening.

        Convert the Plugin process sandbox into 

        * Configurations/WebKit.xcconfig: Add exclude for com.apple.WebKit.plugin-common.sb.in.
        * DerivedSources.make: Update to generate com.apple.WebKit.plugin-common.sb from .in file
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: Copied from Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb.
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb: Removed.
        * WebKit2.xcodeproj/project.pbxproj: Update for new .in file.
        * WebProcess/com.apple.WebProcess.sb.in: Remove com.apple.FontServer
        from macOS Sierra and newer.

2016-11-10  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] apply constraints passed to getUserMedia()
        https://bugs.webkit.org/show_bug.cgi?id=164561

        Reviewed by Youenn Fablet.
        <rdar://problem/29191384>

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):

2016-11-10  Alex Christensen  <achristensen@webkit.org>

        Move SecurityOrigin::databaseIdentifier() to SecurityOriginData
        https://bugs.webkit.org/show_bug.cgi?id=164573

        Reviewed by Brady Eidson.

        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginCopyDatabaseIdentifier):
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasePath):
        (WebKit::LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin):
        (WebKit::LocalStorageDatabaseTracker::deleteDatabaseWithOrigin):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeMediaKeys):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyOriginsWithApplicationCache):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::mediaKeyStorageDirectoryForOrigin):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::enumerateMediaDevices):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):

2016-11-10  Alex Christensen  <achristensen@webkit.org>

        Remove unused CFURLCACHE code
        https://bugs.webkit.org/show_bug.cgi?id=164551

        Reviewed by Antti Koivisto.

        WebKit2 doesn't use CFURLCache, but we still have some unused code that seems to use it.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::clearDiskCacheEntries):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::partitionName): Deleted.
        (WebKit::NetworkProcess::cfURLCacheOrigins): Deleted.
        (WebKit::NetworkProcess::clearCFURLCacheForOrigins): Deleted.

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

        [Linux] Memory process values shown by the WebMemorySampler in linux are wrong
        https://bugs.webkit.org/show_bug.cgi?id=164591

        Reviewed by Michael Catanzaro.

        It's parsing /proc/self/statm, and returning the values as if they were bytes, but they are number of pages, so
        to get the bytes we need to take the page size into account. In r208534 I added a method to get /proc/self/statm
        values in bytes to Platform layer, so we can simply use that instead.

        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::WebMemorySampler::sampleWebKit): Use currentProcessMemoryStatus() and update the descriptions to
        clarify that values are in bytes.

2016-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        MemoryPressureHandler shouldn't know how to release WebCore memory
        https://bugs.webkit.org/show_bug.cgi?id=160497

        Reviewed by Michael Catanzaro.

        Set the low memory handler before installing the memory pressure handler.

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

2016-10-27  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] New API to notify about dynamically added forms
        https://bugs.webkit.org/show_bug.cgi?id=164050

        Reviewed by Carlos Garcia Campos.

        This new API exports the WebCore event didAssociateFormControls through the web extension
        mechanism. This will help clients (mainly web browsers) to implement robust auto filling
        mechanisms. It deals nicely with dynamically created forms (and form controls) as many JS
        frameworks do nowadays.

        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp: Added a FormClient implementation of
        API::InjectedBundle::FormClient.
        (webkitWebPageFormControlsAssociated): Emit the new signal.
        (webkit_web_page_class_init): Added the new signal "forms-controls-associated".
        (webkitWebPageCreate): Set the WebPage as a FormClient.

2016-11-10  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Allow to use WebMemorySampler feature.
        https://bugs.webkit.org/show_bug.cgi?id=164517

        Reviewed by Carlos Garcia Campos.

        Enable the WebMemorySampler with the environment variable WEBKIT_SAMPLE_MEMORY.

        When enabled, it will dump the stats to /tmp each second.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):

2016-11-10  Philippe Normand  <pnormand@igalia.com>

        [WK2][GTK][GStreamer] Build fails when -plugins-base and -core headers are not installed in the same directory
        https://bugs.webkit.org/show_bug.cgi?id=148894

        Reviewed by Carlos Garcia Campos.

        The pbutils (gst-plugins-base-utils) headers are needed in
        WebKit2/GTK for the permission request API related with the
        GStreamer codec installer. It builds fine in most cases without
        explicitely requiring the pbutils include directory path because
        usually all the GStreamer headers are installed in the same path,
        excepted for some distributions, like NixOS.

        * PlatformGTK.cmake: The GStreamer pbutils include directory was
        missing in the header search path.

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [WK2][!NETWORK_SESSION] Add support for downloading file backed blobs
        https://bugs.webkit.org/show_bug.cgi?id=164522

        Reviewed by Alex Christensen.

        Add support for downloading file backed blobs for the non-NETWORK_SESSION
        code path of WebKit2, which is still use on pre-Sierra macOS.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::~Download):
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::setBlobFileReferences):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertNetworkLoadToDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::convertToDownload):

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [WK2][NETWORK_SESSION] Add support for downloading file backed blobs
        https://bugs.webkit.org/show_bug.cgi?id=164458
        <rdar://problem/28905514>

        Reviewed by Darin Adler.

        Add support for downloading file backed blobs on WebKit2.
        It previously wasn't working because we weren't calling
        BlobDataFileReference::prepareForFileAccess() for each blob file before
        starting the download, similarly to what is done in NetworkResourceLoader's
        consumeSandboxExtensions().

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::~NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::download):
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::downloadRequest):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/PingLoad.h:

2016-11-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: Network process crash when converting main resource to download
        https://bugs.webkit.org/show_bug.cgi?id=164220

        Reviewed by Alex Christensen.

        Right after the main resource load is converted to a download, the web process deletes the ResourceLoader which
        sends the RemoveLoadIdentifier to the network process and the load is aborted. Sometimes it happens that
        NetworkResourceLoader::abort() is called while the NetworkLoad is still deciding the destination of the
        download. In such case, NetworkResourceLoader::didConvertToDownload() has already been called, but not
        NetworkResourceLoader::didBecomeDownload(). In NetworkResourceLoader::abort() we already handle the case of
        having a NetworkLoad after NetworkResourceLoader::didConvertToDownload() has been called, to avoid canceling the
        load in such case, however cleanup() is always called unconditionally and the NetworkLoad is deleted before
        NetworkResourceLoader::didBecomeDownload() is called. When the NetworkLoad is destroyed the NetworkDataTask
        client becomes nullptr, leaving it in a state where both the client is nullptr and the download hasn't been
        created yet. That's not expected to happen and when the response completion handler is called in the
        NetworkDataTask it tries to use either the client or the download and it crashes.
        We need to cleanup and destroy the ResourceLoader as soon as it becomes a download, because that's the expected
        behavior, but at the same time we need to keep the NetworkLoad alive until the NetworkDataTask finishes to become
        a download. This patch creates a PendingDownload to take the ownership of the NetworkLoad, so that
        ResourceLoader can be cleaned up and destroyed. The DownloadManager now will handle the PendingDownload as if it
        was created by startDownload(), but ensuring it's deleted right before the final Download object is added to the
        downloads map. That way NetworkDataTask will always have a valid client until the final Download is created,
        first the ResourceLoader and then the PendingDownload. Since the DownloadManager is the owner of the
        PendingDownload we no longer need the didBecomeDownload() callback to delete the NetworkLoad, because the
        NetworkLoad will always be owned by the PendingDownload now that will be deleted by the DownloadManager.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::dataTaskBecameDownloadTask): Change the ASSERT because at this point we should always
        have a PendingDownload, and then remove it from the map here before adding the final Download to the map.
        (WebKit::DownloadManager::convertNetworkLoadToDownload): This replaces convertHandleToDownload, but it also now
        used for the NetworkSession. It creates a PendingDownload for the given NetworkLoad.
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination): Do not take the PendingDownload from the
        map here, just check it's present, because it will be removed from dataTaskBecameDownloadTask().
        (WebKit::DownloadManager::convertHandleToDownload): Deleted.
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload): Add a constructor that receives a NetworkLoad.
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload): Just ask the ResourceLoader to be
        converted to a download.
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::download): Do not call didBecomeDownload() and add an assert to ensure the client
        has already been removed right after the final Download object is created.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad): Use a pointer for the client instead of a reference because now we need to
        change the client when the load is converted to a download. We don't need to null check the client in any case
        because the member is only updated internally and always from a passed reference.
        (WebKit::NetworkLoad::sharedDidReceiveResponse):
        (WebKit::NetworkLoad::sharedWillSendRedirectedRequest):
        (WebKit::NetworkLoad::convertTaskToDownload): This now receives a PendingDownload. It updates the client and no
        longer sends DidStart, because the PendingDownload sends it now.
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveData):
        (WebKit::NetworkLoad::didCompleteWithError):
        (WebKit::NetworkLoad::didSendData):
        (WebKit::NetworkLoad::wasBlocked):
        (WebKit::NetworkLoad::cannotShowURL):
        (WebKit::NetworkLoad::didReceiveBuffer):
        (WebKit::NetworkLoad::didFinishLoading):
        (WebKit::NetworkLoad::didFail):
        (WebKit::NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync):
        (WebKit::NetworkLoad::didBecomeDownload): Deleted.
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h: Remove didBecomeDownload().
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::convertToDownload): This replaces didBecomeDownload() and
        didConvertToDownload(). It transfers the NetworkLoad to the DownloadManager.
        (WebKit::NetworkResourceLoader::abort): We don't need to check if the load was converted to a download here,
        because m_networkLoad will always be null here in such case.
        (WebKit::NetworkResourceLoader::didBecomeDownload): Deleted
        (WebKit::NetworkResourceLoader::didConvertToDownload): Deleted
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.h: Remove didBecomeDownload().
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h: Ditto.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Ditto.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: Ditto.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]): Do not call didBecomeDownload().
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::download): Do not call didBecomeDownload() and add an assert to ensure the client
        has already been removed right after the final Download object is created.

2016-11-09  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r208438.

        crashes

        Reverted changeset:

        "[WK2][NETWORK_SESSION] Add support for downloading file
        backed blobs"
        https://bugs.webkit.org/show_bug.cgi?id=164458
        http://trac.webkit.org/changeset/208438

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

        Local HTML should be blocked from localStorage access unless "Disable Local File Restrictions" is checked
        https://bugs.webkit.org/show_bug.cgi?id=155185
        <rdar://problem/11101440>

        Reviewed by Brady Eidson.

        Provide SPI to access the new quirk for localStorage. The quirk defaults to 'on'. When active, this
        quirk says that localStorage access should be granted, without needing to grant universal file access.

        If the quirk is turned off, then localStorage is blocked unless the WebKit client explicitly
        grants universal file access.
        
        Tested by existing TestWebKitAPI tests and WebKit2.LocalStorageQuirkTest

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetNeedsLocalStorageQuirk): Added.
        (WKPreferencesGetNeedsLocalStorageQuirk): Added.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Honor the new localStorage quirk.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Honor the new localStorage quirk flag.
        (-[WKWebViewConfiguration copyWithZone:]): Ditto.
        (-[WKWebViewConfiguration _needsLocalStorageQuirk]): Added.
        (-[WKWebViewConfiguration _setNeedsLocalStorageQuirk:]): Added.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetNeedsLocalStorageQuirk): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setNeedsLocalStorageQuirk): Added.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Honor the new localStorage quirk flag.

2016-11-09  Simon Fraser  <simon.fraser@apple.com>

        Implement visual-viewport based position:fixed handling for Mac async scrolling
        https://bugs.webkit.org/show_bug.cgi?id=164495

        Reviewed by Tim Horton.

        Educate the scrolling tree about visual and layout viewports. This is runtime-switchable,
        so we push the enable flag to via the root state node, then push the layout viewport,
        and the min/max scroll position that contstrain it, through frame state nodes.

        When a scroll happens, we compute a new layout viewport when the visual viewport hits
        an edge, and push that down through setScrollLayerPosition() since it's used to position
        fixed and sticky layers.

        The iOS code is made to compile, but not work yet.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * 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:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::setScrollLayerPosition):
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode):

2016-11-09  Beth Dakin  <bdakin@apple.com>

        More attempted build fix.

        * UIProcess/Cocoa/WebViewImpl.mm:

2016-11-09  Alex Christensen  <achristensen@webkit.org>

        Clean up Storage code
        https://bugs.webkit.org/show_bug.cgi?id=164562

        Reviewed by Brady Eidson.

        Use more Refs!

        * NetworkProcess/CustomProtocols/CustomProtocolManager.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::addWorkQueueMessageReceiver):
        * Platform/IPC/Connection.h:
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        * UIProcess/Storage/LocalStorageDatabase.h:
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::create):
        (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded):
        (WebKit::StorageManager::StorageManager):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::processWillOpenConnection):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::initializeConnection):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::initializeConnection):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::initializeConnection):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::initializeConnection):

2016-11-09  Beth Dakin  <bdakin@apple.com>

        Another attempted build fix.

        * UIProcess/Cocoa/WebViewImpl.mm:

2016-11-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Experimental features should not be enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=164367

        Reviewed by Darin Adler.

        We have two classes of experimental features:

        (1) Features that are unstable and should be off by default, except for the developers
            currently working on them. This is straightforward to handle; the default value should
            be false.
        (2) Features that are still not ready for end users, but are stable enough for testing. We
            want these features to be enabled in testing environments like the bots, MiniBrowser,
            Safari Tech Preview, and so forth, but not in stable release builds.

        Implement this. It is better than having all experimental features on unconditionally, and
        expecting them to be disabled manually on release branches, which is not something we are
        keen to do. An exception is Cocoa ports, which to my knowledge do not currently have any
        concept of development builds. These ports seem happy to continue disabling features
        manually in release branches, and should continue to do so at least for now.

        We also have features that we wish to enumerate at runtime, yet have enabled by default
        unconditionally. We do not currently have any infrastructure to support this and should not
        abuse the experimental status for this purpose; it requires future work. All settings can
        still be toggled at runtime by clients that know about them using the existing runtime
        features API.

        Lastly, the custom elements feature is ready to be enabled by default, so it's no longer
        experimental and can graduate to the list of normal boolean features.

        * Shared/WebPreferencesDefinitions.h:

2016-11-09  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * UIProcess/Cocoa/WebViewImpl.mm:

2016-11-09  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Encapsulate cursor iteration parameters for easy future expansion.
        https://bugs.webkit.org/show_bug.cgi?id=164504

        Reviewed by Darin Adler.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::iterateCursor):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::iterateCursor):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2016-11-09  Darin Adler  <darin@apple.com>

        Move Range from ExceptionCode to ExceptionOr
        https://bugs.webkit.org/show_bug.cgi?id=164457

        Reviewed by Alex Christensen.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRange.cpp:
        (webkit_dom_range_set_start): Updated exception handling.
        (webkit_dom_range_set_end): Ditto.
        (webkit_dom_range_set_start_before): Ditto.
        (webkit_dom_range_set_start_after): Ditto.
        (webkit_dom_range_set_end_before): Ditto.
        (webkit_dom_range_set_end_after): Ditto.
        (webkit_dom_range_select_node): Ditto.
        (webkit_dom_range_select_node_contents): Ditto.
        (webkit_dom_range_compare_boundary_points): Ditto.
        (webkit_dom_range_delete_contents): Ditto.
        (webkit_dom_range_extract_contents): Ditto.
        (webkit_dom_range_clone_contents): Ditto.
        (webkit_dom_range_insert_node): Ditto.
        (webkit_dom_range_surround_contents): Ditto.
        (webkit_dom_range_create_contextual_fragment): Ditto.
        (webkit_dom_range_compare_node): Ditto.
        (webkit_dom_range_intersects_node): Ditto.
        (webkit_dom_range_compare_point): Ditto.
        (webkit_dom_range_is_point_in_range): Ditto.
        (webkit_dom_range_expand): Ditto.
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange setStart:offset:]): Ditto.
        (-[WKDOMRange setEnd:offset:]): Ditto.
        (-[WKDOMRange selectNode:]): Ditto.
        (-[WKDOMRange selectNodeContents:]): Ditto.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::contentsAsString): Ditto.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition): Ditto.
        (WebKit::WebPage::rangeForBlockAtPoint): Ditto.
        (WebKit::WebPage::selectWithGesture): Ditto.
        (WebKit::containsRange): Ditto.
        (WebKit::unionDOMRanges): Ditto.
        (WebKit::WebPage::switchToBlockSelectionAtPoint): Ditto.
        (WebKit::WebPage::getPositionInformation): Ditto.


2016-11-09  Darin Adler  <darin@apple.com>

        Move EventTarget from ExceptionCode to ExceptionOr
        https://bugs.webkit.org/show_bug.cgi?id=164465

        Reviewed by Youenn Fablet.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttr.cpp:
        (webkit_dom_attr_dispatch_event): Updated exception handling.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCDATASection.cpp:
        (webkit_dom_cdata_section_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.cpp:
        (webkit_dom_character_data_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMComment.cpp:
        (webkit_dom_comment_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        (webkit_dom_dom_window_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp:
        (webkit_dom_document_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.cpp:
        (webkit_dom_document_fragment_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.cpp:
        (webkit_dom_document_type_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
        (webkit_dom_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.cpp:
        (webkit_dom_html_anchor_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAppletElement.cpp:
        (webkit_dom_html_applet_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.cpp:
        (webkit_dom_html_area_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElement.cpp:
        (webkit_dom_html_br_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElement.cpp:
        (webkit_dom_html_base_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElement.cpp:
        (webkit_dom_html_body_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.cpp:
        (webkit_dom_html_button_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCanvasElement.cpp:
        (webkit_dom_html_canvas_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElement.cpp:
        (webkit_dom_html_d_list_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElement.cpp:
        (webkit_dom_html_directory_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElement.cpp:
        (webkit_dom_html_div_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDocument.cpp:
        (webkit_dom_html_document_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
        (webkit_dom_html_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElement.cpp:
        (webkit_dom_html_embed_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElement.cpp:
        (webkit_dom_html_field_set_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElement.cpp:
        (webkit_dom_html_font_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.cpp:
        (webkit_dom_html_form_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElement.cpp:
        (webkit_dom_html_frame_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElement.cpp:
        (webkit_dom_html_frame_set_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElement.cpp:
        (webkit_dom_html_hr_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElement.cpp:
        (webkit_dom_html_heading_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElement.cpp:
        (webkit_dom_html_head_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.cpp:
        (webkit_dom_html_html_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.cpp:
        (webkit_dom_html_iframe_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.cpp:
        (webkit_dom_html_image_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        (webkit_dom_html_input_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElement.cpp:
        (webkit_dom_html_li_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.cpp:
        (webkit_dom_html_label_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElement.cpp:
        (webkit_dom_html_legend_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.cpp:
        (webkit_dom_html_link_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMapElement.cpp:
        (webkit_dom_html_map_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElement.cpp:
        (webkit_dom_html_marquee_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElement.cpp:
        (webkit_dom_html_menu_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElement.cpp:
        (webkit_dom_html_meta_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElement.cpp:
        (webkit_dom_html_mod_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.cpp:
        (webkit_dom_html_o_list_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.cpp:
        (webkit_dom_html_object_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElement.cpp:
        (webkit_dom_html_opt_group_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElement.cpp:
        (webkit_dom_html_option_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElement.cpp:
        (webkit_dom_html_paragraph_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElement.cpp:
        (webkit_dom_html_param_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElement.cpp:
        (webkit_dom_html_pre_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLQuoteElement.cpp:
        (webkit_dom_html_quote_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.cpp:
        (webkit_dom_html_script_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        (webkit_dom_html_select_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.cpp:
        (webkit_dom_html_style_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElement.cpp:
        (webkit_dom_html_table_caption_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.cpp:
        (webkit_dom_html_table_cell_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElement.cpp:
        (webkit_dom_html_table_col_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.cpp:
        (webkit_dom_html_table_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.cpp:
        (webkit_dom_html_table_row_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.cpp:
        (webkit_dom_html_table_section_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:
        (webkit_dom_html_text_area_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTitleElement.cpp:
        (webkit_dom_html_title_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElement.cpp:
        (webkit_dom_html_u_list_element_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNode.cpp:
        (webkit_dom_node_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMProcessingInstruction.cpp:
        (webkit_dom_processing_instruction_dispatch_event): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMText.cpp:
        (webkit_dom_text_dispatch_event): Ditto.

2016-11-08  Dean Jackson  <dino@apple.com>

        Rendering support for ExtendedColors
        https://bugs.webkit.org/show_bug.cgi?id=164443
        <rdar://problems/29123243>

        Reviewed by Simon Fraser and Darin Adler.

        Implement argument coders for Color.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Color>::encode):
        (IPC::ArgumentCoder<Color>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]):

2016-11-09  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::~WebViewImpl):

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [Mac] Stop using deprecated AppKit enumeration values
        https://bugs.webkit.org/show_bug.cgi?id=164494

        Reviewed by Darin Adler.

        Stop using deprecated AppKit enumeration values.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::stopNSAppRunLoop):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::mouseButtonForEvent):
        (WebKit::mouseEventTypeForEvent):
        (WebKit::clickCountForEvent):
        (WebKit::globalPointForEvent):
        (WebKit::pointForEvent):
        (WebKit::textFromEvent):
        (WebKit::unmodifiedTextFromEvent):
        (WebKit::isKeypadEvent):
        (WebKit::isKeyUpEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::updateContentInsetsIfAutomatic):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        (WebKit::WebViewImpl::postFakeMouseMovedEventForFlagsChangedEvent):
        (WebKit::WebViewImpl::createFullScreenWindow):
        (WebKit::WebViewImpl::sendToolTipMouseExited):
        (WebKit::WebViewImpl::sendToolTipMouseEntered):
        (WebKit::applicationFlagsForDrag):
        (WebKit::WebViewImpl::setLastMouseDownEvent):
        (WebKit::WebViewImpl::doneWithKeyEvent):
        (WebKit::WebViewImpl::collectKeyboardLayoutCommandsForEvent):
        (WebKit::WebViewImpl::performKeyEquivalent):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::beginModal):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::modifierFlagsFromWebEvent):
        (WebKit::getEventTypeFromWebEvent):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::cssAlignmentValueForNSTextAlignment):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):

2016-11-09  Beth Dakin  <bdakin@apple.com>

        Support TouchBar in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=164437
        -and corresponding-
        rdar://problem/28876524

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView makeTouchBar]):
        (-[WKWebView candidateListTouchBarItem]):
        (-[WKWebView _web_didAddMediaControlsManager:]):
        (-[WKWebView _web_didRemoveMediaControlsManager]):
        (-[WKWebView _interactWithMediaControlsForTesting]):
        (-[WKWebView _wantsMediaPlaybackControlsView]):
        (-[WKWebView _setWantsMediaPlaybackControlsView:]):
        (-[WKWebView _mediaPlaybackControlsView]):
        (-[WKWebView _addMediaPlaybackControlsView:]):
        (-[WKWebView _removeMediaPlaybackControlsView]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView makeTouchBar]):
        (-[WKView candidateListTouchBarItem]):
        (-[WKView _web_didAddMediaControlsManager:]):
        (-[WKView _web_didRemoveMediaControlsManager]):
        (-[WKView _wantsMediaPlaybackControlsView]):
        (-[WKView _setWantsMediaPlaybackControlsView:]):
        (-[WKView _mediaPlaybackControlsView]):
        (-[WKView _addMediaPlaybackControlsView:]):
        (-[WKView _removeMediaPlaybackControlsView]):
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::currentTouchBar):
        (WebKit::WebViewImpl::clientWantsMediaPlaybackControlsView):
        (WebKit::WebViewImpl::setClientWantsMediaPlaybackControlsView):
        (WebKit::WebViewImpl::setIsCustomizingTouchBar):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKTextListTouchBarViewController initWithWebViewImpl:]):
        (-[WKTextListTouchBarViewController didDestroyView]):
        (-[WKTextListTouchBarViewController _selectList:]):
        (-[WKTextListTouchBarViewController setCurrentListType:]):
        (-[WKTextTouchBarItemController initWithWebViewImpl:]):
        (-[WKTextTouchBarItemController didDestroyView]):
        (-[WKTextTouchBarItemController touchBar:makeItemForIdentifier:]):
        (-[WKTextTouchBarItemController itemForIdentifier:]):
        (-[WKTextTouchBarItemController candidateListTouchBarItem:endSelectingCandidateAtIndex:]):
        (-[WKTextTouchBarItemController candidateListTouchBarItem:changedCandidateListVisibility:]):
        (-[WKTextTouchBarItemController textListTouchBarViewController]):
        (-[WKTextTouchBarItemController setTextIsBold:]):
        (-[WKTextTouchBarItemController setTextIsItalic:]):
        (-[WKTextTouchBarItemController setTextIsUnderlined:]):
        (-[WKTextTouchBarItemController _wkChangeTextStyle:]):
        (-[WKTextTouchBarItemController setCurrentTextAlignment:]):
        (-[WKTextTouchBarItemController _wkChangeTextAlignment:]):
        (-[WKTextTouchBarItemController textColor]):
        (-[WKTextTouchBarItemController setTextColor:]):
        (-[WKTextTouchBarItemController _wkChangeColor:]):
        (-[WKTextTouchBarItemController textListViewController]):
        (WebKit::WebViewImpl::makeTouchBar):
        (WebKit::WebViewImpl::candidateListTouchBarItem):
        (WebKit::WebViewImpl::mediaPlaybackControlsView):
        (WebKit::WebViewImpl::useMediaPlaybackControlsView):
        (WebKit::WebViewImpl::dismissTextTouchBarPopoverItemWithIdentifier):
        (WebKit::textTouchBarCustomizationAllowedIdentifiers):
        (WebKit::plainTextTouchBarCustomizationDefaultItemIdentifiers):
        (WebKit::richTextTouchBarCustomizationDefaultItemIdentifiers):
        (WebKit::touchBarDidExitCustomization):
        (WebKit::touchBarWillEnterCustomization):
        (WebKit::didChangeAutomaticTextCompletion):
        (WebKit::WebViewImpl::updateTouchBarAndRefreshTextBarIdentifiers):
        (WebKit::WebViewImpl::setUpTextTouchBar):
        (WebKit::WebViewImpl::isRichlyEditable):
        (WebKit::WebViewImpl::textTouchBar):
        (WebKit::WebViewImpl::updateTextTouchBar):
        (WebKit::WebViewImpl::updateMediaTouchBar):
        (WebKit::WebViewImpl::forceRequestCandidatesForTesting):
        (WebKit::WebViewImpl::updateTouchBar):
        (WebKit::WebViewImpl::shouldRequestCandidates):
        (WebKit::WebViewImpl::showCandidates):
        (WebKit::WebViewImpl::webViewImplAdditionsWillDestroyView):
        (WebKit::WebViewImpl::setEditableElementIsFocused):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::selectionDidChange):
        (WebKit::WebViewImpl::videoControlsManagerDidChange):
        (WebKit::WebViewImpl::updateWebViewImplAdditions): Deleted.

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [WK2][NETWORK_SESSION] Add support for downloading file backed blobs
        https://bugs.webkit.org/show_bug.cgi?id=164458
        <rdar://problem/28905514>

        Reviewed by Darin Adler.

        Add support for downloading file backed blobs on WebKit2.
        It previously wasn't working because we weren't calling
        BlobDataFileReference::prepareForFileAccess() for each blob file before
        starting the download, similarly to what is done in NetworkResourceLoader's
        consumeSandboxExtensions().

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::~NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::download):
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::downloadRequest):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/PingLoad.h:

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [WK2] Network cache speculative revalidation can cause loads to hang
        https://bugs.webkit.org/show_bug.cgi?id=164532
        <rdar://problem/28519331>

        Reviewed by Alex Christensen.

        Network cache speculative revalidation could cause loads to hang when HTTP
        authentication was involved because NetworkCacheSpeculativeLoad failed to
        call NetworkLoad::continueCanAuthenticateAgainstProtectionSpace() in its
        canAuthenticateAgainstProtectionSpaceAsync() callback.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:

2016-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r208361.

        * PlatformMac.cmake:

2016-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fix after r160616 to fix the build on case sensitive file systems.

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

2016-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Layout test http/tests/misc/authentication-redirect-3/authentication-sent-to-redirect-same-origin-with-location-credentials.html fails
        https://bugs.webkit.org/show_bug.cgi?id=139358

        Reviewed by Michael Catanzaro.

        Stop putting the credentials in the URL unconditionally and ensure we only do that when provided by the URL
        itself. Libsoup has its own cache of SoupAuth, so we don't need to pass user/pass in the URL for every single
        request, libsoup will authenticate those automatically.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::applyAuthenticationToRequest):

2016-11-04  Filip Pizlo  <fpizlo@apple.com>

        WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
        https://bugs.webkit.org/show_bug.cgi?id=152045

        Reviewed by Andy Estes.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::wait):
        (IPC::Connection::sendMessage):
        (IPC::Connection::timeoutRespectingIgnoreTimeoutsForTesting):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::waitForSyncReply):
        * Platform/IPC/Connection.h:
        (IPC::Connection::sendSync):
        (IPC::Connection::waitForAndDispatchImmediately):
        * Platform/IPC/MessageSender.h:
        (IPC::MessageSender::sendSync):
        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::sendSync):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendProcessWillSuspendImminently):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::applicationWillTerminate):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendProcessWillSuspendImminently):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::applicationWillTerminate):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[WKOneShotDisplayLinkHandler displayLinkFired:]):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::stringSelectionForPasteboard):
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        (WebKit::WebPageProxy::readSelectionFromPasteboard):
        (WebKit::WebPageProxy::shouldDelayWindowOrderingForEvent):
        (WebKit::WebPageProxy::acceptsFirstMouse):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::print):
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postSynchronousMessageForTesting):

2016-11-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Safari does not emit composition end if blurred for dead key / Japanese IME
        https://bugs.webkit.org/show_bug.cgi?id=164369
        <rdar://problem/29050439>

        Reviewed by Ryosuke Niwa.

        Split WebPage::discardedComposition into two steps, where we first discard marked text and then update the
        editor state. This allows the codepath where we cancel the composition early (before setting the selection) to
        discard marked text without also forcing an editor state update at the same time. The editor state is later
        updated in WebPage::didChangeSelection.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::compositionWasCanceled):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::canceledComposition):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):
        (WebKit::WebPage::discardedComposition):
        (WebKit::WebPage::canceledComposition):
        * WebProcess/WebPage/WebPage.h:

2016-11-04  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r208293.

        asserts in API tests.

        Reverted changeset:

        "NetworkSession: Network process crash when converting main
        resource to download"
        https://bugs.webkit.org/show_bug.cgi?id=164220
        http://trac.webkit.org/changeset/208293

2016-11-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add a setting and preferences to enable/disable async image decoding
        https://bugs.webkit.org/show_bug.cgi?id=164417

        Reviewed by Simon Fraser.

        Hook up the asyncImageDecodingEnabled setting for WebKit2.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _asyncImageDecodingEnabled]):
        (-[WKPreferences _setAsyncImageDecodingEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-11-04  Simon Fraser  <simon.fraser@apple.com>

        Rename some ScrollingTree/Node-related functions to reduce the number of uses of "update"
        https://bugs.webkit.org/show_bug.cgi?id=164420

        Reviewed by Tim Horton.

        Rename:
            commitNewTreeState -> commitTreeState ("new" was redundant)
            updateBeforeChildren -> commitStateBeforeChildren
            updateAfterChildren -> commitStateAfterChildren


        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::commitScrollingTreeState):
        (WebKit::RemoteScrollingCoordinatorProxy::updateScrollingTree): Deleted.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::commitStateBeforeChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::commitStateAfterChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateBeforeChildren): Deleted.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren): Deleted.
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):

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

        NetworkSession: Add NetworkDataTask implementation for blobs
        https://bugs.webkit.org/show_bug.cgi?id=163939

        Reviewed by Alex Christensen.

        Add NetworkDataTaskBlob to handle blobs when using NetworkSession instead of using ResourceHandle. This patch
        adds more USE(NETWORK_SESSION) ifdefs to not use ResourceHandle in Downloads and NetworkLoad when NetworkSession
        is enabled.

        * CMakeLists.txt: Add new files to compilation.
        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
        * NetworkProcess/Downloads/BlobDownloadClient.h:
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download): Split the constructor again and remove the PlatformDownloadTaskRef
        definitions. Now Cocoa specific constructor receives a NSURLSessionDownloadTask and the general constructor
        reveices a NetworkDataTask and is used by Soup backend and blobs.
        (WebKit::Download::~Download):
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::cancel):
        (WebKit::Download::didReceiveAuthenticationChallenge):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::platformCancelNetworkLoad): Rename cancelNetworkLoad() as platformCancelNetworkLoad() since
        this is now used only by Cocoa platform to cancel the NSURLSessionDownloadTask.
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::Download):
        (WebKit::Download::suggestedName):
        (WebKit::Download::request):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload): Remove blobs specific code when using NetworkSession.
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::platformCancelNetworkLoad):
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp: Removed.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload): Remove blobs specific code when
        using NetworkSession.
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create): If request is a blob, create a NetworkDataTaskBlob.
        * NetworkProcess/NetworkDataTask.h: Add invalidateAndCancel pure virtual method.
        * NetworkProcess/NetworkDataTaskBlob.cpp: Added.
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::~NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::clearStream):
        (WebKit::NetworkDataTaskBlob::resume):
        (WebKit::NetworkDataTaskBlob::suspend):
        (WebKit::NetworkDataTaskBlob::cancel):
        (WebKit::NetworkDataTaskBlob::invalidateAndCancel):
        (WebKit::NetworkDataTaskBlob::getSizeForNext):
        (WebKit::NetworkDataTaskBlob::didGetSize):
        (WebKit::NetworkDataTaskBlob::seek):
        (WebKit::NetworkDataTaskBlob::didReceiveResponse):
        (WebKit::NetworkDataTaskBlob::read):
        (WebKit::NetworkDataTaskBlob::readData):
        (WebKit::NetworkDataTaskBlob::readFile):
        (WebKit::NetworkDataTaskBlob::didOpen):
        (WebKit::NetworkDataTaskBlob::didRead):
        (WebKit::NetworkDataTaskBlob::consumeData):
        (WebKit::NetworkDataTaskBlob::setPendingDownloadLocation):
        (WebKit::NetworkDataTaskBlob::suggestedFilename):
        (WebKit::NetworkDataTaskBlob::download):
        (WebKit::NetworkDataTaskBlob::writeDownload):
        (WebKit::NetworkDataTaskBlob::cleanDownloadFiles):
        (WebKit::NetworkDataTaskBlob::didFailDownload):
        (WebKit::NetworkDataTaskBlob::didFinishDownload):
        (WebKit::NetworkDataTaskBlob::didFail):
        (WebKit::NetworkDataTaskBlob::didFinish):
        * NetworkProcess/NetworkDataTaskBlob.h: Added.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad): Remove blobs specific code when using NetworkSession.
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::setDefersLoading):
        (WebKit::NetworkLoad::cancel):
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::continueDidReceiveResponse):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::invalidateAndCancel): Moved from NetworkSessionSoup, since this is now used also by blobs.
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::registerNetworkDataTask): Ditto.
        (WebKit::NetworkSession::unregisterNetworkDataTask): Ditto.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Add invalidateAndCancel() implementation that does nothing
        because in Cocoa all tasks are invalidated and canceled by the network session.
        * NetworkProcess/mac/NetworkLoadMac.mm:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::~NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::download):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        * NetworkProcess/soup/NetworkSessionSoup.h:
        * PlatformEfl.cmake: Remove DownloadSoup.cpp from compilation.
        * PlatformGTK.cmake: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Add new files to compilation.

2016-11-03  Simon Fraser  <simon.fraser@apple.com>

        Give all the geometry classes a single-argument scale() function for consistency
        https://bugs.webkit.org/show_bug.cgi?id=164400

        Reviewed by Zalan Bujtas.
        
        Use single-argument scale() functions.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]):
        (-[WKWebView _scrollByContentOffset:]):
        (-[WKWebView _zoomToFocusRect:selectionRect:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLayerTree:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _updateTapHighlight]):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::scaledMagnificationOrigin):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::scrollToPoint):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePageInViewCoordinates):
        (WebKit::WebPage::scaleView):
        (WebKit::WebPage::snapshotAtSize):
        (WebKit::WebPage::snapshotNode):
        (WebKit::WebPage::drawRectToImage):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):

2016-11-03  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Implement user interface for HTML form validation
        https://bugs.webkit.org/show_bug.cgi?id=164143
        <rdar://problem/28944652>

        Reviewed by Simon Fraser.

        Implement the ValidationMessageClient in WebKit2 and have it display
        a ValidationBubble on Cocoa. ValidationBubble is implemented using
        native popovers on both Mac and iOS. As a result, Mac and iOS WK2
        now use native popover for HTML form validation instead of the old
        Shadow DOM based UI in WebCore.

        The native popover shows at the bottom (or top) of the input and it
        disapears as soon as the user starts typing or interacts with the
        view (e.g. tap / scroll / zoom).

        The feature is still disabled at runtime.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _keyboardWillShow:]):
        (-[WKWebView _keyboardDidShow:]):
        (-[WKWebView _contentsOfUserInterfaceItem:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::setPageZoomFactor):
        (WebKit::WebPageProxy::setPageAndTextZoomFactors):
        (WebKit::WebPageProxy::pageDidScroll):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::hideValidationMessage):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::validationBubble):
        (WebKit::WebPageProxy::setIsKeyboardAnimatingIn):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createValidationBubble):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _willStartScrollingOrZooming]):
        (-[WKContentView scrollViewWillStartPanOrPinchGesture]):
        (-[WKContentView _didEndScrollingOrZooming]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::potentialTapAtPosition):
        (WebKit::WebPageProxy::showValidationMessage):
        (WebKit::WebPageProxy::setIsScrollingOrZooming):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createValidationBubble):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showValidationMessage):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebValidationMessageClient.cpp: Copied from Tools/DumpRenderTree/mac/UIScriptControllerMac.mm.
        (WebKit::WebValidationMessageClient::WebValidationMessageClient):
        (WebKit::WebValidationMessageClient::~WebValidationMessageClient):
        (WebKit::WebValidationMessageClient::showValidationMessage):
        (WebKit::WebValidationMessageClient::hideValidationMessage):
        (WebKit::WebValidationMessageClient::isValidationMessageVisible):
        * WebProcess/WebCoreSupport/WebValidationMessageClient.h: Copied from Tools/DumpRenderTree/mac/UIScriptControllerMac.mm.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):

2016-11-03  Tim Horton  <timothy_horton@apple.com>

        Printing to PDF should produce internal links when HTML has internal links
        https://bugs.webkit.org/show_bug.cgi?id=112081
        <rdar://problem/5955705>

        Reviewed by Simon Fraser.

        * UIProcess/mac/WKPrintingView.h:
        * UIProcess/mac/WKPrintingView.mm:
        (linkDestinationName):
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]):
        Propagate link-to-destination annotations (and each page's destinations)
        into the printed PDF.
        Generate a unique destination name based on the page and position, because
        we have lost the fragment name information.

        (-[WKPrintingView drawRect:]):
        Compute all of the destinations for every page, so that we can add them
        to the context as we paint the pages (we need the page CTM in order to add them).

2016-11-03  Alex Christensen  <achristensen@webkit.org>

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

        caused asan crashes

        Reverted changeset:

        "NetworkSession: Add NetworkDataTask implementation for blobs"
        https://bugs.webkit.org/show_bug.cgi?id=163939
        http://trac.webkit.org/changeset/208298

2016-11-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208330.

        This change appears to have caused two editing tests to fail
        on macOS.

        Reverted changeset:

        "Reduce PassRefPtr use in WebKit2"
        https://bugs.webkit.org/show_bug.cgi?id=164360
        http://trac.webkit.org/changeset/208330

2016-11-03  Dan Bernstein  <mitz@apple.com>

        WKWebView’s _observedRenderingProgressEvents not restored after web process crash
        https://bugs.webkit.org/show_bug.cgi?id=164368
        <rdar://problem/29091954>

        Reviewed by Anders Carlsson.

        Test: TestWebKitAPI/Tests/WebKit2Cocoa/ObservedRenderingProgressEventsAfterCrash.mm.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Encode new observedLayoutMilestones member.
        (WebKit::WebPageCreationParameters::decode): Decode it.
        * Shared/WebPageCreationParameters.h: Declared new observedLayoutMilestones member variable.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Removed initializer for
          m_wantsSessionRestorationRenderTreeSizeThresholdEvent.
        (WebKit::WebPageProxy::listenForLayoutMilestones): Update new m_observedLayoutMilestones
          member variable. Don’t update m_wantsSessionRestorationRenderTreeSizeThresholdEvent.
        (WebKit::WebPageProxy::creationParameters): Set the observedLayoutMilestones member in the
          creation parameters.

        * UIProcess/WebPageProxy.h: Declared new member variable, deleted
          m_wantsSessionRestorationRenderTreeSizeThresholdEvent declaration.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree): Rather than using
          m_wantsSessionRestorationRenderTreeSizeThresholdEvent, use m_observedLayoutMilestones.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Add the observed layout milestones from the creation parameters.

2016-11-02  Alex Christensen  <achristensen@webkit.org>

        Reduce PassRefPtr use in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=164360

        Reviewed by Tim Horton.

        * Shared/API/APISecurityOrigin.h:
        (API::SecurityOrigin::SecurityOrigin):
        * Shared/API/APISerializedScriptValue.h:
        (API::SerializedScriptValue::create):
        (API::SerializedScriptValue::SerializedScriptValue):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::ProxyingRefPtr::ProxyingRefPtr):
        (WebKit::toAPI):
        * Shared/APIWebArchive.h:
        * Shared/APIWebArchive.mm:
        (API::WebArchive::create):
        (API::WebArchive::WebArchive):
        * UIProcess/API/APIHitTestResult.cpp:
        (API::HitTestResult::create):
        * UIProcess/API/APIHitTestResult.h:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        * UIProcess/API/C/WKPage.cpp:
        (WebKit::RunBeforeUnloadConfirmPanelResultListener::create):
        (WebKit::RunBeforeUnloadConfirmPanelResultListener::RunBeforeUnloadConfirmPanelResultListener):
        (WebKit::RunJavaScriptAlertResultListener::create):
        (WebKit::RunJavaScriptAlertResultListener::RunJavaScriptAlertResultListener):
        (WebKit::RunJavaScriptConfirmResultListener::create):
        (WebKit::RunJavaScriptConfirmResultListener::RunJavaScriptConfirmResultListener):
        (WebKit::RunJavaScriptPromptResultListener::create):
        (WebKit::RunJavaScriptPromptResultListener::RunJavaScriptPromptResultListener):
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKWebAllowDenyPolicyListener initWithPermissionRequestProxy:]):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _webHitTestResult]):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (contextMenuItems):
        (WKBundlePageCopyContextMenuItems):
        (WKBundlePageCopyContextMenuAtPointInWindow):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserMessageHandlerDescriptorProxy::create):
        * WebProcess/WebPage/WebUndoStep.cpp:
        (WebKit::WebUndoStep::create):
        * WebProcess/WebPage/WebUndoStep.h:
        (WebKit::WebUndoStep::WebUndoStep):

2016-11-01  Gavin Barraclough  <barraclough@apple.com>

        Remove PageThrottler & all related code
        https://bugs.webkit.org/show_bug.cgi?id=164302

        Reviewed by Ryosuke Niwa.

        All relevant information now available from the ActivityState.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        (WebKit::PluginProcess::createWebProcessConnection):
        (WebKit::PluginProcess::audioHardwareDidBecomeActive): Deleted.
        (WebKit::PluginProcess::audioHardwareDidBecomeInactive): Deleted.
        * PluginProcess/PluginProcess.h:
        (): Deleted.
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::audioHardwareDidBecomeActive): Deleted.
        (WebKit::WebProcessConnection::audioHardwareDidBecomeInactive): Deleted.
        * PluginProcess/WebProcessConnection.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::evaluate):
        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::audioHardwareActivity): Deleted.
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::audioHardwareDidBecomeActive): Deleted.
        (WebKit::PluginProcessConnection::audioHardwareDidBecomeInactive): Deleted.
        * WebProcess/Plugins/PluginProcessConnection.h:
        (WebKit::PluginProcessConnection::supportsAsynchronousPluginInitialization):
        (WebKit::PluginProcessConnection::audioHardwareActivity): Deleted.
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::audioHardwareActivity): Deleted.
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::audioHardwareActivity): Deleted.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.cpp:

2016-11-03  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r206247): Painting milestones can be delayed until the next layer flush
        https://bugs.webkit.org/show_bug.cgi?id=164340
        <rdar://problem/29074344>

        Reviewed by Tim Horton.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: Declared new helper function.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::sendPendingNewlyReachedLayoutMilestones): Helper
          function that sends the message to the UI process and resets
          m_pendingNewlyReachedLayoutMilestones.
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers): Wait until after the commit to get the
          pending milestones and send them to the UI process. This way we don’t miss milestones that
          fire during the commit.

2016-11-02  David Kilzer  <ddkilzer@apple.com>

        Bug 164333: Add logging for "WebKit encountered an internal error" messages due to Network process crashes
        <https://webkit.org/b/164333>
        <rdar://problem/29072727>

        Reviewed by Alex Christensen.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::logDiagnosticMessageForNetworkProcessCrash):
        Add private method to log diagnostic message.
        (WebKit::WebProcess::networkProcessConnectionClosed):
        Call logDiagnosticMessageForNetworkProcessCrash().
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::logDiagnosticMessageForNetworkProcessCrash):
        Declare new method.

2016-11-02  Alex Christensen  <achristensen@webkit.org>

        Remove Battery Status API from the tree
        https://bugs.webkit.org/show_bug.cgi?id=164213

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * Shared/WebBatteryStatus.cpp: Removed.
        * Shared/WebBatteryStatus.h: Removed.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBatteryManager.cpp: Removed.
        * UIProcess/API/C/WKBatteryManager.h: Removed.
        * UIProcess/API/C/WKBatteryStatus.cpp: Removed.
        * UIProcess/API/C/WKBatteryStatus.h: Removed.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetBatteryManager): Deleted.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_main.cpp:
        (WebKit::EwkMain::initialize):
        (WebKit::EwkMain::finalize):
        (WebKit::EwkMain::shutdownInitializedEFLModules):
        * UIProcess/API/gtk/WebKitBatteryProvider.cpp: Removed.
        * UIProcess/API/gtk/WebKitBatteryProvider.h: Removed.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        * UIProcess/WebBatteryManagerProxy.cpp: Removed.
        * UIProcess/WebBatteryManagerProxy.h: Removed.
        * UIProcess/WebBatteryManagerProxy.messages.in: Removed.
        * UIProcess/WebBatteryProvider.cpp: Removed.
        * UIProcess/WebBatteryProvider.h: Removed.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingTimer):
        * UIProcess/efl/BatteryProvider.cpp: Removed.
        * UIProcess/efl/BatteryProvider.h: Removed.
        * WebProcess/Battery: Removed.
        * WebProcess/Battery/WebBatteryManager.cpp: Removed.
        * WebProcess/Battery/WebBatteryManager.h: Removed.
        * WebProcess/Battery/WebBatteryManager.messages.in: Removed.
        * WebProcess/WebCoreSupport/WebBatteryClient.cpp: Removed.
        * WebProcess/WebCoreSupport/WebBatteryClient.h: Removed.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):
        * WebProcess/WebProcess.cpp:
        (WebKit::m_resourceLoadStatisticsStorage):

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: Add NetworkDataTask implementation for blobs
        https://bugs.webkit.org/show_bug.cgi?id=163939

        Reviewed by Alex Christensen.

        Add NetworkDataTaskBlob to handle blobs when using NetworkSession instead of using ResourceHandle. This patch
        adds more USE(NETWORK_SESSION) ifdefs to not use ResourceHandle in Downloads and NetworkLoad when NetworkSession
        is enabled.

        * CMakeLists.txt: Add new files to compilation.
        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
        * NetworkProcess/Downloads/BlobDownloadClient.h:
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download): Split the constructor again and remove the PlatformDownloadTaskRef
        definitions. Now Cocoa specific constructor receives a NSURLSessionDownloadTask and the general constructor
        reveices a NetworkDataTask and is used by Soup backend and blobs.
        (WebKit::Download::~Download):
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::cancel):
        (WebKit::Download::didReceiveAuthenticationChallenge):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::platformCancelNetworkLoad): Rename cancelNetworkLoad() as platformCancelNetworkLoad() since
        this is now used only by Cocoa platform to cancel the NSURLSessionDownloadTask.
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::Download):
        (WebKit::Download::suggestedName):
        (WebKit::Download::request):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload): Remove blobs specific code when using NetworkSession.
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::platformCancelNetworkLoad):
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp: Removed.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload): Remove blobs specific code when
        using NetworkSession.
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create): If request is a blob, create a NetworkDataTaskBlob.
        * NetworkProcess/NetworkDataTask.h: Add invalidateAndCancel pure virtual method.
        * NetworkProcess/NetworkDataTaskBlob.cpp: Added.
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::~NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::clearStream):
        (WebKit::NetworkDataTaskBlob::resume):
        (WebKit::NetworkDataTaskBlob::suspend):
        (WebKit::NetworkDataTaskBlob::cancel):
        (WebKit::NetworkDataTaskBlob::invalidateAndCancel):
        (WebKit::NetworkDataTaskBlob::getSizeForNext):
        (WebKit::NetworkDataTaskBlob::didGetSize):
        (WebKit::NetworkDataTaskBlob::seek):
        (WebKit::NetworkDataTaskBlob::didReceiveResponse):
        (WebKit::NetworkDataTaskBlob::read):
        (WebKit::NetworkDataTaskBlob::readData):
        (WebKit::NetworkDataTaskBlob::readFile):
        (WebKit::NetworkDataTaskBlob::didOpen):
        (WebKit::NetworkDataTaskBlob::didRead):
        (WebKit::NetworkDataTaskBlob::consumeData):
        (WebKit::NetworkDataTaskBlob::setPendingDownloadLocation):
        (WebKit::NetworkDataTaskBlob::suggestedFilename):
        (WebKit::NetworkDataTaskBlob::download):
        (WebKit::NetworkDataTaskBlob::writeDownload):
        (WebKit::NetworkDataTaskBlob::cleanDownloadFiles):
        (WebKit::NetworkDataTaskBlob::didFailDownload):
        (WebKit::NetworkDataTaskBlob::didFinishDownload):
        (WebKit::NetworkDataTaskBlob::didFail):
        (WebKit::NetworkDataTaskBlob::didFinish):
        * NetworkProcess/NetworkDataTaskBlob.h: Added.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad): Remove blobs specific code when using NetworkSession.
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::setDefersLoading):
        (WebKit::NetworkLoad::cancel):
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::continueDidReceiveResponse):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::invalidateAndCancel): Moved from NetworkSessionSoup, since this is now used also by blobs.
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::registerNetworkDataTask): Ditto.
        (WebKit::NetworkSession::unregisterNetworkDataTask): Ditto.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Add invalidateAndCancel() implementation that does nothing
        because in Cocoa all tasks are invalidated and canceled by the network session.
        * NetworkProcess/mac/NetworkLoadMac.mm:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::~NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::download):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        * NetworkProcess/soup/NetworkSessionSoup.h:
        * PlatformEfl.cmake: Remove DownloadSoup.cpp from compilation.
        * PlatformGTK.cmake: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Add new files to compilation.

2016-11-02  Andy Estes  <aestes@apple.com>

        REGRESSION (r199558): File paths selected for upload are stored using the wrong string encoding
        https://bugs.webkit.org/show_bug.cgi?id=164311
        <rdar://problem/26995374>

        Reviewed by Tim Horton.

        -[NSURL fileSystemRepresentation] returns a char* in file system representation, which on
        iOS is UTF-8, but we were implicitly converting it to a String, which assumes a char* is
        Latin-1 encoded.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _chooseFiles:displayString:iconImage:]): Changed to use fromUTF8() to
        convert fileURL.fileSystemRepresentation to a String.

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: Network process crash when converting main resource to download
        https://bugs.webkit.org/show_bug.cgi?id=164220

        Reviewed by Alex Christensen.

        Right after the main resource load is converted to a download, the web process deletes the ResourceLoader which
        sends the RemoveLoadIdentifier to the network process and the load is aborted. Sometimes it happens that
        NetworkResourceLoader::abort() is called while the NetworkLoad is still deciding the destination of the
        download. In such case, NetworkResourceLoader::didConvertToDownload() has already been called, but not
        NetworkResourceLoader::didBecomeDownload(). In NetworkResourceLoader::abort() we already handle the case of
        having a NetworkLoad after NetworkResourceLoader::didConvertToDownload() has been called, to avoid canceling the
        load in such case, however cleanup() is always called unconditionally and the NetworkLoad is deleted before
        NetworkResourceLoader::didBecomeDownload() is called. When the NetworkLoad is destroyed the NetworkDataTask
        client becomes nullptr, leaving it in a state where both the client is nullptr and the download hasn't been
        created yet. That's not expected to happen and when the response completion handler is called in the
        NetworkDataTask it tries to use either the client or the download and it crashes.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier): Update ASSERT, because abort doesn't cleanup the
        resource loader in case it's becoming a download.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didBecomeDownload): Call cleanup() instead of just deleting the network load.
        (WebKit::NetworkResourceLoader::isBecomingDownload): Helper method to check if the resource load was converted to a
        download, but didBecomeDownload() hasn't been called yet.
        (WebKit::NetworkResourceLoader::abort): If the resource load is becoming a download do not call cleanup()
        because it will be called by didBecomeDownload() later.
        * NetworkProcess/NetworkResourceLoader.h:

2016-11-02  David Kilzer  <ddkilzer@apple.com>

        Add logging for "WebKit encountered an internal error" messages
        <https://webkit.org/b/164272>
        <rdar://problem/28546064>

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource):
        - Add logging for various internalError() events.

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] BadDamage X Window System error in WebKit::AcceleratedBackingStoreX11::update when called from WebPageProxy::exitAcceleratedCompositingMode
        https://bugs.webkit.org/show_bug.cgi?id=164303

        Reviewed by Michael Catanzaro.

        This can happen if the web process exits before the UI process has cleaned up the accelerated surface. Trap
        BadDrawable and BadDamage X errors and ignore them, while still crashing for any other X error.

        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::~AcceleratedBackingStoreX11):
        (WebKit::AcceleratedBackingStoreX11::update):

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove FileSystem::filenameToString() and use FileSystem::stringFromFileSystemRepresentation() everywhere instead
        https://bugs.webkit.org/show_bug.cgi?id=164315

        Reviewed by Michael Catanzaro.

        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::getExecutablePath):
        (WebKit::findWebKitProcess):
        * UIProcess/API/gtk/APIWebsiteDataStoreGtk.cpp:
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_set_favicon_database_directory):
        (webkit_web_context_set_additional_plugins_directory):
        (webkit_web_context_set_disk_cache_directory):
        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetDataStore):
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::PluginInfoCache):
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformDefaultIconDatabasePath):
        * WebProcess/gtk/WebGtkExtensionManager.cpp:
        (WebKit::parseUserData):

2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Enable creation of ReadableByteStreamController
        https://bugs.webkit.org/show_bug.cgi?id=164014

        Reviewed by Youenn Fablet.

        Added flag for the byte stream part of Readable Streams API.

        * Configurations/FeatureDefines.xcconfig:

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        PluginInfoStore::loadPluginsIfNecessary can still load plugins multiple times
        https://bugs.webkit.org/show_bug.cgi?id=164103

        Reviewed by Michael Catanzaro.

        Follow symlinks when scanning plugins to avoid duplicates.

        * UIProcess/Plugins/gtk/PluginInfoCache.cpp: Bump the cache version to ensure duplicated plugins are removed
        from the cache.
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::pluginPathsInDirectory): Use realpath() to always return the actual file path.

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Plugin process crash in WebKit::NetscapePluginX11::visibilityDidChange with evince browser plugin
        https://bugs.webkit.org/show_bug.cgi?id=164204

        Reviewed by Michael Catanzaro.

        Check the platform plugin widget is embedded before trying to get its socket window.

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

2016-11-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Turn the Input Events runtime flag on by default
        https://bugs.webkit.org/show_bug.cgi?id=164297

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferencesDefinitions.h:

2016-11-01  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, EFL build fix after r208225

        Rename ViewState to ActivityState

        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::setActive):
        (WebKit::WebView::setFocused):
        (WebKit::WebView::setVisible):

2016-11-01  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2016-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Remove CUSTOM_ELEMENTS build flag
        https://bugs.webkit.org/show_bug.cgi?id=164267

        Reviewed by Antti Koivisto.

        Removed the build flag.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-11-01  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] restrict media capture secure connections
        https://bugs.webkit.org/show_bug.cgi?id=164234
        <rdar://problem/28944906>

        Reviewed by Alex Christensen.

        * Shared/WebPreferencesDefinitions.h:
   
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMediaCaptureRequiresSecureConnection):
        (WKPreferencesGetMediaCaptureRequiresSecureConnection):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
   
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Drive by
         fix: remove some unused parameters in a lambda call.

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

2016-11-01  Gavin Barraclough  <barraclough@apple.com>

        Add IsAudible, IsLoading to ActivityState
        https://bugs.webkit.org/show_bug.cgi?id=164286

        Reviewed by Geoff Garen.

        By computing these values in the UIProcess and passing them to WebContent we can
        more closely unify iOS & macOS throttling, and remove the PageThrottler class.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityState):
            - Added update for IsAudible, IsLoading flags.
        (WebKit::WebPageProxy::updateThrottleState):
            - Read IsAudible, IsLoading flags from ActivityState.
        (WebKit::WebPageProxy::setMuted):
            - call activityStateDidChange to trigger update.
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
            - call activityStateDidChange to trigger update.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isLoadingChanged):
            - call activityStateDidChange to trigger update.

2016-10-31  Gavin Barraclough  <barraclough@apple.com>

        Rename ViewState to ActivityState
        https://bugs.webkit.org/show_bug.cgi?id=164254

        Reviewed by Andreas Kling.

        We plan to add a couple more flags to ViewState that aren't directly related to the view
        itself - whether there is an ongoing page load, and whether whether there is audio playback.
        This will allow viewState (now activityState) to fully drive throttling decisions.

        Renaming this bitfield accordingly.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView didMoveToWindow]):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate):
        (_WebKitWebViewBasePrivate::updateActivityStateTimerFired):
        (webkitWebViewBaseScheduleUpdateActivityState):
        (toplevelWindowFocusInEvent):
        (toplevelWindowFocusOutEvent):
        (toplevelWindowStateEvent):
        (webkitWebViewBaseSetToplevelOnScreenWindow):
        (webkitWebViewBaseMap):
        (webkitWebViewBaseUnmap):
        (webkitWebViewBaseSetFocus):
        (webkitWebViewBaseIsInWindowActive):
        (webkitWebViewBaseIsFocused):
        (webkitWebViewBaseIsVisible):
        (webkitWebViewBaseIsInWindow):
        (_WebKitWebViewBasePrivate::updateViewStateTimerFired): Deleted.
        (webkitWebViewBaseScheduleUpdateViewState): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::resignFirstResponder):
        (WebKit::WebViewImpl::windowDidOrderOffScreen):
        (WebKit::WebViewImpl::windowDidOrderOnScreen):
        (WebKit::WebViewImpl::windowDidBecomeKey):
        (WebKit::WebViewImpl::windowDidResignKey):
        (WebKit::WebViewImpl::windowDidMiniaturize):
        (WebKit::WebViewImpl::windowDidDeminiaturize):
        (WebKit::WebViewImpl::windowDidChangeOcclusionState):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        (WebKit::WebViewImpl::viewDidHide):
        (WebKit::WebViewImpl::viewDidUnhide):
        (WebKit::WebViewImpl::activeSpaceDidChange):
        (WebKit::WebViewImpl::endDeferringViewInWindowChanges):
        (WebKit::WebViewImpl::endDeferringViewInWindowChangesSync):
        (WebKit::WebViewImpl::prepareForMoveToWindow):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::waitForDidUpdateActivityState):
        (WebKit::DrawingAreaProxy::waitForDidUpdateViewState): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::setSuppressVisibilityUpdates):
        (WebKit::WebPageProxy::updateActivityState):
        (WebKit::WebPageProxy::activityStateDidChange):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::updateThrottleState):
        (WebKit::WebPageProxy::waitForDidUpdateActivityState):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::installActivityStateChangeCompletionHandler):
        (WebKit::WebPageProxy::updateViewState): Deleted.
        (WebKit::WebPageProxy::viewStateDidChange): Deleted.
        (WebKit::WebPageProxy::dispatchViewStateChange): Deleted.
        (WebKit::WebPageProxy::waitForDidUpdateViewState): Deleted.
        (WebKit::WebPageProxy::installViewStateChangeCompletionHandler): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isInWindow):
        (WebKit::WebPageProxy::didUpdateActivityState):
        (WebKit::WebPageProxy::isViewVisible):
        (WebKit::WebPageProxy::didUpdateViewState): Deleted.
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::windowServerConnectionStateChanged):
        * UIProcess/efl/WebView.cpp:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationDidEnterBackground]):
        (-[WKContentView _applicationWillEnterForeground]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _applicationDidEnterBackground]):
        (-[WKPDFView _applicationWillEnterForeground]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::synchronizeDynamicViewportUpdate):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateViewState): Deleted.
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateViewState): Deleted.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::activityStateDidChange):
        (WebKit::PluginView::viewStateDidChange): Deleted.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::activityStateDidChange):
        (WebKit::AcceleratedDrawingArea::viewStateDidChange): Deleted.
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::activityStateDidChange):
        (WebKit::DrawingArea::viewStateDidChange): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::updateIsInWindow):
        (WebKit::WebPage::setActivityState):
        (WebKit::WebPage::setViewState): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isVisible):
        (WebKit::WebPage::isVisibleOrOccluded):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::activityStateDidChange):
        (WebKit::RemoteLayerTreeDrawingArea::viewStateDidChange): Deleted.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::activityStateDidChange):
        (WebKit::TiledCoreAnimationDrawingArea::didUpdateActivityStateTimerFired):
        (WebKit::TiledCoreAnimationDrawingArea::viewStateDidChange): Deleted.
        (WebKit::TiledCoreAnimationDrawingArea::didUpdateViewStateTimerFired): Deleted.

2016-10-31  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, CMake build fix

        Adds #include <WebCore/IDBGetAllRecordsData.h>

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Add basic visual/layout viewport support for fixed position layout
        https://bugs.webkit.org/show_bug.cgi?id=164261

        Reviewed by Dean Jackson.

        Don't make visualViewportEnabled an experimental feature, because I don't want it enabled
        by default in WebKitTestRunner (and therefore mismatching DumpRenderTree).

        * Shared/WebPreferencesDefinitions.h:

2016-10-29  Filip Pizlo  <fpizlo@apple.com>

        JSC should support SharedArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=163986

        Reviewed by Keith Miller.
        
        Adds some small things we need for SharedArrayBuffer.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::createWebDataFromUint8Array):

2016-10-31  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support IDBObjectStore getAll/getAllKeys.
        <rdar://problem/28806934> and https://bugs.webkit.org/show_bug.cgi?id=164097

        Reviewed by Darin Adler.

        - Handle moving "Get All" requests to and from the DatabaseProcess.
        - Handle the additional task of creating/passing Sandbox Extensions for
          referenced files when necessary. 
          
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::handleGetResult):
        (WebKit::WebIDBConnectionToClient::didGetAllRecords):
        (WebKit::WebIDBConnectionToClient::getAllRecords):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
        
        * Shared/WebCoreArgumentCoders.h:
        
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::getAllRecords):
        (WebKit::preregisterSandboxExtensionsIfNecessary):
        (WebKit::WebIDBConnectionToServer::didGetAllRecords):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2016-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK1] Candidate visibility should not update as a result of selection during a dictionary lookup
        https://bugs.webkit.org/show_bug.cgi?id=164236
        <rdar://problem/28747712>

        Reviewed by Beth Dakin.

        See WebCore ChangeLog for more detail. Removes m_isGettingDictionaryPopupInfo from the WebPage in favor of
        keeping track of the same state in Editor, so that both the WK1 and WK2 cases can share the same codepath.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Implement IntersectionObserver
        https://bugs.webkit.org/show_bug.cgi?id=159475

        Reviewed by Ryosuke Niwa.

        Add ENABLE_INTERSECTION_OBSERVER, enabled by default.

        * Configurations/FeatureDefines.xcconfig:

2016-10-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208154.

        This change caused an assertion failure during API tests on
        macOS.

        Reverted changeset:

        "NetworkSession: Network process crash when converting main
        resource to download"
        https://bugs.webkit.org/show_bug.cgi?id=164220
        http://trac.webkit.org/changeset/208154

2016-10-28  Brent Fulgham  <bfulgham@apple.com>

        Do a better job of protecting Frame objects in the context of JavaScript calls
        https://bugs.webkit.org/show_bug.cgi?id=164163
        <rdar://problem/28955249>

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage): Protected the Frame.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync): Ditto.
        (WebKit::WebPage::setComposition): Ditto.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::insertDictatedTextAsync): Ditto.

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

        NetworkSession: Network process crash when converting main resource to download
        https://bugs.webkit.org/show_bug.cgi?id=164220

        Reviewed by Alex Christensen.

        Right after the main resource load is converted to a download, the web process deletes the ResourceLoader which
        sends the RemoveLoadIdentifier to the network process and the load is aborted. Sometimes it happens that
        NetworkResourceLoader::abort() is called while the NetworkLoad is still deciding the destination of the
        download. In such case, NetworkResourceLoader::didConvertToDownload() has already been called, but not
        NetworkResourceLoader::didBecomeDownload(). In NetworkResourceLoader::abort() we already handle the case of
        having a NetworkLoad after NetworkResourceLoader::didConvertToDownload() has been called, to avoid canceling the
        load in such case, however cleanup() is always called unconditionally and the NetworkLoad is deleted before
        NetworkResourceLoader::didBecomeDownload() is called. When the NetworkLoad is destroyed the NetworkDataTask
        client becomes nullptr, leaving it in a state where both the client is nullptr and the download hasn't been
        created yet. That's not expected to happen and when the response completion handler is called in the
        NetworkDataTask it tries to use either the client or the download and it crashes.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didBecomeDownload): Call cleanup() instead of just deleting the network load.
        (WebKit::NetworkResourceLoader::abort): If we still have a network load that was converted to a download, do not
        call cleanup() because it will be called by didBecomeDownload() later.

2016-10-31  Darin Adler  <darin@apple.com>

        Move ChildNode and ParentNode from ExceptionCode to Exception, add support for ExceptionOr<T&>
        https://bugs.webkit.org/show_bug.cgi?id=164214

        Reviewed by Alex Christensen.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp:
        (webkit_dom_document_query_selector): Updated exception handling.
        (webkit_dom_document_query_selector_all): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.cpp:
        (webkit_dom_document_fragment_query_selector): Ditto.
        (webkit_dom_document_fragment_query_selector_all): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
        (webkit_dom_element_query_selector): Ditto.
        (webkit_dom_element_query_selector_all): Ditto.

2016-10-31  Darin Adler  <darin@apple.com>

        Convert Document from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=164212

        Reviewed by Alex Christensen.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp:
        (webkit_dom_document_create_element): Updated exception handling.
        (webkit_dom_document_create_cdata_section): Ditto.
        (webkit_dom_document_create_processing_instruction): Ditto.
        (webkit_dom_document_create_attribute): Ditto.
        (webkit_dom_document_import_node): Ditto.
        (webkit_dom_document_create_element_ns): Ditto.
        (webkit_dom_document_create_attribute_ns): Ditto.
        (webkit_dom_document_adopt_node): Ditto.
        (webkit_dom_document_create_event): Ditto.
        (webkit_dom_document_set_xml_version): Ditto.
        (webkit_dom_document_get_cookie): Ditto.
        (webkit_dom_document_set_cookie): Ditto.
        (webkit_dom_document_set_body): Ditto.
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        (-[WKDOMDocument createElement:]): Ditto.

2016-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Holding down a key to choose an accented character should fire "insertReplacementText" input events
        https://bugs.webkit.org/show_bug.cgi?id=164209
        <rdar://problem/29019305>

        Reviewed by Darin Adler.

        When replacing text, call Editor::insertText with the correct TextEventInputType so that WebCore will know to
        use EditActionInsertReplacement when creating and applying the corresponding TypingCommand. Additional minor
        changes in order to support testing replacement text insertion.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _insertText:replacementRange:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync):

2016-10-30  Darin Adler  <darin@apple.com>

        Move Element, NamedNodeMap, and DOMStringMap from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=164206

        Reviewed by Chris Dumez.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNamedNodeMap.cpp:
        (webkit_dom_named_node_map_set_named_item): Updated exception handling.
        (webkit_dom_named_node_map_remove_named_item): Ditto.
        (webkit_dom_named_node_map_set_named_item_ns): Ditto.
        (webkit_dom_named_node_map_remove_named_item_ns): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
        (webkit_dom_element_set_attribute): Ditto.
        (webkit_dom_element_set_attribute_node): Ditto.
        (webkit_dom_element_remove_attribute_node): Ditto.
        (webkit_dom_element_set_attribute_ns): Ditto.
        (webkit_dom_element_set_attribute_node_ns): Ditto.
        (webkit_dom_element_matches): Ditto.
        (webkit_dom_element_closest): Ditto.
        (webkit_dom_element_webkit_matches_selector): Ditto.
        (webkit_dom_element_insert_adjacent_element): Ditto.
        (webkit_dom_element_insert_adjacent_html): Ditto.
        (webkit_dom_element_insert_adjacent_text): Ditto.
        (webkit_dom_element_set_inner_html): Ditto.
        (webkit_dom_element_set_outer_html): Ditto.
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        (-[WKDOMElement setAttribute:value:]): Ditto.

2016-10-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOM] Introduce WebCore::jsDynamicDowncast
        https://bugs.webkit.org/show_bug.cgi?id=164137

        Reviewed by Darin Adler.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::elementForNodeHandle):

2016-10-29  Darin Adler  <darin@apple.com>

        Convert more of DOM from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=164173

        Reviewed by Ryosuke Niwa.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.cpp:
        (webkit_dom_character_data_substring_data): Updated since this
        now uses ExceptionOr.
        (webkit_dom_character_data_insert_data): Ditto.
        (webkit_dom_character_data_delete_data): Ditto.
        (webkit_dom_character_data_replace_data): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDeprecated.cpp:
        (webkit_dom_text_replace_whole_text): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMText.cpp:
        (webkit_dom_text_split_text): Ditto.

2016-10-28  Darin Adler  <darin@apple.com>

        Move all classes in the HTML directory from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163876

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.cpp:
        (webkit_dom_dom_token_list_add): Updated exception handling.
        (webkit_dom_dom_token_list_remove): Ditto.
        (webkit_dom_dom_token_list_toggle): Ditto.
        (webkit_dom_dom_token_list_replace): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
        (webkit_dom_element_remove): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
        (webkit_dom_html_element_set_inner_text): Ditto.
        (webkit_dom_html_element_set_outer_text): Ditto.
        (webkit_dom_html_element_set_content_editable): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        (webkit_dom_html_input_element_set_max_length): Ditto.
        (webkit_dom_html_input_element_set_size): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        (webkit_dom_html_select_element_set_length): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.cpp:
        (webkit_dom_html_table_element_insert_row): Ditto.
        (webkit_dom_html_table_element_delete_row): Ditto.
        (webkit_dom_html_table_element_set_caption): Ditto.
        (webkit_dom_html_table_element_set_t_head): Ditto.
        (webkit_dom_html_table_element_set_t_foot): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.cpp:
        (webkit_dom_html_table_row_element_insert_cell): Ditto.
        (webkit_dom_html_table_row_element_delete_cell): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.cpp:
        (webkit_dom_html_table_section_element_insert_row): Ditto.
        (webkit_dom_html_table_section_element_delete_row): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState): Removed ASSERT_NO_EXCEPTION.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setAssistedNodeValueAsNumber): Removed ASSERT_NO_EXCEPTION.

        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::seekableRangesChanged):
        Changed the code to use a different interface to TimeRange that does
        not involve exceptions.

2016-10-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        iOS autocorrection does not trigger an input event of inputType "insertReplacementText"
        https://bugs.webkit.org/show_bug.cgi?id=164077
        <rdar://problem/28987810>

        Reviewed by Simon Fraser.

        Small tweak to mark text insertion when autocorrecting as such, as opposed to regular keyboard input.

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

2016-10-28  Megan Gardner  <megan_gardner@apple.com>

        Rename SharedMemoryMac to SharedMemoryCocoa
        https://bugs.webkit.org/show_bug.cgi?id=164156

        Reviewed by Alex Christensen.

        Renamed SharedMemoryMac to SharedMemoryCocoa, as it runs on all cocoa platforms, not exclusively just mac, and
        thus should be named to reflect that reality.

        * Platform/cocoa: Added.
        * Platform/cocoa/SharedMemoryCocoa.cpp: Copied from Source/WebKit2/Platform/mac/SharedMemoryMac.cpp.
        * Platform/mac/SharedMemoryMac.cpp: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2016-10-28  Antti Koivisto  <antti@apple.com>

        Enable CFNetwork connection cache fast lane for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=164129

        Reviewed by Andreas Kling.

        The idea of this feature is keep a connection free for higher priority requests so low-priority
        image loads can't take all the available connections.

        We have this enabled on WK1 but not on WK2. See what enabling it does for performance in bots.

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

            Based on code inspection setting kHTTPMinimumFastLanePriority is not sufficient to enable this feature,
            kHTTPNumFastLanes needs also be set to a non-zero value. Use the same constants as WK1.
            Also enable this on Mac to unify behavior.

2016-10-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] New stable DOM API headers should be included from webkitdom.h
        https://bugs.webkit.org/show_bug.cgi?id=164069

        Reviewed by Carlos Garcia Campos.

        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdom.h:

2016-10-27  Simon Fraser  <simon.fraser@apple.com>

        Fix when building against the MacOSX10.12.sdk where "macos" is not recognized
        in the availability macros.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2016-10-27  Megan Gardner  <megan_gardner@apple.com>

        Add support for wide gamut for ShareableBitmap for image popovers
        https://bugs.webkit.org/show_bug.cgi?id=164001

        Reviewed by Simon Fraser.

        Added suppport for wide gamut in ShareableBitmap. SharableBitmaps now know the size of their pixels,
        and that data is passed back and forth between the processes. The callers of SharedBitmap will determine
        if their image should support wide gamut, but ShareableBitmap will override a set flag on a device that
        is incapbable of supporting a wide gamut image.
        This makes it possible to show wide gamut images in image popovers on iOS.
        This is currently untestable, so no tests added.

        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::decode):
        * Platform/IPC/Decoder.h:
        * Platform/IPC/Encoder.cpp:
        (IPC::Encoder::encode):
        * Platform/IPC/Encoder.h:
        * Shared/ShareableBitmap.cpp:
        (WebKit::bytesPerPixel):
        (WebKit::ShareableBitmap::Handle::encode):
        (WebKit::ShareableBitmap::Handle::decode):
        (WebKit::ShareableBitmap::Handle::clear):
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::createHandle):
        (WebKit::ShareableBitmap::ShareableBitmap):
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::numBytesForSize):
        (WebKit::ShareableBitmap::sizeInBytes):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::bitmapInfo):
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::createCGImage):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2016-10-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support "insertFromDrop" and "deleteByDrag" for the InputEvent spec
        https://bugs.webkit.org/show_bug.cgi?id=163948
        <rdar://problem/28921433>

        Reviewed by Darin Adler.

        Add support for new drag and drop-related EditAction enum values.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):

2016-10-26  Chris Dumez  <cdumez@apple.com>

        Replace IDBKeyPath with a WTF::Variant
        https://bugs.webkit.org/show_bug.cgi?id=163909

        Reviewed by Darin Adler.

        Add coders to encode / decode IDBKeyPath type for IPC.

        * Shared/Databases/IndexedDB/WebIDBResult.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<IDBKeyPath>::encode):
        (IPC::ArgumentCoder<IDBKeyPath>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:

2016-10-26  Brian Burg  <bburg@apple.com>

        Web Inspector: remove unused bool return value from FrontendChannel::sendMessageToFrontend
        https://bugs.webkit.org/show_bug.cgi?id=164046

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::sendMessageToFrontend):
        * WebProcess/WebPage/WebInspector.h:

2016-10-26  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add "has capture device" bit to media state flags
        https://bugs.webkit.org/show_bug.cgi?id=163952

        Unreviewed fix after r207839.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setMuted): Take an MutedStateFlags, not a bool.
        * WebProcess/WebPage/WebPage.h:

2016-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.15.1 release.

        * gtk/NEWS: Add release notes for 2.15.1.

2016-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r206505) [GTK] Build broken with GTK+ 3.14
        https://bugs.webkit.org/show_bug.cgi?id=162776

        Reviewed by Xabier Rodriguez-Calvar.

        Do not use gtk_widget_get_action_group() when GTK+ < 3.16, use g_object_set instead to attach the action group
        to the menu widget.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::append):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):

2016-10-25  Alex Christensen  <achristensen@webkit.org>

        CMake build fix.

        * PlatformMac.cmake:
        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::WebHitTestResultData):
        Explicitly call AtomicString::string to make the String constructor no longer ambiguous.
        It couldn't decide whether to use operator const String& or operator NSString*.

2016-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Network process assertion in NetworkDataTask::continueHTTPRedirection
        https://bugs.webkit.org/show_bug.cgi?id=163941

        Reviewed by Michael Catanzaro.

        equalLettersIgnoringASCIICase() expects the second argument to be the letters to compare in lowercase, so use
        "get" instead of "GET".

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):

2016-10-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add "has capture device" bit to media state flags
        https://bugs.webkit.org/show_bug.cgi?id=163952

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetMediaState): Support MediaProducer::HasMediaCaptureDevice.
        * UIProcess/API/C/WKPagePrivate.h: Define kWKMediaHasCaptureDevice.

2016-10-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r207827 and r207828.
        https://bugs.webkit.org/show_bug.cgi?id=163965

        Caused LayoutTest webaudio/web-audio-is-playing.html to time
        out on macOS. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[MediaStream] Add "has capture device" bit to media state
        flags"
        https://bugs.webkit.org/show_bug.cgi?id=163952
        http://trac.webkit.org/changeset/207827

        "[MediaStream] Add "has capture device" bit to media state
        flags"
        https://bugs.webkit.org/show_bug.cgi?id=163952
        http://trac.webkit.org/changeset/207828

2016-10-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add "has capture device" bit to media state flags
        https://bugs.webkit.org/show_bug.cgi?id=163952

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetMediaState): Support MediaProducer::HasMediaCaptureDevice.
        * UIProcess/API/C/WKPagePrivate.h: Define kWKMediaHasCaptureDevice.

2016-10-25  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r207494.

        iOS SDK has been updated on the bots now so rollout the
        rollout

        Reverted changeset:

        "Unreviewed, rolling out r207413."
        https://bugs.webkit.org/show_bug.cgi?id=163547
        http://trac.webkit.org/changeset/207494

2016-10-25  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed build fix.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _fullscreenDelegate]): Removed unneeded parenthesis.

2016-10-19  Jer Noble  <jer.noble@apple.com>

        Add WKWebView fullscreen delegate SPI
        https://bugs.webkit.org/show_bug.cgi?id=163674

        Reviewed by Anders Carlsson.

        Add a new SPI property to WKWebView allowing clients to be notified when fullscreen mode enters and exits.

        * UIProcess/API/APIFullscreenClient.h: Added.
        (API::FullscreenClient::~FullscreenClient):
        (API::FullscreenClient::willEnterFullscreen):
        (API::FullscreenClient::didEnterFullscreen):
        (API::FullscreenClient::willExitFullscreen):
        (API::FullscreenClient::didExitFullscreen):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setFullscreenDelegate:]):
        (-[WKWebView _fullscreenDelegate]):
        (-[WKWebView _isInFullscreen]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKFullscreenDelegate.h: Added.
        * UIProcess/Cocoa/FullscreenClient.h: Added.
        (WebKit::FullscreenClient::~FullscreenClient):
        * UIProcess/Cocoa/FullscreenClient.mm: Added.
        (WebKit::FullscreenClient::FullscreenClient):
        (WebKit::FullscreenClient::delegate):
        (WebKit::FullscreenClient::setDelegate):
        (WebKit::FullscreenClient::willEnterFullscreen):
        (WebKit::FullscreenClient::didEnterFullscreen):
        (WebKit::FullscreenClient::willExitFullscreen):
        (WebKit::FullscreenClient::didExitFullscreen):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::willEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::didEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::willExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::didExitFullScreen):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setFullscreenClient):
        (WebKit::WebPageProxy::fullScreenManager): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::fullscreenClient):
        * WebKit2.xcodeproj/project.pbxproj:

2016-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix timeouts in 12 GTK+ unit tests after r207812.

        * NetworkProcess/NetworkProcessCreationParameters.h: Initialize loadThrottleLatency.

2016-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix Soup based ports debug build after r207813.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::authenticateCallback):
        (WebKit::NetworkDataTaskSoup::requestStartedCallback):

2016-10-25  Andreas Kling  <akling@apple.com>

        More PassRefPtr purging in WebCore.
        <https://webkit.org/b/163895>

        Reviewed by Antti Koivisto.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::createScrollbar):

2016-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: switch to use subclasses for NetworkSession and NetworkDataTask implementations
        https://bugs.webkit.org/show_bug.cgi?id=163777

        Reviewed by Alex Christensen.

        The subclass model allows us to choose the implementation at run time, so we could add other implementations
        like a mock network class to measure performance, and even one for blobs and finally get rid of ResourceHandle
        in WebKit2.

        * CMakeLists.txt: Add new files to compilation.
        * NetworkProcess/NetworkDataTask.cpp: Added.
        (WebKit::NetworkDataTask::create): Create a NetworkDataTaskCocoa or NetworkDataTaskSoup.
        (WebKit::NetworkDataTask::NetworkDataTask): Move common code from NetworkDataTaskCocoa and NetworkDataTaskSoup
        here to handle the early failures.
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::scheduleFailure):
        (WebKit::NetworkDataTask::failureTimerFired):
        * NetworkProcess/NetworkDataTask.h: Remove platform specific members.
        (WebKit::NetworkDataTask::setPendingDownloadLocation): Make it virtual and set the m_pendingDownloadLocation.
        (WebKit::NetworkDataTask::suggestedFilename): Make it virtual and const with a default implementation.
        (WebKit::NetworkDataTask::setSuggestedFilename): Ditto.
        (WebKit::NetworkDataTask::allowsSpecificHTTPSCertificateForHost): Ditto.
        * NetworkProcess/NetworkLoad.cpp: Include NetworkDataTaskCocoa.h.
        * NetworkProcess/NetworkLoad.h: Include NetworkDataTask.h instead of NetworkSession.h.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess): Use NetworkSessionCocoa.
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::create): Create a NetworkSessionCocoa or NetworkSessionSoup.
        (WebKit::NetworkSession::defaultSession): In case of cocoa use NetworkSessionCocoa::defaultSession() because of
        the custom protocol manager, otherwise simply create a default session.
        (WebKit::NetworkSession::networkStorageSession): Move common code from NetworkSessionCocoa and
        NetworkSessionSoup here.
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        * NetworkProcess/NetworkSession.h: Remove platform specific members.
        (WebKit::NetworkSession::invalidateAndCancel): Make it virtual.
        (WebKit::NetworkSession::clearCredentials): Ditto.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp: Include NetworkSession.h.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Added.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::didSendData):
        (WebKit::NetworkDataTaskCocoa::didReceiveChallenge):
        (WebKit::NetworkDataTaskCocoa::didCompleteWithError):
        (WebKit::NetworkDataTaskCocoa::didReceiveResponse):
        (WebKit::NetworkDataTaskCocoa::didReceiveData):
        (WebKit::NetworkDataTaskCocoa::didBecomeDownload):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCocoa::setPendingDownloadLocation):
        (WebKit::NetworkDataTaskCocoa::tryPasswordBasedAuthentication):
        (WebKit::NetworkDataTaskCocoa::transferSandboxExtensionToDownload):
        (WebKit::NetworkDataTaskCocoa::allowsSpecificHTTPSCertificateForHost):
        (WebKit::NetworkDataTaskCocoa::suggestedFilename):
        (WebKit::NetworkDataTaskCocoa::cancel):
        (WebKit::NetworkDataTaskCocoa::resume):
        (WebKit::NetworkDataTaskCocoa::suspend):
        (WebKit::NetworkDataTaskCocoa::state):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h: Added.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate initWithNetworkSession:withCredentials:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        (WebKit::configurationForSessionID):
        (WebKit::NetworkSessionCocoa::setCustomProtocolManager):
        (WebKit::NetworkSessionCocoa::setSourceApplicationAuditTokenData):
        (WebKit::NetworkSessionCocoa::setSourceApplicationBundleIdentifier):
        (WebKit::NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier):
        (WebKit::NetworkSessionCocoa::setCTDataConnectionServiceType):
        (WebKit::NetworkSessionCocoa::create):
        (WebKit::NetworkSessionCocoa::defaultSession):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::NetworkSessionCocoa::~NetworkSessionCocoa):
        (WebKit::NetworkSessionCocoa::invalidateAndCancel):
        (WebKit::NetworkSessionCocoa::clearCredentials):
        (WebKit::NetworkSessionCocoa::dataTaskForIdentifier):
        (WebKit::NetworkSessionCocoa::addDownloadID):
        (WebKit::NetworkSessionCocoa::downloadID):
        (WebKit::NetworkSessionCocoa::takeDownloadID):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::~NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::suggestedFilename):
        (WebKit::NetworkDataTaskSoup::setPendingDownloadLocation):
        (WebKit::NetworkDataTaskSoup::createRequest):
        (WebKit::NetworkDataTaskSoup::clearRequest):
        (WebKit::NetworkDataTaskSoup::resume):
        (WebKit::NetworkDataTaskSoup::suspend):
        (WebKit::NetworkDataTaskSoup::cancel):
        (WebKit::NetworkDataTaskSoup::invalidateAndCancel):
        (WebKit::NetworkDataTaskSoup::state):
        (WebKit::NetworkDataTaskSoup::timeoutFired):
        (WebKit::NetworkDataTaskSoup::startTimeout):
        (WebKit::NetworkDataTaskSoup::stopTimeout):
        (WebKit::NetworkDataTaskSoup::sendRequestCallback):
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::didReceiveResponse):
        (WebKit::NetworkDataTaskSoup::tlsErrorsChangedCallback):
        (WebKit::NetworkDataTaskSoup::tlsErrorsChanged):
        (WebKit::NetworkDataTaskSoup::applyAuthenticationToRequest):
        (WebKit::NetworkDataTaskSoup::authenticateCallback):
        (WebKit::NetworkDataTaskSoup::authenticate):
        (WebKit::NetworkDataTaskSoup::continueAuthenticate):
        (WebKit::NetworkDataTaskSoup::skipInputStreamForRedirectionCallback):
        (WebKit::NetworkDataTaskSoup::skipInputStreamForRedirection):
        (WebKit::NetworkDataTaskSoup::didFinishSkipInputStreamForRedirection):
        (WebKit::NetworkDataTaskSoup::shouldStartHTTPRedirection):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        (WebKit::NetworkDataTaskSoup::readCallback):
        (WebKit::NetworkDataTaskSoup::read):
        (WebKit::NetworkDataTaskSoup::didRead):
        (WebKit::NetworkDataTaskSoup::didFinishRead):
        (WebKit::NetworkDataTaskSoup::requestNextPartCallback):
        (WebKit::NetworkDataTaskSoup::requestNextPart):
        (WebKit::NetworkDataTaskSoup::didRequestNextPart):
        (WebKit::NetworkDataTaskSoup::didFinishRequestNextPart):
        (WebKit::NetworkDataTaskSoup::gotHeadersCallback):
        (WebKit::NetworkDataTaskSoup::didGetHeaders):
        (WebKit::NetworkDataTaskSoup::wroteBodyDataCallback):
        (WebKit::NetworkDataTaskSoup::didWriteBodyData):
        (WebKit::NetworkDataTaskSoup::download):
        (WebKit::NetworkDataTaskSoup::writeDownloadCallback):
        (WebKit::NetworkDataTaskSoup::writeDownload):
        (WebKit::NetworkDataTaskSoup::didWriteDownload):
        (WebKit::NetworkDataTaskSoup::didFinishDownload):
        (WebKit::NetworkDataTaskSoup::didFailDownload):
        (WebKit::NetworkDataTaskSoup::cleanDownloadFiles):
        (WebKit::NetworkDataTaskSoup::didFail):
        (WebKit::NetworkDataTaskSoup::networkEventCallback):
        (WebKit::NetworkDataTaskSoup::networkEvent):
        (WebKit::NetworkDataTaskSoup::startingCallback):
        (WebKit::NetworkDataTaskSoup::requestStartedCallback):
        (WebKit::NetworkDataTaskSoup::didStartRequest):
        (WebKit::NetworkDataTaskSoup::restartedCallback):
        (WebKit::NetworkDataTaskSoup::didRestart):
        * NetworkProcess/soup/NetworkDataTaskSoup.h: Added.
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
        (WebKit::NetworkSessionSoup::~NetworkSessionSoup):
        (WebKit::NetworkSessionSoup::soupSession):
        (WebKit::NetworkSessionSoup::invalidateAndCancel):
        * NetworkProcess/soup/NetworkSessionSoup.h: Added.
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession): Update to new NetworkSession::create() API.
        * PlatformEfl.cmake: Add new files to compilation.
        * PlatformGTK.cmake: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Update to new NetworkSession::create() API.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Ditto.

2016-10-25  Antti Koivisto  <antti@apple.com>

        Add support for introducing simulated latency in network process
        https://bugs.webkit.org/show_bug.cgi?id=163902

        Reviewed by Alex Christensen.

        For testing purposes it is useful to have a mechanism for simulating high latency.
        This patch adds a basic mechanism that introduces a delay to each response in network
        process. In Safari it can be used with

             defaults write com.apple.Safari WebKitNetworkLoadThrottleLatencyMilliseconds 200

        Setting the delay to 0 disables the feature.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::Throttle::Throttle):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        (WebKit::NetworkLoad::notifyDidReceiveResponse):
        (WebKit::NetworkLoad::didReceiveData):
        (WebKit::NetworkLoad::didCompleteWithError):
        (WebKit::NetworkLoad::throttleDelayCompleted):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::loadThrottleLatency):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2016-10-24  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r206410): Sandbox violations beneath WebProcessProxy::platformIsBeingDebugged
        https://bugs.webkit.org/show_bug.cgi?id=163879
        <rdar://problem/28728735>

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::platformIsBeingDebugged): Check if the current process, which is
          the UI process, is sandboxed before trying to find out if the Web process is being
          debugged.

2016-10-21  Alex Christensen  <achristensen@webkit.org>

        URL::port should return Optional<uint16_t>
        https://bugs.webkit.org/show_bug.cgi?id=163806

        Reviewed by Darin Adler.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::overrideSystemProxies):
        * Shared/API/APISecurityOrigin.h:
        (API::SecurityOrigin::create):
        * Shared/API/APIURL.h:
        (API::URL::protocol):
        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginGetPort):
        * UIProcess/API/Cocoa/WKSecurityOrigin.mm:
        (-[WKSecurityOrigin port]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canHandleRequest):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::origin):

2016-10-24  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Separate media capture and audio playback muting
        https://bugs.webkit.org/show_bug.cgi?id=163855
        <rdar://problem/28827186>

        Reviewed by Darin Adler.

        * Shared/WebPageCreationParameters.h: Change 'muted' from bool to MutedStateFlags.

        * UIProcess/API/C/WKPage.cpp: Change parameter from bool to WKMediaMutedState.
        (WKPageSetMuted):
        * UIProcess/API/C/WKPagePrivate.h: Define WKMediaMutedState.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setMuted): m_muted -> m_mutedState.
        (WebKit::WebPageProxy::creationParameters): Ditto.
        * UIProcess/WebPageProxy.h:

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::isMuted): page.isMuted -> page.mutedState.

        * WebProcess/WebPage/WebPage.messages.in: Change SetMuted parameter.

2016-10-24  Youenn Fablet  <youenn@apple.com>

        Activate WEB_RTC compilation flags for Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=163886

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2016-10-24  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support IDBIndex name assignment.
        <rdar://problem/28806932> and https://bugs.webkit.org/show_bug.cgi?id=163805

        Reviewed by Alex Christensen.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didRenameIndex):
        (WebKit::WebIDBConnectionToClient::renameIndex):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::renameIndex):
        (WebKit::WebIDBConnectionToServer::didRenameIndex):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2016-10-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Remove DO NOT MODIFY headers from files that are no longer autogenerated
        https://bugs.webkit.org/show_bug.cgi?id=163867

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttr.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttr.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttrPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBlob.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBlob.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBlobPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCDATASection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCDATASection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCDATASectionPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRule.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRuleList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRuleList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRuleListPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRulePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleDeclaration.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleDeclarationPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleSheet.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleSheetPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValue.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValuePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterDataPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMComment.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMComment.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCommentPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMImplementation.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMImplementationPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelectionPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenListPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindowPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindowUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragmentPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragmentUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentTypePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEventPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFile.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFile.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFileList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFileList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFileListPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFilePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAppletElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAppletElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAppletElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCanvasElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCanvasElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCanvasElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCollection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCollection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCollectionPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDocument.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDocument.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDocumentPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElementUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMapElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMapElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMapElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollectionPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPrivate.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLQuoteElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLQuoteElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLQuoteElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTitleElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTitleElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTitleElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElementPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyboardEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyboardEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyboardEventPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaListPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEventPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNamedNodeMap.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNamedNodeMap.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNamedNodeMapPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNode.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeIterator.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeIterator.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeIteratorPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeListPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMProcessingInstruction.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMProcessingInstruction.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMProcessingInstructionPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRange.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRange.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRangePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRangeUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheet.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheet.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheetList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheetList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheetListPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheetPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMText.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMText.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTreeWalker.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTreeWalker.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTreeWalkerPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEventPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEventPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathExpression.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathExpression.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathExpressionPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathNSResolverPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathResult.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathResult.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathResultPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdom.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdomautocleanups.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdomdefines.h:

2016-10-23  Chris Dumez  <cdumez@apple.com>

        Another unreviewed attempt to fix the WatchOS / TvOS build after r207585.
        <rdar://problem/28902292>

        Disable USE_CFURLCONNECTION on newer WatchOS / TvOS.

        * config.h:

2016-10-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix WatchOS / TvOS build after r207585.
        <rdar://problem/28902292>

        Enable NETWORK_SESSION on those platforms.

        * config.h:

2016-10-22  Dan Bernstein  <mitz@apple.com>

        [iOS] _webViewWillEndNavigationGesture:withNavigationToBackForwardListItem: is never called
        https://bugs.webkit.org/show_bug.cgi?id=163758

        Reviewed by Darin Adler.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture): Don’t reset the interactive update
          handler.

2016-10-21  David Kilzer  <ddkilzer@apple.com>

        Bug 163762: IntSize::area() should used checked arithmetic
        <https://webkit.org/b/163762>

        Reviewed by Darin Adler.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create): Add overflow check and return
        nullptr on overflow.
        (WebKit::ShareableBitmap::createShareable): Ditto.
        (WebKit::ShareableBitmap::create): Change debug assert for
        adequate buffer size check into release check.
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::numBytesForSize): Change to return a
        Checked<unsigned, RecordOverflow> value.
        (WebKit::ShareableBitmap::sizeInBytes):
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::numBytesForSize): Ditto.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]): Call unsafeGet().

2016-10-21  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Dynamically generate media capture sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=154861
        <rdar://problem/24909411>

        Reviewed by Tim Horton.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandleForGenericExtension):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::wkSandboxExtensionType): Add case for generic handle.
        (WebKit::SandboxExtension::createHandleForGenericExtension): New.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::invalidateRequests): Clear the list of extensions granted.
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Extend the web 
          process sandbox as necessary.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::~UserMediaPermissionRequestManager): Revoke all
          sandbox extensions.
        (WebKit::UserMediaPermissionRequestManager::grantUserMediaDevicesSandboxExtension): Consume
          sandbox extensions.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::grantUserMediaDevicesSandboxExtension): Pass-through to user media manager.
        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebPage/WebPage.messages.in: Add GrantUserMediaDevicesSandboxExtension.

        * WebProcess/com.apple.WebProcess.sb.in: Add rules, defines, and a macro to allow dynamic extensions
          for media capture devices.

2016-10-21  Gavin Barraclough  <barraclough@apple.com>

        WebPageProxy should not need PageActivityState
        https://bugs.webkit.org/show_bug.cgi?id=163821

        Reviewed by Geoff Garen.

        The PageActivityState is currently plumbed back from WebCore up to the UI process, to
        determine whether to enabled process suppression. However the information it contains
        (whether a page load is ongoing, whether audio is playing) is already available via
        other means. Remove this use of PageActivityState.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::commitChanges):
            - PageLoadState notifies WebPageProxy when loading state changes.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateThrottleState):
            - Now relies on info from PageLoadState, setMuted, isPlayingMediaDidChange.
        (WebKit::WebPageProxy::setMuted):
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
            - If audio playback state changes we may need to update the throttle state.
        (WebKit::WebPageProxy::setPageActivityState): Deleted.
            - removed PageActivityState from WK2.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isLoadingChanged):
            - PageLoadState notifies WebPageProxy when loading state changes.
        * UIProcess/WebPageProxy.messages.in:
            - removed PageActivityState from WK2.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setPageActivityState): Deleted.
            - removed PageActivityState from WK2.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
            - removed PageActivityState from WK2.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setPageActivityState): Deleted.
            - removed PageActivityState from WK2.
        * WebProcess/WebPage/WebPage.h:
            - removed PageActivityState from WK2.

2016-10-21  Gavin Barraclough  <barraclough@apple.com>

        WebPage should take UserActivity directly for user input
        https://bugs.webkit.org/show_bug.cgi?id=163813

        Reviewed by Anders Carlsson.

        When we receive mouse/keyboard events in a page, we want to prevent AppNap. We currently do so
        via the PageThrottler. This patch is to just make the WebPage drive the UserActivity directly.

        Two reasons to do so: (1) to cleanup & simplify for further refactoring. (2) The current code
        isn't really achieving the desired effect. The page setting the flag in the throttler to get
        the activity to be set is now a less effective way of achieving this goal, since the
        PageActivityState bounces back across to the UI process & then messages back to the WebContent
        process to take the UserActivity. These extra hops defeat the purpose of making sure the boost
        from the initial message isn't lost.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userActivityHysteresis):
            - m_userActivityHysteresis triggers updateUserActivity.
        (WebKit::WebPage::setPageSuppressed):
            - setPageSuppressed starts/stops m_userActivityHysteresis.
        (WebKit::WebPage::updateUserActivity):
            - update UserActivity based on state of m_userActivityHysteresis.
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::keyEvent):
            - input events impulse m_userActivityHysteresis.
        * WebProcess/WebPage/WebPage.h:

2016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support (insertFrom|deleteBy)Composition and (insert|delete)CompositionText inputTypes for InputEvents
        https://bugs.webkit.org/show_bug.cgi?id=163460
        <rdar://problem/28784142>

        Reviewed by Darin Adler.

        Handle new EditAction types for inserting/deleting pending/final compositions.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):

2016-10-21  Jeremy Jones  <jeremyj@apple.com>

        Implement basic pointer lock behavior for WebKit and WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=162745

        Reviewed by Simon Fraser.

        Enable basic pointer lock functionality by plumbing requests through WebPage IPC.
        Pass through mouse movement deltas.
        Unlock pointer when view is no longer visible.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent): Pass along mouse movement.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchViewStateChange): Unlock pointer when page is not visible.
        (WebKit::WebPageProxy::requestPointerLock): Hide and disassociate pointer.
        (WebKit::WebPageProxy::requestPointerUnlock): Show and associate pointer.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Add methods.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestPointerLock): Pass along to web page.
        (WebKit::WebChromeClient::requestPointerUnlock): Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didAcquirePointerLock): Forward to PointerLockController.
        (WebKit::WebPage::didNotAcquirePointerLock): Ditto.
        (WebKit::WebPage::didLosePointerLock): Ditto.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add methods.

2016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement InputEvent.getTargetRanges() for the input events spec
        https://bugs.webkit.org/show_bug.cgi?id=162947
        <rdar://problem/28853079>

        Reviewed by Darin Adler.

        Boilerplate change to add a runtime guard for InputEvents-related IDL interfaces. See WebCore ChangeLog entry
        for more details.

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

2016-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Configures but fails to link with ENABLE_OPENGL=OFF
        https://bugs.webkit.org/show_bug.cgi?id=163449

        Reviewed by Michael Catanzaro.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Check TEXTURE_MAPPER_GL instead of TEXTURE_MAPPER and also ensure the current
        display is X11.
        (webkitWebViewBaseUnrealize): Ditto.
        (webkitWebViewBaseDidRelaunchWebProcess): Check TEXTURE_MAPPER_GL instead of TEXTURE_MAPPER.
        (webkitWebViewBasePageClosed): Ditto.
        * UIProcess/AcceleratedDrawingAreaProxy.cpp:
        (WebKit::AcceleratedDrawingAreaProxy::didUpdateBackingStoreState): Ditto.
        (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState): Check EGL is enabled before
        trying to use the WaylandCompositor.
        * UIProcess/AcceleratedDrawingAreaProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess): Ditto.
        * UIProcess/gtk/AcceleratedBackingStore.cpp:
        (WebKit::AcceleratedBackingStore::create): Ditto.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        * UIProcess/gtk/WaylandCompositor.cpp:
        * UIProcess/gtk/WaylandCompositor.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode): Check TEXTURE_MAPPER_GL instead of TEXTURE_MAPPER.
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/LayerTreeHost.h:

2016-10-20  Chris Dumez  <cdumez@apple.com>

        "Download Linked File" context menu action should use 'download' attribute as suggested filename
        https://bugs.webkit.org/show_bug.cgi?id=163742
        <rdar://problem/28840734>

        Reviewed by Darin Adler.

        Update "Download Linked File" context menu action to use the anchor
        element's 'download' attribute as suggested filename for the download.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::downloadRequest):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::WebHitTestResultData):
        (WebKit::WebHitTestResultData::encode):
        (WebKit::WebHitTestResultData::decode):
        * Shared/WebHitTestResultData.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        * UIProcess/WebProcessPool.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::linkSuggestedFilename):

2016-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] [iOS] Disable variation fonts on macOS El Capitan and iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=163374

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2016-10-20  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support IDBObjectStore name assignment.
        <rdar://problem/28806931> and https://bugs.webkit.org/show_bug.cgi?id=163749

        Reviewed by Alex Christensen.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didRenameObjectStore):
        (WebKit::WebIDBConnectionToClient::renameObjectStore):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::renameObjectStore):
        (WebKit::WebIDBConnectionToServer::didRenameObjectStore):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2016-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Avoid strstr() when checking (E)GL extensions
        https://bugs.webkit.org/show_bug.cgi?id=161958

        Reviewed by Žan Doberšek.

        Use GLContext::isExtensionSupported() instead of strstr().

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::initializeEGL):

2016-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Wrong use of EGL_DEPTH_SIZE
        https://bugs.webkit.org/show_bug.cgi?id=155536

        Reviewed by Michael Catanzaro.

        Use XErrorTrapper class instead of the custom XErrorHandler.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix):

2016-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add NetworkSession implementation and switch to use it
        https://bugs.webkit.org/show_bug.cgi?id=163597

        Reviewed by Alex Christensen.

        Basically move the ResourceHandle implementation to the network process, but modernized, cleaned up, and adapted
        to the NetworkSession model.

        * CMakeLists.txt: Add new files to compilation.
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download): Use the same code for all ports using NetworkSession and add missing
        initialization of m_sessionID.
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::Download): Define PlatformDownloadTaskRef on every platform to make the constructor common to
        all ports using NetworkSession.
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::cancelNetworkLoad):
        (WebKit::Download::platformDidFinish):
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::pendingDownloadID): Make const.
        (WebKit::NetworkDataTask::pendingDownload): Ditto.
        (WebKit::NetworkDataTask::pendingDownloadLocation): Ditto.
        (WebKit::NetworkDataTask::isDownload): Helper to check if the task is a download.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession): Use NetworkDataTask::isDownload().
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess): NetworkSession::setCustomProtocolManager() is Cocoa only.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::networkStorageSession): Make const.
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp: Added.
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::scheduleFailure):
        (WebKit::NetworkDataTask::failureTimerFired):
        (WebKit::NetworkDataTask::suggestedFilename):
        (WebKit::NetworkDataTask::setSuggestedFilename):
        (WebKit::NetworkDataTask::setPendingDownloadLocation):
        (WebKit::NetworkDataTask::allowsSpecificHTTPSCertificateForHost):
        (WebKit::NetworkDataTask::createRequest):
        (WebKit::NetworkDataTask::clearRequest):
        (WebKit::NetworkDataTask::resume):
        (WebKit::NetworkDataTask::suspend):
        (WebKit::NetworkDataTask::cancel):
        (WebKit::NetworkDataTask::invalidateAndCancel):
        (WebKit::NetworkDataTask::state):
        (WebKit::NetworkDataTask::timeoutFired):
        (WebKit::NetworkDataTask::startTimeout):
        (WebKit::NetworkDataTask::stopTimeout):
        (WebKit::NetworkDataTask::sendRequestCallback):
        (WebKit::NetworkDataTask::didSendRequest):
        (WebKit::NetworkDataTask::didReceiveResponse):
        (WebKit::NetworkDataTask::tlsErrorsChangedCallback):
        (WebKit::NetworkDataTask::tlsErrorsChanged):
        (WebKit::NetworkDataTask::applyAuthenticationToRequest):
        (WebKit::NetworkDataTask::authenticateCallback):
        (WebKit::isAuthenticationFailureStatusCode):
        (WebKit::NetworkDataTask::authenticate):
        (WebKit::NetworkDataTask::continueAuthenticate):
        (WebKit::NetworkDataTask::skipInputStreamForRedirectionCallback):
        (WebKit::NetworkDataTask::skipInputStreamForRedirection):
        (WebKit::NetworkDataTask::didFinishSkipInputStreamForRedirection):
        (WebKit::shouldRedirectAsGET):
        (WebKit::NetworkDataTask::shouldStartHTTPRedirection):
        (WebKit::NetworkDataTask::continueHTTPRedirection):
        (WebKit::NetworkDataTask::readCallback):
        (WebKit::NetworkDataTask::read):
        (WebKit::NetworkDataTask::didRead):
        (WebKit::NetworkDataTask::didFinishRead):
        (WebKit::NetworkDataTask::requestNextPartCallback):
        (WebKit::NetworkDataTask::requestNextPart):
        (WebKit::NetworkDataTask::didRequestNextPart):
        (WebKit::NetworkDataTask::didFinishRequestNextPart):
        (WebKit::NetworkDataTask::gotHeadersCallback):
        (WebKit::NetworkDataTask::didGetHeaders):
        (WebKit::NetworkDataTask::wroteBodyDataCallback):
        (WebKit::NetworkDataTask::didWriteBodyData):
        (WebKit::NetworkDataTask::download):
        (WebKit::NetworkDataTask::writeDownloadCallback):
        (WebKit::NetworkDataTask::writeDownload):
        (WebKit::NetworkDataTask::didWriteDownload):
        (WebKit::NetworkDataTask::didFinishDownload):
        (WebKit::NetworkDataTask::didFailDownload):
        (WebKit::NetworkDataTask::cleanDownloadFiles):
        (WebKit::NetworkDataTask::didFail):
        (WebKit::NetworkDataTask::networkEventCallback):
        (WebKit::NetworkDataTask::networkEvent):
        (WebKit::NetworkDataTask::startingCallback):
        (WebKit::NetworkDataTask::requestStartedCallback):
        (WebKit::NetworkDataTask::didStartRequest):
        (WebKit::NetworkDataTask::restartedCallback):
        (WebKit::NetworkDataTask::didRestart):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSession::create):
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::networkStorageSession):
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::soupSession):
        (WebKit::NetworkSession::invalidateAndCancel):
        (WebKit::NetworkSession::clearCredentials):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession): Add implementation matching
        WebFrameNetworkingContext::ensurePrivateBrowsingSession().
        (WebKit::RemoteNetworkingContext::storageSession): Do not always return the default session if the given one is
        in the global map.
        * PlatformEfl.cmake: Ad new files to compilation.
        * PlatformGTK.cmake: Ditto.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Also create a NetworkSession.
        * config.h: Enable NetworkSession unconditionally for Soup based ports.

2016-10-19  Alex Christensen  <achristensen@webkit.org>

        Revert r207151
        https://bugs.webkit.org/show_bug.cgi?id=163675

        Reviewed by Brent Fulgham.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/mac/NetworkLoadMac.mm:
        (WebKit::NetworkLoad::willCacheResponseAsync):
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::receivedCredential):
        (WebKit::AuthenticationManager::receivedRequestToContinueWithoutCredential):
        (WebKit::AuthenticationManager::receivedCancellation):
        (WebKit::AuthenticationManager::receivedRequestToPerformDefaultHandling):
        (WebKit::AuthenticationManager::receivedChallengeRejection):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):
        * WebKit2.xcodeproj/project.pbxproj:

2016-10-19  Chris Dumez  <cdumez@apple.com>

        [WK2] Expose suggested filename via WKBundleHitTestResult API
        https://bugs.webkit.org/show_bug.cgi?id=163693
        <rdar://problem/28840734>

        Reviewed by Anders Carlsson.

        Expose suggested filename via WKBundleHitTestResult API. The implementation
        currently relies on the 'download' attribute on anchor / area elements
        that we recently started supporting.

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultCopyLinkSuggestedFilename):
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::create):
        (WebKit::InjectedBundleHitTestResult::mediaType):
        (WebKit::InjectedBundleHitTestResult::linkSuggestedFilename):
        (WebKit::InjectedBundleHitTestResult::imageRect):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

2016-10-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207557.

        This change caused animations/font-variations tests to time
        out on pre-Sierra Macs.

        Reverted changeset:

        "[macOS] [iOS] Disable variation fonts on macOS El Capitan and
        iOS 9"
        https://bugs.webkit.org/show_bug.cgi?id=163374
        http://trac.webkit.org/changeset/207557

2016-10-19  Andy Estes  <aestes@apple.com>

        Crash in ASCIICaseInsensitiveHash::hash() when a response has a null MIME type
        https://bugs.webkit.org/show_bug.cgi?id=163476
        <rdar://problem/26941395>

        Reviewed by Andreas Kling.

        When custom content providers are registered and a response has a null MIME type, WebPage
        will pass a null String to HashSet::contains(). This results in a null pointer dereference,
        since the String hash functions do not support null Strings and unconditionally dereference
        their StringImpls. Fixed by checking that Strings are non-null before calling
        HashSet::contains() on m_mimeTypesWithCustomContentProviders.

        New API test: WebKit2.LoadDataWithNilMIMEType.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::shouldUseCustomContentProviderForResponse): Checked if mimeType is null
        before calling m_mimeTypesWithCustomContentProviders.contains().
        (WebKit::WebPage::canShowMIMEType): Ditto.
        * WebProcess/WebPage/WebPage.h: Made private the declaration of canPluginHandleResponse().

2016-10-19  Chris Dumez  <cdumez@apple.com>

        Move HTML Interactive Form Validation behind an experimental flag
        https://bugs.webkit.org/show_bug.cgi?id=163673

        Reviewed by Daniel Bates.

        Move HTML Interactive Form Validation behind an experimental feature flag
        and disable by default until by have a better UI.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2016-10-19  Damian Kaleta  <dkaleta@apple.com>

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

        Reviewed by Brady Eidson.
        
        Added ability to display context menu asynchronously.

        * Shared/API/APIObject.h: Added ContextMenuListener.
        * Shared/API/c/WKBase.h: Added WKContextMenuListenerRef struct.
        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::getContextMenuFromProposedMenuAsync): New method that allows showing context menu asynchronously.
        * UIProcess/API/C/WKAPICast.h: Added a new mapping for WebContextMenuListenerProxy.
        * UIProcess/API/C/WKContextMenuListener.cpp: Added. New class that allow a client to return results asynchronously.
        (WKContextMenuListenerGetTypeID):
        (WKContextMenuListenerUseContextMenuItems):
        * UIProcess/API/C/WKContextMenuListener.h: Added.
        * UIProcess/API/C/WKPage.cpp: Added WKPageContextMenuClientV4.
        (WKPageSetPageContextMenuClient):
        * UIProcess/API/C/WKPageContextMenuClient.h:
        * UIProcess/WebContextMenuListenerProxy.cpp: Copied from Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h.
        (WebKit::WebContextMenuListenerProxy::WebContextMenuListenerProxy):
        (WebKit::WebContextMenuListenerProxy::~WebContextMenuListenerProxy):
        (WebKit::WebContextMenuListenerProxy::useContextMenuItems): Passes items to m_contextMenuMac.
        (WebKit::WebContextMenuListenerProxy::invalidate):
        * UIProcess/WebContextMenuListenerProxy.h: Copied from Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h.
        (WebKit::WebContextMenuListenerProxy::create):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems): Shows context menu.
        (WebKit::WebContextMenuProxyMac::showContextMenu): Extracted some logic to showContextMenuWithItems().
        * WebKit2.xcodeproj/project.pbxproj:

2016-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] [iOS] Disable variation fonts on macOS El Capitan and iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=163374

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2016-10-19  Darin Adler  <darin@apple.com>

        Move XPath from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163656

        Reviewed by Chris Dumez.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp:
        (webkit_dom_document_create_expression): Use ExceptionOr.
        (webkit_dom_document_evaluate): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathExpression.cpp:
        (webkit_dom_xpath_expression_evaluate): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathResult.cpp:
        (webkit_dom_xpath_result_iterate_next): Ditto.
        (webkit_dom_xpath_result_snapshot_item): Ditto.
        (webkit_dom_xpath_result_get_number_value): Ditto.
        (webkit_dom_xpath_result_get_string_value): Ditto.
        (webkit_dom_xpath_result_get_boolean_value): Ditto.
        (webkit_dom_xpath_result_get_single_node_value): Ditto.
        (webkit_dom_xpath_result_get_snapshot_length): Ditto.

2016-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: updatedRequest parameter of NetworkProcess::findPendingDownloadLocation is unused since r206988
        https://bugs.webkit.org/show_bug.cgi?id=163588

        Reviewed by Alex Christensen.

        The parameter was used only for the DownloadProxy::DidStart message that is no longer sent from
        findPendingDownloadLocation since r206988.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::currentRequest): Removed since it's unused now.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::convertTaskToDownload): Update the m_currentRequest and pass it to DidStart message.
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: Remove currentRequest() implementation.

2016-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r207522.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        (webkit_dom_dom_window_webkit_message_handlers_post_message): Use new exceptions.

2016-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r207497.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        (webkit_dom_html_select_element_add): Update implementation since add() now takes a Variant.

2016-10-18  Simon Fraser  <simon.fraser@apple.com>

        Add a MiniBrowser menu item to apply page scale in WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=163627

        Reviewed by Dean Jackson.

        New SPI to set and retrieve page scale.

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

2016-10-18  Dean Jackson  <dino@apple.com>

        Remove CSS_SHAPES feature definition. This should always be on.
        https://bugs.webkit.org/show_bug.cgi?id=163628
        <rdar://problem/28834613>

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2016-10-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207413.

        This change broke iOS builds.

        Reverted changeset:

        "[iOS] Hook up WebPlatformTouchPoint's radiusX / radiusY to
        _UIWebTouchPoint.majorRadiusInScreenCoordinates"
        https://bugs.webkit.org/show_bug.cgi?id=163547
        http://trac.webkit.org/changeset/207413

2016-10-18  Commit Queue  <commit-queue@webkit.org>

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

        "Caused 5% PLT regression" (Requested by krollin on #webkit).

        Reverted changeset:

        "Crash in ASCIICaseInsensitiveHash::hash() when a response has
        a null MIME type"
        https://bugs.webkit.org/show_bug.cgi?id=163476
        http://trac.webkit.org/changeset/207443

2016-10-18  Megan Gardner  <megan_gardner@apple.com>

        Fix build for platforms where HAVE(LINK_PREVIEW) is false
        https://bugs.webkit.org/show_bug.cgi?id=163607

        Reviewed by Tim Horton.

        Added needed # for link preview

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _contentsOfUserInterfaceItem:]):

2016-10-18  Joseph Pecoraro  <pecoraro@apple.com>

        Remote Web Inspector: Timeline UI not updating while recording
        https://bugs.webkit.org/show_bug.cgi?id=163582
        <rdar://problem/28766837>

        Reviewed by Timothy Hatcher.

        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::frontendLoaded):
        Local inspector windows keep the web view alive and toggle the
        WebInspector.visible state depending on whether or not an inspector is
        open. Remote Inspector windows go away when closed, so they can always
        be marked as open. This matches earlier remote inspector behavior.

2016-10-18  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Resolve constraints and enumerate devices in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=162147
        <rdar://problem/28803569>

        Reviewed by Darin Adler.
        
        Restructure gUM constraint validation and MediaDevices.enumerateDevices so all media device
        access happens in the UI process.

        * Scripts/webkit/messages.py:
        (headers_for_type): Special case MediaConstraintsData.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeMediaTrackConstraintSetMap): MediaTrackConstraintSetMap encoder.
        (IPC::ArgumentCoder<MediaConstraintsData>::encode): MediaConstraintsData encoder.
        (IPC::decodeMediaTrackConstraintSetMap): MediaTrackConstraintSetMap decoder.
        (IPC::ArgumentCoder<MediaConstraintsData>::decode): MediaConstraintsData decoder.
        (IPC::ArgumentCoder<CaptureDevice>::encode): CaptureDevice enoder.
        (IPC::ArgumentCoder<CaptureDevice>::decode): CaptureDevice decoder.
        * Shared/WebCoreArgumentCoders.h:

        * UIProcess/API/APIUIClient.h:  Remove UserMediaPermissionCheckProxy forward declaration.

        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp:
        (toWK): Translate UserMediaPermissionRequestDenialReason to UserMediaAccessDenialReason.
        (WKUserMediaPermissionRequestDeny): Add "reason" parameter.
        * UIProcess/API/C/WKUserMediaPermissionRequest.h:

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::invalidateRequests): Invalidate pending device requests.
        (WebKit::UserMediaPermissionRequestManagerProxy::createRequest): Make private.
        (WebKit::toWebCore): Map from UserMediaAccessDenialReason to MediaAccessDenialReason, cast to
          uint64_t to pass to web process.
        (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest): Send to web process.
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Ditto.
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Validate
          constraints and make sure gUM is enabled before prompting user.
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): New.
        (WebKit::UserMediaPermissionRequestManagerProxy::didCompleteUserMediaPermissionCheck): Send 
          results of device enumeration to web process.
        (WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision): Deleted.
        (WebKit::UserMediaPermissionRequestManagerProxy::createUserMediaPermissionCheck): Deleted.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::allow):
        (WebKit::UserMediaPermissionRequestProxy::deny): Take "reason" parameter.
        * UIProcess/UserMediaPermissionRequestProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        (WebKit::WebPageProxy::enumerateMediaDevicesForFrame):
        (WebKit::WebPageProxy::checkUserMediaPermissionForFrame): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest): userMediaAccessDenied -> deny.
          Pass the audio and video constraints to the UI process.
        (WebKit::UserMediaPermissionRequestManager::userMediaAccessWasGranted): 
        (WebKit::UserMediaPermissionRequestManager::userMediaAccessWasDenied):
        (WebKit::UserMediaPermissionRequestManager::enumerateMediaDevices): Send the enumeration request
          to the UI process.
        (WebKit::UserMediaPermissionRequestManager::cancelMediaDevicesEnumeration):
        (WebKit::UserMediaPermissionRequestManager::didCompleteMediaDeviceEnumeration):
        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision): Deleted.
        (WebKit::UserMediaPermissionRequestManager::startUserMediaPermissionCheck): Deleted.
        (WebKit::UserMediaPermissionRequestManager::cancelUserMediaPermissionCheck): Deleted.
        (WebKit::UserMediaPermissionRequestManager::didCompleteUserMediaPermissionCheck): Deleted.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::enumerateMediaDevices): New.
        (WebKit::WebUserMediaClient::cancelMediaDevicesEnumerationRequest): New.
        (WebKit::WebUserMediaClient::checkUserMediaPermission): Deleted.
        (WebKit::WebUserMediaClient::cancelUserMediaPermissionCheck): Deleted.
        * WebProcess/WebCoreSupport/WebUserMediaClient.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::userMediaAccessWasGranted): New.
        (WebKit::WebPage::userMediaAccessWasDenied): Ditto.
        (WebKit::WebPage::didCompleteMediaDeviceEnumeration):
        (WebKit::WebPage::didReceiveUserMediaPermissionDecision): Deleted.
        (WebKit::WebPage::didCompleteUserMediaPermissionCheck): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-10-17  Antti Koivisto  <antti@apple.com>

        Rename setNeedsStyleRecalc to invalidateStyle
        https://bugs.webkit.org/show_bug.cgi?id=163542

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin):
        (WebKit::PluginView::pluginProcessCrashed):

2016-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: PendingDownload is leaked if canceled before willDecidePendingDownloadDestination
        https://bugs.webkit.org/show_bug.cgi?id=163545

        Reviewed by Alex Christensen.

        If a download started by DownloadManager::startDownload() is cancelled before
        DownloadManager::willDecidePendingDownloadDestination() is called, DownloadManager::cancelDownload() does
        nothing, because the Download hasn't been created yet and m_downloadsWaitingForDestination map doesn't contain
        the download ID, and the PendingDownload is never removed from the m_pendingDownloads map.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::cancelDownload): Always take the PendingDownload from m_pendingDownloads map. Then, if
        the download was already in m_downloadsWaitingForDestination map, get the network data task to properly cancel
        it and then call the completion handler to ignore the request. Otherwise cancel the pending download if exists.
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::cancel): Cancel the network load and notify the UI process that the download was canceled.
        * NetworkProcess/Downloads/PendingDownload.h:

2016-10-17  Megan Gardner  <megan_gardner@apple.com>

        Add test and infrastructure for link popover
        https://bugs.webkit.org/show_bug.cgi?id=163406

        Reviewed by Simon Fraser.

        Add infrastructure to see when a link popover appears, and what URL it has loaded.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView didShowForcePressPreview]):
        (-[WKWebView didDismissForcePressPreview]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _contentsOfUserInterfaceItem:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        (-[WKContentView _previewItemController:didDismissPreview:committing:]):
        (-[WKContentView _previewItemControllerDidCancelPreview:]):

2016-10-17  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r169805): WKWebView canGoBack returning YES when nothing is in the back-forward list after restoring session state
        https://bugs.webkit.org/show_bug.cgi?id=163573
        <rdar://problem/28744549>

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::restoreFromSessionState):
        Update PageLoadState's canGoBack/canGoForward bits when restoring from
        session state, because in the don't-navigate case, nothing else will make this happen,
        and it will remain stale.

2016-10-17  Andy Estes  <aestes@apple.com>

        Crash in ASCIICaseInsensitiveHash::hash() when a response has a null MIME type
        https://bugs.webkit.org/show_bug.cgi?id=163476
        <rdar://problem/26941395>

        Reviewed by Tim Horton.

        When custom content providers are registered and a response has a null MIME type, WebPage
        will pass a null String to HashSet::contains(). This results in a null pointer dereference,
        since the String hash functions do not support null Strings and unconditionally dereference
        their StringImpls. Fixed by checking that Strings are non-null before calling
        HashSet::contains() on m_mimeTypesWithCustomContentProviders.

        Rearranging WebPage::shouldUseCustomContentProviderForResponse() to call
        canPluginHandleResponse() before checking m_mimeTypesWithCustomContentProviders uncovered a
        crash in existing layout tests where WebPage::m_mainFrame can be NULL during WebPage
        construction (m_mainFrame isn't yet initialized). Fixed this by passing the main Frame to
        canPluginHandleResponseInFrame() instead of relying on m_mainFrame.

        New API test: WebKit2.LoadDataWithNilMIMEType.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame): Passed
        m_frame->coreFrame() to shouldUseCustomContentProviderForResponse().
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canPluginHandleResponse): Added a mainFrame parameter and used it instead
        of m_mainFrame->coreFrame().
        (WebKit::WebPage::shouldUseCustomContentProviderForResponse): Passed mainFrame to
        canPluginHandleResponse(), and checked if mimeType is null before calling
        m_mimeTypesWithCustomContentProviders.contains().
        (WebKit::WebPage::canShowMIMEType): Checked if MIMEType is null before calling
        m_mimeTypesWithCustomContentProviders.contains().
        * WebProcess/WebPage/WebPage.h: Made canPluginHandleResponse() a private declaration.

2016-10-17  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] PendingFrameLoad objects are sometimes leaked
        https://bugs.webkit.org/show_bug.cgi?id=163569
        <rdar://problem/28810836>

        Reviewed by Antti Koivisto.

        PendingFrameLoad objects are created to track frame loads and added to
        the m_pendingFrameLoads hash map. These objects are supposed to remove
        themselves from the hash map once they detect that the page load has
        finished by calling PendingFrameLoad::m_loadCompletionHandler().

        PendingFrameLoad::m_loadCompletionHandler() is called from
        markLoadAsCompleted() when we detect that the page load has finished
        via the m_loadHysteresisActivity HysteresisActivity. We call impulse()
        on the HysteresisActivity every time a subresource is loaded in the
        frame. The issue is that if no subresource is ever loaded, then we
        never call impulse() on the HysteresisActivity, which is therefore
        never started. If it nevers starts, then it nevers stops and never
        calls markLoadAsCompleted(). To address the problem, we now call
        impulse() on the HysteresisActivity as soon as we construct it.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:

2016-10-17  Jeremy Jones  <jeremyj@apple.com>

        Enable keyboard in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=163146

        Reviewed by Jer Noble.

        Allow keyboard in fullscreen.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):

2016-10-17  Chris Dumez  <cdumez@apple.com>

        Move form.reportValidity() behind InteractiveFormValidation setting
        https://bugs.webkit.org/show_bug.cgi?id=163550

        Reviewed by Darin Adler.

        Enable InteractiveFormValidation setting by default and link it to
        RuntimeEnabledFeatures so we can use it in the IDL.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-10-17  Gavin Barraclough  <barraclough@apple.com>

        UIProcess should determine throttle state for WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=163556

        Reviewed by Anders Carlsson.

        This is a step towards merging page/process throttling code for mac & iOS.

        Previously WebPage determined whether to start a UserActivity based on page activity,
        visibility and the preference to disable. Now WebPage passes the activity state across
        to WebPageProxy, which makes the decision & explicitly instructs WebPage to start/stop
        the UserActivity.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
            - updateActivityToken + updateProccessSuppressionState -> updateThrottleState
        (WebKit::WebPageProxy::reattachToWebProcess):
            - updateActivityToken -> updateThrottleState
        (WebKit::WebPageProxy::dispatchViewStateChange):
            - updateActivityToken -> updateThrottleState
        (WebKit::WebPageProxy::setPageActivityState):
            - Record activity state passed from WebPage, and update.
        (WebKit::WebPageProxy::preferencesDidChange):
            - updateProccessSuppressionState -> updateThrottleState
        (WebKit::WebPageProxy::updateActivityToken): Deleted.
        (WebKit::WebPageProxy::updateProccessSuppressionState): Deleted.
        (WebKit::WebPageProxy::updateThrottleState):
            - Merged existing updateActivityToken/updateProccessSuppressionState to unified updateThrottleState.
            - Compute whether page should be suppressed, and send SetPageSuppressed message accordingly.
        * UIProcess/WebPageProxy.h:
            - Merged existing updateActivityToken/updateProccessSuppressionState to unified updateThrottleState.
            - Added setPageActivityState/m_activityState to report/record page activity.
            - Added m_pageSuppressed to prevent redundant message sends.
        * UIProcess/WebPageProxy.messages.in:
            - Expose SetPageActivityState message (called by WebPage).
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
            - removed m_processSuppressionEnabled
            - updateUserActivity -> setPageSuppressed - explicitly set the page to not be suppressed, until WebPageProxy tells us to do so.
        (WebKit::WebPage::setPageActivityState):
            - post activity state on to WebPageProxy.
        (WebKit::WebPage::setPageSuppressed):
            - Start/stop USerActivity accordingly.
        (WebKit::WebPage::setViewState):
            - No longer need to monitor ViewState changes on the WebProcess side.
        (WebKit::WebPage::updatePreferences):
            - No longer need to monitor preference changes on the WebProcess side.
        (WebKit::WebPage::updateUserActivity): Deleted.
            - Only updated on reciept of setPageSuppressed message.
        * WebProcess/WebPage/WebPage.h:
            - Removed m_activityState, m_processSuppressionEnabled, updateUserActivity.
            - Added setPageSuppressed message.
        * WebProcess/WebPage/WebPage.messages.in:
            - Added SetPageSuppressed message.

2016-10-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r206189): logs error statements when API::URLRequest is canceled
        https://bugs.webkit.org/show_bug.cgi?id=163393

        Reviewed by Antti Koivisto.

        Print this case at normal logging level, not as an error.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):

2016-10-17  Chris Dumez  <cdumez@apple.com>

        [iOS] Hook up WebPlatformTouchPoint's radiusX / radiusY to _UIWebTouchPoint.majorRadiusInScreenCoordinates
        https://bugs.webkit.org/show_bug.cgi?id=163547

        Reviewed by Darin Adler.

        Hook up WebPlatformTouchPoint's radiusX / radiusY to _UIWebTouchPoint.majorRadiusInScreenCoordinates
        now that it is available in UIKit.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::extractWebTouchPoint):

2016-10-17  Konstantin Tokarev  <annulen@yandex.ru>

        Eleminate code duplication between ResourceRequest encoding/decoding implementations
        https://bugs.webkit.org/show_bug.cgi?id=163507

        Reviewed by Carlos Garcia Campos.

        ResourceRequestBase::encodeWithoutPlatformData() and Soup implementation of
        ArgumentCoder<ResourceRequest>::encodePlatformData() share most of the code,
        ditto for decoding implementations.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):

2016-10-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Move user agent quirks to cross-platform location
        https://bugs.webkit.org/show_bug.cgi?id=163508

        Reviewed by Carlos Garcia Campos.

        #include <WebCore/UserAgent.h> instead of <WebCore/UserAgentGtk.h>.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        * UIProcess/efl/WebPageProxyEfl.cpp:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:

2016-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Downloads should always sniff contents
        https://bugs.webkit.org/show_bug.cgi?id=163538

        Reviewed by Michael Catanzaro.

        It's quite common that downloads have weird filenames with no extension, so it would be better if the loader
        sniff the contents to guess the mime type.

        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::startNetworkLoad): Pass true for shouldContentSniff parameter of ResourceHandle::create().

2016-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use API::DownloadClient instead of the C API client
        https://bugs.webkit.org/show_bug.cgi?id=163537

        Reviewed by Michael Catanzaro.

        The code is simpler and we avoid all the toImpl/toAPI.

        * UIProcess/API/gtk/WebKitDownloadClient.cpp:
        (attachDownloadClientToContext):
        (didStart):
        (didReceiveResponse):
        (didReceiveData):
        (decideDestinationWithSuggestedFilename):
        (didCreateDestination):
        (didFail):
        (didCancel):
        (didFinish):

2016-10-17  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Disable CSS Grid Layout runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=163432

        Reviewed by Darin Adler.

        It was enabled in r201042, but now Safari Technology Preview
        has a UI to switch runtime flags so it doesn't need to be enabled
        by default anymore.

        * Shared/WebPreferencesDefinitions.h: Disable grid layout runtime flag
        by default.

2016-10-16  Darin Adler  <darin@apple.com>

        Move CSS classes from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163494

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRule.cpp:
        (webkit_dom_css_rule_set_css_text): Updated for ExceptionOr.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleDeclaration.cpp:
        (webkit_dom_css_style_declaration_remove_property): Ditto.
        (webkit_dom_css_style_declaration_set_property): Ditto.
        (webkit_dom_css_style_declaration_set_css_text): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleSheet.cpp:
        (webkit_dom_css_style_sheet_insert_rule): Ditto.
        (webkit_dom_css_style_sheet_delete_rule): Ditto.
        (webkit_dom_css_style_sheet_add_rule): Ditto.
        (webkit_dom_css_style_sheet_remove_rule): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValue.cpp:
        (webkit_dom_css_value_set_css_text): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaList.cpp:
        (webkit_dom_media_list_delete_medium): Ditto.
        (webkit_dom_media_list_append_medium): Ditto.
        (webkit_dom_media_list_set_media_text): Ditto.

2016-10-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Default WebKitWebsiteDataManager is always leaked in WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=163443

        Reviewed by Michael Catanzaro.

        Adopt the reference returned by webkitWebsiteDataManagerCreate().

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):

2016-10-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebPage URI not updated after URI is modified by InjectedBundlePageResourceLoadClient::willSendRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=163389

        Reviewed by Michael Catanzaro.

        Update the page URI also when the load is committed.

        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (getDocumentLoaderURL):
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didCommitLoadForFrame):
        (webkitWebPageCreate):
        (getProvisionalURLForFrame): Deleted.

2016-10-15  Simon Fraser  <simon.fraser@apple.com>

        Sort the project file.

        * WebKit2.xcodeproj/project.pbxproj:

2016-10-14  Anders Carlsson  <andersca@apple.com>

        Fix Mac build.

        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):

2016-10-14  Anders Carlsson  <andersca@apple.com>

        Pass on networking settings to the PKPaymentRequest
        https://bugs.webkit.org/show_bug.cgi?id=163462
        rdar://problem/28567629

        Reviewed by Dan Bernstein.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKPaymentRequest):
        * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):

2016-10-14  Anders Carlsson  <andersca@apple.com>

        Clean up BackForwardClient
        https://bugs.webkit.org/show_bug.cgi?id=163454

        Reviewed by Sam Weinig.

        Remove empty iOS only stubs.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        * WebProcess/WebPage/ios/WebBackForwardListProxyIOS.mm: Removed.

2016-10-14  Brady Eidson  <beidson@apple.com>

        Enable Gamepads by default in WK2.
        https://bugs.webkit.org/show_bug.cgi?id=163447

        Rubberstamped by Sam Weinig.

        * Shared/WebPreferencesDefinitions.h:

2016-10-14  Gavin Barraclough  <barraclough@apple.com>

        Add API to restrict WebKit processes to background priority
        https://bugs.webkit.org/show_bug.cgi?id=163363

        Reviewed by Anders Carlson.

        Add API on _WKProcessPoolConfiguration to flag a process pool as 'alwaysRunsAtBackgroundPriority'.
        WebContent and Networking processes associated with that pool will only run a background priority,
        when they otherwise would have run at foreground priority.

        * UIProcess/API/APIProcessPoolConfiguration.h:
            - Add m_alwaysRunsAtBackgroundPriority flag to pool configuration object.
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration alwaysRunsAtBackgroundPriority]):
        (-[_WKProcessPoolConfiguration setAlwaysRunsAtBackgroundPriority:]):
            - Expose new configuration property through API.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::alwaysRunsAtBackgroundPriority):
        * UIProcess/Network/NetworkProcessProxy.h:
            - Support ProcessThrottlerClient interface to check if alwaysRunsAtBackgroundPriority is set.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::assertionState):
            - When determining whether to take a foreground exception check alwaysRunsAtBackgroundPriority.
        * UIProcess/ProcessThrottlerClient.h:
            - Add interface to access alwaysRunsAtBackgroundPriority state of WebProcess of NetworkProcess.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        * UIProcess/WebProcessPool.h:
            - Add m_alwaysRunsAtBackgroundPriority, set by configuration.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::alwaysRunsAtBackgroundPriority):
        * UIProcess/WebProcessProxy.h:
            - Support ProcessThrottlerClient interface to check if alwaysRunsAtBackgroundPriority is set.

2016-10-14  Youenn Fablet  <youenn@apple.com>

        Make NetworkCache aware of fetch cache mode
        https://bugs.webkit.org/show_bug.cgi?id=163332

        Reviewed by Antti Koivisto.

        Adding explicit serialization of ResourceRequest cachePolicy since it does no longer map to platform request cache policy.

        Added support for:
        - Bypassing entirely the network cache in case cache mode is NoStore.
        - requiring revalidation in case of cache hit and cache mode is NoCache.
        - Not using any entry if cache mode is Reload (but cache can still be updated)

        Also made sure that the ResourceRequest::cachePolicy remains the same throughout redirections.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::canUseCache):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::cachePolicyAllowsExpired):
        (WebKit::NetworkCache::makeRetrieveDecision):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):

2016-10-13  Tim Horton  <timothy_horton@apple.com>

        Rename the SPI added in r207292 due to post-landing review comments
        https://bugs.webkit.org/show_bug.cgi?id=163364
        <rdar://problem/28012494>

        Reviewed by Simon Fraser.

        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::waitsForPaintAfterViewDidMoveToWindow):
        (API::PageConfiguration::setWaitsForPaintAfterViewDidMoveToWindow):
        (API::PageConfiguration::shouldWaitForPaintAfterViewDidMoveToWindow): Deleted.
        (API::PageConfiguration::setShouldWaitForPaintAfterViewDidMoveToWindow): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _waitsForPaintAfterViewDidMoveToWindow]):
        (-[WKWebViewConfiguration _setWaitsForPaintAfterViewDidMoveToWindow:]):
        (-[WKWebViewConfiguration _shouldWaitForPaintAfterViewDidMoveToWindow]): Deleted.
        (-[WKWebViewConfiguration _setShouldWaitForPaintAfterViewDidMoveToWindow:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::dispatchViewStateChange):
        * UIProcess/WebPageProxy.h:

2016-10-13  Jonathan Bedard  <jbedard@apple.com>

        GTK and EFL on Mac fail to compile WebTextChecker due to missing definition of WKTextCheckerClientBase
        https://bugs.webkit.org/show_bug.cgi?id=163346

        Reviewed by Daniel Bates.

        * UIProcess/API/C/WKTextChecker.cpp: Fixed #ifdefs for GTK and EFL builds on Darwin machines.
        * UIProcess/API/C/WKTextChecker.h: Ditto.

2016-10-13  Tim Horton  <timothy_horton@apple.com>

        Expose SPI to disable synchronously blocking on painting after parenting a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=163364
        <rdar://problem/28012494>

        Reviewed by Geoff Garen.

        Some clients may not want the default WKWebView behavior where we synchronously
        block on the Web process after the first time a WKWebView is re-added to the window,
        because they are e.g. parenting re-used WKWebViews while scrolling.

        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::shouldSynchronizeInitialPaintAfterMovingToWindow):
        (API::PageConfiguration::setShouldSynchronizeInitialPaintAfterMovingToWindow):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _shouldSynchronizeInitialPaintAfterMovingToWindow]):
        (-[WKWebViewConfiguration _setShouldSynchronizeInitialPaintAfterMovingToWindow:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Add and plumb a new WKWebView configuration parameter.

        (WebKit::WebPageProxy::dispatchViewStateChange):
        If the new configuration parameter is set, don't block the main thread when
        a view is reparented.

2016-10-12  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Drop support for legacy [ConstructorConditional=*]
        https://bugs.webkit.org/show_bug.cgi?id=163368

        Reviewed by Ryosuke Niwa.

        Drop ENABLE_DOM4_EVENTS_CONSTRUCTOR compiler flag.

        * Configurations/FeatureDefines.xcconfig:

2016-10-12  Alex Christensen  <achristensen@webkit.org>

        Fix assertion after switching to URLParser
        https://bugs.webkit.org/show_bug.cgi?id=163350
        rdar://problem/28739938

        Reviewed by Brady Eidson.
        
        Covered by a new API test.

        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]):
        The { } here is not understood by the compiler to mean WebCore::URL(), but rather the empty constructor for the enum ParsedURLStringTag.
        We used to be unsafely trusting that the URL was valid and canonicalized, but with URLParser we are canonicalizing it,
        and the assertion (url == m_string) in URL.cpp was failing.

2016-10-12  Anders Carlsson  <andersca@apple.com>

        Remove an unused function
        https://bugs.webkit.org/show_bug.cgi?id=163341

        Reviewed by Dan Bernstein.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::isActive): Deleted.
        * WebProcess/WebPage/WebBackForwardListProxy.h:

2016-10-11  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        [EFL] Update API tests which are passed or failed
        https://bugs.webkit.org/show_bug.cgi?id=163322

        Unreviewed, simple on/off API test.

        *ewk_favicon_database_clear* has been crashed for a long time, however
        *ewk_cookie_manager_permanent_storage* is fine now. So the passing test
        is enabled again, and disable the failure tests.

        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
        (TEST_F):

2016-10-11  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Internal Mac build following r207159
        (https://bugs.webkit.org/show_bug.cgi?id=163244)

        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldRequireUserGestureToLoadVideo):

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

        Clean up WebPageGroup somewhat
        https://bugs.webkit.org/show_bug.cgi?id=163299

        Reviewed by Tim Horton.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPageGroupCopyIdentifier):
        Move this here from WKPageGroup.

        (WKPageGroupAddUserContentFilter):
        (WKPageGroupRemoveUserContentFilter):
        (WKPageGroupRemoveAllUserContentFilters):
        Just call directly into the user content controller.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserStyleSheet):
        (WKPageGroupRemoveAllUserStyleSheets):
        (WKPageGroupAddUserScript):
        (WKPageGroupRemoveAllUserScripts):
        Just call directly into the user content controller.

        * UIProcess/API/C/WKPageGroup.h:
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::addUserStyleSheet): Deleted.
        (WebKit::WebPageGroup::addUserScript): Deleted.
        (WebKit::WebPageGroup::removeAllUserStyleSheets): Deleted.
        (WebKit::WebPageGroup::removeAllUserScripts): Deleted.
        (WebKit::WebPageGroup::removeAllUserContent): Deleted.
        (WebKit::WebPageGroup::addUserContentExtension): Deleted.
        (WebKit::WebPageGroup::removeUserContentExtension): Deleted.
        (WebKit::WebPageGroup::removeAllUserContentExtensions): Deleted.
        Get rid of these, all their callers just call into the user content controller now.

        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::identifier): Deleted.
        (WebKit::WebPageGroup::sendToAllProcessesInGroup): Deleted.
        Remove unused code.

2016-10-11  Daniel Bates  <dabates@apple.com>

        [iOS] REGRESSION (r197953): User gesture required to load video in iOS 9-built apps
        https://bugs.webkit.org/show_bug.cgi?id=163244
        <rdar://problem/27250015>

        Reviewed by Jer Noble.

        Enable or disable the Setting::requiresUserGestureToLoadVideo() in WebKit depending on the
        version of iOS SDK that the app was linked against. We require a user gesture to begin
        loading a video as of iOS 10.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldRequireUserGestureToLoadVideo): Added.
        (-[WKWebView _initializeWithConfiguration:]): Set the requiresUserGestureToLoadVideo preference.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Modified to pass the WebKit requiresUserGestureToLoadVideo
        preference to WebCore.

2016-10-11  Alex Christensen  <achristensen@webkit.org>

        Remove dead networking code
        https://bugs.webkit.org/show_bug.cgi?id=163263

        Reviewed by Daniel Bates.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/ios/DownloadIOS.mm: Removed.
        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/mac/NetworkLoadMac.mm:
        (WebKit::NetworkLoad::willCacheResponseAsync): Deleted.
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::receivedCredential):
        (WebKit::AuthenticationManager::receivedRequestToContinueWithoutCredential):
        (WebKit::AuthenticationManager::receivedCancellation):
        (WebKit::AuthenticationManager::receivedRequestToPerformDefaultHandling):
        (WebKit::AuthenticationManager::receivedChallengeRejection):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):
        * WebKit2.xcodeproj/project.pbxproj:

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

        Move no longer used functions to WKDeprecatedFunctions.cpp
        https://bugs.webkit.org/show_bug.cgi?id=163290

        Reviewed by Dan Bernstein.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPageGroupAddUserContentFilter):
        (WKPageGroupRemoveUserContentFilter):
        (WKPageGroupRemoveAllUserContentFilters):
        (WKContextSetProcessModel): Deleted.
        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupRemoveAllUserScripts):
        (WKPageGroupAddUserContentFilter): Deleted.
        (WKPageGroupRemoveUserContentFilter): Deleted.
        (WKPageGroupRemoveAllUserContentFilters): Deleted.
        * UIProcess/API/C/WKPageGroup.h:

2016-10-11  Konstantin Tokarev  <annulen@yandex.ru>

        Use modern for loops for iterating supplement maps
        https://bugs.webkit.org/show_bug.cgi?id=163274

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::initializeConnection):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):
        (WebKit::WebProcessPool::networkProcessCrashed):
        (WebKit::WebProcessPool::databaseProcessCrashed): Iterate by values()
        like in other places.

2016-10-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        The "Input Events" experimental feature runtime flag should not be on by default
        https://bugs.webkit.org/show_bug.cgi?id=163278

        Reviewed by Zalan Bujtas.

        This was intended to be off by default.

        * Shared/WebPreferencesDefinitions.h:

2016-10-10  Zan Dobersek  <zdobersek@igalia.com>

        Add ENABLE_ENCRYPTED_MEDIA configuration option
        https://bugs.webkit.org/show_bug.cgi?id=163219

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        Add the ENABLE_ENCRYPTED_MEDIA configuration option. It will be used
        to enable or disable the new EME implementation at build-time.

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

        NetworkSession: NetworkDataTask is leaked if download finishes in didReceiveResponse completion handler
        https://bugs.webkit.org/show_bug.cgi?id=163204

        Reviewed by Alex Christensen.

        After the completion handler a reference of the NetworkDataTask is saved in m_downloadsAfterDestinationDecided.
        If the download failed or was canceled DownloadManager::dataTaskBecameDownloadTask is never called and the data
        task is kept in the download manager forever. This patch exposes NSURLSessionTask state property in
        NetworkDataTask, so that the download manager can check the task state after the completion handler and return
        early if the download finished or was cancelled.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::state):

2016-10-10  Konstantin Tokarev  <annulen@yandex.ru>

        Added final specifier to WebInspectorServer and to its overridden methods
        https://bugs.webkit.org/show_bug.cgi?id=163228

        Reviewed by Darin Adler.

        * UIProcess/InspectorServer/WebInspectorServer.h:

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

        [GTK] 2.14.0 Compile Errors: GTK 3.22.1
        https://bugs.webkit.org/show_bug.cgi?id=163190

        Reviewed by Alex Christensen.

        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp: Include gtk.h since we are using gtk_widget_queue_draw().

2016-10-10  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        [EFL] ewk_context_preferred_languages has been failed since r206949
        https://bugs.webkit.org/show_bug.cgi?id=163211

        Reviewed by Chris Dumez.

        r206949 changed to return value of navigator.language from en-us to en-US
        in order to match other browsers and w3c spec. So ewk_context_preferred_languages
        needs to change the expected result as well.

        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):

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

        NetworkSession: downloads started by startDownload() can fail before starting from the API point of view
        https://bugs.webkit.org/show_bug.cgi?id=163107

        Reviewed by Alex Christensen.

        In the network process we use a PendingDownload in this case, but in the UI process we always have a single
        download proxy. If an error happens before the pending download is converted inot a real download, the DidFail
        messages is received in the download proxy before the DidStart one. This is problematic at least for the GTK+
        API, because it's common to connect to the started signal and connect to all other signals from there, but in
        this case the started signal is never emitted, and then the failed one is not handled. This is not a problem for
        downloads started by convertTaskToDownload, because in that case those loads are not considered a download by
        the UI process when those early errors happen, and then the web page handles them.

        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload): Send DidStart message right after the network load starts like the
        non network session code does.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::convertTaskToDownload): Send DidStart message now that the normal load has been converted
        into a download.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::findPendingDownloadLocation): Do not send DidStart message here.

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

        Network Session: PendingDownload is always nullptr in DownloadManager::dataTaskBecameDownloadTask
        https://bugs.webkit.org/show_bug.cgi?id=163006

        Reviewed by Alex Christensen.

        In DownloadManager::dataTaskBecameDownloadTask() we are supposed to have either a pending download, or a network
        data task depending on whether the download was started by startDownload() or convertTaskToDownload. However, in
        both cases we do have a data task and never a pending download. In the case of startDownload() the pending
        download is removed from m_pendingDownloads in willDecidePendingDownloadDestination(). The task is always
        added to m_downloadsWaitingForDestination in willDecidePendingDownloadDestination() and to
        m_downloadsAfterDestinationDecided in continueDecidePendingDownloadDestination() in both cases.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::dataTaskBecameDownloadTask): Add an ASSERT to ensure we don't have a pending download
        at this point and that the download is not already in the map. Remove the download from the
        m_downloadsAfterDestinationDecided map, but don't check its result because it might not bein that map if
        dataTaskBecameDownloadTask is called synchronously from the didReceiveResponse completion handler.
        (WebKit::DownloadManager::willDecidePendingDownloadDestination): Do not take the pending download here, wait
        until didReceiveResponse completion handler is called.
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination): Take the pending download here ensuring
        it's alive while the didReceiveResponse completion handler is called. Also remove invalid early return when
        either networkDataTask or completionHandler are nullptr because we are using both unconditionally, we should
        return early if both are nullptr to avoid crashes. However, we are checking that the download is in the
        m_downloadsWaitingForDestination and in that case we should always have both, so better add asserts there. If
        the download is already in the map after the completion handler it means that dataTaskBecameDownloadTask() has
        alrady been called, so we can just return in that case.
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]): Protect the NetworkDataTask that can
        be deleted by dataTaskBecameDownloadTask().

2016-10-10  Tim Horton  <timothy_horton@apple.com>

        Share more code between iOS and macOS ViewGestureController
        https://bugs.webkit.org/show_bug.cgi?id=163158

        Reviewed by Simon Fraser.

        Share canSwipeInDirection() and the (unused on Mac) alternate back-forward list mechanism.
        Make ViewGestureController operate in terms of WebPageProxy, not WKWebView,
        because it shouldn't know anything about WKWebView.
        Refactor scrollEventCanBecomeSwipe a bit to be less repetitive.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::setAlternateBackForwardListSourcePage):
        (WebKit::ViewGestureController::canSwipeInDirection):
        (WebKit::ViewGestureController::gestureControllerForPage): Deleted.
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::createWeakPtr):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::setAlternateBackForwardListSourceView): Deleted.
        (WebKit::ViewGestureController::canSwipeInDirection): Deleted.
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::PendingSwipeTracker::PendingSwipeTracker):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanBecomeSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::tryToStartSwipe):

2016-10-10  Tomas Popela  <tpopela@redhat.com>

        [GTK] UIProcess crashes when using Japanese IM
        https://bugs.webkit.org/show_bug.cgi?id=163011

        We have to reference the current GdkEventKey before we try process it
        as later when the lambda body is reached the event could be already
        freed.

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseKeyReleaseEvent):
        * UIProcess/gtk/InputMethodFilter.h:
        Use non-copyable Function so we can use WTFMove to pass the event to
        lambda.

2016-10-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support InputEvent.inputType for the new InputEvent spec
        https://bugs.webkit.org/show_bug.cgi?id=163025
        <rdar://problem/28658092>

        Reviewed by Darin Adler.

        Accounts for some changes to the EditAction enum in nameForEditAction. Some former edit
        actions, such as EditActionTyping, have been split out into its more specific subtypes,
        so we preserve shipping behavior by treating all of the new subtypes the same way as the
        original type.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):

2016-10-08  Emanuele Aina  <emanuele.aina@collabora.com>

        [GTK] Drop redundant wl_display_flush_clients() call
        https://bugs.webkit.org/show_bug.cgi?id=161904

        Reviewed by Michael Catanzaro.

        The Wayland GSource::prepare() function already calls
        wl_display_flush_clients() at every mainloop iteration, so there's no
        need to further call it on Surface::commit().

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::Surface::commit):
        * UIProcess/gtk/WaylandCompositor.h:

2016-10-06  Darin Adler  <darin@apple.com>

        Next step on moving to modern way to return DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163016

        Reviewed by Ryosuke Niwa.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMImplementation.cpp:
        (webkit_dom_dom_implementation_create_document_type): Updated for name change
        from takeReturnValue to releaseReturnValue.
        (webkit_dom_dom_implementation_create_document): Ditto.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelection.cpp:
        (webkit_dom_dom_selection_collapse_to_end): Use ExceptionOr instead of ExceptionCode.
        (webkit_dom_dom_selection_collapse_to_start): Ditto.
        (webkit_dom_dom_selection_extend): Ditto.
        (webkit_dom_dom_selection_get_range_at): Ditto.

2016-10-08  Commit Queue  <commit-queue@webkit.org>

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

        broke an API test (Requested by thorton on #webkit).

        Reverted changeset:

        "Share more code between iOS and macOS ViewGestureController"
        https://bugs.webkit.org/show_bug.cgi?id=163158
        http://trac.webkit.org/changeset/206950

2016-10-08  Tim Horton  <timothy_horton@apple.com>

        Share more code between iOS and macOS ViewGestureController
        https://bugs.webkit.org/show_bug.cgi?id=163158

        Reviewed by Simon Fraser.

        Share canSwipeInDirection() and the (unused on Mac) alternate back-forward list mechanism.
        Make ViewGestureController operate in terms of WebPageProxy, not WKWebView,
        because it shouldn't know anything about WKWebView.
        Refactor scrollEventCanBecomeSwipe a bit to be less repetitive.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::setAlternateBackForwardListSourcePage):
        (WebKit::ViewGestureController::canSwipeInDirection):
        (WebKit::ViewGestureController::gestureControllerForPage): Deleted.
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::createWeakPtr):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::setAlternateBackForwardListSourceView): Deleted.
        (WebKit::ViewGestureController::canSwipeInDirection): Deleted.
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::PendingSwipeTracker::PendingSwipeTracker):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanBecomeSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::tryToStartSwipe):

2016-10-07  Anders Carlsson  <andersca@apple.com>

        Get rid of API::Session and WKSessionRef
        https://bugs.webkit.org/show_bug.cgi?id=163140

        Reviewed by Tim Horton.

        This API is no longer used.

        * CMakeLists.txt:
        * Shared/API/APIObject.h:
        * Shared/API/c/WKSharedAPICast.h:
        * UIProcess/API/APISession.cpp: Removed.
        (API::generateID): Deleted.
        (API::Session::defaultSession): Deleted.
        (API::Session::Session): Deleted.
        (API::Session::createEphemeral): Deleted.
        (API::Session::isEphemeral): Deleted.
        (API::Session::getID): Deleted.
        (API::Session::~Session): Deleted.
        * UIProcess/API/APISession.h: Removed.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKSessionRef.cpp: Removed.
        (WKSessionCreate): Deleted.
        (WKSessionGetTypeID): Deleted.
        (WKSessionIsEphemeral): Deleted.
        * UIProcess/API/C/WKSessionRef.h: Removed.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:

2016-10-07  Tim Horton  <timothy_horton@apple.com>

        Move ViewGestureController files to more accurate locations
        https://bugs.webkit.org/show_bug.cgi?id=163141

        Reviewed by Anders Carlsson.

        * PlatformMac.cmake:
        * UIProcess/Cocoa/ViewGestureController.cpp: Renamed from UIProcess/ViewGestureController.cpp.
        * UIProcess/Cocoa/ViewGestureController.h: Renamed from UIProcess/mac/ViewGestureController.h.
        * UIProcess/Cocoa/ViewGestureController.messages.in: Renamed from UIProcess/mac/ViewGestureController.messages.in.
        * WebKit2.xcodeproj/project.pbxproj:

2016-10-07  Tim Horton  <timothy_horton@apple.com>

        Adopt BlockPtr in ViewGestureController
        https://bugs.webkit.org/show_bug.cgi?id=163132

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setDidMoveSwipeSnapshotCallback):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::stopWaitingForEvent):
        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::setDidMoveSwipeSnapshotCallback):
        (WebKit::ViewGestureController::m_didMoveSwipeSnapshotCallback): Deleted.
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::platformTeardown):
        (WebKit::ViewGestureController::setDidMoveSwipeSnapshotCallback): Deleted.

2016-10-07  Anders Carlsson  <andersca@apple.com>

        Get rid of WKPageSetSession
        https://bugs.webkit.org/show_bug.cgi?id=163129

        Reviewed by Tim Horton.

        This function is no longer used.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetSession): Deleted.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setSessionID): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::sessionID):
        * WebProcess/WebPage/WebPage.messages.in:

2016-10-07  Commit Queue  <commit-queue@webkit.org>

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

        Caused most of  GTK layout tests to crash (Requested by KaL on
        #webkit).

        Reverted changeset:

        "[GTK] UIProcess crashes when using Japanese IM"
        https://bugs.webkit.org/show_bug.cgi?id=163011
        http://trac.webkit.org/changeset/206909

2016-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Network Session: Allow NetworkDataTask decide what to do when override is allowed for a download
        https://bugs.webkit.org/show_bug.cgi?id=163010

        Reviewed by Alex Christensen.

        Current code always deletes the file before starting a download when allow override is True. In soup backend we
        use glib API that takes care of it and tries to ensure that the original file is not deleted if the new file
        creation fails for whatever reason.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination): Pass allowOverride to setPendingDownloadLocation().
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::setPendingDownloadLocation): Delete the destination file if exists and allowOverride
        is True.

2016-10-07  Tomas Popela  <tpopela@redhat.com>

        [GTK] UIProcess crashes when using Japanese IM
        https://bugs.webkit.org/show_bug.cgi?id=163011

        We have to reference the current GdkEventKey before we try process it
        as later when the lambda body is reached the event could be already
        freed.

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseKeyReleaseEvent):
        * UIProcess/gtk/InputMethodFilter.h:
        Use non-copyable Function so we can use WTFMove to pass the event to
        lambda.

2016-10-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Expose WebKitDOMHTMLInputElement APIs for form autofill
        https://bugs.webkit.org/show_bug.cgi?id=163082

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        (webkit_dom_html_input_element_get_auto_filled): Added.
        (webkit_dom_html_input_element_set_auto_filled): Added.
        (webkit_dom_html_input_element_set_editing_value): Added.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/docs/webkitdomgtk-4.0-sections.txt:

2016-10-06  John Wilander  <wilander@apple.com>

        Update Resource Load Statistics
        https://bugs.webkit.org/show_bug.cgi?id=162811

        Reviewed by Alex Christensen.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasPrevalentResourceCharacteristics):
            Switched to vector-based classification.
        (WebKit::WebResourceLoadStatisticsStore::classifyResource):
            Simplified logic and moved the split between has and has
            no user interaction into ResourceLoadStatisticsStore.
        (WebKit::WebResourceLoadStatisticsStore::clearDataRecords):
            Added.
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
            Updated to make use of the new functions.
        (WebKit::WebResourceLoadStatisticsStore::persistentStoragePath):
            Removed stray whitespace.
        (WebKit::WebResourceLoadStatisticsStore::writeEncoderToDisk):
            Removed stray whitespace.
        (WebKit::WebResourceLoadStatisticsStore::createDecoderFromDisk):
            Removed stray whitespace.
        (WebKit::hasPrevalentResourceCharacteristics): Deleted.
        (WebKit::classifyPrevalentResources): Deleted.
        * UIProcess/WebResourceLoadStatisticsStore.h:
            Added member variables for clearing of data records.

2016-10-06  Youenn Fablet  <youenn@apple.com>

        [WK2] 304 revalidation on the network process does not update the validated response
        https://bugs.webkit.org/show_bug.cgi?id=162973

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkResourceLoader.cpp: Updating cache entry with the revalidated one.

2016-10-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce InputEvent bindings in preparation for the input events spec
        https://bugs.webkit.org/show_bug.cgi?id=162954

        Reviewed by Ryosuke Niwa.

        Adds a new runtime switch for enabling InputEvents.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Put variation fonts work behind a compile-time flag
        https://bugs.webkit.org/show_bug.cgi?id=162949

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2016-10-05  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/Cocoa/WebViewImpl.mm:

2016-10-05  Tim Horton  <timothy_horton@apple.com>

        Avoid automatically re-taking snapshots for back-forward items that were never loaded into the view
        https://bugs.webkit.org/show_bug.cgi?id=162955
        <rdar://problem/27659173>

        Reviewed by Simon Fraser.

        Make it possible for clients to control the snapshot for back-forward
        items that are restored from session state without navigating to them,
        by ensuring that we won't stomp on the snapshot that they explicitly take,
        until a load occurs.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::trackSwipeGesture):
        Disambiguate explicit API-driven snapshot recording from automatic,
        navigation-driven snapshot recording.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::saveBackForwardSnapshotForCurrentItem):
        Get rid of the version of recordNavigationSnapshot() that doesn't take a
        back-forward list item, and grab the current item at the one remaining caller.
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::recordAutomaticNavigationSnapshot):
        (WebKit::WebPageProxy::recordNavigationSnapshot):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        Rename m_suppressNavigationSnapshotting to m_suppressAutomaticNavigationSnapshotting,
        and make it be only about automatic (navigation-driven) snapshots; it won't have
        any impact on explicit snapshots forced by clients.
        
        Set m_suppressAutomaticNavigationSnapshotting unconditionally when restoring
        from session state, so that we won't start automatically snapshotting until
        something has loaded in the view.

2016-10-05  Tim Horton  <timothy_horton@apple.com>

        Make it possible to test ViewSnapshotStore behaviors
        https://bugs.webkit.org/show_bug.cgi?id=162983

        Reviewed by Simon Fraser.

        Add two pieces of SPI to make it easier to test ViewSnapshotStore:

        - [WKWebView _disableBackForwardSnapshotVolatilityForTesting]
            This makes it so that we don't make snapshots volatile after we
            take them, so that they won't get purged while the test is running
            and cause the test to be flaky.

        - [WKBackForwardListItem _copySnapshotForTesting]
            This returns a CGImage with the content of the given back-forward
            item's current snapshot, if there is one.

        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
        (-[WKBackForwardListItem _copySnapshotForTesting]):
        * UIProcess/API/Cocoa/WKBackForwardListItemInternal.h:
        * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h: Added.
        Add WKBackForwardListItem SPI to retrieve the snapshot for a given back-forward list item.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _disableBackForwardSnapshotVolatilityForTesting]):
        Add WKWebView SPI to disable volatility of snapshots, for testing purposes.
        
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::takeViewSnapshot):
        Adopt ViewSnapshot::setVolatile instead of reaching into the surface.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Adopt ViewSnapshot::setVolatile instead of reaching into the surface.

        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshotStore::setDisableSnapshotVolatilityForTesting):
        (WebKit::ViewSnapshotStore::disableSnapshotVolatilityForTesting):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::ViewSnapshotStore):
        (WebKit::ViewSnapshot::setVolatile):
        (WebKit::ViewSnapshot::asLayerContents):
        Move all touching of snapshot volatility into the new setVolatile,
        and short-circuit if the testing-only m_disableSnapshotVolatility bit is set

        (WebKit::ViewSnapshot::asImageForTesting):
        Make a CGImageRef for the aforementioned WKBackForwardListItem SPI.
        This is currently not implemented for the iOS Simulator, because we
        don't have access to the bits of the image in that case.

2016-10-05  Chris Dumez  <cdumez@apple.com>

        KeyboardEvent.getModifierState() should support "CapsLock" modifier
        https://bugs.webkit.org/show_bug.cgi?id=162861

        Reviewed by Darin Adler.

        Add support for CapsLock modifier on events.

        * Shared/API/c/WKEvent.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):
        (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):
        * Shared/efl/WebEventFactory.cpp:
        (WebKit::toWebEventModifiers):
        * Shared/ios/WebIOSEventFactory.mm:
        (modifiersForEvent):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::modifiersForEvent):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toNSEventModifierFlags):
        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):

2016-10-05  Zan Dobersek  <zdobersek@igalia.com>

        Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
        https://bugs.webkit.org/show_bug.cgi?id=162903

        Reviewed by Alex Christensen.

        Rename build guards for the remaining implementation of the legacy EME API
        to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
        of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):
        * WebProcess/WebProcess.cpp:
        (WebKit::m_resourceLoadStatisticsStorage):

2016-10-05  Daniel Bates  <dabates@apple.com>

        [WK2][NetworkSession] Ping requests should follow redirects if applicable
        https://bugs.webkit.org/show_bug.cgi?id=162580
        <rdar://problem/28631274>

        Reviewed by Alex Christensen.

        Implement support for following redirects, if applicable, of a ping request when using the
        Network Session (ENABLE(NETWORK_SESSION)) code path in WebKit2. For ping requests that are
        in response to hyperlink auditing (e.g. <a ping>) we should follow redirect responses.
        For Content Security Policy and XSS Auditor violation reports we should not follow redirect
        responses.

        Currently we always ignore redirects for ping requests that are sent using the Network Session
        code path in WebKit2. This behavior disagrees with the behavior described in section
        "Hyperlink auditing" of the HTML standard, <https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing> (27 September 2016),
        as well as the behavior in Legacy WebKit and WebKit2 with Network Session disabled. We should
        follow redirects for ping requests initiated as part of hyperlink auditing to more closely
        conform to the HTML standard and match the behavior in Legacy WebKit and WebKit2 with Network
        Session disabled.

        * NetworkProcess/PingLoad.h:

2016-10-05  Daniel Bates  <dabates@apple.com>

        Do not follow redirects when sending violation report
        https://bugs.webkit.org/show_bug.cgi?id=162520
        <rdar://problem/27957639>

        Reviewed by Alex Christensen.

        Update the non-Network Session WebKit2 implementation to follow redirect responses for a ping
        request, if applicable. I did not update the Network Session implementation at this time. I
        will fix it in <https://bugs.webkit.org/show_bug.cgi?id=162580>.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing): Tell PingHandle whether to follow redirects.
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode): Encode NetworkResourceLoadParameters::shouldFollowRedirects.
        (WebKit::NetworkResourceLoadParameters::decode): Decode NetworkResourceLoadParameters::shouldFollowRedirects.
        * NetworkProcess/PingLoad.h: Added FIXME comment to implement support for following redirects,
        if applicable (for hyperlink auditing). See <https://bugs.webkit.org/show_bug.cgi?id=162580>
        for more details.
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::createPingHandle): Modified to take a boolean whether to follow
        redirects responses and set NetworkResourceLoadParameters::shouldFollowRedirects as appropriate.
        * WebProcess/Network/WebLoaderStrategy.h:

2016-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move global TLS errors handling from ResourceHandle to SoupNetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=162910

        Reviewed by Alex Christensen.

        Use SoupNetworkSession instead of ResourceHandle.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::setIgnoreTLSErrors):
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost):

2016-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build with USE_REDIRECTED_XCOMPOSITE_WINDOW disabled.

        * UIProcess/AcceleratedDrawingAreaProxy.cpp:
        (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing):

2016-10-04  Chris Dumez  <cdumez@apple.com>

        Implement KeyboardEvent.code from the UI Event spec
        https://bugs.webkit.org/show_bug.cgi?id=149584

        Reviewed by Darin Adler.

        Add support for Keyboard.code attribute:
        - https://w3c.github.io/uievents/#dom-keyboardevent-code
        - https://w3c.github.io/uievents-code/

        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::code):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2016-10-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The dragged image should be the current frame only of the animated image
        https://bugs.webkit.org/show_bug.cgi?id=162109

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::provideDataForPasteboard): Call the Image function with its new name.

2016-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Revert a change erroneously committed in r206795.

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

2016-10-04  Anders Carlsson  <andersca@apple.com>

        Properly kill web processes in the launching state
        https://bugs.webkit.org/show_bug.cgi?id=162938

        Reviewed by Tim Horton.

        * UIProcess/Launcher/ProcessLauncher.h:
        Add m_xpcConnection member.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Store the XPC connection in the m_xpcConnection member variable.
        In the reply handler, handle m_xpcConnection being null.

        (WebKit::ProcessLauncher::platformInvalidate):
        Cancel and kill the connection.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::terminateProcess):
        Get rid of an assertion.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):
        Handle the launching state.

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

        Fix the build.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::highestUsedItemID):

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

        Fix a typo in WebBackForwardListItem (highed->highest)
        https://bugs.webkit.org/show_bug.cgi?id=162935

        Reviewed by Anders Carlsson.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::highestUsedItemID):
        (WebKit::WebBackForwardListItem::highedUsedItemID): Deleted.
        * Shared/WebBackForwardListItem.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):

2016-10-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
        https://bugs.webkit.org/show_bug.cgi?id=162916

        Reviewed by Filip Pizlo.

        * CMakeLists.txt:

2016-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Remove SSLPolicyFlags from SoupNetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=162906

        Reviewed by Michael Catanzaro.

        * NetworkProcess/soup/NetworkProcessMainSoup.cpp:
        (WebKit::NetworkProcessMainUnix):

2016-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls are displayed in the incorrect state momentarily after switching between tabs playing media
        https://bugs.webkit.org/show_bug.cgi?id=162766
        <rdar://problem/28533523>

        Reviewed by Jer Noble.

        Plumbs some more Now Playing information from the web process to the UI process for testing purposes. See
        WebCore ChangeLog for more details.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _handleActiveNowPlayingSessionInfoResponse:title:duration:elapsedTime:]):
        (-[WKWebView _handleActiveNowPlayingSessionInfoResponse:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleActiveNowPlayingSessionInfoResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::handleActiveNowPlayingSessionInfoResponse):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::requestActiveNowPlayingSessionInfo):

2016-10-04  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK+ build fix.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient): Guard the call to getDefaultWebCryptoMasterKey()
        with ENABLE(SUBTLE_CRYPTO), since the same guard is used for the definition. Fixes
        GTK+ production builds where the feature is disabled.

2016-10-03  Keith Rollin  <krollin@apple.com>

        More logging to diagnose "WebKit encountered an internal error" messages
        https://bugs.webkit.org/show_bug.cgi?id=162754

        Reviewed by Antti Koivisto.

        Add more logging around calls to internalError, as well as some
        low-level logging around SharedMemory, and mach_vm_map in particular.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * Platform/Logging.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::allocate):
        (WebKit::makeMemoryEntry):
        (WebKit::SharedMemory::map):
        (WebKit::SharedMemory::~SharedMemory):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::networkProcessCrashed):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource):

2016-10-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r206754.

        This change broke the El Capitan and Yosemite debug builds.

        Reverted changeset:

        "More logging to diagnose "WebKit encountered an internal
        error" messages"
        https://bugs.webkit.org/show_bug.cgi?id=162754
        http://trac.webkit.org/changeset/206754

2016-10-03  Keith Rollin  <krollin@apple.com>

        More logging to diagnose "WebKit encountered an internal error" messages
        https://bugs.webkit.org/show_bug.cgi?id=162754

        Reviewed by Antti Koivisto.

        Add more logging around calls to internalError, as well as some
        low-level logging around SharedMemory, and mach_vm_map in particular.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * Platform/Logging.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::allocate):
        (WebKit::makeMemoryEntry):
        (WebKit::SharedMemory::map):
        (WebKit::SharedMemory::~SharedMemory):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::networkProcessCrashed):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource):

2016-10-03  Chris Dumez  <cdumez@apple.com>

        Add support for KeyboardEvent.key attribute
        https://bugs.webkit.org/show_bug.cgi?id=36267

        Reviewed by Darin Adler.

        Add support for KeyboardEvent.key attribute.

        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::key):
        (WebKit::WebKeyboardEvent::unmodifiedText): Deleted.
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2016-10-03  Chris Dumez  <cdumez@apple.com>

        Add support for KeyboardEvent.key attribute
        https://bugs.webkit.org/show_bug.cgi?id=36267

        Reviewed by Darin Adler.

        Add support for KeyboardEvent.key attribute.

        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::key):
        (WebKit::WebKeyboardEvent::unmodifiedText): Deleted.
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2016-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Cleanup persistent credential storage code
        https://bugs.webkit.org/show_bug.cgi?id=162777

        Reviewed by Alex Christensen.

        Use USE(LIBSECRET) instead of ENABLE(CREDENTIAL_STORAGE).

        * UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:
        (webkit_authentication_request_can_save_credentials):

2016-10-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r206683.

        This change caused API test WebKit2.FindMatches to fail on
        Mac.

        Reverted changeset:

        "The dragged image should be the current frame only of the
        animated image"
        https://bugs.webkit.org/show_bug.cgi?id=162109
        http://trac.webkit.org/changeset/206683

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Follow-up patch after r206701
        https://bugs.webkit.org/show_bug.cgi?id=162818

        Unreviewed.

        I missed one place required to enable an experimental feature by default.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):

2016-09-30  Dan Bernstein  <mitz@apple.com>

        [iOS] Editing menu omits the Share command if the selected text is longer than 200 characters
        https://bugs.webkit.org/show_bug.cgi?id=162821
        <rdar://problem/28409828>

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformAction:withSender:]): Changed to return YES for the _share:
          action even if the selection is longer than 200 characters. While Define should not have
          been available for longer selections, Share does not have such a limitation.

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Turn variation fonts on by default
        https://bugs.webkit.org/show_bug.cgi?id=162818

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesDefinitions.h:

2016-09-30  Brady Eidson  <beidson@apple.com>

        REGRESSION (Safari 10 combined with WK changes): Unable to store WebCrypto keys in IndexedDB database.
        <rdar://problem/28334440> and https://bugs.webkit.org/show_bug.cgi?id=162554

        Reviewed by Alexey Proskuryakov.

        Safari 10 has a WKPageNavigation client but does not implement the "copyWebCryptoMasterKey" callback.

        WebKit just fails in this case, instead of falling back to "getDefaultWebCryptoMasterKey".
        It should fall back.

        Additionally there's a WKContextClient callback to get the crypto key, also, but it is completely unused.
        So it should be pulled.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::webCryptoMasterKey): Deleted.
        * UIProcess/API/C/WKContext.h:

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        (WKPageSetPageNavigationClient): If the client doesn't implement this method, fallback to getDefaultWebCryptoMasterKey.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::webCryptoMasterKey): If the client doesn't implement this method,
          fallback to getDefaultWebCryptoMasterKey.

        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::copyWebCryptoMasterKey): Deleted.
        * UIProcess/WebContextClient.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::wrapCryptoKey): Only ask the NavigationClient before falling back. Don't ask the loader client.
        (WebKit::WebPageProxy::unwrapCryptoKey): Ditto.

2016-09-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The dragged image should be the current frame only of the animated image
        https://bugs.webkit.org/show_bug.cgi?id=162109

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::provideDataForPasteboard): Call the Image function with its new name.

2016-09-30  Anders Carlsson  <andersca@apple.com>

        Second time going into fullscreen using silverlight, will hide the menu bar and dock for Safari
        https://bugs.webkit.org/show_bug.cgi?id=162805
        rdar://problem/28208495

        Reviewed by Dan Bernstein.

        Turns out that the WindowRef wrappers for full screen NSWindows can end up in the m_windows HashSet,
        and never go away. 
        
        Fix this by storing the canonical CGWindowIDs in the hash map instead.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::cgWindowID):
        (WebKit::windowCoversAnyScreen):
        (WebKit::FullscreenWindowTracker::windowShown):
        (WebKit::FullscreenWindowTracker::windowHidden):

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Create runtime flag for variation font work
        https://bugs.webkit.org/show_bug.cgi?id=162780

        Reviewed by Alex Christensen.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-09-30  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Add radiusX / radiusY / rotationAngle to WebPlatformTouchPoint
        https://bugs.webkit.org/show_bug.cgi?id=162787
        <rdar://problem/28554292>

        Reviewed by Benjamin Poulain.

        Add radiusX / radiusY / rotationAngle to WebPlatformTouchPoint.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/WebEvent.h:
        (WebKit::WebPlatformTouchPoint::setRadiusX):
        (WebKit::WebPlatformTouchPoint::radiusX):
        (WebKit::WebPlatformTouchPoint::setRadiusY):
        (WebKit::WebPlatformTouchPoint::radiusY):
        (WebKit::WebPlatformTouchPoint::setRotationAngle):
        (WebKit::WebPlatformTouchPoint::rotationAngle):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchPoint::WebKit2PlatformTouchPoint):
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::extractWebTouchPoint):
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        (WebKit::WebPlatformTouchPoint::encode):
        (WebKit::WebPlatformTouchPoint::decode):

2016-09-30  Megan Gardner  <megan_gardner@apple.com>

        Make it possible to test web-related user-interface features
        https://bugs.webkit.org/show_bug.cgi?id=162657

        Reviewed by Simon Fraser.

        Added the ability to pull the strings from an Action Sheet and pass them to
        test scripts to make sure we are giving the correct available actions for
        the item we are interacting with.
        Added a test for long press on an image, and used the sheet scraping functionality
        to make sure that the correct actions were being displayed.
        Test for previous patch, Changeset 205915; Bug 161761

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _contentsOfUserInterfaceItem:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant currentAvailableActionStrings]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _contentsOfUserInterfaceItem:]):

2016-09-27  Anders Carlsson  <andersca@apple.com>

        Remove a couple of unused members from PlatformKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=162641

        Reviewed by Tim Horton.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):

2016-09-29  Nan Wang  <n_wang@apple.com>

        AX: iOS: Tapping <input> in Safari zooms in a bit when page has max scale = 1
        https://bugs.webkit.org/show_bug.cgi?id=162471

        Reviewed by Simon Fraser.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::maximumPageScaleFactorIgnoringAlwaysScalable):
        (WebKit::WebPage::getAssistedNodeInformation):

2016-09-29  Daniel Bates  <dabates@apple.com>

        Mark NetworkLoad as final
        https://bugs.webkit.org/show_bug.cgi?id=162681

        Reviewed by Alex Christensen.

        Mark class NetworkLoad as final as we do not have any derived classes at the moment and it
        is unclear if it would make sense to subclass it. We can always unmark the class if it turns
        out that it makes sense to subclass it.

        * NetworkProcess/NetworkLoad.h:

2016-09-29  Sam Weinig  <sam@webkit.org>

        Allow overriding some NSURLSessionConfiguration properties on a per-NetworkProcess basis
        <rdar://problem/27648683>
        https://bugs.webkit.org/show_bug.cgi?id=162735

        Reviewed by Dan Bernstein.

        Add SPI for overriding the following NSURLSessionConfigurations properties:
            - _sourceApplicationBundleIdentifier
            - _sourceApplicationSecondaryIdentifier
            - _CTDataConnectionServiceType

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::globalSourceApplicationBundleIdentifier):
        (WebKit::globalSourceApplicationSecondaryIdentifier):
        (WebKit::globalCTDataConnectionServiceType):
        (WebKit::NetworkSession::setCustomProtocolManager):
        (WebKit::NetworkSession::setSourceApplicationAuditTokenData):
        (WebKit::NetworkSession::setSourceApplicationBundleIdentifier):
        (WebKit::NetworkSession::setSourceApplicationSecondaryIdentifier):
        (WebKit::NetworkSession::setCTDataConnectionServiceType):
        (WebKit::NetworkSession::NetworkSession):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration sourceApplicationBundleIdentifier]):
        (-[_WKProcessPoolConfiguration setSourceApplicationBundleIdentifier:]):
        (-[_WKProcessPoolConfiguration sourceApplicationSecondaryIdentifier]):
        (-[_WKProcessPoolConfiguration setSourceApplicationSecondaryIdentifier:]):
        (-[_WKProcessPoolConfiguration CTDataConnectionServiceType]):
        (-[_WKProcessPoolConfiguration setCTDataConnectionServiceType:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2016-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: HTTP authentication doesn't work if PROTECTION_SPACE_AUTH_CALLBACK is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=162724

        Reviewed by Alex Christensen.

        NetworkLoad always expects continueCanAuthenticateAgainstProtectionSpace() to be called to complete the
        authentication challenge, which is only defined when PROTECTION_SPACE_AUTH_CALLBACK is enabled.
        I've added missing #ifdefs for PROTECTION_SPACE_AUTH_CALLBACK.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::didReceiveChallenge): Call completeAuthenticationChallenge() instead of
        canAuthenticateAgainstProtectionSpaceAsync() when PROTECTION_SPACE_AUTH_CALLBACK is not enabled.
        (WebKit::NetworkLoad::completeAuthenticationChallenge): Moved common code to complete the authentication
        challenge from continueCanAuthenticateAgainstProtectionSpace().
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace): Call completeAuthenticationChallenge().
        (WebKit::NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpaceDownload):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        (WebKit::NetworkResourceLoader::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * Shared/Authentication/AuthenticationManager.h:
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::canAuthenticateAgainstProtectionSpace):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:

2016-09-28  Joseph Pecoraro  <pecoraro@apple.com>

        WKSharedAPICast should not warn about acceptable custom context menu tag values
        https://bugs.webkit.org/show_bug.cgi?id=162597
        <rdar://problem/28487627>

        Reviewed by Tim Horton.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        Don't log an error when casting ContextMenu types if it is within
        the Custom ContextMenu tag range.

2016-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Adopt MediaRemote SPI to achieve desired Now Playing behavior
        https://bugs.webkit.org/show_bug.cgi?id=162658
        <rdar://problem/28499358>

        Reviewed by Jer Noble.

        Plumbs Now Playing session information (for now, this is just a flag indicating whether or not there is an
        active session) across from the web process to the UI process for testing in the form of asynchronous request/
        handle-response messages on the WebPage and its proxy in the UI process.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestActiveNowPlayingSessionInfo]):
        (-[WKWebView _handleActiveNowPlayingSessionInfoResponse:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestActiveNowPlayingSessionInfo):
        (WebKit::WebPageProxy::handleActiveNowPlayingSessionInfoResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::handleActiveNowPlayingSessionInfoResponse):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::requestActiveNowPlayingSessionInfo):

2016-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use GMenu internally in the context menu implementation
        https://bugs.webkit.org/show_bug.cgi?id=162603

        Reviewed by Michael Catanzaro.

        Switch to use GAction instead of GtkAction internally, but still keeping a GtkAction associated to the GAction,
        because our API depends on GtkAction.

        * Shared/gtk/WebContextMenuItemGtk.cpp:
        (WebKit::WebContextMenuItemGtk::WebContextMenuItemGtk):
        (WebKit::WebContextMenuItemGtk::createActionIfNeeded): Create the GAction and the associated GtkAction. Ensure a
        unique name for the GAction, since the name now matters.
        * Shared/gtk/WebContextMenuItemGtk.h:
        (WebKit::WebContextMenuItemGtk::gtkAction):
        (WebKit::WebContextMenuItemGtk::gAction):
        (WebKit::WebContextMenuItemGtk::submenuItems): Deleted.
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::contextMenuItemActivatedCallback): Use the GAction.
        (WebKit::WebContextMenuProxyGtk::append): Create a new GMenuItem for the GAction.
        (WebKit::WebContextMenuProxyGtk::buildMenu): Build a GMenu for the given items.
        (WebKit::WebContextMenuProxyGtk::populate): Create a GMenu and bind it ot the GtkMenu.
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk): Create the GActionGroup for the menu.
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk): Remove the action group from the GtkMenu.
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

2016-09-27  Daniel Bates  <dabates@apple.com>

        NetworkLoad and PingLoad should use private inheritance
        https://bugs.webkit.org/show_bug.cgi?id=162649

        Reviewed by Alex Christensen.

        Make NetworkLoad privately inherit from NetworkDataTaskClient and ResourceHandleClient,
        and make the client callbacks from these interfaces private as this class implements
        these interfaces.

        Similarly, make PingLoad privately inherit from ResourceHandleClient.

        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/PingLoad.h:

2016-09-20  Anders Carlsson  <andersca@apple.com>

        PlatformEvent::m_modifiers should be an OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=162326

        Reviewed by Daniel Bates.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):

2016-09-27  Dan Bernstein  <mitz@apple.com>

        [iOS] REGRESSION (r182126): Selection highlight and handles aren’t visible with WKSelectionGranularityCharacter
        https://bugs.webkit.org/show_bug.cgi?id=162577
        <rdar://problem/28481984>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _uiTextSelectionRectViews]): Added this method in the WKTesting category, which
          uses UIKit internals to get the views used for the selection highlight.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _selectionClipRect]): When selection is not confined to a form control or
          content-editable element, return the null rect to indicate no clipping, rather than
          clipping to the empty rect at the origin.

2016-09-27  Jer Noble  <jer.noble@apple.com>

        Remove deprecated ENCRYPTED_MEDIA implementation.
        https://bugs.webkit.org/show_bug.cgi?id=161010

        Reviewed by Eric Carlson.

        Remove ENABLE_ENCRYPTED_MEDIA.

        * Configurations/FeatureDefines.xcconfig:

2016-09-27  Chris Dumez  <cdumez@apple.com>

        [WK2] Navigating to a Blob URL does not trigger a download
        https://bugs.webkit.org/show_bug.cgi?id=162574

        Reviewed by Darin Adler.

        Add support for converting Blob URL loads into downloads.

        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
        (WebKit::BlobDownloadClient::didReceiveResponseAsync):
        Make sure we return a valid suggested filename because the client side (Safari)
        does not deal with empty suggested filenames. Use "unknown" by default to
        match the default suggested filename of non-Blob downloads.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::startWithHandle):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::convertHandleToDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::startNetworkLoadWithHandle):
        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::startNetworkLoadWithHandle):
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::startNetworkLoadWithHandle):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkLoad.h:
        (WebKit::NetworkLoad::handle):

2016-09-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unreviewed typo fix

        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        (webkit_web_inspector_class_init):

2016-09-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Should check whether GDK can use GL before asking it to
        https://bugs.webkit.org/show_bug.cgi?id=162598

        Reviewed by Michael Catanzaro.

        gdk_cairo_draw_from_gl can fail even when WebKit itself has been able to use GL (its
        context creation code might be buggy, GL may have been disabled using GDK_GL=disable, …).
        Unfortunately it does not have any error reporting other than a warning printed to
        stderr, so we cannot fallback from it. We have to first check if GL can be used by GDK
        by trying to create a context.

        See https://bugzilla.redhat.com/show_bug.cgi?id=1378987

        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::canGdkUseGL): decide whether GDK can use GL by
        trying to create a context for a GdkWindow.
        (WebKit::AcceleratedBackingStoreWayland::paint): fallback to glReadPixels if GDK cannot
        use GL.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.h:

2016-09-26  Tim Horton  <timothy_horton@apple.com>

        Delete some unused code from r202695
        https://bugs.webkit.org/show_bug.cgi?id=162595
        <rdar://problem/28343784>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setIsBlankBeforeFirstNonEmptyLayout:]): Deleted.
        (-[WKWebView _didFirstVisuallyNonEmptyLayoutForMainFrame]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame):
        We didn't end up needing this mechanism.

2016-09-26  Dan Bernstein  <mitz@apple.com>

        -_webViewWebProcessDidBecomeUnresponsive: gets called when the Web process is stopped in the debugger
        https://bugs.webkit.org/show_bug.cgi?id=162234

        Reviewed by Sam Weinig.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::platformIsBeingDebugged): Use the KERN_PROC sysctl to get the
          process flags and check for P_TRACED.

        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::timerFired): Call the new client function
          mayBecomeUnresponsive. If it returns false, restart the timer and bail out without
          changing the responsiveness state.

        * UIProcess/ResponsivenessTimer.h: Declared new client function mayBecomeUnresponsive.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::platformIsBeingDebugged): A generic implementation that always
          returns false.
        (WebKit::WebProcessProxy::mayBecomeUnresponsive): Implement this new
          ResponsivenessTimer::Client function to return true unless the process is being debugged.
        * UIProcess/WebProcessProxy.h:

2016-09-26  Chris Dumez  <cdumez@apple.com>

        [WK2] BlobDownloadClient should use asynchronous IPC to decide destination path
        https://bugs.webkit.org/show_bug.cgi?id=162568

        Reviewed by Alex Christensen.

        Use DecideDestinationWithSuggestedFilenameAsync IPC to decide the destination
        path in the case of Blob downloads, instead of the synchronous alternative.
        To achieve this, BlobResourceHandle was updated in WebCore to properly support
        asynchronous callback and BlobDownloadClient was updated to use asynchronous
        callbacks. When BlobDownloadClient::didReceiveResponseAsync() is called, we
        now ask the WebContent process asynchronously to decide what the destination
        path should be. Then, when we later get the destination path back from the
        WebContent process, we create the file on disk and call
        continueDidReceiveResponse() on the BlobResourceHandle so we start getting the
        blob data to write.

        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
        (WebKit::BlobDownloadClient::didReceiveResponseAsync):
        (WebKit::BlobDownloadClient::didDecideDownloadDestination):
        * NetworkProcess/Downloads/BlobDownloadClient.h:
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::decideDestinationWithSuggestedFilenameAsync):
        (WebKit::Download::didDecideDownloadDestination):
        (WebKit::Download::continueDidReceiveResponse):
        (WebKit::Download::decideDestinationWithSuggestedFilename): Deleted.
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::willDecidePendingDownloadDestination):
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
        (WebKit::DownloadManager::convertHandleToDownload): Deleted.
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueDidReceiveResponse):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::continueDecidePendingDownloadDestination):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync): Deleted.
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:

2016-09-26  Daniel Bates  <dabates@apple.com>

        Mark Ping{Handle, Load} as final
        https://bugs.webkit.org/show_bug.cgi?id=162576

        Reviewed by Alex Christensen.

        We should not support subclassing of a ping handle or overriding its NetworkDataTaskClient
        callbacks because there are security/privacy implications with a ping request. We should
        not encourage subclassing without careful consideration.

        * NetworkProcess/PingLoad.h:

2016-09-26  Daniel Bates  <dabates@apple.com>

        Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
        https://bugs.webkit.org/show_bug.cgi?id=162365

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix -Wformat warnings in WebLoaderStrategy
        https://bugs.webkit.org/show_bug.cgi?id=162553

        Reviewed by Alex Christensen.

        Consistently use PRIu64 to print uint64_t

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveResponse):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::setDefersLoading):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didReceiveResource):

== Rolled over to ChangeLog-2016-09-26 ==
