2019-05-15  Youenn Fablet  <youenn@apple.com>

        Constant crashes under WebPage::isThrottleable() after r245299
        https://bugs.webkit.org/show_bug.cgi?id=197902
        <rdar://problem/50793796>

        Reviewed by Alex Christensen.

        Update throttle state after a run loop iteration when page state changes to make sure the pageMap does not have null pages.
        Add appNapEnabled preference that is used by added API test.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateThrottleState):
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setAppNapEnabled:]):
        (-[WKPreferences _appNapEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2019-05-15  Alex Christensen  <achristensen@webkit.org>

        Allow NSFileCoordinator to be called from WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=197895
        <rdar://problem/50107679>

        Reviewed by Brent Fulgham.

        * WebProcess/com.apple.WebProcess.sb.in:
        Expand sandbox to allow use of com.apple.FileCoordination mach service like we do on iOS.

2019-05-15  Devin Rousso  <drousso@apple.com>

        Web Automation: elements larger than the viewport have incorrect in-view center point
        https://bugs.webkit.org/show_bug.cgi?id=195696
        <rdar://problem/48737122>

        Reviewed by Simon Fraser.

        Original patch by Brian Burg <bburg@apple.com>.

        This seems to be an omission in the specification. While it does mention that the in-view
        center point (IVCP) must be within the viewport, the algorithm never intersects the element
        bounding box with the viewport rect.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        This code is incorrect. For `CoordinateSystem::LayoutViewport`, coordinates should be in
        root view coordinates so that it can be later converted to screen and synthesized as a HID
        event in screen coordinates. Intersect the element rect and the viewport rect before finding
        the center point of the part of the element that's visible in the viewport.

        (WebKit::convertRectFromFrameClientToRootView): Added.
        (WebKit::convertPointFromFrameClientToRootView): Added.
        Added helpers to properly account for scroll contents position on iOS.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::viewportInViewCenterPointOfElement):
        Now that we determine whether the element is inside the viewport much earlier, if the
        element has no `inViewCenterPoint`, we can return a `TargetOutOfBounds` instead of a more
        "generic" `ElementNotInteractable`.

        (WebKit::WebAutomationSession::simulateMouseInteraction):
        Rename `locationInView` -> `locationInViewport`.

        (WebKit::WebAutomationSession::simulateTouchInteraction):
        This code is incorrect. The `unobscuredContentRect` is in screen coordinates, but
        we are trying to see if (x, y) is outside the size of the viewport assumed to be at (0, 0).
        Grab the visual viewport rect and see if the location exceeds the viewport size.

        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::operator<<):
        Add logging helper for `TouchInteraction` enum.

        (WebKit::WebAutomationSession::platformSimulateTouchInteraction):
        Move local variable.

        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        Fix a typo in logging.

        * UIProcess/Automation/Automation.json:
        Simplify enum name.

        * Platform/Logging.h:
        Add logging channel to dump fully resolved interaction details.

2019-05-14  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restoration of non-unified build.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        * UIProcess/WebProcessProxy.cpp:

2019-05-14  Youenn Fablet  <youenn@apple.com>

        A service worker process should app nap when all its clients app nap
        https://bugs.webkit.org/show_bug.cgi?id=185626
        <rdar://problem/46785908>

        Reviewed by Alex Christensen.

        Compute whether a given web process can be throttled on every page throttling change.
        Send that information to network process which stores that information in WebSWServerConnection.
        Every WebSWServerToContextConnection throttle state is then computed based on all WebSWServerConnection
        that have a client that matches the registrable domain of the context connection.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::registerServiceWorkerClient):
        (WebKit::WebSWServerConnection::unregisterServiceWorkerClient):
        (WebKit::WebSWServerConnection::hasMatchingClient const):
        (WebKit::WebSWServerConnection::computeThrottleState const):
        (WebKit::WebSWServerConnection::setThrottleState):
        (WebKit::WebSWServerConnection::updateThrottleState):
        (WebKit::WebSWServerConnection::serverToContextConnectionCreated):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        (WebKit::WebSWServerConnection::isThrottleable const):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::setThrottleState):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        (WebKit::WebSWServerToContextConnection::isThrottleable const):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        * UIProcess/ServiceWorkerProcessProxy.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        (WebKit::WebSWClientConnection::updateThrottleState):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::setThrottleState):
        (WebKit::WebSWContextManagerConnection::isThrottleable const):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateUserActivity):
        (WebKit::WebPage::isThrottleable const):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::arePagesThrottleable const):
        * WebProcess/WebProcess.h:

2019-05-14  Chris Dumez  <cdumez@apple.com>

        Crash under WebKit::WebProcessProxy::didBecomeUnresponsive()
        https://bugs.webkit.org/show_bug.cgi?id=197883
        <rdar://problem/50665984>

        Reviewed by Alex Christensen.

        Protect |this| in didBecomeUnresponsive() and didExceedCPULimit() since we call client
        delegates and those may cause |this| to get destroyed.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didBecomeUnresponsive):
        (WebKit::WebProcessProxy::didExceedCPULimit):

2019-05-14  Chris Dumez  <cdumez@apple.com>

        The network process tries to take a process assertion when NetworkProcess::processWillSuspendImminently() is called
        https://bugs.webkit.org/show_bug.cgi?id=197888

        Reviewed by Geoffrey Garen.

        When actualPrepareToSuspend() in the Network process is called set the 'IsSuspended' flag on the SQLite database tracker and unset
        the flag when the process resume. This is consistent with what we already do in the WebProcess and makes sure that
        the network process does not try and take on a new assertion due to locked files when getting notified it is about to get
        suspended.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::NetworkProcess::processWillSuspendImminently):
        (WebKit::NetworkProcess::resume):

2019-05-14  Chris Dumez  <cdumez@apple.com>

        Update TBA macros for API / SPI that has already shipped
        https://bugs.webkit.org/show_bug.cgi?id=197841
        <rdar://problem/50698499>

        Reviewed by Geoffrey Garen.

        * Configurations/WebKit.xcconfig:
        Disable header postprocessing when building for macOS Mojave

        * Shared/API/Cocoa/_WKRenderingProgressEvents.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.h:
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.h:
        * UIProcess/API/Cocoa/WKBrowsingContextHistoryDelegate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:
        * UIProcess/API/Cocoa/WKConnection.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessGroup.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKTypeRefWrapper.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKView.h:
        (WK_CLASS_DEPRECATED_WITH_REPLACEMENT):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionConfiguration.h:
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/API/Cocoa/_WKInspector.h:
        * UIProcess/API/Cocoa/_WKInternalDebugFeature.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * WebProcess/API/Cocoa/WKWebProcess.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandlePrivate.h:

2019-05-14  Commit Queue  <commit-queue@webkit.org>

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

        Broke API Test TestWebKitAPI.Challenge.ClientCertificate
        (Requested by aakashjain on #webkit).

        Reverted changeset:

        "Add a unit test for client certificate authentication"
        https://bugs.webkit.org/show_bug.cgi?id=197800
        https://trac.webkit.org/changeset/245281

2019-05-14  Daniel Bates  <dabates@apple.com>

        [iOS] Cannot scroll to beginning of document after scrolling to end of document and vice versa via key commands
        https://bugs.webkit.org/show_bug.cgi?id=197848
        <rdar://problem/49523065>

        Reviewed by Brent Fulgham.

        Following the fix for <rdar://problem/49523065>, UIKit no longer emits a keyup event for a Command-
        modified key. This breaks WebKit's own implementation of key command handling for scrolling to the
        beginning or end of the document (triggered using Command + Arrow Up and Command + Arrow Down,
        respectively) because it watches for keyup events to reset state after initiating a scroll. If state
        is not reset then the scroll key command logic becomes confused and may not perform a subsequent scroll.
        It seems like we can actually get away with supporting these key commands and future Command modified
        commands by preemptively reseting state on keydown if the Command modifier is held down. If this does
        not work out then we can do something more complicated.

        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator handleKeyEvent:]):

2019-05-14  Brent Fulgham  <bfulgham@apple.com>

        Protect current WebFrame during form submission
        https://bugs.webkit.org/show_bug.cgi?id=197459
        <rdar://problem/50368618>

        Reviewed by Alex Christensen.

        The 'continueWillSubmitForm' method calls a completion handler that
        might affect the state of the current frame. Ensure the frame is valid
        for the scope of the function.

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

2019-05-14  Daniel Bates  <dabates@apple.com>

        [iOS] Cannot tab or shift + tab out of address bar on google.com
        https://bugs.webkit.org/show_bug.cgi?id=197859
        <rdar://problem/46651565>

        Reviewed by Darin Adler.

        Non-editable elements can participate in tab cycling via the HTML tabindex attribute.
        We should allow setting the initial focus to such an element when transitioning from
        the chrome (e.g. address bar) to the web page.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):

2019-05-14  Alex Christensen  <achristensen@webkit.org>

        Add a unit test for client certificate authentication
        https://bugs.webkit.org/show_bug.cgi?id=197800

        Reviewed by Youenn Fablet.

        * Shared/cf/ArgumentCodersCF.cpp:
        Move SPI declarations to SecuritySPI.h.

2019-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r245267: fix some more deprecated uses of -[UIApplication interfaceOrientation]
        https://bugs.webkit.org/show_bug.cgi?id=197867
        <rdar://problem/50743963>

        Reviewed by Simon Fraser.

        Add a helper method on WKContentView that asks the view's window's scene for an interface orientation; then,
        use this helper from various places in WebKit instead of invoking -[UIApplication interfaceOrientation]
        directly. No change in behavior.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView interfaceOrientation]):
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsPicker initWithInformation:inView:]):
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        (-[WKColorPicker initWithView:]):
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKDateTimePicker initWithView:datePickerMode:]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker initWithView:]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]):

2019-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] When running layout tests that tap in the same location, subsequent tests fail to fire click handlers
        https://bugs.webkit.org/show_bug.cgi?id=197821
        <rdar://problem/50700512>

        Reviewed by Tim Horton.

        After r244775, when running back-to-back layout tests on iOS that simulate taps in the same location, the double
        tap gesture recognizer for recognizing double clicks ends up recognizing instead of the single tap gesture
        recognizer in the subsequent test. This means that click handlers in the subsequent test will fail to recognize,
        unless the element with the click handler is also accompanied by a dblclick handler.

        To avoid this, we reset the double click gesture recognizer when navigating; this has the additional effect of
        making it such that the second page doesn't end up observing a dblclick when the first click was only sent to
        the first page.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _didStartProvisionalLoadForMainFrame]):

2019-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix some deprecation warnings when using a recent SDK

        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsPicker initWithInformation:inView:]):

2019-05-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] InvalidStateError should be reported to sites
        https://bugs.webkit.org/show_bug.cgi?id=193269
        <rdar://problem/48298264>

        Reviewed by Brent Fulgham.

        This patch implements step 20 about InvalidStateError of the spec:
        https://www.w3.org/TR/webauthn/#createCredential.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::respondReceived):
        * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp:
        (WebKit::CtapHidAuthenticator::continueMakeCredentialAfterResponseReceived const):

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

        Take out MediaPlayback UI assertion when any WebProcess is playing audible media
        https://bugs.webkit.org/show_bug.cgi?id=197798

        Reviewed by Chris Dumez.

        To keep the system from suspending the UIProcess (and all the other constellation of processes that
        are necessary to play media), take a UIProcess assertion with the MediaPlayback reason whenever there
        is a WebContent process that is playing audible media.

        * Platform/spi/ios/AssertionServicesSPI.h:
        * UIProcess/ProcessAssertion.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updatePlayingMediaDidChange):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setWebProcessIsPlayingAudibleMedia):
        (WebKit::WebProcessPool::clearWebProcessIsPlayingAudibleMedia):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::webPageMediaStateDidChange):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::toBKSProcessAssertionReason):
        (WebKit::ProcessAssertion::ProcessAssertion):
        * WebProcess/WebProcess.h:

2019-05-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Crash when trying to QuickLook
        https://bugs.webkit.org/show_bug.cgi?id=197853
        <rdar://problem/49795964>

        Reviewed by Brent Fulgham.

        This is caused by a syscall sandbox violation.

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

2019-05-13  Brent Fulgham  <bfulgham@apple.com>

        Correct the sandbox to allow loading libraries from /Library/Apple 
        https://bugs.webkit.org/show_bug.cgi?id=197844

        Reviewed by Per Arne Vollan.

        Grant access to '/Library/Apple' as an appropriate place to load
        system frameworks.

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

2019-05-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r245240.

        Broke the build

        Reverted changeset:

        "Update TBA macros for API / SPI that has already shipped"
        https://bugs.webkit.org/show_bug.cgi?id=197841
        https://trac.webkit.org/changeset/245240

2019-05-13  Youenn Fablet  <youenn@apple.com>

        Use kDNSServiceFlagsKnownUnique for DNSServiceRegisterRecord only on platforms supporting it
        https://bugs.webkit.org/show_bug.cgi?id=197802

        Reviewed by Eric Carlson.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::registerMDNSName):

2019-05-13  Don Olmstead  <don.olmstead@sony.com>

        decidePolicyForInstallMissingMediaPluginsPermissionRequest requires GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=197843

        Reviewed by Alex Christensen.

        * UIProcess/API/wpe/PageClientImpl.cpp:
        ENABLE(VIDEO) && USE(GSTREAMER)
        * UIProcess/WebPageProxy.h:
        Cleanup the declaration.

2019-05-13  Don Olmstead  <don.olmstead@sony.com>

        Move StorageManager.cpp into WebKit/Sources.txt
        https://bugs.webkit.org/show_bug.cgi?id=197842

        Reviewed by Michael Catanzaro.

        StorageManager.cpp is used by all ports so it should just go into Sources.txt.

        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:

2019-05-13  Chris Dumez  <cdumez@apple.com>

        Update TBA macros for API / SPI that has already shipped
        https://bugs.webkit.org/show_bug.cgi?id=197841
        <rdar://problem/50698499>

        Reviewed by Alex Christensen.

        * Shared/API/Cocoa/_WKRenderingProgressEvents.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.h:
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.h:
        * UIProcess/API/Cocoa/WKBrowsingContextHistoryDelegate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:
        * UIProcess/API/Cocoa/WKConnection.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessGroup.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKTypeRefWrapper.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKView.h:
        (WK_CLASS_DEPRECATED_WITH_REPLACEMENT):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionConfiguration.h:
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/API/Cocoa/_WKInspector.h:
        * UIProcess/API/Cocoa/_WKInternalDebugFeature.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * WebProcess/API/Cocoa/WKWebProcess.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandlePrivate.h:

2019-05-13  Chris Fleizach  <cfleizach@apple.com>

        AX: Need an entitlement for WebContent to send accessibility notifications
        https://bugs.webkit.org/show_bug.cgi?id=197832

        Reviewed by Brent Fulgham.

        In order to send accessibility notifications on iOS, we need to be able to look up this port.

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

2019-05-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix unused variable warnings in release builds

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

2019-05-12  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Suppress extra didReceiveAuthenticationChallenge call when accessing a server which checks basic auth.
        https://bugs.webkit.org/show_bug.cgi?id=197650

        Reviewed by Fujii Hironori.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::restartWithCredential):

2019-05-10  Chris Dumez  <cdumez@apple.com>

        [PSON] Prevent flashing when the process-swap is forced by the client
        https://bugs.webkit.org/show_bug.cgi?id=197799

        Reviewed by Geoffrey Garen.

        When the process-swap is forced by the client, we would not construct a SuspendedPageProxy for
        the previous page, which would cause a white/black flash upon navigation on macOS. The reason
        we did not construct a SuspendedPageProxy is that it would be unsafe to keep the page around
        in this case because other windows might have an opener link to the page when the swap is forced
        and we need those opener / openee links to get severed.

        The new approach to maintain the Web facing behavior without flashing is to create a suspended
        page proxy for the previous page when the process swap is forced by the client. We then close
        the page as soon as we can do so without flashing (when pageEnteredAcceleratedCompositingMode()
        has been called).

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::close):
        (WebKit::SuspendedPageProxy::pageEnteredAcceleratedCompositingMode):
        (WebKit::SuspendedPageProxy::closeWithoutFlashing):
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::commitProvisionalPage):
        * UIProcess/WebPageProxy.h:

2019-05-10  Brent Fulgham  <bfulgham@apple.com>

        Streamline test-and-clear operation for ContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=197795
        <rdar://problem/50473746>

        Reviewed by Wenson Hsieh.

        Rather than performing a check when entering the function, doing work,
        then clearing the member variable, perform the check and clear in
        a single operation. Only perform the selection if the menu exists.

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

2019-05-10  Megan Gardner  <megan_gardner@apple.com>

        Returning incorrect marked text rects
        https://bugs.webkit.org/show_bug.cgi?id=197758
        <rdar://problem/46548586>

        Reviewed by Tim Horton.

        We are not returning marked text rects in the correct view coordinate space.
        This is the same translation we are applying to the caret rects. 

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

2019-05-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Let WebKit clients supply an application name for user agent in modern compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=197782
        <rdar://problem/50646747>

        Reviewed by Beth Dakin.

        Add plumbing for a new private property on WKWebpagePreferences.

        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _applicationNameForUserAgentWithModernCompatibility]):
        (-[WKWebpagePreferences _setApplicationNameForUserAgentWithModernCompatibility:]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:

2019-05-10  Chris Dumez  <cdumez@apple.com>

        The active tab sometimes app naps even though it should not
        https://bugs.webkit.org/show_bug.cgi?id=197791
        <rdar://problem/48460054>

        Reviewed by Geoffrey Garen.

        The WebPage constructor was initializing m_activityState but not calling updateThrottleState().
        As a result, we would not take a UserActivity even when warranted by the initial activity state.

        * WebProcess/WebPage/WebPage.cpp:

2019-05-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] storage/indexeddb tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=196289

        Reviewed by Alex Christensen.

        storage/indexeddb tests were timing out for WinCairo port because
        WebKit::NetworkCache classes were not implemented yet for Windows.

        Implement WebKit::NetworkCache classes by using WTF::FileSystem
        functions.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::readFile): Use
        IOChannel::isOpened() to check the channel is opened instead of
        checking the file descriptor.
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::add):
        (WebKit::NetworkCache::BlobStorage::remove):
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::Data::mapToFile const):
        (WebKit::NetworkCache::mapFile):
        (WebKit::NetworkCache::adoptAndMapFile):
        (WebKit::NetworkCache::makeSalt):
        (WebKit::NetworkCache::readOrMakeSalt):
        * NetworkProcess/cache/NetworkCacheData.h:
        (WebKit::NetworkCache::Data::isEmpty const):
        (WebKit::NetworkCache::Data::size const):
        * NetworkProcess/cache/NetworkCacheDataCurl.cpp:
        (WebKit::NetworkCache::Data::Data):
        (WebKit::NetworkCache::Data::empty):
        (WebKit::NetworkCache::Data::data const):
        (WebKit::NetworkCache::Data::isNull const):
        (WebKit::NetworkCache::Data::apply const):
        (WebKit::NetworkCache::Data::subrange const):
        (WebKit::NetworkCache::concatenate):
        (WebKit::NetworkCache::Data::adoptMap): Deleted.
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::traverseDirectory):
        (WebKit::NetworkCache::fileTimes):
        (WebKit::NetworkCache::updateFileModificationTimeIfNeeded):
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        (WebKit::NetworkCache::IOChannel::isOpened const):
        (WebKit::NetworkCache::IOChannel::fileDescriptor const): Deleted.
        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp:
        (WebKit::NetworkCache::IOChannel::IOChannel):
        (WebKit::NetworkCache::IOChannel::~IOChannel):
        (WebKit::NetworkCache::runTaskInQueue):
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::write):

2019-05-10  Chris Dumez  <cdumez@apple.com>

        Do not wait until requestPermission() is called to fire deviceorientation events if permission was already granted
        https://bugs.webkit.org/show_bug.cgi?id=197750

        Reviewed by Geoffrey Garen.

        The UIProcess remembers previous device orientation permission decisions per origin for the duration of the browsing
        session. However, the WebContent process was not aware of previous decisions and would therefore not fire any
        deviceorientation / devicemotion events until the JS has called requestPermission(). This patches addresses this
        problem by having the UIProcess communicate any previous permission decision for the origin via WebSitePolicies.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebsiteData/WebDeviceOrientationAndMotionAccessController.cpp:
        (WebKit::WebDeviceOrientationAndMotionAccessController::shouldAllowAccess):
        (WebKit::WebDeviceOrientationAndMotionAccessController::cachedDeviceOrientationPermission const):
        (WebKit::WebDeviceOrientationAndMotionAccessController::deviceOrientationPermission const): Deleted.
        * UIProcess/WebsiteData/WebDeviceOrientationAndMotionAccessController.h:

2019-05-10  Chris Dumez  <cdumez@apple.com>

        Add WKWebViewConfiguration._canShowWhileLocked SPI
        https://bugs.webkit.org/show_bug.cgi?id=197777
        <rdar://problem/50065100>

        Reviewed by Tim Horton.

        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalHostingProcess):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::canShowWhileLocked const):
        (API::PageConfiguration::setCanShowWhileLocked):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _setCanShowWhileLocked:]):
        (-[WKWebViewConfiguration _canShowWhileLocked]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::canShowWhileLocked const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_canShowWhileLocked):
        (WebKit::m_shrinkToFitContentTimer): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::canShowWhileLocked const):

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix a bunch of compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=197785

        Reviewed by Don Olmstead.

        Guard Cocoa-specific format modifier to avoid -Wformat warning.

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

2019-05-10  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebKit: WebKit::WebSpeechSynthesisClient::speak
        https://bugs.webkit.org/show_bug.cgi?id=197761
        <rdar://problem/50237614>

        Reviewed by Per Arne Vollan.

        It's valid for the incoming voice to be nil, so we need to protect against that.

        Tests: fast/speechsynthesis/speech-synthesis-real-client-version.html

        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp:
        (WebKit::WebSpeechSynthesisClient::speak):

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Add webkit_frame_get_id() API
        https://bugs.webkit.org/show_bug.cgi?id=197270

        Reviewed by Carlos Garcia Campos.

        It's as simple as can be: just an API to return the ID of a frame.

        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * WebProcess/InjectedBundle/API/glib/WebKitFrame.cpp:
        (webkit_frame_get_id):
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitFrame.h:
        * WebProcess/InjectedBundle/API/wpe/docs/wpe-webextensions-1.0-sections.txt:

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Add WebKitWebPage::did-associate-form-controls-for-frame and deprecate original did-associate-form-controls
        https://bugs.webkit.org/show_bug.cgi?id=197271

        Reviewed by Youenn Fablet.

        * WebProcess/InjectedBundle/API/c/WKBundlePageFormClient.h:
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (webkit_web_page_class_init):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]):
        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        (API::InjectedBundle::FormClient::didAssociateFormControls):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::didAssociateFormControls):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didAssociateFormControls):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2019-05-09  Rob Buis  <rbuis@igalia.com>

        Limit number of prefetches of a given page
        https://bugs.webkit.org/show_bug.cgi?id=197736

        Reviewed by Darin Adler.

        Limit prefetches for same url to 1.

        * NetworkProcess/cache/PrefetchCache.cpp:
        (WebKit::PrefetchCache::store):

2019-05-09  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out most of r245151.

        Caused assertions in High Sierra

        Reverted most of changeset:

        "Remove now-unnecessary Connection::sendMessageWithReply"
        https://bugs.webkit.org/show_bug.cgi?id=197747
        https://trac.webkit.org/changeset/245151

2019-05-09  Daniel Bates  <dabates@apple.com>

        [iOS] Lazily request keyboard on first hardware keydown when a non-editable element is focused
        https://bugs.webkit.org/show_bug.cgi?id=197746
        <rdar://problem/50630406>

        Reviewed by Brent Fulgham.

        Be even lazier. We only need to create a keyboard if an editable element is focused or on
        the first hardware keydown when a non-editable element is focused. We currently do the former.
        Let's also do the latter.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]): Reset bookkeeping.
        (-[WKContentView _requiresKeyboardWhenFirstResponder]): Further condition the result on
        whether we have seen a hardware keydown event in a non-editable element.
        (-[WKContentView _handleKeyUIEvent:]): If this is the first hardware key event we've seen then
        update state and call -reloadInputView. -reloadInputView will call us back in -_requiresKeyboardWhenFirstResponder
        and we will now return YES. So, it will create the keyboard.
        (-[WKContentView _hardwareKeyboardAvailabilityChanged]): Reset bookkeeping.

2019-05-08  Dean Jackson  <dino@apple.com>

        Guard long press link preview with a USE macro rather than complicated includes
        https://bugs.webkit.org/show_bug.cgi?id=197728
        <rdar://problem/50604700>

        Reviewed by Wenson Hsieh.

        It was getting complicated to manage the coordination between WebKitAdditions
        and WebKit without having to split up the includes into multiple files
        or have lots of duplication.

        Instead, WebKitAdditions will now define a USE macro which can be used
        in various places through WebKit.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dragInteraction:itemsForBeginningSession:]):
        (-[WKContentView _contentsOfUserInterfaceItem:]):
        (previewIdentifierForElementAction):
        (-[WKContentView shouldUsePreviewForLongPress]):
        (-[WKContentView _registerPreview]):
        (-[WKContentView _unregisterPreview]):
        (shouldUsePreviewForLongPress): Deleted.
        (-[WKContentView _registerPreviewLongPress]): Deleted.
        (-[WKContentView _unregisterPreviewLongPress]): Deleted.

2019-05-09  Alex Christensen  <achristensen@webkit.org>

        Remove now-unnecessary Connection::sendMessageWithReply
        https://bugs.webkit.org/show_bug.cgi?id=197747

        Reviewed by Tim Horton.

        The WebProcess messages that use it already do the right thing with CompletionHandlers and can be replaced by sendWithAsyncReply.
        The SecItemShim message that uses it can be replaced by sendSync.

        This patch only increases responsiveness when clearing website data and removes the need for a WorkQueue dedicated entirely to the SecItemShim.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::invalidate):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::sendMessageWithReply): Deleted.
        * Platform/IPC/Connection.h:
        (IPC::Connection::send):
        (IPC::Connection::sendWithReply): Deleted.
        * Shared/mac/SecItemResponseData.h:
        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):
        (WebKit::workQueue): Deleted.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        * WebProcess/WebProcess.messages.in:

2019-05-09  Dean Jackson  <dino@apple.com>

        Build fix for iOS.

        * UIProcess/WKImagePreviewViewController.mm:

2019-05-09  Alex Christensen  <achristensen@webkit.org>

        Remove unnecessary test SPI after r244883
        https://bugs.webkit.org/show_bug.cgi?id=197575

        Reviewed by Tim Horton.

        We now have two ways of doing the same thing.  Let's remove the one that's only for testing,
        and make the tests clean up like an application would.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeCredential): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::removeCredential): Deleted.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _removeCredential:forProtectionSpace:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::removeCredential): Deleted.
        * UIProcess/WebProcessPool.h:

2019-05-09  Daniel Bates  <dabates@apple.com>

        REGRESSION (r241734): 1% slower PLT on iPad
        https://bugs.webkit.org/show_bug.cgi?id=197745
        <rdar://problem/50457731>

        Reviewed by Per Arne Vollan.

        For now, only create a keyboard when WKContentView becomes first responder if a hardware keyboard
        is attached or an editable element is focused to recover the 1% loss when a keyboard is not attached.
        We can do better and by that I mean be lazier. We'll do this <https://bugs.webkit.org/show_bug.cgi?id=197746>.

        In r241734 we unified the key event handling code paths so we use exactly one for both software and
        hardware key events. We took a simple approach of always requesting UIKit to create a keyboard when
        the WKContentView becomes first responder. We did this so that we could continue listening for hardware
        key events even when a non-editable element is focused and dispatch DOM events. As it turns out, always
        creating a keyboard is expensive and caused a ~1% slowdown in page load time on iPad.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _requiresKeyboardWhenFirstResponder]): Only create a keyboard if a hardware keyboard is
        attached or an editable element is focused.
        (-[WKContentView _hardwareKeyboardAvailabilityChanged]): Reload all input view (this will cause keyboard
        creation) if -_requiresKeyboardWhenFirstResponder returns YES.

2019-05-09  Daniel Bates  <dabates@apple.com>

        [iOS] Unable to commit search on MSN.com, qq.com, or sina.com.cn using enter key (hardware or software keyboard)
        https://bugs.webkit.org/show_bug.cgi?id=197632
        <rdar://problem/47902054>

        Reviewed by Brent Fulgham.

        Fixes an issue where it is not possible to submit a <form> with target = "_blank": a form that
        opens a new window.

        By default we only allow popups to open if they were user initiated (like when a person clicks
        on a link). We achieve this by putting a token on the stack, called the UserGestureToken when
        WebCore processes an event from WebKit. So long as this token is on the stack we consider
        all requests to open a popup to be user initiated. And we implicitly submit a form when pressing
        the Return key in an HTML input element during the processing of a TextInputEvent dispatched as
        part of inserting a '\n' into the field. On Mac, the keydown dispatches a TextInputEvent synchronously.
        However on iOS text insertion, and hence a dispatch of a TextInputEvent event, occurs asynchronously
        with respect to the keydown event. So, by the time the UI process calls back to the WebProcess
        to perform the text insertion of '\n' we have long since popped the UserGestureToken off the stack
        and hence we disallow opening a popup. To fix this, when -insertText is called we query the keyboard
        to determine if it's being called by the keyboard. If it is then we can assume that this is
        part of key event handling and hence was initiated by the user. We can pass along this detail
        to the WebProcess for it to push a new UserGestureToken onto the stack.

        For now we only track whether text inserted by the keyboard was user initiated or not. In
        <https://bugs.webkit.org/show_bug.cgi?id=197721> we will fix this up for all editing commands.

        * Platform/spi/ios/UIKitSPI.h: Expose SPI.
        * Shared/Cocoa/InsertTextOptions.cpp:
        (IPC::ArgumentCoder<WebKit::InsertTextOptions>::encode):
        (IPC::ArgumentCoder<WebKit::InsertTextOptions>::decode):
        Encode and decode whether we are processing a user gesture.

        * Shared/Cocoa/InsertTextOptions.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView insertText:]): Query the keyboard to determine whether it called us or
        the embedding client did. We only want to privilege user initiated actions (the keyboard).
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync): Push a UserGestureToken onto the stack that is initialized
        depending on whether we are or are not processing a user gesture.

2019-05-09  Antoine Quint  <graouts@apple.com>

        pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html is a timeout
        https://bugs.webkit.org/show_bug.cgi?id=197738
        <rdar://problem/50588613>

        Reviewed by Antti Koivisto.

        We clear the touch actions for a given touch identifier when the matching touch is released in -[WKContentViewInteraction _handleTouchActionsForTouchEvent:].
        This happens before -[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:] is called and thus, which we correctly
        respected the touch actions during the panning gesture, we would not be able to respect them during the deceleration animation. This caused the test to fail
        because it would check that no scrolling happened after the panning gesture completed, ie. during the deceleration animation.

        To work around this, we now store the touch actions for a given UIScrollView interaction in the ScrollingTreeScrollingNodeDelegateIOS object when the interaction
        starts.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::activeTouchActions const):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::clearActiveTouchActions):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        (-[WKScrollingNodeScrollViewDelegate _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::computeActiveTouchActionsForGestureRecognizer):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::activeTouchActionsForGestureRecognizer const): Deleted.

2019-05-08  Antoine Quint  <graouts@apple.com>

        [iOS] Correctly handle overlapping regions for elements with a touch-action property
        https://bugs.webkit.org/show_bug.cgi?id=194813
        <rdar://problem/48194708>

        Reviewed by Antti Koivisto.

        We now use WebKit::touchActionsForPoint() to determine the touch actions for a given touch using its location in -[WKContentViewInteraction
        _handleTouchActionsForTouchEvent:]. We then record these touch actions for the touch's identifier on the RemoteScrollingCoordinatorProxy.

        Then, as we interact with a UIScrollView, we get its gesture recognizer and get its active touch identifier through the new
        -[WKContentViewInteraction activeTouchIdentifierForGestureRecognizer:] method, and query the RemoteScrollingCoordinatorProxy for the touch
        actions matching that touch identifier.

        Tests: pointerevents/ios/touch-action-none-overlap.html
               pointerevents/ios/touch-action-pan-x-overlap.html
               pointerevents/ios/touch-action-pan-y-overlap.html
               pointerevents/ios/touch-action-pinch-zoom-overlap.html

        * UIProcess/PageClient.h:
        (WebKit::PageClient::activeTouchIdentifierForGestureRecognizer):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp: Maintain a touch identifier to touch actions map.
        (WebKit::RemoteScrollingCoordinatorProxy::activeTouchActionsForTouchIdentifier const):
        (WebKit::RemoteScrollingCoordinatorProxy::setTouchActionsForTouchIdentifier):
        (WebKit::RemoteScrollingCoordinatorProxy::clearTouchActionsForTouchIdentifier):
        (WebKit::RemoteScrollingCoordinatorProxy::touchActionDataAtPoint const): Deleted.
        (WebKit::RemoteScrollingCoordinatorProxy::touchActionDataForScrollNodeID const): Deleted.
        (WebKit::RemoteScrollingCoordinatorProxy::setTouchDataForTouchIdentifier): Deleted.
        (WebKit::RemoteScrollingCoordinatorProxy::clearTouchDataForTouchIdentifier): Deleted.
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        (-[WKScrollingNodeScrollViewDelegate _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::activeTouchActionsForGestureRecognizer const):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::touchActionData const): Deleted.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::activeTouchIdentifierForGestureRecognizer):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView activeTouchIdentifierForGestureRecognizer:]):
        (-[WKContentView _handleTouchActionsForTouchEvent:]):

2019-05-08  Megan Gardner  <megan_gardner@apple.com>

        Add quirks to emulate undo and redo in hidden editable areas on some websites
        https://bugs.webkit.org/show_bug.cgi?id=197452

        Reviewed by Alex Christensen.

        We need to make our own undo manager to allow undo even when 
        the manager is empty. This is to interface with rich editing 
        websites that don't actually interface with our undo abilities.
        Then we need to generate synthetic undo and redo in the web process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isCurrentURLHost const):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKNSUndoManager initWithContentView:]):
        (-[WKNSUndoManager canUndo]):
        (-[WKNSUndoManager canRedo]):
        (-[WKNSUndoManager undo]):
        (-[WKNSUndoManager redo]):
        (-[WKContentView undoManager]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView generateSyntheticUndoRedo:]):
        (-[WKContentView hasHiddenContentEditable]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::generateSyntheticUndoRedo):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleEditingKeyboardEvent):
        (WebKit::WebPage::generateSyntheticUndoRedo):

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set HSTS storage directory
        https://bugs.webkit.org/show_bug.cgi?id=197259
        <rdar://problem/48797895>

        Reviewed by Brady Eidson.

        It is with great sadness that I lament the design of this SPI, which is necessitated by the process-global nature of the SPI that
        I must call and the time at which I must call it (before any networking calls have been made).
        I'm also not thrilled about the fact that the unit test infrastructure I developed for this in r244594 cannot be used because
        the SPI that I must call does not work on iOS simulator or Mac.  I have verified the SPI is being called and that when called on iOS,
        and that CFNetwork does the right thing with it.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setHSTSStorageDirectory:]):
        (-[_WKProcessPoolConfiguration hstsStorageDirectory]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2019-05-08  Daniel Bates  <dabates@apple.com>

        Pass insertTextAsync options as a struct
        https://bugs.webkit.org/show_bug.cgi?id=197710

        Reviewed by Brent Fulgham.

        WebPageProxy::insertTextAsync() is becoming unwieldy to work with given the large number of
        optional arguments that can be passed to it. Let's pass a struct instead.

        * Shared/Cocoa/InsertTextOptions.cpp: Added.
        (IPC::ArgumentCoder<WebKit::InsertTextOptions>::encode):
        (IPC::ArgumentCoder<WebKit::InsertTextOptions>::decode):
        * Shared/Cocoa/InsertTextOptions.h: Added.
        * Shared/EditingRange.h: Add EnumTrait so that we can encode the EditingRangeIsRelativeTo
        enumeration.
        * SourcesCocoa.txt: Add a new file.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::insertText): Update code now that we pass a struct.
        (WebKit::WebViewImpl::setMarkedText): Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::insertTextAsync): Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView insertText:]): Ditto.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertDictatedTextAsync): Ditto.
        * WebKit.xcodeproj/project.pbxproj: Add new files.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync): Ditto.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Ditto.

2019-05-08  Timothy Hatcher  <timothy@apple.com>

        Add plumbing for inactive system colors in RenderTheme cache.
        https://bugs.webkit.org/show_bug.cgi?id=197699
        rdar://problem/49406936

        Reviewed by Tim Horton.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::effectiveAppearanceIsInactive):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::effectiveAppearanceIsInactive const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::useInactiveAppearance const):
        (WebKit::WebPageProxy::effectiveAppearanceDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::effectiveAppearanceIsInactive const):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetUseDarkAppearance):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shrinkToFitContentTimer):
        (WebKit::WebPage::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.

2019-05-08  Chris Dumez  <cdumez@apple.com>

        Regression: Crash at WebKit: PAL::HysteresisActivity::start
        https://bugs.webkit.org/show_bug.cgi?id=197666
        <rdar://problem/50037153>

        Reviewed by Geoffrey Garen.

        We've recently made it so that the WebContent process destroys its WebSQLiteDatabaseTracker when preparing
        for process suspension and then re-constructs it when resuming. The issue is that the WebSQLiteDatabaseTracker
        internal implementation was calling callOnMainThread() and capturing |this| to start/stop its HysteresisActivity.
        As a result, |this| could be dead by the time we're on the main thread and we'd crash.

        To address the issue, we no longer destroy the WebSQLiteDatabaseTracker when preparing to suspend. Instead, we
        set a 'isSuspended' flag on the WebSQLiteDatabaseTracker so that it stops notifying the WebProcess of changes.

        Also clean up the class a bit so that:
        1. The constructor takes in a WTF::Function instead of a NetworkProcess / WebProcess reference. This is provides
           better layering. The WebSQLiteDatabaseTracker should not need to know anything about those objects.
        2. Use RunLoop::main().dispatch() instead of callOnMainThread() since we're in WebKit2 code.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        * Shared/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::~WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::willBeginFirstTransaction):
        (WebKit::WebSQLiteDatabaseTracker::didFinishLastTransaction):
        (WebKit::WebSQLiteDatabaseTracker::hysteresisUpdated): Deleted.
        * Shared/WebSQLiteDatabaseTracker.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::m_nonVisibleProcessCleanupTimer):
        (WebKit::WebProcess::initializeSQLiteDatabaseTracker):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):
        (WebKit::m_webSQLiteDatabaseTracker): Deleted.
        * WebProcess/WebProcess.h:

2019-05-08  Tim Horton  <timothy_horton@apple.com>

        iOS: Selection is dismissed even if click is preventDefault()'d
        https://bugs.webkit.org/show_bug.cgi?id=197686
        <rdar://problem/49398824>

        Reviewed by Wenson Hsieh.

        We currently unconditionally dismiss the selection on any tap; however
        if a site preventDefault()s on click, we shouldn't perform the default
        action of dismissing the selection.

        Instead of clearing the selection in the UI process, clear it in the
        Web content process if we don't dispatch a synthetic click; the normal
        WebCore machinery will handle it in the case that we do.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _singleTapRecognized:]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::commitPotentialTapFailed):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::clearSelection):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):

2019-05-08  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Support navigation gesture on touchscreens
        https://bugs.webkit.org/show_bug.cgi?id=197690

        Reviewed by Michael Catanzaro.

        Touch events generate scroll events that are handled in webkitWebViewBaseHandleWheelEvent(),
        bypassing webkitWebViewBaseScrollEvent(). Because of that, ViewGestureController never receives
        them. Hence pass scroll events to ViewGestureController in webkitWebViewBaseHandleWheelEvent()
        instead.

        For touch events, gesture progress calculation has to take window width into account to make
        the page perfectly follow finger, and deltas are additionally divided by Scrollbar::pixelsPerLineStep(),
        so compensate for that.

        For touchpad events, change delta multiplier to 10 to match GTK behavior, and introduce a 400px
        base width so the swipe speed doesn't change from the previous behavior.

        Because of the multiplier change, threshold for triggering the gesture with touchpad is now 4
        times larger.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseHandleWheelEvent): Move ViewGestureController bits here.
        (webkitWebViewBaseScrollEvent): Removed ViewGestureController bits.
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
        Allow events from touchscreen devices.
        (WebKit::isTouchEvent): Added.
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas):
        Change delta multipliers.
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
        Change delta multipliers, account for view width for touchscreen events.

2019-05-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add a quirk to synthesize mouse events when modifying the selection
        https://bugs.webkit.org/show_bug.cgi?id=197683
        <rdar://problem/48003980>

        Reviewed by Tim Horton.

        Introduces support for dispatching synthetic mouse events when modifying the selection on some websites. See
        below for more details.

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

        Instead of executing a "SelectAll" editing command using the generic WebPage::executeEditCommand method,
        introduce a separate method for selectAll that executes the "SelectAll" edit command and then does some
        platform-specific work. See platformDidSelectAll.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectAllForWebView:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::selectAll):
        (WebKit::WebPage::shouldDispatchSyntheticMouseEventsWhenModifyingSelection const):

        Add a helper method to determine whether the quirk should be enabled.

        (WebKit::WebPage::platformDidSelectAll):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::elementRectInRootViewCoordinates):

        Move this function closer to the top of the file so that it can be used in
        dispatchSyntheticMouseEventsForSelectionGesture.

        (WebKit::WebPage::clearSelection):
        (WebKit::WebPage::dispatchSyntheticMouseEventsForSelectionGesture):

        Add a helper method to dispatch a synthetic mouse event for a given selection gesture type. Used in several
        places in WebPageIOS to synthesize and dispatch mouse events during selection.

        (WebKit::WebPage::updateSelectionWithTouches):

        When changing the selection with selection handles, fake mousedown when the user first touches down on the
        selection handle; mousemove as the user is moving the handle around; and finally, mouseup when the user lets go.

        (WebKit::WebPage::extendSelection):
        (WebKit::WebPage::platformDidSelectAll):

        When tapping "Select All" and/or "Select" in the callout menu, fake a mousedown at the selection start, then a
        mousemove at selection end, and finally, a mouseup at selection end.

        (WebKit::WebPage::getFocusedElementInformation):

2019-05-08  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Pinch Zooming has no maximum
        https://bugs.webkit.org/show_bug.cgi?id=194865

        Reviewed by Michael Catanzaro.

        Set maximum zoom to 3.0, reflecting the value on macOS and iOS.

        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::ZoomGesture::scaleChanged):

2019-05-08  Rob Buis  <rbuis@igalia.com>

        Link prefetch not useful for top-level navigation
        https://bugs.webkit.org/show_bug.cgi?id=195623

        Reviewed by Youenn Fablet.

        Cache cross-domain top-level prefetches in a dedicated cache. When a navigation
        to the same url is done within a threshold (5 seconds), reuse the
        prefetch cache entry, move it to the disk cache and navigate to
        the url, meaning no extra network trip is needed. When not used within
        the threshold period, the prefetch entry will be erased using a timer.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        (WebKit::NetworkResourceLoader::isCrossOriginPrefetch const):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::prefetchCache):
        (WebKit::NetworkSession::clearPrefetchCache):
        * NetworkProcess/cache/PrefetchCache.cpp: Added.
        (WebKit::PrefetchCache::Entry::Entry):
        (WebKit::PrefetchCache::PrefetchCache):
        (WebKit::PrefetchCache::~PrefetchCache):
        (WebKit::PrefetchCache::clear):
        (WebKit::PrefetchCache::take):
        (WebKit::PrefetchCache::store):
        (WebKit::PrefetchCache::clearExpiredEntries):
        * NetworkProcess/cache/PrefetchCache.h: Added.
        (WebKit::PrefetchCache::Entry::releaseBuffer):
        * Shared/WebPreferences.yaml:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-05-07  Chris Dumez  <cdumez@apple.com>

        Simplify logic to prevent App Nap in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=197674

        Reviewed by Geoff Garen.

        Simplify logic to prevent App Nap in WebPage. We do not need both m_userActivityHysteresis and
        m_userActivity since UserActivity is already a HysteresisActivity. We had 2 levels of
        HysteresisActivity stacked on top of one another. Also rename "process suppression" to "app nap" as
        I find it clearer.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateThrottleState):
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::updatePreferences):
        (WebKit::m_userActivityHysteresis): Deleted.
        (WebKit::WebPage::updateUserActivity): Deleted.
        * WebProcess/WebPage/WebPage.h:

2019-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r244230): Web Automation: use null instead of empty string as success result of scripts when alert is open
        https://bugs.webkit.org/show_bug.cgi?id=197655

        Reviewed by Devin Rousso.

        This regressed in r244230, the case of an alert open while running a script is now handled in WebKit side, but
        an empty string is returned as a result, which is not a valid JSON serialized string. That made all user prompts
        tests to fail.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::willShowJavaScriptDialog): Use null as script result instead of an empty string.

2019-05-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245038.

        Breaks internal builds.

        Reverted changeset:

        "Add SPI to set a list of hosts to which to send custom header
        fields cross-origin"
        https://bugs.webkit.org/show_bug.cgi?id=197397
        https://trac.webkit.org/changeset/245038

2019-05-07  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] A new request should always suppress the pending request if any
        https://bugs.webkit.org/show_bug.cgi?id=191517
        <rdar://problem/46888222>

        Reviewed by Brent Fulgham.

        Previously we blocked new WebAuthN requests whenever a pending request was in progress
        to prevent background tabs from DoS foreground tabs. However, in r244938, the WebAuthN
        API was changed to restrict request handling to the focused document. Therefore, we no
        longer have a risk of DoS.

        Apart from the vanished benefit, this behavoir actually blocks new pages to use
        WebAuthN API in the period between [the previous initating page is closed, the pending
        request is hanedled/timeout].

        Also, it makes sense to have the current focused document preempt the pending request.
        Therefore, the policy will be to always cancel any pending requests whenever a new
        request is made. This will enforce the policy of handling only one request at a time.

        Note that the current implementation doesn't explicitly cancel pending requests in the
        Authenticators, which means that we could receive responses from the Authenticator that
        were meant for a previous (now cancelled) request. A follow-up patch (see Bug 191523)
        will implement an Authenticator feature to support immediate cancellation.

        In the meantime, to protect the atomicity of the request/response pair, i.e., preventing an old
        response being used for a new request, there are two safeguards:
        1) In web process, each request to UI process is paired with an incremental ID, and therefore an old
        response from UI process would have a different ID than the current request, which will then be ignored.
        2) In UI process, all responses from authenticators will be piped to the main run loop for processing.
        Therefore, when the new request comes in, the old response is either processed or waiting in the pipe.
        To prevent the latter being processed, the new request will immediately destroy any authenticators bound
        to the old response in the current run loop. Hence, in the next run loop when dealing the old response,
        the lambda will have no where to hand the response over.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::makeCredential):
        (WebKit::AuthenticatorManager::getAssertion):
        (WebKit::AuthenticatorManager::clearStateAsync):
        (WebKit::AuthenticatorManager::clearState):
        (WebKit::AuthenticatorManager::timeOutTimerFired):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        (WebKit::WebAuthenticatorCoordinatorProxy::requestReply):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.messages.in:
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        (WebKit::WebAuthenticatorCoordinator::makeCredential):
        (WebKit::WebAuthenticatorCoordinator::getAssertion):
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.messages.in:

2019-05-07  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Crash with sandbox error
        https://bugs.webkit.org/show_bug.cgi?id=197675
        <rdar://problem/50473330>

        Reviewed by Geoffrey Garen.

        This crash is caused by missing syscall rules in the sandbox.

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

2019-05-07  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set a list of hosts to which to send custom header fields cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=197397

        Reviewed by Geoff Garen.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::decode):
        * Shared/WebsitePoliciesData.h:
        * SourcesCocoa.txt:
        * UIProcess/API/APICustomHeaderFields.h: Added.
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::WebsitePolicies):
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesCopyCustomHeaderFields):
        (WKWebsitePoliciesSetCustomHeaderFields):
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _customHeaderFields]):
        (-[WKWebpagePreferences _setCustomHeaderFields:]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:
        * UIProcess/API/Cocoa/_WKCustomHeaderFields.h: Added.
        * UIProcess/API/Cocoa/_WKCustomHeaderFields.mm: Added.
        (-[_WKCustomHeaderFields init]):
        (-[_WKCustomHeaderFields dealloc]):
        (-[_WKCustomHeaderFields fields]):
        (-[_WKCustomHeaderFields setFields:]):
        (-[_WKCustomHeaderFields thirdPartyDomains]):
        (-[_WKCustomHeaderFields setThirdPartyDomains:]):
        (-[_WKCustomHeaderFields _apiObject]):
        * UIProcess/API/Cocoa/_WKCustomHeaderFieldsInternal.h: Added.
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies customHeaderFields]): Deleted.
        (-[_WKWebsitePolicies setCustomHeaderFields:]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::takeFocus):
        (WebKit::WebViewImpl::accessibilityAttributeValue):
        * WebKit.xcodeproj/project.pbxproj:

2019-05-07  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Cannot build documentation with gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=197663

        Reviewed by Philippe Normand.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init): Escape content which gets wrongly interpreted as
        SGML tags by gtk-doc as Markdown preformatted content, which fits well for the
        tag names in the documentation for the WebKitSettings:enable-media property.

2019-05-07  John Wilander  <wilander@apple.com>

        Storage Access API: Make two changes requested by developers and complete refactoring and cleanup
        https://bugs.webkit.org/show_bug.cgi?id=197648
        <rdar://problem/50527493>

        Reviewed by Chris Dumez.

        Developers have requested two minor changes to the Storage Access API:
        - Only consume the user gesture when the user explicitly denies access.
        - Make document.hasStorageAccess() return true instead of false when the feature is off.

        In addition to this, we have refactoring and cleanup to do. Namely:
        - Make use of WebCore::RegistrableDomain all the way.
        - Remove dead code in WebKit::NetworkProcess since the calls now go through NetworkConnectionToWebProcess.
        - Introduce boolean enums for state handling.
        - Break out the Storage Access API functionality into a supplement of WebCore::Document.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasUserGrantedStorageAccessThroughPrompt const):
            These changes are due to the new enums WebCore::StorageAccessWasGranted and
            WebCore::StorageAccessPromptWasShown.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasUserGrantedStorageAccessThroughPrompt):
            These changes are due to the new enums WebCore::StorageAccessWasGranted and
            WebCore::StorageAccessPromptWasShown.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
            These changes are due to the new enums WebCore::StorageAccessWasGranted and
            WebCore::StorageAccessPromptWasShown.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
            These changes are due to the new enums WebCore::StorageAccessWasGranted and
            WebCore::StorageAccessPromptWasShown.
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted): Deleted.
            This function is now no longer exposed and its functionality could be folded into
            the existing WebResourceLoadStatisticsStore::requestStorageAccess() which is more
            clearly named.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::hasStorageAccess):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
            These changes are due to the new enums WebCore::StorageAccessWasGranted and
            WebCore::StorageAccessPromptWasShown.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::hasStorageAccessForFrame): Deleted.
        (WebKit::NetworkProcess::hasStorageAccess): Deleted.
        (WebKit::NetworkProcess::requestStorageAccess): Deleted.
        (WebKit::NetworkProcess::requestStorageAccessGranted): Deleted.
        (WebKit::NetworkProcess::grantStorageAccess): Deleted.
        (WebKit::NetworkProcess::removeAllStorageAccess): Deleted.
            These functions were left behind in the move of ITP to the network process.
            This communication goes through WebKit::NetworkConnectionToWebProcess since a while back.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Scripts/webkit/messages.py:
            Instructions for derived IPC code on how to include the new enums
            WebCore::StorageAccessWasGranted and WebCore::StorageAccessPromptWasShown.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::hasStorageAccessForFrame): Deleted.
        (WebKit::NetworkProcessProxy::hasStorageAccess): Deleted.
        (WebKit::NetworkProcessProxy::requestStorageAccess): Deleted.
        (WebKit::NetworkProcessProxy::grantStorageAccess): Deleted.
        (WebKit::NetworkProcessProxy::removeAllStorageAccess): Deleted.
            These functions were left behind in the move of ITP to the network process.
            This communication goes through WebKit::NetworkConnectionToWebProcess since a while back.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::hasStorageAccess): Deleted.
        (WebKit::WebsiteDataStore::requestStorageAccess): Deleted.
        (WebKit::WebsiteDataStore::grantStorageAccess): Deleted.
            These functions were left behind in the move of ITP to the network process.
            This communication goes through WebKit::NetworkConnectionToWebProcess since a while back.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::hasStorageAccess):
        (WebKit::WebChromeClient::requestStorageAccess):
            These changes are due to the new enums WebCore::StorageAccessWasGranted and
            WebCore::StorageAccessPromptWasShown. They also receive WebCore::RegistrableDomain
            objects instead of Strings now.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hasStorageAccess):
        (WebKit::WebPage::requestStorageAccess):
            These changes are due to the new enums WebCore::StorageAccessWasGranted and
            WebCore::StorageAccessPromptWasShown. They also receive WebCore::RegistrableDomain
            objects instead of Strings now.
        * WebProcess/WebPage/WebPage.h:

2019-05-07  John Wilander  <wilander@apple.com>

        Change IsITPFirstPartyWebsiteDataRemovalEnabled from DEFAULT_EXPERIMENTAL_FEATURES_ENABLED to true.
        https://bugs.webkit.org/show_bug.cgi?id=197667
        <rdar://problem/50549288>

        Reviewed by Brent Fulgham.

        * Shared/WebPreferences.yaml:

2019-05-07  Tim Horton  <timothy_horton@apple.com>

        iOSMac Share Sheet shows up at the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=197649
        <rdar://problem/49922942>

        Reviewed by Megan Gardner.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showShareSheet:inRect:completionHandler:]):
        (-[WKContentView _hoverGestureRecognizerChanged:]):
        Pass the last mouse-over location as the presentation location for the 
        share sheet, if we don't have a rect to present from. Centering the popover
        like we do on iPad doesn't work so well (at all) with a macOS context menu.

2019-05-07  Chris Dumez  <cdumez@apple.com>

        Rename ConnectionMac.mm to ConnectionCocoa.mm since it is used on both macOS and iOS
        https://bugs.webkit.org/show_bug.cgi?id=197661

        Reviewed by Alexey Proskuryakov.

        * Platform/IPC/cocoa/ConnectionCocoa.mm: Renamed from Source/WebKit/Platform/IPC/mac/ConnectionMac.mm.
        (IPC::ConnectionTerminationWatchdog::createConnectionTerminationWatchdog):
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired):
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::cancelReceiveSource):
        (IPC::Connection::terminateSoon):
        (IPC::Connection::platformInitialize):
        (IPC::Connection::open):
        (IPC::Connection::sendMessage):
        (IPC::Connection::platformCanSendOutgoingMessages const):
        (IPC::Connection::sendOutgoingMessage):
        (IPC::Connection::initializeSendSource):
        (IPC::Connection::resumeSendSource):
        (IPC::createMessageDecoder):
        (IPC::readFromMachPort):
        (IPC::Connection::receiveSourceEventHandler):
        (IPC::Connection::identifier const):
        (IPC::Connection::getAuditToken):
        (IPC::Connection::kill):
        (IPC::AccessibilityProcessSuspendedNotification):
        (IPC::Connection::willSendSyncMessage):
        (IPC::Connection::didReceiveSyncReply):
        (IPC::Connection::remoteProcessID const):
        * Platform/IPC/cocoa/ImportanceAssertion.h: Renamed from Source/WebKit/Platform/IPC/mac/ImportanceAssertion.h.
        (IPC::ImportanceAssertion::ImportanceAssertion):
        (IPC::ImportanceAssertion::~ImportanceAssertion):
        * Platform/IPC/cocoa/MachMessage.cpp: Renamed from Source/WebKit/Platform/IPC/mac/MachMessage.cpp.
        (IPC::MachMessage::create):
        (IPC::MachMessage::MachMessage):
        (IPC::MachMessage::~MachMessage):
        (IPC::MachMessage::messageSize):
        (IPC::MachMessage::leakDescriptors):
        * Platform/IPC/cocoa/MachMessage.h: Renamed from Source/WebKit/Platform/IPC/mac/MachMessage.h.
        (IPC::MachMessage::size const):
        (IPC::MachMessage::header):
        (IPC::MachMessage::messageReceiverName const):
        (IPC::MachMessage::messageName const):
        * Platform/IPC/cocoa/MachPort.h: Renamed from Source/WebKit/Platform/IPC/mac/MachPort.h.
        (IPC::MachPort::MachPort):
        (IPC::MachPort::encode const):
        (IPC::MachPort::decode):
        (IPC::MachPort::port const):
        (IPC::MachPort::disposition const):
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-05-07  Antti Koivisto  <antti@apple.com>

        <body> with overflow:hidden shouldn't be keyboard scrollable on iOS
        https://bugs.webkit.org/show_bug.cgi?id=197659
        <rdar://problem/50541453>

        Reviewed by Antoine Quint.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]):

        Disable also keyboard scrolling when touch scrolling is disabled.

2019-05-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Avoid crashing the UI process when writing empty data to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=197644
        <rdar://problem/50526364>

        Reviewed by Tim Horton.

        Test: WebKit.WKWebProcessPlugInDoNotCrashWhenCopyingEmptyClientData

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setBufferForType):

        Make this function robust by not attempting to create a shared memory buffer in the case where the given data
        buffer is empty.

2019-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash in webkitWebViewBaseSetEnableBackForwardNavigationGesture
        https://bugs.webkit.org/show_bug.cgi?id=197653

        Reviewed by Žan Doberšek.

        We still need to null-check the ViewGestureController there, since it can be called with a running process but
        not yet attached when using a related view.

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

2019-05-07  Antti Koivisto  <antti@apple.com>

        <body> with overflow:hidden CSS is scrollable on iOS
        https://bugs.webkit.org/show_bug.cgi?id=153852
        <rdar://problem/38715356>

        Reviewed by Antoine Quint.

        Disable touch scrolling of the main scroll view when <body> has overflow:hidden.

        This already works for subframes where we don't create a scrollview in the first place.
        The patch also adds a test for that.

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

        Update scrollability after scrolling tree commits.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::hasScrollableMainFrame const):

        Base the decision on root ScrollingTreeScrollingNode::canHaveScrollbars() which is computed from overflow.
        This matches Mac where wheel event dispatch is similarly blocked based on this property.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:

2019-05-06  James Savage  <james.savage@apple.com>

        Improve coordination for creating UIWindow instances.
        https://bugs.webkit.org/show_bug.cgi?id=197578.
        <rdar://problem/50456965>.

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (makeWindowFromView): Pull out window creation.
        (-[WKFullScreenWindowController enterFullScreen]): Call new helper function.

2019-05-06  Tim Horton  <timothy_horton@apple.com>

        _overrideViewportWithArguments does not work when called before loading
        https://bugs.webkit.org/show_bug.cgi?id=197638
        <rdar://problem/50505111>

        Reviewed by Wenson Hsieh.

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

2019-05-06  Chris Dumez  <cdumez@apple.com>

        ASSERT at WebKit::NetworkCache::makeSafeToUseMemoryMapForPath under Storage::StoreBodyAsBlob when running WebDriver tests
        https://bugs.webkit.org/show_bug.cgi?id=197635
        <rdar://problem/50473149>

        Reviewed by Geoffrey Garen.

        We need to make sure the the path at blobPathString exists before calling FileSystem::makeSafeToUseMemoryMapForPath().
        If the blob does not already exist when BlobStorage::add() is called, what will create it is the call to Data::mapToFile().

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::add):

2019-05-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Occasional crashes in layout tests when firing the shrink-to-fit-content timer
        https://bugs.webkit.org/show_bug.cgi?id=197629
        <rdar://problem/50514382>

        Reviewed by Tim Horton.

        Fixes several crashing layout tests by stopping the shrink-to-fit-content timer when the page closes.

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

2019-05-04  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=197510

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):

2019-05-06  Keith Rollin  <krollin@apple.com>

        Temporarily disable generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=197619
        <rdar://problem/50507392>

        Reviewed by Alex Christensen.

        We need to perform a significant update to the generate-xcfilelist
        scripts. This work involves coordinated work with another facility. If
        the work does not occur in tandem, the build will be broken. To avoid
        this, disable the invoking of the scripts during the transition. The
        checking will be restored once the new scripts are in place.

        * Scripts/check-xcfilelists.sh:

2019-05-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r244984.

        * WebProcess/cocoa/WebProcessCocoa.mm:

2019-05-06  Chris Dumez  <cdumez@apple.com>

        Prewarmed WebContent processes never app nap
        https://bugs.webkit.org/show_bug.cgi?id=197630

        Reviewed by Geoffrey Garen.

        Do not require actually having a WebPage in the WebContent process to App Nap.

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

2019-05-06  Daniel Bates  <dabates@apple.com>

        Fix the build after r244975
        (https://bugs.webkit.org/show_bug.cgi?id=197474)

        Actually make use of the Keyboard Event when building with USE(UIKIT_KEYBOARD_ADDITIONS)
        and substitute -> for . since it's now passed by reference.

        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::handleInputMethodKeydown):

2019-05-06  Jer Noble  <jer.noble@apple.com>

        Adopt AVStreamDataParser.audiovisualMIMETypes
        https://bugs.webkit.org/show_bug.cgi?id=197581
        <rdar://problem/50458981>

        Reviewed by Eric Carlson.

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

2019-05-06  Chris Dumez  <cdumez@apple.com>

        Terminate service workers that use too much CPU / power
        https://bugs.webkit.org/show_bug.cgi?id=197626
        <rdar://problem/50374707>

        Reviewed by Geoffrey Garen.

        Terminate service worker processes that use over 50% CPU on average over the last 8 minutes,
        similarly to what we do for background WebContent processes.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didExceedCPULimit):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateCPULimit):
        (WebKit::WebProcess::updateCPUMonitorState):

2019-05-06  Daniel Bates  <dabates@apple.com>

        Google Docs & Yahoo! Japan: Can’t compose characters with Chinese or Japanese keyboard
        https://bugs.webkit.org/show_bug.cgi?id=197474
        <rdar://problem/47219324>

        Reviewed by Ryosuke Niwa.

        Adopt UIKit SPI (added in <rdar://problem/50181162>) to ask the Input Manager to handle
        the key event. If the Input Manager handled it then we pass along this information to
        WebCore, just as we do for Mac, so that it can alter its event handling logic. Otherwise,
        we handle the event as we do now.

        A large part of this patch is fixing up #if defs to compile more Mac code when building
        on iOS.

        * Platform/spi/ios/UIKitSPI.h: Expose more SPI.
        * Shared/NativeWebKeyboardEvent.h:
        * Shared/WebEvent.h:
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode const):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/ios/NativeWebKeyboardEventIOS.mm:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/ios/WebIOSEventFactory.h:
        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebKeyboardEvent):
        Compile more Mac code on iOS. Just like on Mac we maintain some bookkeeping on
        whether an event was handled by the Input Manager.

        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage): Pass NativeWebKeyboardEvent::HandledByInputMethod::No
        to keep the behavior we have now.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView shouldSuppressUpdateCandidateView]): Added. Used to tell UIKit whether to
        suppress updating/showing the candidate view.
        (-[WKContentView setMarkedText:selectedRange:]):
        Bookkeeping to track whether we need to delay showing/updating the inline candidate view.
        The concept in UIKit is deferment, but at the time of writing its simply a request to delay
        the update for 0.4 seconds. We opt into this delay only for the first key that begins
        marked text (i.e. the transition from no marked text to marked text). We do this because we
        may not have up-to-date editor state at the time UIKit is ready to show/update the inline
        candidate view for us to answer -textFirstRect and -textLastRect, which UIKit calls as part
        of computing the frame rect for the inline candidate view on screen. Once we receive up-to-date
        editor state, in -selectionChanged, we tell UIKit to layout the keyboard, which ultimately
        causes it to re-compute the frame rect for the inline candidate view and show it.

        (-[WKContentView handleKeyWebEvent:]): Pass NativeWebKeyboardEvent::HandledByInputMethod::No
        to keep the behavior we have now. 
        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]): Ask the keyboard to handle the
        event using the Input Manager. If it was handled then there is no need to delay calling the
        completion handler, call it, then tell the web process about the key event and that it was
        already handled by the Input Manager.
        (-[WKContentView _selectionChanged]): Tell the keyboard to update the candidate view, if needed.
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::handleInputMethodKeydown): Mark the event as default handled if
        the UI process told us that the event was handled by the Input Manager just like we do on Mac.

2019-05-06  Alex Christensen  <achristensen@webkit.org>

        Null check m_mainFrame in WebPageProxy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=197618
        <rdar://problem/47463054>

        Reviewed by Geoffrey Garen.

        It's already null checked in some places, and the places where it isn't are causing crashes.
        Let's fix all of them.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::createNewPage):

2019-05-06  Brent Fulgham  <bfulgham@apple.com>

        Use more efficient path resolution logic
        https://bugs.webkit.org/show_bug.cgi?id=197389
        <rdar://problem/50268491>

        Reviewed by Maciej Stachowiak.

        The code in SandboxExtensionsCocoa.mm 'resolveSymlinksInPath' is pretty inefficient, and tries to reproduce (badly)
        logic that is already provided by the operating system.

        To make matters worse, 'resolvePathForSandboxExtension' was effectively performing the work of fully resolving
        symlinks twice, since NSString's 'stringByStandardizingPath' method does some of this already.

        Instead, we should just use NSString's 'stringByResolvingSymlinksInPath', which does the symlink resolution
        using more efficient logic than our 'resolveSymlinksInPath' code.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::resolveSymlinksInPath): Removed.
        (WebKit::resolvePathForSandboxExtension): Remove redundant call to 'resolveSymlinksInPath', and switches from
        'stringByStandardizingPath' to 'stringByResolvingSymlinksInPath', which can take the place of both calls.
        (WebKit::stringByResolvingSymlinksInPath): Switch to call 'stringByResolvingSymlinksInPath'.

2019-05-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce SPI to request modern compatibility mode but defer to site-specific quirks
        https://bugs.webkit.org/show_bug.cgi?id=197614
        <rdar://problem/50208577>

        Reviewed by Tim Horton.

        Add plumbing for a new _allowSiteSpecificQuirksToOverrideCompatibilityMode SPI property on
        WKWebpagePreferences.

        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _allowSiteSpecificQuirksToOverrideCompatibilityMode]):
        (-[WKWebpagePreferences _setAllowSiteSpecificQuirksToOverrideCompatibilityMode:]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:
        * UIProcess/WebPageProxy.cpp:

        Use currentRequest instead of originalRequest; see internal change for more details.

        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

2019-05-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244917.

        Caused
        TestWebKitAPI.WKWebView.InitializingWebViewWithEphemeralStorageDoesNotLog
        failure on debug bots.

        Reverted changeset:

        "Use more efficient path resolution logic"
        https://bugs.webkit.org/show_bug.cgi?id=197389
        https://trac.webkit.org/changeset/244917

2019-05-04  Alex Christensen  <achristensen@webkit.org>

        Revert r244953 and r244954 because they broke internal builds.
        https://bugs.webkit.org/show_bug.cgi?id=197534

        * Platform/spi/ios/PDFKitSPI.h:
        * Platform/spi/ios/UIKitSPI.h: Added.
        (currentUserInterfaceIdiomIsPad):
        * Shared/DocumentEditingContext.mm:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        * Shared/ios/NativeWebKeyboardEventIOS.mm:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        * Shared/ios/WebIconUtilities.mm:
        * UIProcess/API/Cocoa/NSAttributedString.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ApplicationStateTracker.mm:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        * UIProcess/Cocoa/WKShareSheet.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/Gamepad/ios/UIGamepadProviderIOS.mm:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        * UIProcess/WKImagePreviewViewController.mm:
        * UIProcess/_WKTouchEventGenerator.mm:
        * UIProcess/ios/DragDropInteractionState.h:
        * UIProcess/ios/InputViewUpdateDeferrer.mm:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/SmartMagnificationController.mm:
        * UIProcess/ios/TextCheckerIOS.mm:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        * UIProcess/ios/WKActionSheet.mm:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        * UIProcess/ios/WKPDFPageNumberIndicator.mm:
        * UIProcess/ios/WKPDFView.mm:
        * UIProcess/ios/WKPasswordView.mm:
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        * UIProcess/ios/WKSyntheticTapGestureRecognizer.h:
        * UIProcess/ios/WKWebEvent.mm:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        * UIProcess/ios/forms/WKFocusedFormControlView.h:
        * UIProcess/ios/forms/WKFormColorControl.mm:
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        * UIProcess/ios/forms/WKFormInputControl.mm:
        * UIProcess/ios/forms/WKFormPopover.mm:
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        * UIProcess/ios/forms/WKNumberPadViewController.mm:
        * UIProcess/ios/forms/WKQuickboardListViewController.h:
        * UIProcess/ios/forms/WKSelectMenuListViewController.mm:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2019-05-04  Alex Christensen  <achristensen@webkit.org>

        Merge the three UIKitSPI.h files into a single one in PAL
        https://bugs.webkit.org/show_bug.cgi?id=197534

        Reviewed by Darin Adler.

        * Platform/spi/ios/PDFKitSPI.h:
        * Platform/spi/ios/UIKitSPI.h: Removed.
        * Shared/DocumentEditingContext.mm:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        * Shared/ios/NativeWebKeyboardEventIOS.mm:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        * Shared/ios/WebIconUtilities.mm:
        * UIProcess/API/Cocoa/NSAttributedString.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ApplicationStateTracker.mm:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        * UIProcess/Cocoa/WKShareSheet.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/Gamepad/ios/UIGamepadProviderIOS.mm:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        * UIProcess/WKImagePreviewViewController.mm:
        * UIProcess/_WKTouchEventGenerator.mm:
        * UIProcess/ios/DragDropInteractionState.h:
        * UIProcess/ios/InputViewUpdateDeferrer.mm:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/SmartMagnificationController.mm:
        * UIProcess/ios/TextCheckerIOS.mm:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        * UIProcess/ios/WKActionSheet.mm:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        * UIProcess/ios/WKPDFPageNumberIndicator.mm:
        * UIProcess/ios/WKPDFView.mm:
        * UIProcess/ios/WKPasswordView.mm:
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        * UIProcess/ios/WKSyntheticTapGestureRecognizer.h:
        * UIProcess/ios/WKWebEvent.mm:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        * UIProcess/ios/forms/WKFocusedFormControlView.h:
        * UIProcess/ios/forms/WKFormColorControl.mm:
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        * UIProcess/ios/forms/WKFormInputControl.mm:
        * UIProcess/ios/forms/WKFormPopover.mm:
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        * UIProcess/ios/forms/WKNumberPadViewController.mm:
        * UIProcess/ios/forms/WKQuickboardListViewController.h:
        * UIProcess/ios/forms/WKSelectMenuListViewController.mm:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2019-05-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r244897): Caret may appear wider than normal after zooming to focus an editable element
        https://bugs.webkit.org/show_bug.cgi?id=197579

        Reviewed by Tim Horton.

        Fixes a couple of flaky tests (CaretSelectionRectAfterRestoringFirstResponderWithRetainActiveFocusedState and
        CaretSelectionRectAfterRestoringFirstResponder) that began failing after r244897. These tests both begin by
        focusing an editable element, which causes the web view to zoom in. The tests subsequently check that the caret
        rect is {{ 16, 13 }, { 2, 15 }}. While the specified caret rect (coming from EditorState) is {{ 16, 13 }, { 3,
        15 }}, the narrower caret rect is used because we take measures to preserve the width of the caret relative to
        the view (see the inverse scaling logic in -[WKContentView selectedTextRange] for more details).

        See below for more details.

        * UIProcess/ios/WKContentViewInteraction.h:

        Remove _isZoomingToRevealFocusedElement, now that we don't need it anymore (see -observeValueForKeyPath:).

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView observeValueForKeyPath:ofObject:change:context:]):

        Stop bailing from a selection update when changing scale, while zooming to reveal the focused element. This
        check was added in r239441 to prevent UIWKTextInteractionAssistant's selection scrolling logic from interfering
        with WKContentView-driven logic for zooming to the focused element. However, since r244141, this is no longer
        necessary since selection scrolling is only driven by code in the web process.

        This new update while zooming to reveal the focused element ensures that the WKTextRange returned by
        -selectedTextRange after zooming will have a width that is inversely scaled using the content view's current
        scale, such that it has a consistent width (relative to the web view) across different scales.

        (-[WKContentView _zoomToRevealFocusedElement]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::layerTreeCommitComplete):

        Remove any attempt here to notify PageClient about editor states after focus. This logic was actually incorrect,
        since it didn't ensure that the layer tree commit that is being completed actually contained an editor state; as
        such, the "editor state" received here could be stale.

2019-05-03  Zalan Bujtas  <zalan@apple.com>

        [iOS] outlook.live.com: Compose email frame not fully visible and not scrollable
        https://bugs.webkit.org/show_bug.cgi?id=197573
        <rdar://problem/48008441>

        Reviewed by Wenson Hsieh.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::adjustLayoutSizeIfNeeded):
        (WebKit::WebPage::setViewportConfigurationViewLayoutSize):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::immediatelyShrinkToFitContent):

2019-05-03  Dean Jackson  <dino@apple.com>

        Make imageForElementActionType a class method on _WKElementAction
        https://bugs.webkit.org/show_bug.cgi?id=197588
        <rdar://problem/50463157>

        Reviewed by Wenson Hsieh.

        Make this helper function a class method, so that it can
        be more easily detected.

        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction imageForElementActionType:]):
        (_WKUIImageForElementActionType): Deleted.

2019-05-03  Chris Dumez  <cdumez@apple.com>

        Unresponsive Service Worker processes should get killed
        https://bugs.webkit.org/show_bug.cgi?id=197580
        <rdar://problem/50458239>

        Reviewed by Geoffrey Garen.

        Enable the background responsiveness logic for service worker processes so that they get
        killed if they becomes unresponsive. The logic was previously not enabling the timer for
        service worker processes because it required having a page.

        * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
        (WebKit::BackgroundProcessResponsivenessTimer::shouldBeActive const):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didBecomeUnresponsive):
        (WebKit::WebProcessProxy::didFinishLaunching):

2019-05-03  Youenn Fablet  <youenn@apple.com>

        [iOS] set the default maximum camera count to 1 for enumerateDevices
        https://bugs.webkit.org/show_bug.cgi?id=197566

        Reviewed by Eric Carlson.

        The previous number for iOS was 2 as there is a front and a back camera.
        Since we are by default setting deviceIds to "", it is better to just have one,
        as it might confuse applications to have two devices with the same ID.

        Covered by updated test.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::computeFilteredDeviceList):

2019-05-03  Daniel Bates  <dabates@apple.com>

        Pass KeyboardEvent by reference in more places
        https://bugs.webkit.org/show_bug.cgi?id=197480

        Reviewed by Wenson Hsieh.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleEditingKeyboardEvent):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleEditingKeyboardEvent):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::handleEditingKeyboardEvent):

2019-05-03  Youenn Fablet  <youenn@apple.com>

        Enable Fetch Keep Alive by default
        https://bugs.webkit.org/show_bug.cgi?id=197331

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferences.yaml:

2019-05-03  Devin Rousso  <drousso@apple.com>

        REGRESSION(r230367): a "." is prepended before cookies set without an explicit domain
        https://bugs.webkit.org/show_bug.cgi?id=197268
        <rdar://problem/49767847>

        Reviewed by Alex Christensen.

        RFC 2965 states "If an explicitly specified value does not start with a dot, the user agent
        supplies a leading dot.", so we should only be adding a leading "." if a `domain` is provided.

        In order to not regress r230367, also delete all cookies for the non-"."-prefixed domain.

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

        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostnames): Added.
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname): Deleted.
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerDeleteCookiesForHostname):
        * NetworkProcess/Cookies/WebCookieManager.messages.in:
        * NetworkProcess/Cookies/WebCookieManager.h:
        * NetworkProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::deleteCookiesForHostnames): Added.
        (WebKit::WebCookieManager::deleteCookiesForHostname): Deleted.
        Since the underlying `NetworkStorageSession` accepts a list of domains, extend that support
        to allow the IPC to send a list of domains as well, but still keep the C API the same.

2019-05-03  Sihui Liu  <sihui_liu@apple.com>

        Add assertion to check whether shm files have maximum FileProtection of CompleteUnlessOpen
        https://bugs.webkit.org/show_bug.cgi?id=197390
        <rdar://problem/42685773>

        Reviewed by Geoffrey Garen.

        Move data protection check to WebCore so it can be applied to database files.

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::add):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::makeSafeToUseMemoryMapForPath): Deleted.
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheFileSystemCocoa.mm: Removed.
        * SourcesCocoa.txt:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::openAndMapOrCopyContentRuleList):
        (API::compiledToFile):

2019-05-03  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: [weakThis->m_view window] == weakThis->m_targetWindowForMovePreparation
        https://bugs.webkit.org/show_bug.cgi?id=197574
        <rdar://problem/50453181>

        Reviewed by Tim Horton.

        Tweak the assertion so that it holds even if the WebView gets closed because the completion
        handler has been called.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::prepareForMoveToWindow):

2019-05-03  Brent Fulgham  <bfulgham@apple.com>

        Use more efficient path resolution logic
        https://bugs.webkit.org/show_bug.cgi?id=197389
        <rdar://problem/50268491>

        Reviewed by Maciej Stachowiak.

        The code in SandboxExtensionsCocoa.mm 'resolveSymlinksInPath' is pretty inefficient, and tries to reproduce (badly)
        logic that is already provided by the operating system.

        To make matters worse, 'resolvePathForSandboxExtension' was effectively performing the work of fully resolving
        symlinks twice, since NSString's 'stringByStandardizingPath' method does some of this already.

        Instead, we should just use NSString's 'stringByResolvingSymlinksInPath', which does the symlink resolution
        using more efficient logic than our 'resolveSymlinksInPath' code.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::resolveSymlinksInPath): Removed.
        (WebKit::resolvePathForSandboxExtension): Remove redundant call to 'resolveSymlinksInPath', and switches from
        'stringByStandardizingPath' to 'stringByResolvingSymlinksInPath', which can take the place of both calls.
        (WebKit::stringByResolvingSymlinksInPath): Switch to call 'stringByResolvingSymlinksInPath'.

2019-05-02  Dean Jackson  <dino@apple.com>

        Need additional UIPreviewAction information in WKImagePreviewViewController
        https://bugs.webkit.org/show_bug.cgi?id=197540
        <rdar://problem/50430510>

        Reviewed by Wenson Hsieh.

        Include a WebKitAdditions file to provide a macro for
        additional UIPreviewAction information.

        While here, take the opportunity to move from the deprecated
        UIViewControllerPreviewAction to the newer UIPreviewAction.

        * UIProcess/WKImagePreviewViewController.mm:
        (-[WKImagePreviewViewController previewActionItems]):

2019-05-02  Dean Jackson  <dino@apple.com>

        Provide UIImages for element actions
        https://bugs.webkit.org/show_bug.cgi?id=197539
        <rdar://problem/50430363>

        Reviewed by Wenson Hsieh.

        Use an additions include to export a function that
        relates a UIImage to a _WKElementAction.

        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (_WKUIImageForElementActionType):

2019-05-03  Jay Mulani  <jmulani@apple.com>

        Expose full screen controller SPI to check if full screen is open and close full screen
        https://bugs.webkit.org/show_bug.cgi?id=197263

        Reviewed by Jer Noble.

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

2019-05-03  Youenn Fablet  <youenn@apple.com>

        LayoutTest imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin.htm is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=182849
        <rdar://problem/50353372>

        Reviewed by Alex Christensen.

        In case of restarting the load after a redirection, which now happens in case
        of following cross origin redirections with same-origin credentials, make sure to
        update the request as would do NetworkLoad.
        This is in particular important to preserve the request body.

        Covered by WPT updated test.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::updateRequest):
        (WebKit::NetworkLoad::updateRequestAfterRedirection const):
        (WebKit::NetworkLoad::continueWillSendRequest):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):

2019-05-03  Commit Queue  <commit-queue@webkit.org>

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

        Breaks compilation of jsconly on linux, breaking compilation
        for jsc-i386-ews, jsc-mips-ews and jsc-armv7-ews (Requested by
        guijemont on #webkit).

        Reverted changeset:

        "[CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into
        WEBKIT_COPY_FILES"
        https://bugs.webkit.org/show_bug.cgi?id=197174
        https://trac.webkit.org/changeset/244881

2019-05-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION: Layout test editing/selection/ios/selection-after-changing-text-with-callout-menu.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=197532
        <rdar://problem/50177144>

        Reviewed by Ryosuke Niwa.

        Fixes layout tests that began failing after r244546. See below for details.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):

        Partially reverts a change in r244546, after which we commit the layer tree and scroll before updating the
        page's editor state. The purpose of this change was to ensure that UI process-side element focus scrolling logic
        would not conflict with web-process-driven scrolling logic.

        Instead, we split the existing logic in WebPageProxy::editorStateChanged into two pieces: one that updates the
        editor state (by setting m_editorState), and a second that dispatches updates to PageClient when the first
        editor state is received after focusing an element. During a layer tree commit in the UI process, we first
        update the editor state, then commit the layer tree and apply scroll position changes, and finally scroll to
        reveal the focused element if necessary.

        When an editor state is delivered to the UI process in an out-of-band update (i.e. not in a layer tree commit),
        simply dispatch the initial editor state for a focused element immediately.

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

        Add an IPC message to schedule an editor state update in the next remote layer tree commit. See below for more
        details.

        (WebKit::WebPageProxy::editorStateChanged):
        (WebKit::WebPageProxy::dispatchDidReceiveEditorStateAfterFocus):
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::updateEditorState):
        (WebKit::WebPageProxy::editorStateChanged): Deleted.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willFinishIgnoringCalloutBarFadeAfterPerformingAction]):

        Additionally ensure that an editor state update is scheduled. This addresses a potential source of flakiness in
        the layout test editing/selection/ios/selection-after-changing-text-with-callout-menu.html, where an editor
        state update may only be scheduled after the next layout timer fires (this is the case in custom callout menu
        actions that change the DOM but do not otherwise trigger any editing commands).

        In the problematic scenario, the client could make a change that triggers layout soon; but before the layout
        timer fires, the timer for the next remote layer tree commit could fire, such that the next layer tree commit
        would not contain the relevant editor state.

        This extra step ensures that we always *schedule* an editor state update when performing a callout menu action
        that does not automatically dismiss, so that we can prevent the callout bar from dismissing during the correct
        scope.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::layerTreeCommitComplete):
        (WebKit::WebPageProxy::updateEditorState):

        Rename editorStateChanged to updateEditorState, and make the editorStateChanged codepath only executed when an
        out-of-band editor state update is delivered to the UI process.

        (WebKit::WebPageProxy::dispatchDidReceiveEditorStateAfterFocus):

        Notify the UI process that the initial editor state has been received; this prompts us to scroll to reveal the
        focused element, if needed.

        (WebKit::WebPageProxy::editorStateChanged): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::updateEditorState):
        (WebKit::WebPageProxy::editorStateChanged): Deleted.
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::updateEditorState):
        (WebKit::WebPageProxy::editorStateChanged): Deleted.
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::updateEditorState):
        (WebKit::WebPageProxy::editorStateChanged): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-05-02  Timothy Hatcher  <timothy@apple.com>

        NSAttributedString conversion in a loop returns nil and WKUnknownError every other time.
        https://bugs.webkit.org/show_bug.cgi?id=197523

        Reviewed by Darin Adler.

        Caching the WKWebView was loading about:blank to unload the previous content.
        This was causing subsequent rapid conversions to fail since the blank load
        would be confused with the real content loading. Loading a blank page wasn't
        really needed, it just helped keep the cached view in a cleaner state. Instead
        of adding complexity to track the extra navigation, we can eliminate the blank load.
        Ultimately a process swap will likely happen on the next navigation, and unused
        cached views are closed quickly -- so stale content isn't held around too long.
        This also avoids extra work and speeds up conversions a bit.

        * UIProcess/API/Cocoa/NSAttributedString.mm:
        (+[_WKAttributedStringWebViewCache cacheWebView:]): Don't load about:blank when caching.
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::getContentsAsAttributedString): Use rangeOfContents() for a fail
        safe way to get the range needed.

2019-05-02  John Wilander  <wilander@apple.com>

        Make both filterForRegistrableDomains() in WebKit::NetworkProcess use WebCore::RegistrableDomain::uncheckedCreateFromHost()
        https://bugs.webkit.org/show_bug.cgi?id=197521
        <rdar://problem/49651503>

        Reviewed by Brent Fulgham.

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

2019-05-02  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=197510
        <rdar://problem/50372338>

        Reviewed by Alex Christensen.

        When asked to delete persistent credentials for a set of origins, send a message to the network process with the
        list of origins. The network process will then delete all persistent credentials from these origins from
        NSURLCredentialStorage.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeCredentialsWithOrigins):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::removeCredentialsWithOrigins):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):

2019-05-02  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into WEBKIT_COPY_FILES
        https://bugs.webkit.org/show_bug.cgi?id=197174

        Reviewed by Alex Christensen.

        Replace WEBKIT_MAKE_FORWARDING_HEADERS with WEBKIT_COPY_FILES and make dependencies
        for framework headers explicit.

        * CMakeLists.txt:
        * PlatformWin.cmake:

2019-05-02  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Fix syscall sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=197517
        <rdar://problem/49945031>

        Reviewed by Brent Fulgham.

        A syscall needs to be added to the sandbox on macOS.

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

2019-05-02  Alex Christensen  <achristensen@webkit.org>

        Safe browsing warning should update colors when a user switches between light and dark appearance
        https://bugs.webkit.org/show_bug.cgi?id=197443
        <rdar://problem/49883917>

        Reviewed by Tim Horton.

        We draw the WKSafeBrowsingExclamationPoint ourselves, so we need to call setNeedsDisplay when viewDidChangeEffectiveAppearance is called.
        Instead of setting NSView.layer.backgroundColor we need to make an NSView subclass I call WKSafeBrowsingBox and we need to set its layer's
        backgroundColor in updateLayer, otherwise the CGColor isn't updated from the NSColor.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (colorForItem):
        (-[WKSafeBrowsingExclamationPoint viewDidChangeEffectiveAppearance]):
        (-[WKSafeBrowsingBox setSafeBrowsingBackgroundColor:]):
        (-[WKSafeBrowsingBox updateLayer]):
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingWarning:completionHandler:]):
        (-[WKSafeBrowsingWarning addContent]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):
        (setBackground): Deleted.

2019-05-02  Frederic Wang  <fwang@igalia.com>

        [GTK][WPE] Disable "thin", "thick", "medium" values of mfrac@linethickness at runtime
        https://bugs.webkit.org/show_bug.cgi?id=196142

        This patch introduces some experimental runtime flag to let users
        disable MathML features that are removed from MathML Core [1]. For now,
        these features are only disabled on GTK and WPE ports.

        [1] https://mathml-refresh.github.io/mathml-core/

        Reviewed by Rob Buis.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2019-05-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add the ability to import WebKitAdditions snippets in WebKit.apinotes
        https://bugs.webkit.org/show_bug.cgi?id=197487
        <rdar://problem/50389085>

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/WebKit.apinotes: Import a new WebKitAdditions file.

        * WebKit.xcodeproj/project.pbxproj: Check all files in Headers/ and PrivateHeaders/ that need replacement, not
        simply anything ending with ".h".

        * mac/replace-webkit-additions-includes.py:
        (main): Teach the replacement script to handle files in Headers/ or PrivateHeaders/ that don't end in ".h".

2019-05-01  Alex Christensen  <achristensen@webkit.org>

        Protect against null crash in fetchDiskCacheEntries
        https://bugs.webkit.org/show_bug.cgi?id=197399
        <rdar://problem/47759337>

        Reviewed by Antti Koivisto.

        If the call to Entry::decodeStorageRecord returns nullptr in Storage::traverse, do not call the traverseHandler, which expects
        that when it is called with nullptr that is the end of the traversal.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::traverse):

2019-05-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add a version of viewport shrink-to-fit heuristics that preserves page layout
        https://bugs.webkit.org/show_bug.cgi?id=197342
        <rdar://problem/50063091>

        Reviewed by Tim Horton.

        This patch introduces a new shrink-to-fit heuristic that attempts to lay out the contents of the page at a
        larger width in order to shrink content to fit the viewport. This is similar to existing shrink-to-fit behaviors
        used for viewport sizing in multitasking mode, except that it not only scales the view, but additionally expands
        the layout size, such that the overall layout of the page is preserved. In fact, the reason we ended up
        reverting the existing flavor of shrink-to-fit in all cases except for multitasking was that page layout was not
        preserved, which caused elements that poke out of the viewport to make the rest of the page look out of
        proportion — see <rdar://problem/23818102> and related radars.

        Covered by 5 new layout tests, and by adjusting a couple of existing layout tests. See comments below for more
        details.

        * Platform/Logging.h:

        Add a new ViewportSizing logging channel. This will only log on pages that overflow the viewport and shrink to
        fit as a result.

        * Shared/WebPreferences.yaml:

        Turn IgnoreViewportScalingConstraints off by default. This preference currently controls whether we allow
        shrink-to-fit behaviors, and is only used by Safari when it is in multitasking mode. The value of this
        preference is currenly *on* by default, and is turned off almost immediately during every page load after the
        first visible content rect update, wherein visibleContentRectUpdateInfo.allowShrinkToFit() is false.

        However, this sometimes causes a brief jitter during page load; to fix this, make the default value for
        IgnoreViewportScalingConstraints false, and change the logic in WebPage::updateVisibleContentRects to
        setCanIgnoreScalingConstraints to true if either the IgnoreViewportScalingConstraints preference (not only
        affected by an internal debug switch) is true, or WKWebView SPI is used to enable the behavior.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):

        Add a new hook for WebFrameLoaderClient to call into WebPage when document load finishes. Also, tweak
        dispatchDidFinishLoad to take a WebFrame& instead of a WebFrame* in a drive-by fix (the frame is assumed to be
        non-null anyways).

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::didFinishDocumentLoad):
        (WebKit::WebPage::didFinishLoad):

        When finishing document load or finishing the overall load, kick off the shrink-to-fit timer; when committing a
        load, cancel the timer.

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

        Don't allow the minimum effective device width from the client to stomp over any minimum effective device width
        set as a result of the new shrink-to-fit heuristic; on some pages that load quickly, this can result in a race
        where the minimum effective device width (i.e. a value that lower-bounds the minimum layout width) is first set
        by the shrink-to-fit heuristic, and then set to an incorrect value by the client.

        In the near future, web view SPI used to set the minimum effective device width should actually be removed
        altogether, since the new shrink-to-fit heuristic supersedes any need for the client to fiddle with the minimum
        effective device width.

        (WebKit::WebPage::dynamicViewportSizeUpdate):

        When performing a dynamic viewport size update, additionally re-run the shrink-to-fit heuristic. This allows
        the minimum layout size of the viewport to be updated, if necessary. An example of where this matters is when a
        web page is *below* a tablet/desktop layout breakpoint in portrait device orientation, but then exceeds this
        layout breakpoint in landscape orientation. In this scenario, rotating the device should swap between these two
        page layouts.

        (WebKit::WebPage::resetViewportDefaultConfiguration):
        (WebKit::WebPage::scheduleShrinkToFitContent):
        (WebKit::WebPage::shrinkToFitContentTimerFired):
        (WebKit::WebPage::immediatelyShrinkToFitContent):

        Leverage the existing capability for a viewport to have a "minimum effective device width" to grant the viewport
        a larger layout size than it would normally have, and then scale down to fit within the bounds of the view. One
        challenge with this overall approach is that laying out at a larger width may cause the page to lay out even
        wider in response, which may actually worsen horizontal scrolling. To mitigate this, we only attempt to lay out
        at the current content width once; if laying out at this width reduced the amount of horizontal scrolling by any
        amount, then proceed with this layout width; otherwise, revert to the previous layout width.

        (WebKit::WebPage::shouldIgnoreMetaViewport const):

        Pull some common logic out into a readonly getter.

        (WebKit::WebPage::updateVisibleContentRects):

        See the comment below WebPreferences.yaml, above.

2019-05-01  Dean Jackson  <dino@apple.com>

        Link Previews that use WKImagePreviewViewController are not always scaled correctly
        https://bugs.webkit.org/show_bug.cgi?id=197450
        <rdar://problem/50357695>

        Reviewed by Wenson Hsieh.

        Tell the UIImageView that we create in WKImagePreviewViewController to use
        a filling scaling method.

        * UIProcess/WKImagePreviewViewController.mm:
        (-[WKImagePreviewViewController initWithCGImage:defaultActions:elementInfo:]):

2019-05-01  Darin Adler  <darin@apple.com>

        WebKit has too much of its own UTF-8 code and should rely more on ICU's UTF-8 support
        https://bugs.webkit.org/show_bug.cgi?id=195535

        Reviewed by Alexey Proskuryakov.

        * Shared/API/APIString.h: Removed uneeded includes and also switched to #pragma once.

        * Shared/API/c/WKString.cpp: Moved include of UTF8Conversion.h here.
        (WKStringGetUTF8CStringImpl): Updated for changes to return values.

2019-05-01  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r244821.

        Causing

        Reverted changeset:

        "WebKit has too much of its own UTF-8 code and should rely
        more on ICU's UTF-8 support"
        https://bugs.webkit.org/show_bug.cgi?id=195535
        https://trac.webkit.org/changeset/244821

2019-05-01  Youenn Fablet  <youenn@apple.com>

        Kept alive loaders should use the redirected request in case of redirections
        https://bugs.webkit.org/show_bug.cgi?id=197337

        Reviewed by Alex Christensen.

        Instead of using the request, the redirected request should be used in case of redirection.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):

2019-04-29  Darin Adler  <darin@apple.com>

        WebKit has too much of its own UTF-8 code and should rely more on ICU's UTF-8 support
        https://bugs.webkit.org/show_bug.cgi?id=195535

        Reviewed by Alexey Proskuryakov.

        * Shared/API/APIString.h: Removed uneeded includes and also switched to #pragma once.

        * Shared/API/c/WKString.cpp: Moved include of UTF8Conversion.h here.
        (WKStringGetUTF8CStringImpl): Updated for changes to return values.

2019-04-30  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) URL scheme handlers can no longer respond asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=197426
        <rdar://problem/50256169>

        Reviewed by Brady Eidson.

        The issue was that when committing the provisional process, we would call WebPageProxy::processDidTerminate()
        which would call WebPageProxy::stopAllURLSchemeTasks(). This would terminate all URL scheme tasks associated
        with the page, including the one associated with the provisisional page / process.

        To address the issue, pass m_process to stopAllURLSchemeTasks() in processDidTerminate() and only stop the
        tasks associated with the m_process (which is the process we're about to swap away from).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidTerminate):
        (WebKit::WebPageProxy::stopAllURLSchemeTasks):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::processForTaskIdentifier):
        (WebKit::WebURLSchemeHandler::stopAllTasksForPage):
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::process const):

2019-04-30  John Wilander  <wilander@apple.com>

        Add logging of Ad Click Attribution errors and events to a dedicated channel
        https://bugs.webkit.org/show_bug.cgi?id=197332
        <rdar://problem/49918800>

        Reviewed by Youenn Fablet.

        This patch adds an experimental Ad Click Attribution debug mode which
        logs information. Most changes are just log output in the various
        functions in WebKit::AdClickAttributionManager.

        The constructor to WebKit::AdClickAttributionManager now takes a
        PAL::SessionID so that the log functions can make sure they don't
        output anything in ephemeral sessions.

        WebProcessPool::platformInitializeNetworkProcess() now picks up the
        debug mode setting from the incoming
        WebKit::NetworkProcessCreationParameters object.

        NetworkResourceLoader::handleAdClickAttributionConversion() was
        moved to AdClickAttributionManager::handleConversion() to keep all
        the logging in one file.

        * NetworkProcess/AdClickAttributionManager.cpp:
        (WebKit::AdClickAttributionManager::storeUnconverted):
        (WebKit::AdClickAttributionManager::handleConversion):
        (WebKit::AdClickAttributionManager::convert):
        (WebKit::AdClickAttributionManager::fireConversionRequest):
        (WebKit::AdClickAttributionManager::firePendingConversionRequests):
        (WebKit::AdClickAttributionManager::clearExpired):
        (WebKit::AdClickAttributionManager::debugModeEnabled const):
        * NetworkProcess/AdClickAttributionManager.h:
        (WebKit::AdClickAttributionManager::AdClickAttributionManager):
        (WebKit::AdClickAttributionManager::m_sessionID):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::handleAdClickAttributionConversion): Deleted.
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::handleAdClickAttributionConversion):
        (WebKit::NetworkSession::convertAdClickAttribution): Deleted.
        * NetworkProcess/NetworkSession.h:
        * Platform/Logging.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2019-04-30  Devin Rousso  <drousso@apple.com>

        Crash when running test wpt/tests/element_click/bubbling.py::test_element_disappears_during_click
        https://bugs.webkit.org/show_bug.cgi?id=197361
        <rdar://problem/49861407>

        Reviewed by Brian Burg.

        Don't assume that all elements have client rects (e.g. `getClientRects`). If the container
        element isn't visible, then the child won't be either.

        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::resolveLocation):
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::viewportInViewCenterPointOfElement):

2019-04-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r244802.

        Caused an API test failure

        Reverted changeset:

        "Regression(PSON) URL scheme handlers can no longer respond
        asynchronously"
        https://bugs.webkit.org/show_bug.cgi?id=197426
        https://trac.webkit.org/changeset/244802

2019-04-30  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) URL scheme handlers can no longer respond asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=197426
        <rdar://problem/50256169>

        Reviewed by Brady Eidson.

        The issue was that when committing the provisional process, we would call WebPageProxy::processDidTerminate()
        which would call WebPageProxy::stopAllURLSchemeTasks(). This would terminate all URL scheme tasks associated
        with the page, including the one associated with the provisisional page / process.

        To address the issue, pass m_process to stopAllURLSchemeTasks() in processDidTerminate() and only stop the
        tasks associated with the m_process (which is the process we're about to swap away from).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidTerminate):
        (WebKit::WebPageProxy::stopAllURLSchemeTasks):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::processForTaskIdentifier):
        (WebKit::WebURLSchemeHandler::stopAllTasksForPage):
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::process const):

2019-04-30  Chris Dumez  <cdumez@apple.com>

        Only use a related page's process if that page has not been closed yet
        https://bugs.webkit.org/show_bug.cgi?id=197393
        <rdar://problem/50302423>

        Reviewed by Tim Horton.

        We should not attempt to use a related page's process if that related page has already been closed.
        Once closed, a page's process is invalid and trying to launch a new process for the closed page
        leads to crashes such as the one in the radar.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):

2019-04-30  Tim Horton  <timothy_horton@apple.com>

        Long-standing rare crash under -[WKWebView _web_immediateActionAnimationControllerForHitTestResultInternal...]
        https://bugs.webkit.org/show_bug.cgi?id=197404
        <rdar://problem/24589331>

        Reviewed by Wenson Hsieh.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _updateImmediateActionItem]):
        (-[WKImmediateActionController menuItem:previewItemAtPoint:]):
        (-[WKImmediateActionController menuItem:itemFrameForPoint:]):
        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):
        Add some null checks; _webHitTestResult can be null if we (somehow) get
        an immediate action gesture without having previously gotten a
        mouseDidMoveOverElement from the Web Content process. Cover all our bases.

2019-04-30  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix crash caused by sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=197416
        <rdar://problem/50266257>

        Reviewed by Brent Fulgham.

        Add syscall to the iOS sandbox.

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

2019-04-30  Zalan Bujtas  <zalan@apple.com>

        [iOS] Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event)
        https://bugs.webkit.org/show_bug.cgi?id=197347
        <rdar://problem/49393423>

        Reviewed by Wenson Hsieh.

        This patch adds support for dispatching dblclick event as the result of the double tap gesture.

        1. The new double tap gesture recognizer always fires regardless of what type of action the other, existing double gesture recognizers (double-tap to zoom) trigger.
        2. The dblclick event is dispatched on the node with registered dblclick event handler unless the node prohibits double tap gesture (touch-action != auto).

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _doubleTapRecognizedForDoubleClick:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint):

2019-04-30  Antti Koivisto  <antti@apple.com>

        Tighten type of ScrollingTree:rootNode() to ScrollingTreeFrameScrollingNode
        https://bugs.webkit.org/show_bug.cgi?id=197414

        Reviewed by Frédéric Wang.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:

2019-04-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r244750): [GTK][WPE] Network process is crashing in all layout tests
        https://bugs.webkit.org/show_bug.cgi?id=197406

        Reviewed by Žan Doberšek.

        Do not trasnfer ownership of cachePath to traverseDirectory() lambda, since it's passed also as first argument
        and it can be passed as a reference.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::deleteOldVersions):

2019-04-29  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r244755.

        Casued several test failures on iOS

        Reverted changeset:

        "Double-tapping a post to like doesn't work on Instagram.com
        (needs 'dblclick' event)"
        https://bugs.webkit.org/show_bug.cgi?id=197347
        https://trac.webkit.org/changeset/244755

2019-04-29  Chris Dumez  <cdumez@apple.com>

        [iOS] The UIProcess may get killed for trying to stay runnable in the background for more than 30 seconds
        https://bugs.webkit.org/show_bug.cgi?id=197385
        <rdar://problem/50001505>

        Reviewed by Geoffrey Garen.

        If the UIProcess holds a background assertion for itself for 30 seconds, the assertion's invalidation handler
        will get called and it is our responsibility to release this assertion or the UIProcess will get killed by the
        system. The logic in ProcessAssertion would normally do that but it would also happily try and re-take another
        background process assertion shortly after the previous one expired (and before the UIProcess got suspended).
        When doing so, the new background assertion would expire right away and we would get killed without its
        invalidation handler getting called.

        To address the issue, the logic in ProcessAssertion will now prevent taking a new background assertion after
        one expires and until the application becomes foreground again.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager init]):
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        <rdar://problem/50299396> Fix internal High Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=197388

        * Configurations/Base.xcconfig:

2019-04-29  Zalan Bujtas  <zalan@apple.com>

        [iOS] Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event)
        https://bugs.webkit.org/show_bug.cgi?id=197347
        <rdar://problem/49393423>

        Reviewed by Wenson Hsieh.

        This patch adds support for dispatching dblclick event as the result of the double tap gesture.

        1. The new double tap gesture recognizer always fires regardless of what type of action the other, existing double gesture recognizers (double-tap to zoom) trigger.
        2. The dblclick event is dispatched on the node with registered dblclick event handler unless the node prohibits double tap gesture (touch-action != auto).

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _doubleTapRecognizedForDoubleClick:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint):

2019-04-29  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r244142): Fandango accounts tab crashes under Color()
        https://bugs.webkit.org/show_bug.cgi?id=197380
        <rdar://problem/50186175>

        Reviewed by Megan Gardner.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (baseScrollViewBackgroundColor):
        We now call -_updateScrollViewBackground from -setBackgroundColor:.
        -setBackgroundColor: can be called from -[UIView initWithCoder:]; if it
        is, WKWebView's _page is not yet initialized, so we crash. Return an invalid color.
        Then, the caller falls back to WKContentView's backgroundColor. But WKContentView
        isn't initialized yet either. So add a further fallback.

2019-04-29  Dean Jackson  <dino@apple.com>

        Add InteractionIsHappening to SuppressSelectionAssistantReason
        https://bugs.webkit.org/show_bug.cgi?id=197375
        <rdar://problem/50304986>

        Reviewed by Megan Gardner.

        Add a new reason for suppressing the selection assistant, to
        be used in a follow-up patch.

        * UIProcess/ios/WKContentViewInteraction.h: Add InteractionIsHappening.

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        Storage::deleteOldVersions does not need to retain Storage
        https://bugs.webkit.org/show_bug.cgi?id=197336
        <rdar://problem/48679972>

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::deleteOldVersions):
        Something is wrong with the lifetime of Storage, but we only need a String, not the whole Storage.

2019-04-29  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Move common sandbox files from Shared/mac to Shared/Cocoa
        https://bugs.webkit.org/show_bug.cgi?id=197376
        <rdar://problem/50305272>

        Reviewed by Dean Jackson.

        The Apple sandboxing logic currently lives in the inappropriate 'Shared/mac' directory. This is
        confusing because the code is used by all Apple ports, not just macOS.

        This patch just moves the relevant files from 'Shared/mac' to 'Shared/Cocoa' to avoid this confusion.

        * Shared/Cocoa/SandboxExtensionCocoa.mm: Renamed from Source/WebKit/Shared/mac/SandboxExtensionMac.mm.
        * Shared/Cocoa/SandboxInitialiationParametersCocoa.mm: Renamed from Source/WebKit/Shared/mac/SandboxInitialiationParametersMac.mm.
        * Shared/Cocoa/SandboxUtilities.h: Renamed from Source/WebKit/Shared/mac/SandboxUtilities.h.
        * Shared/Cocoa/SandboxUtilities.mm: Renamed from Source/WebKit/Shared/mac/SandboxUtilities.mm.
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-04-29  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Back/forward gesture snapshot always times out
        https://bugs.webkit.org/show_bug.cgi?id=197233

        Reviewed by Michael Catanzaro.

        Delaying web process launch caused a regression where we create ViewGestureController when the
        web process doesn't yet exist. The controller immediately tries to connect to it and fails,
        and because of that never receives DidHitRenderTreeSizeThreshold() message, so navigation
        snapshot always stays until timeout after performing the gesture.

        To prevent this, create the controller in webkitWebViewBaseDidRelaunchWebProcess() instead of
        webkitWebViewBaseCreateWebPage(). Additionally, since settings are now created earlier than
        ViewGestureController, store the value of whether swipe gesture is enabled in WebKitWebViewBase
        and immediately apply it when creating the controller.

        Since there is now a point where controller is null, make webkitWebViewBaseViewGestureController()
        return null and add null checks everywhere.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (enableBackForwardNavigationGesturesChanged):
        Move the logic into webkitWebViewBaseSetEnableBackForwardNavigationGesture().
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore): Add a null check.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDraw): Ditto.
        (webkitWebViewBaseScrollEvent): Ditto.
        (webkitWebViewBaseSetEnableBackForwardNavigationGesture): Added. In addition to what was in
        WebKitWebViewBase::enableBackForwardNavigationGesturesChanged(), store the value in a field
        for the case ViewGestureController doesn't exist yet.
        (webkitWebViewBaseViewGestureController): Return a pointer instead of reference.
        (webkitWebViewBaseCreateWebPage): Stop creating ViewGestureController.
        (webkitWebViewBaseDidRelaunchWebProcess): Move creating ViewGestureController here. Also
        immediately call setSwipeGestureEnabled() with the stored value.
        (webkitWebViewBaseDidStartProvisionalLoadForMainFrame): Add a null check.
        (webkitWebViewBaseDidFirstVisuallyNonEmptyLayoutForMainFrame):Ditto.
        (webkitWebViewBaseDidFinishLoadForMainFrame): Ditto.
        (webkitWebViewBaseDidFailLoadForMainFrame): Ditto.
        (webkitWebViewBaseDidSameDocumentNavigationForMainFrame): Ditto.
        (webkitWebViewBaseDidRestoreScrollPosition): Ditto.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2019-04-29  Chris Dumez  <cdumez@apple.com>

        User-facing strings should use curly quotes instead of straight
        https://bugs.webkit.org/show_bug.cgi?id=197370

        Reviewed by Geoffrey Garen.

        Update localizable alert text that was recently added to use curly quotes instead of
        straight ones, as per our guidelines.

        * UIProcess/Cocoa/WKOrientationAccessAlert.mm:
        (WebKit::presentOrientationAccessAlert):
        * UIProcess/Cocoa/WKStorageAccessAlert.mm:
        (WebKit::presentStorageAccessAlert):

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        Build fix.

        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet updateSheetPosition]):

2019-04-29  Commit Queue  <commit-queue@webkit.org>

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

         Lots of tests  are crashing (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Back/forward gesture snapshot always times out"
        https://bugs.webkit.org/show_bug.cgi?id=197233
        https://trac.webkit.org/changeset/244648

2019-04-29  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] window-object-cleared documentation should reference webkit_frame_get_js_context_for_script_world()
        https://bugs.webkit.org/show_bug.cgi?id=197357

        Reviewed by Carlos Garcia Campos.

        We should recommend using the non-deprecated replacement for
        webkit_frame_get_javascript_context_for_script_world().

        * WebProcess/InjectedBundle/API/glib/WebKitScriptWorld.cpp:

2019-04-27  Chris Dumez  <cdumez@apple.com>

        Improve safety of MachMessage class
        https://bugs.webkit.org/show_bug.cgi?id=197323
        <rdar://problem/44291920>

        Reviewed by Darin Adler.

        Improve safety of MachMessage class and clean things up a bit.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendOutgoingMessage):
        - Pass MessageReceiverName / MessageName when constructing the MachMessage rather
          than setting them afterwards since they never change for a given MachMessage.
        - Set header->msgh_id to the right value right away instead of setting it first
          to inlineBodyMessageID and then later fixing it to be outOfLineBodyMessageID
          when the body is out of line.
        - When messageBodyIsOOL was true, we would call getDescriptorAndSkip() which
          would advance the pointer by sizeof(mach_msg_port_descriptor_t), even though
          the descriptor type is mach_msg_ool_descriptor_t. This would not matter in
          the end because we would not use the messageData pointer after this but
          still.

        * Platform/IPC/mac/MachMessage.cpp:
        (IPC::MachMessage::create):
        Use fastZeroedMalloc() instead of fastMalloc() for safety, given that this class
        has a mach_msg_header_t flexible array member. This is what is recommended by the
        mach documentation. It is much safer because it otherwize relies on the user
        (Connection::sendOutgoingMessage()) to initialize ALL the message members
        correctly. I suspect this was the cause of <rdar://problem/44291920> because
        Connection::sendOutgoingMessage() would fail to initialize header->msgh_voucher_port
        and the MachMessage destructor would then call mach_msg_destroy(header()), which
        would mach_msg_destroy_port(header->msgh_voucher_port).

        (IPC::MachMessage::MachMessage):
        Pass MessageReceiverName / MessageName when constructing the MachMessage rather
        than setting them afterwards since they never change for a given MachMessage.

        (IPC::MachMessage::messageSize):
        Drop if checks for portDescriptorCount and memoryDescriptorCount since the logic
        will do the right thing even if they are 0.

        * Platform/IPC/mac/MachMessage.h:
        (IPC::MachMessage::header):
        (IPC::MachMessage::messageReceiverName const):
        (IPC::MachMessage::messageName const):

2019-04-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename m_LayerTreeFreezeReasons to m_layerTreeFreezeReasons
        https://bugs.webkit.org/show_bug.cgi?id=197343

        Reviewed by Antti Koivisto.

        No change in behavior.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):
        (WebKit::WebPage::updateDrawingAreaLayerTreeFreezeState):
        * WebProcess/WebPage/WebPage.h:

2019-04-26  Keith Rollin  <krollin@apple.com>

        Enable new build rule for post-processing headers when using XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=197340
        <rdar://problem/50226685>

        Reviewed by Brent Fulgham.

        In Bug 197116, we conditionally disabled the old method for
        post-processing header files when we are using the new XCBuild build
        system. This check-in conditionally enables the new post-processing
        facility. Note that the old system is disabled and the new system
        enabled only when the USE_NEW_BUILD_SYSTEM environment variable is set
        to YES.

        * Configurations/WebKit.xcconfig:

2019-04-26  Jessie Berlin  <jberlin@webkit.org>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=197313

        Reviewed by Alex Christensen.

        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2019-04-26  Youenn Fablet  <youenn@apple.com>

        Use kDNSServiceFlagsKnownUnique to speed up mdns name registration for ICE candidates
        https://bugs.webkit.org/show_bug.cgi?id=197328

        Reviewed by Eric Carlson.

        This allows skipping the probing step of MDNS name registration.
        We can do that as registered names are random UUIDs.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::registerMDNSName):

2019-04-26  Chris Dumez  <cdumez@apple.com>

        [iOS] Our process assertion should not allow idle sleep
        https://bugs.webkit.org/show_bug.cgi?id=197317
        <rdar://problem/50137740>

        Reviewed by Geoffrey Garen.

        Our process assertion should not allow idle sleep. This is bad for power because the device
        may switch between sleep and awake state frequently, as it get woken up by network packages.

        * UIProcess/ios/ProcessAssertionIOS.mm:

2019-04-26  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * Shared/ios/WebIconUtilities.mm:
        (WebKit::iconForVideoFile):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::decodePlatformData):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::clone const):

2019-04-26  Commit Queue  <commit-queue@webkit.org>

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

        Causing crash on iOS Simulator and EWS failures (Requested by
        sroberts on #webkit).

        Reverted changeset:

        "[iOS] Add internal setting to force -webkit-text-size-adjust
        to "auto""
        https://bugs.webkit.org/show_bug.cgi?id=197275
        https://trac.webkit.org/changeset/244683

2019-04-26  Youenn Fablet  <youenn@apple.com>

        Use normal loading path for ping loads
        https://bugs.webkit.org/show_bug.cgi?id=196807

        Reviewed by Alex Christensen.

        In case a NetworkResourceLoader has the keepAlive option we do the following:
        - Always use NetworkLoadChecker as we might need it to do checks after the Web context is gone.
        - In case of aborting a KeepAlive loader, remove it from NetworkConnectionToWebProcess map
        and add it to a kept-alive NetworkSession load set. The loader is only kept alive if it
        has not yet received a response. Mark the loader as kept-alive.
        - In case loader is kept-alive, cancel the load as soon as a response is gathered.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::transferKeptAliveLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::addKeptAliveLoad):
        (WebKit::NetworkProcess::removeKeptAliveLoad):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoadMap.cpp:
        (WebKit::NetworkResourceLoadMap::remove):
        (WebKit::NetworkResourceLoadMap::take):
        * NetworkProcess/NetworkResourceLoadMap.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime):
        (WebKit::WebLoaderStrategy::usePingLoad const):
        * WebProcess/Network/WebLoaderStrategy.h:

2019-04-26  Alex Christensen  <achristensen@webkit.org>

        Fix internal High Sierra build after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * DerivedSources.make:
        -std=gnu++17 didn't exist yet.  -std=gnu++1z did.

2019-04-26  Alex Christensen  <achristensen@webkit.org>

        Fix an internal High Sierra build after r244653
       ​https://bugs.webkit.org/show_bug.cgi?id=197131

        * DerivedSources.make:
        Apparently we can't use gnu++17 when preprocessing Platform.h in the makefile.

2019-04-26  Sihui Liu  <sihui_liu@apple.com>

        Stop IDB transactions to release locked database files when network process is ready to suspend
        https://bugs.webkit.org/show_bug.cgi?id=196372
        <rdar://problem/48930116>

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::processWillSuspendImminently):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):

2019-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Add internal setting to force -webkit-text-size-adjust to "auto"
        https://bugs.webkit.org/show_bug.cgi?id=197275
        <rdar://problem/50211019>

        Reviewed by Simon Fraser.

        * Shared/WebPreferences.yaml:
        * UIProcess/WebPreferences.h:

2019-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Implement idempotent mode for text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=197250
        <rdar://problem/50211034>

        Reviewed by Jon Lee.

        Push the initial scale down into the page.

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

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Make NetworkCache blobs safe for mmap instead of not using blobs
        https://bugs.webkit.org/show_bug.cgi?id=197264
        <rdar://problem/49564348>

        Reviewed by Antti Koivisto.

        This does what r244597 did for WKContentRuleLists but for the NetworkCache's blobs.
        Those are the two cases where we were calling mmap and seeing crashes in apps with
        default file protection of NSFileProtectionComplete.

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::add):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath): Deleted.
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheFileSystemCocoa.mm:
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::mayContainBlob const):
        (WebKit::NetworkCache::Storage::shouldStoreBodyAsBlob):
        (WebKit::NetworkCache::estimateRecordsSize): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:

2019-04-25  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r234330): 3 legacy-animation-engine/compositing tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=188357
        <rdar://problem/42986633>

        Reviewed by Dean Jackson.
        
        DumpRenderTree had no code that set page.setCompositingPolicyOverride() to Normal, so some
        tests would fall into low memory mode and have different behavior.
        
        Fix by moving the code that calls setCompositingPolicyOverride(Normal) from the WK2 layer
        to Internals, so it's shared by DRT and WTR.
        
        We no longer need the WK2 C SPI glue.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetEventThrottlingBehaviorOverride):
        (WKBundlePageSetCompositingPolicyOverride): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2019-04-25  Chris Dumez  <cdumez@apple.com>

        Trying to load a main resource outside the sandbox should not crash the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=197299
        <rdar://problem/49808042>

        Reviewed by Geoffrey Garen.

        Trying to load a main resource outside the sandbox should not crash the WebContent process. We should
        simply ignore the load and log an error message.

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

2019-04-25  Timothy Hatcher  <timothy@apple.com>

        Only send a synthetic mouse out event if synthetic mouse move events were sent.
        https://bugs.webkit.org/show_bug.cgi?id=197295
        rdar://problem/49040233

        Reviewed by Zalan Bujtas.

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

2019-04-25  Timothy Hatcher  <timothy@apple.com>

        Disable date and time inputs on iOSMac.
        https://bugs.webkit.org/show_bug.cgi?id=197287
        rdar://problem/46794376

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

2019-04-25  Brady Eidson  <beidson@apple.com>

        REGRESSION (243388): WebProcess::shouldFreezeOnSuspension() decision is flipped
        <rdar://problem/49755494> and https://bugs.webkit.org/show_bug.cgi?id=197284

        Reviewed by Chris Dumez.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::shouldFreezeOnSuspension const): If any non-suspended pages are in the process it should
          be eligible. Only if all pages are suspended should it be jetsam-able.

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Start using C++17
        https://bugs.webkit.org/show_bug.cgi?id=197131

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        * DerivedSources.make:

2019-04-25  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Back/Forward gesture interferes with scrolling
        https://bugs.webkit.org/show_bug.cgi?id=197168

        Reviewed by Michael Catanzaro.

        When the gesture is released with 0 velocity close to an edge of the webview,
        the finishing animation is way too long, and in some cases it can look like the
        gesture is already over, when it's still animating. By scrolling vertically while
        that happens, it's possible to reset animation over and over again.

        To reduce the duration in this case, instead of using maximum possible duration
        (400ms), introduce a base velocity and use it for calculating the duration if
        the actual velocity, relative to the end point, is equal to or less than 0.

        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::SwipeProgressTracker::startAnimation):

2019-04-25  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Back/forward gesture snapshot always times out
        https://bugs.webkit.org/show_bug.cgi?id=197233

        Reviewed by Michael Catanzaro.

        Delaying web process launch caused a regression where we create ViewGestureController when the
        web process doesn't yet exist. The controller immediately tries to connect to it and fails,
        and because of that never receives DidHitRenderTreeSizeThreshold() message, so navigation
        snapshot always stays until timeout after performing the gesture.

        To prevent this, create the controller in webkitWebViewBaseDidRelaunchWebProcess() instead of
        webkitWebViewBaseCreateWebPage(). Additionally, since settings are now created earlier than
        ViewGestureController, store the value of whether swipe gesture is enabled in WebKitWebViewBase
        and immediately apply it when creating the controller.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (enableBackForwardNavigationGesturesChanged):
        Move the logic into webkitWebViewBaseSetEnableBackForwardNavigationGesture().
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetEnableBackForwardNavigationGesture): Added. In addition to what was in
        WebKitWebViewBase::enableBackForwardNavigationGesturesChanged(), store the value in a field
        for the case ViewGestureController doesn't exist yet.
        (webkitWebViewBaseCreateWebPage): Stop creating ViewGestureController.
        (webkitWebViewBaseDidRelaunchWebProcess): Move creating ViewGestureController here. Also
        immediately call setSwipeGestureEnabled() with the stored value.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2019-04-25  Youenn Fablet  <youenn@apple.com>

        [Mac iOS WK2] Layout Test http/wpt/cache-storage/cache-quota-after-restart.any.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=197040
        <rdar://problem/49997641>

        Reviewed by Antti Koivisto.

        Delay write operations in case synchronize is ongoing.
        This is restricted to AvoidRandomness mode which is always used by CacheAPI
        and is also used by network cache for layout tests.

        Tested by cache-quota-after-restart.any.html no longer exhibiting write disk errors.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::store):

2019-04-25  Commit Queue  <commit-queue@webkit.org>

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

        Causing internal build failures (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "Create AVFoundationSoftLink.{h,mm} to reduce duplicate code"
        https://bugs.webkit.org/show_bug.cgi?id=197171
        https://trac.webkit.org/changeset/244627

2019-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Hardcoded text color in input fields
        https://bugs.webkit.org/show_bug.cgi?id=126907

        Reviewed by Michael Catanzaro.

        Implement PageClient::effectiveAppearanceIsDark() for GTK port.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::effectiveAppearanceIsDark const): Check if gtk-application-prefer-dark-theme setting is
        enabled, or the theme name contains the -dark suffix or the GTK_THEME environment variable contains the :dark suffix.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (themeChanged): Notify the WebPageProxy that the theme has changed.
        (webkitWebViewBaseSetToplevelOnScreenWindow): Connect to notify::gtk-application-prefer-dark-theme and notify::gtk-theme-name.
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::setUseDarkAppearance): Set gtk-application-prefer-dark-theme setting accordingly.

2019-04-24  Zalan Bujtas  <zalan@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948
        <rdar://problem/49927131>

        Reviewed by Tim Horton.

        Move intrinsicContentSizeDidChange out of DrawingArea. Intrinsic content size is a layout concept and
        after r244291 there's no reason to have it in DrawingArea.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didUpdateGeometry):
        (WebKit::DrawingAreaProxy::intrinsicContentSizeDidChange): Deleted.
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeIntrinsicContentSize):
        (WebKit::WebPageProxy::setViewLayoutSize):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::intrinsicContentSizeDidChange): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::intrinsicContentsSizeChanged const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateIntrinsicContentSizeIfNeeded):
        (WebKit::WebPage::dispatchDidReachLayoutMilestone):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded): Deleted.

2019-04-24  Commit Queue  <commit-queue@webkit.org>

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

        Causes compat issues (Requested by smfr on #webkit).

        Reverted changeset:

        "Unreviewed test gardening for Windows."
        https://trac.webkit.org/changeset/244228

2019-04-24  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * Shared/ios/WebIconUtilities.mm:
        (WebKit::iconForVideoFile):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::decodePlatformData):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::clone const):

2019-04-24  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Fix syscall sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=197247
        <rdar://problem/50026580>

        Reviewed by Brent Fulgham.

        A missing syscall in the sandbox of the WebContent process is causing a crash.

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

2019-04-24  John Wilander  <wilander@apple.com>

        Age out unconverted Ad Click Attributions after one week.
        https://bugs.webkit.org/show_bug.cgi?id=197238
        <rdar://problem/50177349>

        Reviewed by Chris Dumez.

        AdClickAttributionManager::storeUnconverted() and
        AdClickAttributionManager::convert() now start by calling the new
        AdClickAttributionManager::clearExpired() function to remove any
        expired, unconverted attributions before continuing.

        The rest of the patch is infrastructure to allow tests to expire
        all unconverted attributions early.

        * NetworkProcess/AdClickAttributionManager.cpp:
        (WebKit::AdClickAttributionManager::storeUnconverted):
        (WebKit::AdClickAttributionManager::convert):
        (WebKit::AdClickAttributionManager::clearExpired):
        (WebKit::AdClickAttributionManager::markAllUnconvertedAsExpiredForTesting):
        * NetworkProcess/AdClickAttributionManager.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::markAdClickAttributionsAsExpiredForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::markAdClickAttributionsAsExpiredForTesting):
        * NetworkProcess/NetworkSession.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetAdClickAttributionConversionURLForTesting):
        (WKPageMarkAdClickAttributionsAsExpiredForTesting):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::markAdClickAttributionsAsExpiredForTesting):
        * UIProcess/WebPageProxy.h:

2019-04-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Plumb the navigation's request when determining recommended compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=197225
        <rdar://problem/48389965>

        Reviewed by Alex Christensen.

        Adds a new argument to effectiveCompatibilityModeAfterAdjustingPolicies.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::effectiveCompatibilityModeAfterAdjustingPolicies):
        * UIProcess/WebPageProxy.h:

2019-04-24  Tim Horton  <timothy_horton@apple.com>

        Clean up WKActionSheetAssistant's use of LaunchServices
        https://bugs.webkit.org/show_bug.cgi?id=194645
        <rdar://problem/47707952>

        Reviewed by Andy Estes.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (applicationHasAppLinkEntitlements):
        (-[WKActionSheetAssistant _appendAppLinkOpenActionsForURL:actions:elementInfo:]):
        (-[WKActionSheetAssistant _appendOpenActionsForURL:actions:elementInfo:]):
        (appLinkForURL): Deleted.
        Make this function much more early-returny and flat.
        Adopt LS sync SPI instead of using a semaphore ourselves.
        Adopt modern open SPI.

2019-04-24  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to control the renderTreeAsText output by setting options on testRunner
        https://bugs.webkit.org/show_bug.cgi?id=197133

        Reviewed by Sam Weinig.

        Add testRunner.setRenderTreeDumpOptions() and expose the subset of RenderAsTextFlag flags
        that make sense in testing (those that don't dump unstable data like addresses), and plumb
        these flags through the various framework layers.

        Convert RenderAsTextBehavior to an OptionSet<RenderAsTextFlag>.

        Fix code generation in WebKitTestRunner to generate bindings for IDL const values,
        and hand-code DumpRenderTree bindings.

        Some cleanup of the TestRunners, using member initializers.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyRenderTreeExternalRepresentation):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::toRenderAsTextFlags):
        (WebKit::WebPage::renderTreeExternalRepresentation const):
        (WebKit::WebPage::renderTreeExternalRepresentationForPrinting const):
        * WebProcess/WebPage/WebPage.h:

2019-04-24  Alex Christensen  <achristensen@webkit.org>

        WKContentRuleLists should have a maximum FileProtection of CompleteUnlessOpen
        https://bugs.webkit.org/show_bug.cgi?id=197078
        <rdar://problem/49564348>

        Reviewed by Geoff Garen.

        r242735 was a fix for crashes when using mmap'd memory in apps with default FileProtection of NSFileProtectionComplete.
        It is more memory efficient and just as secure to reduce the FileProtection of these files to NSFileProtectionCompleteUnlessOpen.

        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
        (WebKit::NetworkCache::makeSafeToUseMemoryMapForPath):
        (WebKit::NetworkCache::pathRegisteredAsUnsafeToMemoryMapForTesting): Deleted.
        (WebKit::NetworkCache::registerPathAsUnsafeToMemoryMapForTesting): Deleted.
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheFileSystemCocoa.mm: Added.
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
        (WebKit::NetworkCache::makeSafeToUseMemoryMapForPath):
        * Shared/WebCompiledContentRuleList.cpp:
        (WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const):
        (WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const):
        (WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const):
        (WebKit::WebCompiledContentRuleList::topURLFiltersBytecode const):
        (WebKit::WebCompiledContentRuleList::actions const):
        (WebKit::WebCompiledContentRuleList::usesCopiedMemory const): Deleted.
        * Shared/WebCompiledContentRuleList.h:
        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::encode const):
        (WebKit::WebCompiledContentRuleListData::decode):
        (WebKit::WebCompiledContentRuleListData::size const): Deleted.
        (WebKit::WebCompiledContentRuleListData::dataPointer const): Deleted.
        * Shared/WebCompiledContentRuleListData.h:
        (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
        * SourcesCocoa.txt:
        * UIProcess/API/APIContentRuleList.cpp:
        (API::ContentRuleList::usesCopiedMemory const): Deleted.
        * UIProcess/API/APIContentRuleList.h:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::openAndMapOrCopyContentRuleList):
        (API::compiledToFile):
        (API::createExtension):
        (API::ContentRuleListStore::getContentRuleListSource):
        (API::ContentRuleListStore::readContentsOfFile): Deleted.
        (API::MappedOrCopiedData::dataPointer const): Deleted.
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:
        (API::ContentRuleListStore::readContentsOfFile): Deleted.
        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (+[WKContentRuleListStore _registerPathAsUnsafeToMemoryMapForTesting:]): Deleted.
        * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter usesCopiedMemory]): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-04-24  David Kilzer  <ddkilzer@apple.com>

        Fix build due to missing SPI declaration of kAXSFullKeyboardAccessEnabledNotification

        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm: Import
        AccessibilitySupportSPI.h.

2019-04-24  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is communicated with the WebPageProxy but not the WebFrameProxy
        https://bugs.webkit.org/show_bug.cgi?id=197214
        <rdar://problem/49237544>

        Reviewed by Alex Christensen.

        URL set by document.open() is communicated with the WebPageProxy (since r244361) but not the
        WebFrameProxy. This patch fixes this.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mainFrameURL]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/FrameLoadState.cpp:
        (WebKit::FrameLoadState::didExplicitOpen):
        * UIProcess/FrameLoadState.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didExplicitOpen):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didExplicitOpenForFrame):

2019-04-24  Chris Dumez  <cdumez@apple.com>

        X-Frame-Options header should be ignored when frame-ancestors CSP directive is present
        https://bugs.webkit.org/show_bug.cgi?id=197226
        <rdar://problem/50155649>

        Reviewed by Alex Christensen.

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

2019-04-24  Dean Jackson  <dino@apple.com>

        Rename _highlightLongPressCanClick and only add gesture recognizer when necessary
        https://bugs.webkit.org/show_bug.cgi?id=197231
        <rdar://problem/50164234>

        Reviewed by Antoine Quint.

        Rename _highlightLongPressCanClick to _longPressCanClick since it will be
        used in other places.

        Only attach the _highlightLongPressGestureRecognizer when we're not
        using long presses for preview. This might revert in the future, if we
        can set up an appropriate gesture resolution between the two.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _webTouchEvent:preventsNativeGestures:]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        (-[WKContentView _previewItemControllerDidCancelPreview:]):

2019-04-24  chris fleizach  <cfleizach@apple.com>

        AX: Remove deprecated Accessibility Object Model events
        https://bugs.webkit.org/show_bug.cgi?id=197073
        <rdar://problem/50027819>

        Reviewed by Ryosuke Niwa.

        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView dealloc]):
        (accessibilityEventsEnabledChangedCallback): Deleted.
        (-[WKWebView _updateAccessibilityEventsEnabled]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateAccessibilityEventsEnabled): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateAccessibilityEventsEnabled): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-04-23  John Wilander  <wilander@apple.com>

        Move Ad Click Attribution from internal feature to experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=197218
        <rdar://problem/47651691>

        Reviewed by Brent Fulgham.

        * Shared/WebPreferences.yaml:

2019-04-23  Keith Rollin  <krollin@apple.com>

        Add Xcode version check for Header post-processing scripts
        https://bugs.webkit.org/show_bug.cgi?id=197116
        <rdar://problem/50058968>

        Reviewed by Brent Fulgham.

        There are several places in our Xcode projects that post-process
        header files after they've been exported. Because of XCBuild, we're
        moving to a model where the post-processing is performed at the same
        time the header files are exported, rather than as a distinct
        post-processing step. This patch disables the distinct step when the
        inline processing is available.

        In practice, this means prefixing appropriate post-processing Custom
        Build phases with:

        if [ "${XCODE_VERSION_MAJOR}" -ge "1100" -a "${USE_NEW_BUILD_SYSTEM}" = "YES" ]; then
            # In this configuration, post-processing is performed at the same time as copying in the postprocess-header-rule script, so there's no need for this separate step.
            exit 0
        fi

        * WebKit.xcodeproj/project.pbxproj:

2019-04-23  John Wilander  <wilander@apple.com>

        Remove Ad Click Attribution data when removing website data
        https://bugs.webkit.org/show_bug.cgi?id=197215
        <rdar://problem/47668988>

        Reviewed by Chris Dumez.

        This patch adds a new WebsiteDataType called AdClickAttributions and flags
        it as owned by the network process.

        The new website data type is added to the Cocoa API layer for
        website data records management.

        When either of the two WebsiteDataStore::removeData() functions calls
        NetworkProcess::deleteWebsiteData() or
        NetworkProcess::deleteWebsiteDataForOrigins() over IPC, the network
        process now calls into AdClickAttributionManager::clear() and
        AdClickAttributionManager::clearForRegistrableDomain() respectively,
        if the website datatypes include WebsiteDataType::AdClickAttributions.

        The patch removes a couple of completion handlers in NetworkSession function
        calls are because those are not asynchronous.

        * NetworkProcess/AdClickAttributionManager.cpp:
        (WebKit::AdClickAttributionManager::clear):
        (WebKit::AdClickAttributionManager::clearForRegistrableDomain):
        (WebKit::AdClickAttributionManager::toString const):
        * NetworkProcess/AdClickAttributionManager.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::clearAdClickAttribution):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::clearAdClickAttribution):
        (WebKit::NetworkSession::clearAdClickAttributionForRegistrableDomain):
        * NetworkProcess/NetworkSession.h:
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::ownerProcess):
        * Shared/WebsiteData/WebsiteDataType.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataType):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _allWebsiteDataTypesIncludingPrivate]):

2019-04-23  Tim Horton  <timothy_horton@apple.com>

        Return annotated text checking strings via UIWKDocumentContext
        https://bugs.webkit.org/show_bug.cgi?id=197177
        <rdar://problem/49064839>

        Reviewed by Ryosuke Niwa.

        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.h:
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        (WebKit::TextCheckingControllerProxy::annotatedSubstringBetweenPositions):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDocumentEditingContext):
        Respect the UIWKDocumentRequestAnnotation flag, returning an attributed
        string containing the platform text checking annotations.

2019-04-23  Commit Queue  <commit-queue@webkit.org>

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

        Causing build failures on multiple builders (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Create AVFoundationSoftLink.{h,mm} to reduce duplicate code"
        https://bugs.webkit.org/show_bug.cgi?id=197171
        https://trac.webkit.org/changeset/244556

2019-04-23  Remy Demarest  <rdemarest@apple.com>

        Build fix after r244545.

        Reviewed by Tim Horton.

        * Platform/spi/mac/AppKitSPI.h:
        The SPI was an IPI in High Sierra.

2019-04-23  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Input field on ddg.gg is auto focused when url is entered with the software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=196740

        Reviewed by Megan Gardner.

        When an url for a page with an autofocused input field  is entered with the software keyboard,
        the input field is auto selected, and the software keyboard reappears. This does not happen
        when picking the url from favorites. After using the software keyboard to enter the url, the
        activity state is being changed to focused. The method '_elementDidFocus' checks whether the
        activity state changed, and allows the software keyboard to be shown in this case. To avoid
        showing the software keyboard in this case, send the changing activity state bitfield to the
        UI process, and check if the focus flag is the only flag set.
  
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

2019-04-23  Guy Lewin  <guy@lewin.co.il>

        Multiple File Input Icon Set Regardless of File List
        https://bugs.webkit.org/show_bug.cgi?id=195537

        Reviewed by Alexey Proskuryakov.

        Add WKOpenPanelResultListenerChooseMediaFiles() to choose files with
        icon and display string on iOS file open panels

        * UIProcess/API/C/WKOpenPanelResultListener.cpp:
        (WKOpenPanelResultListenerChooseMediaFiles):
        * UIProcess/API/C/WKOpenPanelResultListener.h:

2019-04-23  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * Shared/ios/WebIconUtilities.mm:
        (WebKit::iconForVideoFile):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::decodePlatformData):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::clone const):

2019-04-22  Dean Jackson  <dino@apple.com>

        Use additional members and protocols from WebKitAdditions in WKContentViewInteraction
        https://bugs.webkit.org/show_bug.cgi?id=197184
        <rdar://problem/50113848>

        Reviewed by Wenson Hsieh.

        WebKitAdditions defines some macros to include additional members
        and protocols for WKContentViewInteraction.

        It also defines some new functions. Provide empty version
        of those functions when WebKitAdditions is not available.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _registerPreview]):
        (-[WKContentView _unregisterPreview]):

2019-04-23  Tim Horton  <timothy_horton@apple.com>

        Action sheet shares a stringified URL instead of a URL object
        https://bugs.webkit.org/show_bug.cgi?id=197185
        <rdar://problem/49962249>

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WKShareSheet.h:
        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet presentWithParameters:inRect:completionHandler:]):
        (-[WKShareSheet presentWithParameters:completionHandler:]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showShareSheet):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showShareSheet):
        Make it possible to optionally provide WKShareSheet with
        a rect to present relative to.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showShareSheet:inRect:completionHandler:]):
        (-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]):
        (-[WKContentView _showShareSheet:completionHandler:]): Deleted.
        Instead of stringifying the URL and using the text selection assistant's
        share method, hand WKShareSheet a proper URL.

2019-04-23  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] element.focus() sometimes fails to reveal the focused element when it becomes editable dynamically
        https://bugs.webkit.org/show_bug.cgi?id=197188

        Reviewed by Wenson Hsieh.

        Commit the scroll tree update before revealing the keyboard via editor state update.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):

2019-04-23  Remy Demarest  <rdemarest@apple.com>

        Fix layout issues occuring when entering full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=197086
        <rdar://problem/47733671>.

        Reviewed by Darin Adler.

        This issue is the result of changing the style mask of the window after entering
        full screen mode. Safari adds an invisible toolbar to display the URL of the page
        which ends up breaking the layout. Having that window use a style that includes a
        titlebar fixes the bug.

        * Platform/spi/mac/AppKitSPI.h:
        Declare an SPI to be used in WKFullScreenWindowController.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::fullScreenWindow): Make the full screen window show a titlebar
        and make the content view underlap the titlebar to match the current behavior.
        Remove NSWindowStyleMaskBorderless which has no effects since it is equal to zero.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:]): Hide the titlebar
        before beginning the animation to full screen.
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Show the title
        bar when in full screen instead of a blank bar.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Hide the title
        bar to restore the initial setting.

2019-04-23  John Wilander  <wilander@apple.com>

        Ad Click Attribution redirects to well-known location should not trigger a conversion if they are blocked by content blockers
        https://bugs.webkit.org/show_bug.cgi?id=197183
        <rdar://problem/47763188>

        Reviewed by Alex Christensen.

        Ad Click Attribution conversions are picked up in the redirect handler
        in WebKit::NetworkResourceLoader. Content blocking typically happens in
        the continued redirect request handling in the web content process and
        a blocked request comes back empty.

        We need to call the WebKit::NetworkLoadChecker in the network process
        for these specific redirects, just like we do for Ping.

        The change makes use of the existing function
        NetworkLoadChecker::enableContentExtensionsCheck() for this purpose.

        In essence, this change makes it possible to block all conversions made
        to a "/.well-known/ad-click-attribution/" URL.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::handleAdClickAttributionConversion):
            New convenience function.
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
            Now calls NetworkLoadChecker::enableContentExtensionsCheck() if
            an Ad Click Attribution conversion was found in the redirect URL.
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
            If the request was not blocked, it will store any found conversion here.
        * NetworkProcess/NetworkResourceLoader.h:

2019-04-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use target oriented design for WebKit
        https://bugs.webkit.org/show_bug.cgi?id=197173

        Reviewed by Alex Christensen.

        Enumerate public framework headers for WinCairo's WebKit implementation and copy them.
        Migrate to use WebKit_DERIVED_SOURCES_DIR.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:

2019-04-23  Chris Dumez  <cdumez@apple.com>

        [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher
        https://bugs.webkit.org/show_bug.cgi?id=197097
        <rdar://problem/50048318>

        Reviewed by Alex Christensen.

        The issue is that when doing a history navigation with form data, we try to resubmit the form.
        We initially use the ReturnCacheDataDontLoad cache policy without prompting the user to get
        cached data. If this fails, we sent a DidFailProvisionalLoadForFrame IPC to the UIProcess but
        the WebContent process actually retries the load with ReturnCacheDataElseLoad cache policy.
        This new load triggers a new decidePolicyForNavigationAction.

        This would cause trouble with process-swapping because we normally destroy the
        ProvisionalPageProxy as soon as we receive a DidFailProvisionalLoadForFrame IPC from the
        provisional process. As a result, the provisional process would not be able to retry.

        To address the issue, we add pass a flag with the DidFailProvisionalLoadForFrame IPC to
        if the load will continue or not. When this flag is set, the UIProcess does not destroy
        the provisional page.

        * Scripts/webkit/messages.py:
        Minor IPC message handler build fix.

        * UIProcess/API/Cocoa/WKURLSchemeTask.mm:
        (-[WKURLSchemeTaskImpl _onlyIfCached]):
        * UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h:
        Add new _onlyIfCached SPI to WKURLSchemeTaskPrivate to allow for API testing.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::cancel):
        Pass WillContinueLoading flag.

        (WebKit::ProvisionalPageProxy::validateInput):
        Consider IPC with a navigationID of 0 as valid. When the navigation is triggered by the
        WebContent process, it sends us a DecidePolicyForNavigationActionAsync IPC with a navigationID
        of 0, until the UIProcess can generate a valid identifier.

        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):

        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync):
        When the WebPageProxy has generated a navigationID for the new WebContent process-initiated
        navigation, update m_navigationID so that follow-up IPC is considered valid.

        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2019-04-22  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Some dropdown menus may close without user gesture on americanexpress.com
        https://bugs.webkit.org/show_bug.cgi?id=197175
        <rdar://problem/49613013>

        Reviewed by Simon Fraser.

        Do not generate additional synthetic mouse events (e.g. mouseout in this case) when the content handles the click event. This helps cases when the synthetic mouseout ended up dismissing the dropdown menus.
        However it won't regress cases like youtube.com, where sending mouseout is required to have the control bar dismissed on play. 

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

2019-04-22  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKContextCreateWithInjectedBundlePath
        https://bugs.webkit.org/show_bug.cgi?id=197169

        Reviewed by Youenn Fablet.

        * UIProcess/API/C/WKContext.h:

2019-04-22  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r230681) Do not use stored credentials if WKBundlePageResourceLoadClient.shouldUseCredentialStorage returns false
        https://bugs.webkit.org/show_bug.cgi?id=197093
        <rdar://problem/49708268>

        Reviewed by Chris Dumez.

        Only get the StoredCredentialsPolicy from the NetworkLoadChecker if we haven't already been told not to use credentials.
        Also add some test infrastructure for clearing persistent credentials added by the test.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeCredential):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::removeCredential):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _removeCredential:forProtectionSpace:completionHandler:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::removeCredential):
        * UIProcess/WebProcessPool.h:

2019-04-22  Chris Dumez  <cdumez@apple.com>

        Delayed WebProcessLaunch may break the _relatedWebView SPI
        https://bugs.webkit.org/show_bug.cgi?id=197160

        Reviewed by Alex Christensen.

        Delayed WebProcessLaunch may break the _relatedWebView SPI. The breakage would happen if the client
        would relate a WebView to another which has not launched its initial process yet.

        To address the issue, when we need a running process for a WebView which has a related view, we need
        to make sure the related view has a running process and use that process. Previously, we would share
        the "dummy" process instead.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcess):
        (WebKit::WebPageProxy::ensureRunningProcess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):

2019-04-22  David Quesada  <david_quesada@apple.com>

        Remove linked-on-or-after check for download attribute handling
        https://bugs.webkit.org/show_bug.cgi?id=197176
        rdar://problem/48459714

        Reviewed by Alex Christensen.

        There are no apps linked prior to this SDK version that are using the _WKDownload SPI,
        so it doesn't make sense to preserve the old behavior of forcing download-attribute
        links to start downloads.

        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):

2019-04-22  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r244502.

        Caused crashes on the bots

        Reverted changeset:

        "Delayed WebProcessLaunch may break the _relatedWebView SPI"
        https://bugs.webkit.org/show_bug.cgi?id=197160
        https://trac.webkit.org/changeset/244502

2019-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244437.

        Still breaks internal tests.

        Reverted changeset:

        "InjectedBundle parameters often need initialization function
        called before unarchiving"
        https://bugs.webkit.org/show_bug.cgi?id=189709
        https://trac.webkit.org/changeset/244437

2019-04-22  Chris Dumez  <cdumez@apple.com>

        Delayed WebProcessLaunch may break the _relatedWebView SPI
        https://bugs.webkit.org/show_bug.cgi?id=197160

        Reviewed by Alex Christensen.

        Delayed WebProcessLaunch may break the _relatedWebView SPI. The breakage would happen if the client
        would relate a WebView to another which has not launched its initial process yet.

        To address the issue, when we need a running process for a WebView which has a related view, we need
        to make sure the related view has a running process and use that process. Previously, we would share
        the "dummy" process instead.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcess):
        (WebKit::WebPageProxy::ensureRunningProcess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):

2019-04-22  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] fix gtk_style_context_set_background deprecation
        https://bugs.webkit.org/show_bug.cgi?id=196912

        Reviewed by Carlos Garcia Campos.

        Since gtk 3.18 gtk_style_context_set_background has been deprecated.
        Backgrounds are not rendered in the UI process, so it can be
        simply removed.

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

2019-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Defer EditorState updates until the next layer tree flush in a few additional circumstances
        https://bugs.webkit.org/show_bug.cgi?id=197145
        <rdar://problem/50078170>

        Reviewed by Darin Adler.

        Gets rid of sendPartialEditorStateAndSchedulePostLayoutUpdate(), in favor of always scheduling a full editor
        state update after the next compositing flush.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateEditorStateAfterLayoutIfEditabilityChanged):
        (WebKit::WebPage::setNeedsFontAttributes):
        (WebKit::WebPage::didChangeOverflowScrollPosition):
        (WebKit::WebPage::didChangeSelection):
        (WebKit::WebPage::didChangeSelectionOrOverflowScrollPosition):
        (WebKit::WebPage::sendPartialEditorStateAndSchedulePostLayoutUpdate): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::updateVisibleContentRects):

2019-04-21  Chris Dumez  <cdumez@apple.com>

        Regression(r243767) WebFrame::m_navigationIsContinuingInAnotherProcess flag is never reset
        https://bugs.webkit.org/show_bug.cgi?id=197144

        Reviewed by Darin Adler.

        WebFrame::m_navigationIsContinuingInAnotherProcess flag is never reset since it was introduced in
        r243767. This leads to leaking Navigation objects in the UIProcess when reusing a previously
        suspended process because such process will no longer send the DidDestroyNavigation IPC.

        It turns out that resetting the flags causes API tests such as ProcessSwap.QuickBackForwardNavigationWithPSON
        to ASSERT. This is because when the UIProcess quickly navigate back and forth without waiting for policy
        decisions, we may end up getting the policy decision for a particular navigation *after* we've sent the
        DidDestroyNavigation.

        As a result, this patch reverts r243767 and fixes in the assertion in http/tests/adClickAttribution/store-ad-click-attribution.html
        another way. We initially assumed that the logic in WebPageProxy::didDestroyNavigation() was failing to
        ignore the DidDestroyNavigation from the previous process after a swap due to a race, maybe because it was
        sometimes received too late and m_provisionalPage was already cleared. However, this would not make sense
        since the test is crashing consistently and the page would no longer be able to receive IPC from the
        previous process *after* we've committed the provisional process/page.

        The real issue was that the DidDestroyNavigation IPC was received *before* we could construct the
        provisional page, which is why the logic in WebPageProxy::didDestroyNavigation() was failing to ignore
        the bad IPC. In WebPageProxy::receivedNavigationPolicyDecision(), we were calling receivedPolicyDecision()
        (which would send the DidReceivePolicyDecision to the previous WebProcess) and then continueNavigationInNewProcess()
        in order to construct the provisional page. I personally did not expect we could receive IPC between the
        calls to receivedNavigationPolicyDecision() and receivedPolicyDecision(), since we are not yielding and since
        the DidReceivePolicyDecision IPC is asynchronous. However, this is exactly what was happening in the context
        of this test. The reason is that the DidReceivePolicyDecision IPC was getting wrapped in a synchronous message
        and sent as synchronous message due to the Connection::m_inDispatchMessageMarkedToUseFullySynchronousModeForTesting
        flag which seems to get set in the test due to some EventSender IPC. I believe this is because the test uses
        EventSender to do a click on a link which triggers the navigation.

        To address the issue, I now call receivedNavigationPolicyDecision() *after* continueNavigationInNewProcess()
        to make sure that we always start the provisional load in the new process before we tell the previous process
        to stop loading. This way, there is no way we get IPC from the previous process about the current navigation
        before we have a provisional page.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::didDestroyNavigation):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision):
        (WebKit::WebFrame::documentLoaderDetached):
        * WebProcess/WebPage/WebFrame.h:

2019-04-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build with recent SDKs.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (deviceOrientation):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController initWithWebView:]):
        (-[WKFullScreenViewController viewWillTransitionToSize:withTransitionCoordinator:]):
        (-[WKFullScreenViewController _statusBarFrameDidChange:]):

2019-04-19  John Wilander  <wilander@apple.com>

        Disable Ad Click Attribution in ephemeral sessions and make sure conversion requests use an ephemeral, stateless session
        https://bugs.webkit.org/show_bug.cgi?id=197108
        <rdar://problem/49918702>

        Reviewed by Alex Christensen.

        This patch introduces a new NSURLSession in WebKit::NetworkSessionCocoa called
        m_ephemeralStatelessCookielessSession. As its name implies, it's ephemeral, 
        stateless, and has a NSHTTPCookieAcceptPolicyNever cookie policy.

        The new session can be invoked with the new enum value of
        WebCore::StoredCredentialsPolicy called EphemeralStatelessCookieless.

        WebKit::AdClickAttributionManager::fireConversionRequest() makes use of
        the new session for its conversion requests.

        This patch also makes sure that Ad Click Attributions cannot be stored in
        ephemeral sessions and already stored attributions cannot be converted in
        ephemeral sessions.

        * NetworkProcess/AdClickAttributionManager.cpp:
        (WebKit::AdClickAttributionManager::fireConversionRequest):
        (WebKit::AdClickAttributionManager::toString const):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
            Calls NetworkSessionCocoa::initializeEphemeralStatelessCookielessSession() lazily.
        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::initializeEphemeralStatelessCookielessSession):
        (WebKit::NetworkSessionCocoa::invalidateAndCancel):
        * Shared/WebCoreArgumentCoders.h:

2019-04-19  Daniel Bates  <dabates@apple.com>

        Use RetainPtr and rename +autocorrectionRectsWithRects:lastRect: to +autocorrectionRectsWithFirstCGRect:lastCGRect:
        https://bugs.webkit.org/show_bug.cgi?id=197122

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]): Renamed; formerly named +autocorrectionRectsWithRects:lastRect:.
        While I am here use else-branch to initialize firstRect and lastRect just to make the code closer to the optimal
        assembly. Also use Vector::{isEmpty, first, last}() instead of using the index operator overload and size() for
        emptiness checks. The code is more readable at the cost being ever so slightly slower (due to the overflow checks
        in first() and last()), but this code is likely not hot enough for it to matter.
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]): Update for renaming.
        (+[WKAutocorrectionRects autocorrectionRectsWithFirstCGRect:lastCGRect:]): Ditto.
        (+[WKAutocorrectionRects autocorrectionRectsWithRects:lastRect:]): Deleted.

2019-04-19  Daniel Bates  <dabates@apple.com>

        -[WKAutocorrectionContext emptyAutocorrectionContext:] generates invalid empty context
        https://bugs.webkit.org/show_bug.cgi?id=197119

        Reviewed by Wenson Hsieh.

        Use the existing EditingRange type to represent the location and length of the marked text
        range for an autocorrection instead of managing integers. This type avoid the need to handle
        the special case for an empty range represented as NSMakeRange(NSNotFound, 0). Currently
        WKAutocorrectionContext incorrectly represents the empty range as NSMakeRange(WTF::notFound, 0).

        While I am here, simplify the existing WebAutocorrectionContext encoder/decoder code and rename
        +[WKAutocorrectionContext autocorrectionContextWithContext:] to +autocorrectionContextWithWebContext
        to better reflect the expected source of the conversion: a Web-type.

        * Shared/ios/WebAutocorrectionContext.h:
        (WebKit::WebAutocorrectionContext::encode const): Reformat while I am here to make this logic easy
        to amend without losing SVN history.
        (WebKit::WebAutocorrectionContext::decode): Simplify the code while I am here.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleAutocorrectionContext:]): Update for renaming.
        (+[WKAutocorrectionContext emptyAutocorrectionContext]): Update for renaming.
        (+[WKAutocorrectionContext autocorrectionContextWithWebContext:]): Renamed; formerly named autocorrectionContextWithContext.
        (+[WKAutocorrectionContext autocorrectionContextWithContext:]): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::autocorrectionContext): Update to make use of EditingRange. Also instantiate
        the struct and return it, initializing its fields individually instead of using the constructor to
        make this code less error prone. It's easy to introduce an error with the constructor notation when
        amending the the struct because so many of the arguments are of the same data type. Individually
        initializing the struct fields makes it less likely for an ordering mistake to be introduced.

2019-04-19  Dean Jackson  <dino@apple.com>

        Add more _WKElementActionTypes and provide API to create with custom types
        https://bugs.webkit.org/show_bug.cgi?id=197117
        <rdar://problem/50059548>

        Reviewed by Tim Horton.

        We were missing a few obvious types that are well-known
        browser actions, and/or should be visible in share sheets.
        Also, clean up the API for constructing new types.

        * UIProcess/API/Cocoa/_WKElementAction.h: Add new types for opening
        in new tabs, windows and downloading.
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction elementActionWithType:title:actionHandler:]): New constructor
        with type, title and action.
        (+[_WKElementAction elementActionWithType:]): Call new method.

2019-04-18  Daniel Bates  <dabates@apple.com>

        Use existing KeyEventCodesIOS constants instead of duplicating them
        https://bugs.webkit.org/show_bug.cgi?id=197081

        Rubber-stamped by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]): While I am here, remove the case for the space key
        as it is identical to the default switch case.

2019-04-19  Keith Rollin  <krollin@apple.com>

        Add postprocess-header-rule scripts
        https://bugs.webkit.org/show_bug.cgi?id=197072
        <rdar://problem/50027299>

        Reviewed by Brent Fulgham.

        Several projects have post-processing build phases where exported
        headers are tweaked after they've been copied. This post-processing is
        performed via scripts called postprocess-headers.sh. For reasons
        related to XCBuild, we are now transitioning to a build process where
        the post-processing is performed at the same time as the
        exporting/copying. To support this process, add similar scripts named
        postprocess-header-rule, which are geared towards processing a single
        file at a time rather than all exported files at once. Also add a
        build rule that makes use of these scripts. These scripts and build
        rules are not used at the moment; they will come into use in an
        imminent patch.

        Note that I've named these postprocess-header-rule rather than
        postprocess-header-rule.sh. Scripts in Tools/Scripts do not have
        suffixes indicating how the tool is implemented. Scripts in
        per-project Scripts folders appear to be mixed regarding the use of
        suffixes. I'm opting here to follow the Tools/Scripts convention, with
        the expectation that over time we completely standardize on that.

        * Scripts/postprocess-header-rule: Added.
        * WebKit.xcodeproj/project.pbxproj:

2019-04-19  Brady Eidson  <beidson@apple.com>

        Deprecate WebKit2 plug-in support.
        <rdar://problem/43812306> and https://bugs.webkit.org/show_bug.cgi?id=197080

        Reviewed by Andy Estes.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences encodeWithCoder:]):
        (-[WKPreferences initWithCoder:]):
        (-[WKPreferences javaEnabled]):
        (-[WKPreferences setJavaEnabled:]):
        (-[WKPreferences plugInsEnabled]):
        (-[WKPreferences setPlugInsEnabled:]):

2019-04-19  Chris Dumez  <cdumez@apple.com>

        Minor PSON release logging improvements
        https://bugs.webkit.org/show_bug.cgi?id=197104

        Reviewed by Darin Adler.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::continueNavigationInNewProcess):

2019-04-19  Tim Horton  <timothy_horton@apple.com>

        YouTube and Twitter embeds don't load in News
        https://bugs.webkit.org/show_bug.cgi?id=197111
        <rdar://problem/50010081>

        Reviewed by Timothy Hatcher.

        * WebProcess/com.apple.WebProcess.sb.in:
        Adjust this sandbox exception to include both platforms.

2019-04-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add quirks to disable autocorrection and autocapitalization in hidden editable areas on some websites
        https://bugs.webkit.org/show_bug.cgi?id=197102
        <rdar://problem/49864669>

        Reviewed by Ryosuke Niwa.

        If the quirk for disabling autocorrection and autocapitalization in hidden editable areas is active, then check
        whether the focused element is hidden, and turn off autocorrection and autocapitalization if needed.

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

2019-04-19  Commit Queue  <commit-queue@webkit.org>

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

        Caused build failures with Internal and Opensource builders
        (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "Deprecate WebKit2 plug-in support."
        https://bugs.webkit.org/show_bug.cgi?id=197080
        https://trac.webkit.org/changeset/244447

2019-04-18  Brady Eidson  <beidson@apple.com>

        Deprecate WebKit2 plug-in support.
        <rdar://problem/43812306> and https://bugs.webkit.org/show_bug.cgi?id=197080

        Reviewed by Andy Estes.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences encodeWithCoder:]):
        (-[WKPreferences initWithCoder:]):
        (-[WKPreferences javaEnabled]):
        (-[WKPreferences setJavaEnabled:]):
        (-[WKPreferences plugInsEnabled]):
        (-[WKPreferences setPlugInsEnabled:]):

2019-04-18  Commit Queue  <commit-queue@webkit.org>

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

        caused 1 API test failure (Requested by zalan on #webkit).

        Reverted changeset:

        "Regression (r244291): Broken API Test
        AutoLayoutRenderingProgressRelativeOrdering"
        https://bugs.webkit.org/show_bug.cgi?id=196948
        https://trac.webkit.org/changeset/244434

2019-04-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add new compatibility mode API on WKNavigation
        https://bugs.webkit.org/show_bug.cgi?id=197069
        <rdar://problem/50025800>

        Reviewed by Tim Horton.

        Adds a new property on WKNavigation.

        * Shared/WebCompatibilityMode.h:

        Drive-by fix: make this enum class 8 bits wide.

        * UIProcess/API/APINavigation.h:
        (API::Navigation::setEffectiveCompatibilityMode):
        (API::Navigation::effectiveCompatibilityMode const):

        Add a new member variable to API::Navigation.

        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigation.mm:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h:

        Add various hooks into WebKitAdditions.

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

        Set API::Navigation's effective compatibility mode.

        (WebKit::WebPageProxy::effectiveCompatibilityModeAfterAdjustingPolicies):

        Renamed and refactored this method to return the effective compatibility mode, chosen while adjusting website
        policies.

        (WebKit::WebPageProxy::adjustPoliciesForCompatibilityMode): Deleted.
        * UIProcess/WebPageProxy.h:

2019-04-18  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WebCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182512
        <rdar://problem/37510435>

        Reviewed by Alex Christensen.

        WebCore now uses WebCore_PRIVATE_INCLUDE_DIRECTORIES for all ports. This revealed
        problems with WebKit's usage of WebCore headers. All include directories directly
        referencing the WebCore source tree we're removed from the CMake files. Any includes
        of WebCore headers using "*.h" were modified to <WebCore/*.h>

        Removed generation of forwarding headers for WebCore using the perl script.

        * CMakeLists.txt:
        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * Scripts/generate-forwarding-headers.pl:
        * UIProcess/API/glib/WebKitUserContentFilterStore.cpp:
        * UIProcess/API/wpe/WebKitColorPrivate.h:
        * UIProcess/WebsiteData/win/WebsiteDataStoreWin.cpp:
        * UIProcess/win/PageClientImpl.cpp:

2019-04-18  Chris Dumez  <cdumez@apple.com>

        [iOS] Improve detection of when web views go to background / foreground
        https://bugs.webkit.org/show_bug.cgi?id=197035
        <rdar://problem/45281182>

        Reviewed by Tim Horton.

        Improve detection of when web views go to background / foreground on iOS.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker): Deleted.
        (WebKit::ApplicationStateTracker::~ApplicationStateTracker): Deleted.
        (WebKit::ApplicationStateTracker::applicationDidEnterBackground): Deleted.
        (WebKit::ApplicationStateTracker::applicationDidFinishSnapshottingAfterEnteringBackground): Deleted.
        (WebKit::ApplicationStateTracker::applicationWillEnterForeground): Deleted.

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

        Refactoring: Pull all fullscreen code out of Document and into its own helper class
        https://bugs.webkit.org/show_bug.cgi?id=197017

        Reviewed by Eric Carlson.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::willEnterFullScreen):
        (WebKit::WebFullScreenManager::didEnterFullScreen):
        (WebKit::WebFullScreenManager::willExitFullScreen):
        (WebKit::WebFullScreenManager::didExitFullScreen):
        (WebKit::WebFullScreenManager::setAnimatingFullScreen):
        (WebKit::WebFullScreenManager::requestExitFullScreen):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentGtk.cpp:
        (webkit_dom_document_webkit_cancel_fullscreen):
        (webkit_dom_document_webkit_exit_fullscreen):
        (webkit_dom_document_get_webkit_is_fullscreen):
        (webkit_dom_document_get_webkit_fullscreen_keyboard_input_allowed):
        (webkit_dom_document_get_webkit_current_fullscreen_element):
        (webkit_dom_document_get_webkit_fullscreen_element):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):

2019-04-18  Megan Gardner  <megan_gardner@apple.com>

        Update UIKit when a cut causes a selection change
        https://bugs.webkit.org/show_bug.cgi?id=197047
        <rdar://problem/36311563>

        Reviewed by Wenson Hsieh.

        We need to let UIKit know when a cut causes a selection change (always),
        so that is can appropriately update the button on the keyboard bar.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cutForWebView:]):

2019-04-18  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Ryosuke Niwa.

        Handle the case where the InjectedBundle parameters do not successfully decode because they contain
        an unexpected class from the embedding program. If this happens, try decoding the bundle parameters
        after the bundle initialiation function runs, which gives the embedding program the opportunity to
        register additional classes that are safe for serialization.

        Extend WKWebProcessPlugIn with a method that returns the names of any custom classes that need
        to be serialized by the InjectedBundle.
        
        Create a new 'decodeBundleParameters' method that contains the logic that used to live in 'initialize'.
        Revise 'initialize' to call this new method.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize): Use the new method.
        (WebKit::InjectedBundle::decodeBundleParameters): Added.
        (WebKit::InjectedBundle::setBundleParameters): Use 'decodeObjectOfClasses' with the more complete
        'classesForCoder' method to unarchive the passed bundle parameters, rather than the
        NSDictionary-specific method, since InjectedBundles often encode other types of objects, and the
        NSDictionary object may itself hold other kinds of objects.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        (WebKit::WKWebProcessPlugIn::additionalClassesForParameterCoder): Added.

2019-04-18  Zalan Bujtas  <zalan@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948
        <rdar://problem/49927131>

        Reviewed by Tim Horton.

        Move intrinsicContentSizeDidChange out of DrawingArea. Intrinsic content size is a layout concept and
        after r244291 there's no reason to have it in DrawingArea.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didUpdateGeometry):
        (WebKit::DrawingAreaProxy::intrinsicContentSizeDidChange): Deleted.
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeIntrinsicContentSize):
        (WebKit::WebPageProxy::setViewLayoutSize):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::intrinsicContentSizeDidChange): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateIntrinsicContentSizeIfNeeded):
        (WebKit::WebPage::dispatchDidReachLayoutMilestone):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded): Deleted.

2019-04-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244299.

        Breaks internal tests.

        Reverted changeset:

        "InjectedBundle parameters often need initialization function
        called before unarchiving"
        https://bugs.webkit.org/show_bug.cgi?id=189709
        https://trac.webkit.org/changeset/244299

2019-04-18  Shawn Roberts  <sroberts@apple.com>

        Unreviewed manual rollout of r244248 and r244409
        Causing assertion failures on Mac WK2 Debug builds
        https://bugs.webkit.org/show_bug.cgi?id=195623

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::prefetchCache): Deleted.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        (WebKit::NetworkResourceLoader::isCrossOriginPrefetch const): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/PrefetchCache.cpp: Removed.
        * NetworkProcess/cache/PrefetchCache.h: Removed.
        * Shared/WebPreferences.yaml:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-04-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: enable WebGL2 for inspector page
        https://bugs.webkit.org/show_bug.cgi?id=196932
        <rdar://problem/49916213>

        Reviewed by Timothy Hatcher.

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

2019-04-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: InspectorFrontendHost::inspectionLevel returns wrong value for inspector3
        https://bugs.webkit.org/show_bug.cgi?id=197044

        Reviewed by Joseph Pecoraro.

        * UIProcess/WebInspectorUtilities.h:
        * UIProcess/WebInspectorUtilities.cpp:
        (WebKit::trackInspectorPage):
        (WebKit::untrackInspectorPage):
        Determine the level of the inspector page by looking to see if the page being inspected is
        in the inspector page map. If so, we must be inspecting an inspector page and should use
        that inspector page's inspection level as the value to increment.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createFrontendPage):
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::createFrontendPageAndWindow):

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

        Adopt different scroll view flashing SPI
        https://bugs.webkit.org/show_bug.cgi?id=197043
        <rdar://problem/49996476>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollViewAnimator scrollToContentOffset:animated:]):

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

        REGRESSION (r241988): Switching tabs is slow
        https://bugs.webkit.org/show_bug.cgi?id=197037
        <rdar://problem/49951473>

        Reviewed by Simon Fraser.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState):
        r241988 changed to wait for a WebPageProxy message to a given DrawingArea ID,
        but WebPageProxy messages are identified by their WebPageProxy ID.
        Revert that one change. The rest of the patch looks OK.

2019-04-17  Rob Buis  <rbuis@igalia.com>

        Link prefetch not useful for top-level navigation
        https://bugs.webkit.org/show_bug.cgi?id=195623

        Reviewed by Alex Christensen.

        Fix macOS and iOS Debug WK2 bots ASSERTS after r367404, by simply
        not sending the DidReceiveResponse message.

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

2019-04-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r244400.

        Caused testing to exit early with assertionon Debug WK2

        Reverted changeset:

        "UI↔Web deadlock when printing with a JavaScript alert
        visible"
        https://bugs.webkit.org/show_bug.cgi?id=196839
        https://trac.webkit.org/changeset/244400

2019-04-17  Brady Eidson  <beidson@apple.com>

        Link clicks in PDFs shouldn't send referrer headers.
        <rdar://problem/21142581> and https://bugs.webkit.org/show_bug.cgi?id=196980

        Reviewed by Tim Horton.

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

2019-04-17  Andy Estes  <aestes@apple.com>

        [iOS] Support multiple file selection in UIDocumentPickerViewController
        https://bugs.webkit.org/show_bug.cgi?id=197014
        <rdar://problem/49963514>

        Reviewed by Tim Horton.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showDocumentPickerMenu]):
        Allowed multiple file selection in our UIDocumentPickerViewController when
        _allowMultipleFiles is YES.

        (displayStringForDocumentsAtURLs):
        (-[WKFileUploadPanel documentPicker:didPickDocumentsAtURLs:]):
        Changed to support multiple file selection. When more than one file is selected, use
        WebCore::multipleFileUploadText() as the display string.

2019-04-17  Alex Christensen  <achristensen@webkit.org>

        Make WebCompiledContentRuleListData non-default-constructible, move its nonserialized member to API::ContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=197033

        Reviewed by Tim Horton.

        This is just cleanup that makes the code nicer without changing behavior.

        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::encode const):
        (WebKit::WebCompiledContentRuleListData::decode):
        * Shared/WebCompiledContentRuleListData.h:
        (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
        * UIProcess/API/APIContentRuleList.h:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::createExtension):

2019-04-17  John Wilander  <wilander@apple.com>

        Add prioritization of ad click conversions and cleaning of sent ad click conversions
        https://bugs.webkit.org/show_bug.cgi?id=196934
        <rdar://problem/49917773>

        Reviewed by Chris Dumez.

        In this description, by "pair" I mean { AdClickAttribution::Source, AdClickAttribution::Destination }.

        This patch adds handling of prioritization of conversions according to these rules:
        - If we have a matching unconverted attribution, convert it. This consumes the conversion.
        - If we have no previously converted attribution for this pair, just store.
        - If we have a previously converted attribution for this pair, replace it if the new one has higher priority.
        - If we had no matching unconverted attribution but do have a previously converted attribution for this
        pair, re-convert the previously converted attribution to make sure the highest priority gets set.

        This handling is in part done by dividing the previous m_adClickAttributionMap into 
        m_unconvertedAdClickAttributionMap and m_convertedAdClickAttributionMap, which now use a std::pair
        as key instead of a nested HashMap.

        This patch also changes AdClickAttributionManager::firePendingConversionRequests() so that it now
        removes attributions which have been sent out.

        Finally, AdClickAttributionManager::clear() no longer clears m_conversionBaseURLForTesting and
        m_isRunningTest since doing so caused test flakiness. It is now up to the test case that sets these
        members to also clear them when done.

        * NetworkProcess/AdClickAttributionManager.cpp:
        (WebKit::AdClickAttributionManager::storeUnconverted):
        (WebKit::AdClickAttributionManager::convert):
        (WebKit::AdClickAttributionManager::firePendingConversionRequests):
        (WebKit::AdClickAttributionManager::clear):
        (WebKit::AdClickAttributionManager::toString const):
        (WebKit::AdClickAttributionManager::setConversionURLForTesting):
        (WebKit::AdClickAttributionManager::ensureDestinationMapForSource): Deleted.
        (WebKit::AdClickAttributionManager::store): Deleted.
        * NetworkProcess/AdClickAttributionManager.h:
        (WebKit::AdClickAttributionManager::AdClickAttributionManager):
        (WebKit::AdClickAttributionManager::setConversionURLForTesting): Deleted.
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::storeAdClickAttribution):

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

        UI↔Web deadlock when printing with a JavaScript alert visible
        https://bugs.webkit.org/show_bug.cgi?id=196839
        <rdar://problem/49157642>

        Reviewed by Andy Estes.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::sendSyncReply):
        (IPC::Connection::dispatchSyncMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::hasOutstandingOutgoingSynchronousReplies const):
        Keep track of whether we owe the other side of the connection any
        delayed sync replies.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webViewPrintFormatter]):
        Most actions one can take with a _WKWebViewPrintFormatter involve
        synchronously messaging the Web Content process with an infinite timeout.
        Doing so while the Web Content process is awaiting a reply to a deferred-reply
        synchronous message (like, say, an alert()) results in an app-destroying deadlock.
        Instead of that, return a nil _WKWebViewPrintFormatter, indicating to the client
        that we can't print right now.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        (-[WKContentView _wk_printedDocument]):
        The above isn't sufficient, though, because a sync message could arrive and
        be handled between creation and use of the _WKWebViewPrintFormatter.
        So, we also bail with a zero page count and null CGPDFDocument immediately
        before we would send a sync message to the Web Content process. Clients
        handle this less gracefully (e.g. showing a zero page PDF), but it is
        very rare compared to the above case.

2019-04-17  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Use aria role as a hint whether a tap should result in a synthetic click
        https://bugs.webkit.org/show_bug.cgi?id=196988
        <rdar://problem/49955328>

        Reviewed by Simon Fraser.

        Tapping on elements with cretain aria role attributes should trigger synthetic click the same way it does on form control elements. 

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isAriaRoleForImmediateClick):
        (WebKit::nodeAlwaysRequiresClick):
        (WebKit::WebPage::handleSyntheticClick):

2019-04-17  Alex Christensen  <achristensen@webkit.org>

        WKRetainPtr's adoption constructor should be private
        https://bugs.webkit.org/show_bug.cgi?id=197019

        Reviewed by Tim Horton.

        RefPtr and RetainPtr have already done this.  It makes us use nicer syntax.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient):
        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::WKRetainPtr::WKRetainPtr):
        (WebKit::adoptWK):

2019-04-17  Alex Christensen  <achristensen@webkit.org>

        Fix crash during teardown of PingLoad
        https://bugs.webkit.org/show_bug.cgi?id=197024
        <rdar://problem/49973077>

        Reviewed by Jer Noble.

        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::initialize):
        Early return if weakThis is null.

2019-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r243926): [iOS] Release assertion when computing editor state during an overflow scroll triggered by layout
        https://bugs.webkit.org/show_bug.cgi?id=197012
        <rdar://problem/49908848>

        Reviewed by Simon Fraser.

        We hit the release assertion due to the following sequence of events:
        - Dispatch a queued event (in this case, a scroll event)
        - Invoke the scroll event listener, which modifies layout in some way
        - This scrolls an overflow scrollable container under the scope of layout
        - Overflow scrolling then calls didChangeSelection and triggers an editor state update, which updates layout

        In the case where the selection is in the main frame, we bail early due to the check for recursive layout (i.e.
        frameView->layoutContext().isInRenderTreeLayout()). However, in the case where the selection is inside a
        subframe, we end up skipping past this check, since the subframe's FrameView isn't currently laying out, and so
        we end up hitting the release assertion underneath the early return.

        To fix this, simply defer editor state updates due to overflow scrolling until the next remote layer tree commit
        instead of computing and sending the information immediately. While this only defers editor state updates during
        overflow scrolling, <rdar://problem/47258878> tracks making editor state updates deferred in the general case.

        Test: editing/selection/overflow-scroll-while-selecting-text.html

        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::overflowScrollPositionChanged):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeOverflowScrollPosition):
        (WebKit::WebPage::didChangeSelection):
        (WebKit::WebPage::didChangeSelectionOrOverflowScrollPosition):
        * WebProcess/WebPage/WebPage.h:

2019-04-17  Chris Dumez  <cdumez@apple.com>

        Remember device orientation permission for the duration of the browsing session
        https://bugs.webkit.org/show_bug.cgi?id=196992
        <rdar://problem/49946067>

        Reviewed by Alex Christensen.

        Implement caching of device orientation permission decisions on the WebDeviceOrientationAndMotionAccessController,
        which is owned by the WebsiteDataStore. This way, if we already prompted the user of a given origin, we will
        remember the previous decision for the duration of the session and not prompt again.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (toDeviceOrientationOrMotionPermissionState):
        (-[WKWebpagePreferences _setDeviceOrientationAndMotionAccessPolicy:]):
        (toWKWebsiteDeviceOrientationAndMotionAccessPolicy):
        (-[WKWebpagePreferences _deviceOrientationAndMotionAccessPolicy]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebsiteData/WebDeviceOrientationAndMotionAccessController.cpp: Added.
        (WebKit::WebDeviceOrientationAndMotionAccessController::shouldAllowDeviceOrientationAndMotionAccess):
        (WebKit::WebDeviceOrientationAndMotionAccessController::deviceOrientationPermission const):
        * UIProcess/WebsiteData/WebDeviceOrientationAndMotionAccessController.h: Copied from Source/WebCore/dom/DeviceOrientationAndMotionAccessController.h.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::deviceOrientationAndMotionAccessController):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldAllowDeviceOrientationAndMotionAccess):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess):
        * WebProcess/WebPage/WebPage.h:

2019-04-16  Andy Estes  <aestes@apple.com>

        [iOSMac] Use UIDocumentPickerViewController for picking files
        https://bugs.webkit.org/show_bug.cgi?id=196999
        <rdar://problem/49961414>

        Reviewed by Tim Horton.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showDocumentPickerMenu]):
        Changed to present a UIDocumentPickerViewController on iOSMac.

        (-[WKFileUploadPanel documentPicker:didPickDocumentsAtURLs:]):
        (-[WKFileUploadPanel documentPicker:didPickDocumentAtURL:]):
        Replaced a deprecated delegate method implementation.

2019-04-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WebKit2] Add support for honoring -[UIMenuItem dontDismiss]
        https://bugs.webkit.org/show_bug.cgi?id=196919
        <rdar://problem/41630459>

        Reviewed by Tim Horton.

        Adds modern WebKit support for -dontDismiss by implementing a couple of new platform hooks. Covered by a new
        layout test: editing/selection/ios/selection-after-changing-text-with-callout-menu.html.

        * Platform/spi/ios/UIKitSPI.h:

        Declare the private -dontDismiss property of UIMenuItem.

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

        Additionally teach the web view (not just the content view) to respond to the hook. This matters in the case
        where the WebKit client (most notably, Mail) overrides WKWebView methods to define custom actions in the menu
        controller. This scenario is exercised by the new layout test.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willFinishIgnoringCalloutBarFadeAfterPerformingAction]):

        If an action was performed where callout bar fading was ignored, then in WebKit, don't allow selection changes
        to fade the callout bar until after the next remote layer tree commit.

        (-[WKContentView _updateChangedSelection:]):

        Stop suppressing selection updates when showing B/I/U controls, now that we can properly honor the -dontDismiss
        property. This was originally introduced in <rdar://problem/15199925>, presumably to ensure that B/I/U buttons
        (which have -dontDismiss set to YES) don't trigger selection change and end up dismissing themselves; however,
        if triggering B/I/U actually changes the selection rects, this also means that the selection rects on-screen
        would be stale after triggering these actions. This effect is most noticeable when bolding text.

        (-[WKContentView shouldAllowHidingSelectionCommands]):

2019-04-16  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed non-unified build fix after r244307.

        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:

2019-04-16  Megan Gardner  <megan_gardner@apple.com>

        Allow sharing from imageSheet on an image document
        https://bugs.webkit.org/show_bug.cgi?id=196891
        <rdar://problem/25377386>

        Reviewed by Tim Horton.

        Allow sharing from an image sheet generated from an image document
        by storing the image URL and using it as a fallback for the URL.
        Store it as an image on WKElementAction to not accidentally trigger
        any actions that should actually be associated with pure URLs.

        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:]):
        (-[_WKActivatedElementInfo _initWithType:URL:imageURL:location:title:ID:rect:image:]):
        (-[_WKActivatedElementInfo _initWithType:URL:imageURL:location:title:ID:rect:image:userInfo:]):
        (-[_WKActivatedElementInfo imageURL]):
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:]): Deleted.
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:userInfo:]): Deleted.
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]):
        (-[WKActionSheetAssistant showLinkSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showAttachmentSheet]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):

2019-04-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add a way for Apple-internal clients to opt into recommended compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=196977
        <rdar://problem/49871194>

        Reviewed by Tim Horton.

        Add a helper method to query whether the navigation client should bypass policy safeguards when determining the
        recommended compatibility mode. We bypass policy safeguards in Cocoa platforms if the navigation delegate
        implements the new navigation delegate API.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::shouldBypassCompatibilityModeSafeguards const):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::shouldBypassCompatibilityModeSafeguards const):

2019-04-16  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:] never returns _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=196991
        <rdar://problem/45507423>

        Reviewed by Brent Fulgham.

        The credentials are stored in the Network process. To enable fetching credentials from the Network process,
        a proper process access type needs to be set for the credential Website data type.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataFetch):

2019-04-16  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r244162) Clearing website data from ephemeral WKWebsiteDataStore should finish instead of asserting or hanging
        https://bugs.webkit.org/show_bug.cgi?id=196995

        Reviewed by Brady Eidson.

        Always call CompletionHandlers.  Otherwise things hang or assert.
        I added an API test that asserts without this change so we don't regress this again.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::clearAllCaches):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):

2019-04-16  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is not communicated to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=196941
        <rdar://problem/49237544>

        Reviewed by Geoff Garen.

        Whenever the UIProcess is notified of an explicit document.open() call, update the
        PageLoadState to make sure the URL is up-to-date. Also make sure the page / process
        knows it committed a load (i.e. It is no longer showing the initially empty document).

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::didExplicitOpen):
        * UIProcess/PageLoadState.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didExplicitOpenForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidExplicitOpen):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2019-04-16  Chris Dumez  <cdumez@apple.com>

        Show prompt for device orientation access if the client does not implement the corresponding API delegate
        https://bugs.webkit.org/show_bug.cgi?id=196971
        <rdar://problem/49945840>

        Reviewed by Alex Christensen.

        Show prompt for device orientation access if the client does not implement the corresponding
        API delegate, instead of rejecting access by default.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/Cocoa/WKOrientationAccessAlert.h: Added.
        * UIProcess/Cocoa/WKOrientationAccessAlert.mm: Added.
        (WebKit::presentOrientationAccessAlert):
        * WebKit.xcodeproj/project.pbxproj:

2019-04-16  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r243557)[ContentChangeObserver] Need to double tap text formatting elements in MS Word web app
        https://bugs.webkit.org/show_bug.cgi?id=196975
        <rdar://problem/49489849>

        Reviewed by Simon Fraser.

        This patch ensures that we always proceed with synthetic click on form elements.

        Covered by existing tests.

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

2019-04-16  Timothy Hatcher  <timothy@apple.com>

        FrameView base background color always starts white.
        https://bugs.webkit.org/show_bug.cgi?id=196976

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Set m_backgroundColor before calling
        WebFrame::createWithCoreMainFrame so the call to create the FrameView
        for the empty page in transitionToCommittedForNewPage() gets
        the correct color from WebPage.

2019-04-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix the build with recent SDKs.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (WebKit::WKWebViewState::store):

2019-04-16  Commit Queue  <commit-queue@webkit.org>

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

        Causing all WK2 Debug builds to exit early after Assertion
        failures. (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "URL set by document.open() is not communicated to the
        UIProcess"
        https://bugs.webkit.org/show_bug.cgi?id=196941
        https://trac.webkit.org/changeset/244321

2019-04-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CRASH when reopening tab with docked inspector on crashed page
        https://bugs.webkit.org/show_bug.cgi?id=196954
        <rdar://problem/48716433>

        Reviewed by Ryosuke Niwa.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):

2019-04-15  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is not communicated to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=196941
        <rdar://problem/49237544>

        Reviewed by Geoffrey Garen.

        Whenever the UIProcess is notified of an explicit document.open() call, update the
        PageLoadState to make sure the URL is up-to-date. Also make sure the page / process
        knows it committed a load (i.e. It is no longer showing the initially empty document).

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::didExplicitOpen):
        * UIProcess/PageLoadState.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didExplicitOpenForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidExplicitOpen):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2019-04-15  Alex Christensen  <achristensen@webkit.org>

        Stop using hyphenationFactor
        https://bugs.webkit.org/show_bug.cgi?id=196949
        <rdar://problem/49779594>

        Reviewed by Geoffrey Garen.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingTextView initWithAttributedString:forWarning:]):
        I added this use of hyphenationFactor in r241124 but the other changes in that revision make the use of hyphenationFactor redundant.
        There is a reason to remove it in the radar.

2019-04-15  Alex Christensen  <achristensen@webkit.org>

        Forward declare WKWebView in _WKDiagnosticLoggingDelegate.h

        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        This fixes builds where _WKDiagnosticLoggingDelegate.h is the only WebKit header included, such as my work on rdar://problem/35175989

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

        Add a DiagnosticLogging method taking an arbitrary dictionary of values.
        https://bugs.webkit.org/show_bug.cgi?id=196773

        Reviewed by Alex Christensen.

        In addition to adding the new logging delegate method (and piping everything into it), 
        add a new APIObject class to represent a signed integer.

        * Shared/API/APINumber.h:
        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/Cocoa/WKNSNumber.mm:
        (-[WKNSNumber dealloc]):
        (-[WKNSNumber objCType]):
        (-[WKNSNumber getValue:]):
        (-[WKNSNumber longLongValue]):
        (-[WKNSNumber _apiObject]):
        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):
        * UIProcess/API/APIDiagnosticLoggingClient.h:
        * UIProcess/API/C/WKPageDiagnosticLoggingClient.h:
        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.mm:
        (WebKit::DiagnosticLoggingClient::logDiagnosticMessageWithValueDictionary):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/WebPageDiagnosticLoggingClient.cpp:
        (WebKit::WebPageDiagnosticLoggingClient::logDiagnosticMessageWithValueDictionary):
        * UIProcess/WebPageDiagnosticLoggingClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::logDiagnosticMessageWithValueDictionary):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValueDictionary):
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:

2019-04-15  Dean Jackson  <dino@apple.com>

        Provide option to not create a longpress gesture recognizer
        https://bugs.webkit.org/show_bug.cgi?id=196937
        <rdar://problem/49918278>

        Build fix for iOS platforms that don't have link preview.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):

2019-04-15  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Ryosuke Niwa.

        Handle the case where the InjectedBundle parameters do not successfully decode because they contain
        an unexpected class from the embedding program. If this happens, try decoding the bundle parameters
        after the bundle initialiation function runs, which gives the embedding program the opportunity to
        register additional classes that are safe for serialization.

        Extend WKWebProcessPlugIn with a method that returns the names of any custom classes that need
        to be serialized by the InjectedBundle.
        
        Create a new 'decodeBundleParameters' method that contains the logic that used to live in 'initialize'.
        Revise 'initialize' to call this new method.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize): Use the new method.
        (WebKit::InjectedBundle::decodeBundleParameters): Added.
        (WebKit::InjectedBundle::setBundleParameters): Use 'decodeObjectOfClasses' with the more complete
        'classesForCoder' method to unarchive the passed bundle parameters, rather than the
        NSDictionary-specific method, since InjectedBundles often encode other types of objects, and the
        NSDictionary object may itself hold other kinds of objects.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        (WebKit::WKWebProcessPlugIn::additionalClassesForParameterCoder): Added.

2019-04-15  Dean Jackson  <dino@apple.com>

        Provide option to not create a longpress gesture recognizer
        https://bugs.webkit.org/show_bug.cgi?id=196937
        <rdar://problem/49918278>

        Reviewed by Antoine Quint.

        A WebKitAdditions file has changed name to WKContentViewInteractionWKInteraction.mm.

        Add a property to toggle if we should add a long press gesture
        recognizer.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (shouldUsePreviewForLongPress):
        (-[WKContentView shouldUsePreviewForLongPress]):

2019-04-15  Don Olmstead  <don.olmstead@sony.com>

        [CMake] WebCore derived sources should only be referenced inside WebCore
        https://bugs.webkit.org/show_bug.cgi?id=196904

        Reviewed by Konstantin Tokarev.

        Remove reference to DERIVED_SOURCES_WEBCORE_DIR in PlatformMac.cmake.

        * PlatformMac.cmake:

2019-04-15  Zalan Bujtas  <zalan@apple.com>

        DrawingArea should only capture painting related milestones
        https://bugs.webkit.org/show_bug.cgi?id=196926
        <rdar://problem/48003845>

        Reviewed by Tim Horton.

        While dispatching layout milestones (mixture of layout and painting items), the associated drawing areas should only capture the painting related milestones.
        These captured milestones get dispatched later in the commit handler to ensure that they are not forwarded prematurely.
        However the truly layout related milestones (e.g. DidFirstVisuallyNonEmptyLayout) should be dispatched right away with no delay.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::newlyReachedPaintingMilestones const):
        (WebKit::RemoteLayerTreeTransaction::setNewlyReachedPaintingMilestones):
        (WebKit::RemoteLayerTreeTransaction::newlyReachedLayoutMilestones const): Deleted.
        (WebKit::RemoteLayerTreeTransaction::setNewlyReachedLayoutMilestones): Deleted.
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode const):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::addMilestonesToDispatch):
        (WebKit::DrawingArea::dispatchDidReachLayoutMilestone): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        (WebKit::RemoteLayerTreeDrawingArea::addMilestonesToDispatch):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::dispatchDidReachLayoutMilestone): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dispatchDidReachLayoutMilestone):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (WebKit::TiledCoreAnimationDrawingArea::addMilestonesToDispatch):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::sendPendingNewlyReachedPaintingMilestones):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::sendPendingNewlyReachedLayoutMilestones): Deleted.
        (WebKit::TiledCoreAnimationDrawingArea::dispatchDidReachLayoutMilestone): Deleted.

2019-04-15  John Wilander  <wilander@apple.com>

        Send delayed Ad Click Attribution conversion requests to the click source
        https://bugs.webkit.org/show_bug.cgi?id=196838
        <rdar://problem/47650157>

        Reviewed by Chris Dumez and Youenn Fablet.

        This patch schedules a conversion request with appropriate data going to the
        click source as a result of an ad click conversion.

        WebKit::AdClickAttributionManager makes use of existing WebKit::PingLoad
        infrastructure to make the request. This will probably be reworked into a
        dedicated load class further on.

        New test infrastructure allows for an override of both the conversion URL
        and the 24-48 hour timer.

        * NetworkProcess/AdClickAttributionManager.cpp: Added.
        (WebKit::AdClickAttributionManager::ensureDestinationMapForSource):
        (WebKit::AdClickAttributionManager::store):
        (WebKit::AdClickAttributionManager::startTimer):
            Convenience function to support test override.
        (WebKit::AdClickAttributionManager::convert):
            This function now sets the timer.
        (WebKit::AdClickAttributionManager::fireConversionRequest):
            Fire an individual request.
        (WebKit::AdClickAttributionManager::firePendingConversionRequests):
            This is the timer function that iterates over all pending attributions.
        (WebKit::AdClickAttributionManager::clear):
            Now clears the two new test settings members.
        (WebKit::AdClickAttributionManager::toString const):
        * NetworkProcess/AdClickAttributionManager.h: Renamed from Source/WebKit/NetworkProcess/NetworkAdClickAttribution.h.
        (WebKit::AdClickAttributionManager::AdClickAttributionManager):
        (WebKit::AdClickAttributionManager::setPingLoadFunction):
        (WebKit::AdClickAttributionManager::setOverrideTimerForTesting):
        (WebKit::AdClickAttributionManager::setConversionURLForTesting):
        * NetworkProcess/NetworkAdClickAttribution.cpp: Renamed from Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::storeAdClickAttribution):
        (WebKit::NetworkProcess::dumpAdClickAttribution):
        (WebKit::NetworkProcess::clearAdClickAttribution):
        (WebKit::NetworkProcess::setAdClickAttributionOverrideTimerForTesting):
        (WebKit::NetworkProcess::setAdClickAttributionConversionURLForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::setAdClickAttributionOverrideTimerForTesting):
        (WebKit::NetworkSession::setAdClickAttributionConversionURLForTesting):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        (WebKit::m_blobFiles):
        (WebKit::PingLoad::initialize):
            The PingLoad constructor is now split in two to allow for construction
            without a WebKit::NetworkConnectionToWebProcess object. The body of
            the constructor was moved into the new initialize() function which is
            shared between constructors.
        * NetworkProcess/PingLoad.h:
        * Sources.txt:
            Removed NetworkProcess/NetworkAdClickAttribution.cpp and added
            NetworkProcess/NetworkAdClickAttribution.cpp.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetAdClickAttributionOverrideTimerForTesting):
        (WKPageSetAdClickAttributionConversionURLForTesting):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::dumpAdClickAttribution): Deleted.
        (WebKit::NetworkProcessProxy::clearAdClickAttribution): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dumpAdClickAttribution):
        (WebKit::WebPageProxy::clearAdClickAttribution):
        (WebKit::WebPageProxy::setAdClickAttributionOverrideTimerForTesting):
        (WebKit::WebPageProxy::setAdClickAttributionConversionURLForTesting):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::dumpAdClickAttribution): Deleted.
        (WebKit::WebProcessPool::clearAdClickAttribution): Deleted.
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-04-15  Devin Rousso  <drousso@apple.com>

        WebDriver: Set Cookie endpoint does not correctly set subdomain cookies
        https://bugs.webkit.org/show_bug.cgi?id=196872
        <rdar://problem/49233240>

        Reviewed by Joseph Pecoraro.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::addSingleCookie):
        Rather than try to "force" the cookie to be set on the current active URL, use the cookie
        itself to figure out which domain it should be set on.

2019-04-15  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Add enable-media websetting
        https://bugs.webkit.org/show_bug.cgi?id=196863

        Reviewed by Michael Catanzaro.

        It can be useful for headless browsers, for instance. The setting is enabled by default.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_media):
        (webkit_settings_set_enable_media):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitSettings.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2019-04-14  Rob Buis  <rbuis@igalia.com>

        Link prefetch not useful for top-level navigation
        https://bugs.webkit.org/show_bug.cgi?id=195623

        Reviewed by Youenn Fablet.

        Cache cross-domain top-level prefetches in a dedicated cache. When a navigation
        to the same url is done within a threshold (5 seconds), reuse the
        prefetch cache entry, move it to the disk cache and navigate to
        the url, meaning no extra network trip is needed. When not used within
        the threshold period, the prefetch entry will be erased using a timer.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::prefetchCache):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        (WebKit::NetworkResourceLoader::isCrossOriginPrefetch const):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/PrefetchCache.cpp: Added.
        (WebKit::PrefetchCache::Entry::Entry):
        (WebKit::PrefetchCache::PrefetchCache):
        (WebKit::PrefetchCache::~PrefetchCache):
        (WebKit::PrefetchCache::clear):
        (WebKit::PrefetchCache::take):
        (WebKit::PrefetchCache::store):
        (WebKit::PrefetchCache::sessionPrefetchMap const):
        (WebKit::PrefetchCache::clearExpiredEntries):
        * NetworkProcess/cache/PrefetchCache.h: Added.
        (WebKit::PrefetchCache::Entry::response const):
        (WebKit::PrefetchCache::Entry::releaseBuffer):
        * Shared/WebPreferences.yaml:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-04-14  Andy Estes  <aestes@apple.com>

        [Cocoa] WKCustomProtocolLoader should store a WeakPtr to its LegacyCustomProtocolManagerProxy
        https://bugs.webkit.org/show_bug.cgi?id=196893
        <rdar://problem/48318983>

        Reviewed by Anders Carlsson.

        In addition to manually invalidating each WKCustomProtocolLoader's _customProtocolManagerProxy
        pointer when the LegacyCustomProtocolManagerClient is invalidated, use a WeakPtr in case the
        LegacyCustomProtocolManagerProxy is ever destroyed without first invalidating the client.
        Also add null pointer checks to NSURLConnectionDelegate methods, which might be called after
        the LegacyCustomProtocolManagerProxy has been destroyed.

        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.mm:
        (-[WKCustomProtocolLoader initWithLegacyCustomProtocolManagerProxy:customProtocolID:request:]):
        (-[WKCustomProtocolLoader cancel]):
        (-[WKCustomProtocolLoader connection:didFailWithError:]):
        (-[WKCustomProtocolLoader connection:didReceiveResponse:]):
        (-[WKCustomProtocolLoader connection:didReceiveData:]):
        (-[WKCustomProtocolLoader connection:willSendRequest:redirectResponse:]):
        (-[WKCustomProtocolLoader connectionDidFinishLoading:]):
        (WebKit::LegacyCustomProtocolManagerClient::startLoading):
        (WebKit::LegacyCustomProtocolManagerClient::invalidate):
        (-[WKCustomProtocolLoader customProtocolManagerProxyDestroyed]): Deleted.
        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.h:

2019-04-14  Don Olmstead  <don.olmstead@sony.com>

        [CMake] JavaScriptCore derived sources should only be referenced inside JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=196742

        Reviewed by Konstantin Tokarev.

        Don't set JavaScriptCore_SCRIPTS_DIR now that it is set within WebKitFS.

        * CMakeLists.txt:
        * PlatformWin.cmake:
        
        Remove use of DERIVED_SOURCES_JAVASCRIPTCORE_DIR.

2019-04-13  Chris Dumez  <cdumez@apple.com>

        [ Mac Debug ] TestWebKitAPI.ProcessSwap.ReuseSuspendedProcessForRegularNavigationRetainBundlePage is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=196548
        <rdar://problem/49567254>

        Reviewed by Darin Adler.

        Update ProvisionalPageProxy methods to more consistently ignore unexpected IPC from the process. Previously,
        some of the methods were doing this, but some other like didFailProvisionalLoadForFrame() weren't and this
        was leading to this flaky crash. The issue is that if we do the load in an existing process that was recently
        doing, there may be leftover IPC for the same pageID and this IPC gets received by the ProvisionalPageProxy
        even though it is from a previous navigation. For this reason, the ProvisionalPageProxy should ignore all
        incoming IPC that is not for its associated navigation.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didPerformClientRedirect):
        (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData):
        (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        (WebKit::ProvisionalPageProxy::didPerformServerRedirect):
        (WebKit::ProvisionalPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync):

2019-04-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, try to fix the internal build after r244239

        Force the bots to regenerate WKWebpagePreferences.h by touching the file. Adds a `Foundation/Foundation.h`
        import that was missing anyways.

        * UIProcess/API/Cocoa/WKWebpagePreferences.h:

2019-04-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable modern compatibility mode by default in WKWebView on some devices
        https://bugs.webkit.org/show_bug.cgi?id=196883
        <rdar://problem/49864527>

        Reviewed by Tim Horton.

        Make some minor adjustments to new API.

        * Shared/WebCompatibilityMode.h:

        Rename WebCompatibilityMode::Default to WebCompatibilityMode::Recommended.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

        Now that the role of the UseModernCompatibilityModeByDefault debug preference is limited to bypassing linked-on-
        or-after and app bundle compatibility hacks, we no longer make this default to true in iOSMac.

        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:

        Rename the withPreferences: label to just preferences:.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/ios/WebPageProxyIOS.mm:

2019-04-12  Brian Burg  <bburg@apple.com>

        WebDriver: fix typo in EnterFullscreen.js in error-handling code
        https://bugs.webkit.org/show_bug.cgi?id=196882
        <rdar://problem/49867122>

        Reviewed by Devin Rousso.

        * UIProcess/Automation/atoms/EnterFullscreen.js:
        (enterFullscreen):

2019-04-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for non-unified build.

        * Shared/PrintInfo.cpp:
        Add missing include from r244202.

2019-04-12  Saam barati  <sbarati@apple.com>

        Sometimes we need to user fewer CPUs in our threading calculations
        https://bugs.webkit.org/show_bug.cgi?id=196794
        <rdar://problem/49389497>

        Reviewed by Yusuke Suzuki.

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

2019-04-12  Devin Rousso  <drousso@apple.com>

        WebDriver: evaluating javascript shouldn't fail if a dialog is shown
        https://bugs.webkit.org/show_bug.cgi?id=196847
        <rdar://problem/49609396>

        Reviewed by Brian Burg.

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

2019-04-12  Ross Kirsling  <ross.kirsling@sony.com>

        WebKit should build successfully even with -DENABLE_UNIFIED_BUILDS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=196845

        Reviewed by Ryosuke Niwa.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        * NetworkProcess/NetworkDataTask.cpp:
        * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp:
        * NetworkProcess/NetworkHTTPSUpgradeChecker.h: Include wtf/Forward.h for String and CompletionHandler fwd decls.
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkResourceLoadMap.cpp:
        * NetworkProcess/NetworkResourceLoadMap.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/PingLoad.h:
        * Shared/WebCompiledContentRuleListData.cpp:
        * Shared/gtk/WebEventFactory.cpp:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        * UIProcess/InspectorTargetProxy.cpp:
        * UIProcess/PageClient.h:
        * UIProcess/ProcessAssertion.cpp:
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageInspectorTargetAgent.h:
        * UIProcess/geoclue/GeoclueGeolocationProvider.cpp:
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        (WebKit::WebCacheStorageConnection::updateQuotaBasedOnSpaceUsage):
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetDatabaseQuota):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
        Add missing includes / forward declarations to address compiler errors on GTK / WinCairo.

2019-04-12  Eric Carlson  <eric.carlson@apple.com>

        Update AudioSession route sharing policy
        https://bugs.webkit.org/show_bug.cgi?id=196776
        <rdar://problem/46501611>

        Reviewed by Jer Noble.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker showFromView:routeSharingPolicy:routingContextUID:hasVideo:]):

2019-04-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebsitePolicies doesn't copy its media source policy in WebsitePolicies::copy
        https://bugs.webkit.org/show_bug.cgi?id=196862

        Reviewed by Darin Adler.

        Add a missing bit of code to copy m_mediaSourcePolicy over when making a copy of WebsitePolicies. This doesn't
        have any observable effect, since m_mediaSourcePolicy isn't currently exposed as SPI on WKWebpagePreferences.

        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):

2019-04-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Make -webkit-overflow-scrolling be a no-op
        https://bugs.webkit.org/show_bug.cgi?id=196803
        rdar://problem/49078202

        Reviewed by Antti Koivisto.

        Flip LegacyOverflowScrollingTouchEnabled to false.

        * Shared/WebPreferences.yaml:

2019-04-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Software keyboard is shown too frequently on some websites
        https://bugs.webkit.org/show_bug.cgi?id=195856
        <rdar://problem/49191395>

        Reviewed by Darin Adler.

        On some websites, hidden editable elements are very frequently focused upon user interaction. Currently, this
        causes the software keyboard to pop in and out unexpectedly; luckily, these same sites also apply
        inputmode="none" to the hidden editable element, which ought to ensure that the software keyboard doesn't appear
        when the element is focused.

        However, since we disabled support for inputmode="none" in r240497, the software keyboard is no longer
        suppressed, and becomes a big nuissance. r240497 removed support for this feature because, when using a hardware
        keyboard, pressing the globe key no longer showed UI for switching languages. However, support for inputmode
        none makes a much larger impact when a software keyboard is used (since the entire software keyboard animates in
        and out), whereas a hardware keyboard only displays an input accessory view. For this reason, we can mitigate
        this bug without reintroducing <rdar://problem/47406553> by re-enabling inputmode="none", but only when a
        hardware keyboard is not attached.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (hardwareKeyboardAvailabilityChangedCallback):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shouldShowAutomaticKeyboardUI]):

        Don't show the keyboard if inputmode is none and a hardware keyboard is not attached.

        (-[WKContentView _hardwareKeyboardAvailabilityChanged]):

        Reload input views if the inputmode is none to ensure that if a hardware keyboard is attached while editing an
        element with inputmode="none", we'll show the input accessory view once again.

2019-04-12  Antoine Quint  <graouts@apple.com>

        Opt some websites into the simulated mouse events dispatch quirk when in modern compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=196830
        <rdar://problem/49124313>

        Reviewed by Wenson Hsieh.

        We add a new policy to determine whether simulated mouse events dispatch are allowed.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * Shared/WebsiteSimulatedMouseEventsDispatchPolicy.h: Added.
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-04-12  Chris Dumez  <cdumez@apple.com>

        [iOS Sim Debug] ASSERTION FAILED: m_downloads.isEmpty() Layout Test http/tests/websocket/tests/hybi/network-process-crash-error.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=196781
        <rdar://problem/49789381>

        Reviewed by Darin Adler.

        When the network process gets terminated by the client, the NetworkProcessProxy object (and thus its DownloadProxyMap member) get
        destroyed right away, before we get a call to didClose(IPC::Connection&). As a result, if there are ongoing downloads at the time
        of the termination, we will hit the assertion above. To address the issue, update the NetworkProcessProxy destructor to invalidate
        its DownloadProxyMap member, similator to what it does in didClose(IPC::Connection&).

        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::invalidate):
        (WebKit::DownloadProxyMap::processDidClose): Deleted.
        * UIProcess/Downloads/DownloadProxyMap.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::didClose):

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

        [GTK] REGRESSION(r243860): Many tests failing
        https://bugs.webkit.org/show_bug.cgi?id=196791

        Reviewed by Joanmarie Diggs.

        Calling updateAccessibilityTree() on document loaded was causing a re-layout because of the backing store update
        that confused all those tests. We shouldn't need to update the accessibility tree on document load, it should
        happen automatically when root object is attached/detached. This patch emits children-changed::add when the root
        object wrapper is attached and children-changed::remove when the root object is detached. That way ATs are
        notified of the changes in the accessibility tree.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad): Remove call to WebPage::updateAccessibilityTree().
        * WebProcess/WebPage/WebPage.h: Remove updateAccessibilityTree().
        * WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.cpp:
        (coreRootObjectWrapperDetachedCallback): Emit children-changed::remove.
        (rootWebAreaWrapper): Helper to get the root WebArea wrapper.
        (accessibilityRootObjectWrapper): Set the parent here when root object is created and emit children-changed::add.
        (webkitWebPageAccessibilityObjectRefChild): Dot no set the parent here, it's now set when the root object is created.
        * WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.h: Remove webkitWebPageAccessibilityObjectRefresh().
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:

2019-04-11  Megan Gardner  <megan_gardner@apple.com>

        Update 'Save Image' to more clear instructions
        https://bugs.webkit.org/show_bug.cgi?id=196833
        <rdar://problem/47446845>

        Reviewed by Wenson Hsieh.

        Just updating to a new string.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]):

2019-04-11  Chris Dumez  <cdumez@apple.com>

        Unable to run system Safari with trunk WebKit
        https://bugs.webkit.org/show_bug.cgi?id=196777
        <rdar://problem/49784574>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        Add a linkedOnAfter check so that throwing exceptions when related web views use a different
        data store only happens for apps rebuilt using recent SDK.

        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/Cocoa/VersionChecks.mm:
        (WebKit::linkedOnOrAfter):
        - By default, linkedOnOrAfter assumed Safari / MobileSafari is always linked-on-after. To satisfy my
          use cases, I introduced a new AssumeSafariIsAlwaysLinkedOnAfter parameter so that this behavior can
          be controlled by the caller.
        - In the header, DYLD_IOS_VERSION_* / DYLD_MACOS_VERSION_* constants are 0 when building with the
          non-internal SDK. As a result, the check instead linkedOnOrAfter() would cause us to always return
          true, which was wrong. I therefore updated the check inside linkedOnOrAfter() to special-case the
          0 value for sdkVersion.

2019-04-11  Zalan Bujtas  <zalan@apple.com>

        Add @page margin support
        https://bugs.webkit.org/show_bug.cgi?id=196680
        <rdar://problem/45217707>

        Reviewed by Tim Horton.

        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode const):
        (WebKit::PrintInfo::decode):
        * Shared/PrintInfo.h:
        * Shared/WebPreferences.yaml:
        * Shared/gtk/PrintInfoGtk.cpp:
        (WebKit::PrintInfo::PrintInfo):
        * Shared/mac/PrintInfoMac.mm:
        (WebKit::PrintInfo::PrintInfo):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageComputePagesForPrinting):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPageAtRuleSupportEnabled):
        (WKPreferencesGetPageAtRuleSupportEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/GenericCallback.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::computedPagesCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WKPrintingView.mm:
        (pageDidComputePageRects):
        (-[WKPrintingView _askPageToComputePageRects]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::beginPrinting):
        (WebKit::WebPage::computePagesForPrinting):
        (WebKit::WebPage::computePagesForPrintingImpl):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingAndDrawToPDF):

2019-04-11  Dean Jackson  <dino@apple.com>

        Extract UTI mapping and allow for additions
        https://bugs.webkit.org/show_bug.cgi?id=196822
        <rdar://problem/49822339>

        Reviewed by Tim Horton.

        Use the new helper to map MIME type to UTI.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        * UIProcess/ios/WKSystemPreviewView.mm:
        (getUTIForSystemPreviewMIMEType):


2019-04-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r244182): RemoteLayerTreeDrawingArea::flushLayers() should not be reentrant
        https://bugs.webkit.org/show_bug.cgi?id=196825

        Reviewed by Simon Fraser.

        Ensure the layer transactions IDs are sequential. So bail out of
        RemoteLayerTreeDrawingArea::flushLayers() if reentrancy is detected.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2019-04-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow the MediaSource API to be enabled via website policy
        https://bugs.webkit.org/show_bug.cgi?id=196429
        <rdar://problem/48774333>

        Reviewed by Tim Horton.

        Adds support for using WebsitePolicies to determine whether to enable the MediaSource API.

        * Shared/WebPreferences.yaml:

        Disengage the mediaSourceEnabled internal preference from the corresponding WebCore setting; to ensure that
        setting the preference to `true` still results in enabling the MediaSource API, we instead make it such that
        turning on mediaSourceEnabled causes WebsitePolicies to set its WebsiteMediaSourcePolicy to Enable.

        In the future, we should deprecate and remove this preference, in favor of simply setting preferred
        compatibility mode on WKWebpagePreferences.

        * Shared/WebPreferences.yaml:
        * Shared/WebsiteMediaSourcePolicy.h: Copied from Source/WebKit/Shared/WebsitePoliciesData.h.
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):

        Add plumbing for m_mediaSourcePolicy in the set of website policies.

        (WebKit::WebsitePoliciesData::applyToDocumentLoader):

        Update the document loader with the given media source policy. There are two possibilities when applying the set
        of policies to the document loader; either the document loader is already attached to a Frame, or the document
        loader is yet to be attached to a Frame.

        In the first case, we update Frame's settings on the spot, by calling the new applyPoliciesToSettings helper
        method. In the second scenario, we stash the policy state on DocumentLoader; when the DocumentLoader is attached
        to a Frame, we'll then update the Frame's settings using DocumentLoader's policy.

        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

        Move code that adjusts website policies after deciding policies for the navigation action from NavigationClient
        ::decidePolicyForNavigationAction to the completion handler of the policy listener. This allows us to respect
        default website policies on the web view configuration, even when using the C API to set the navigation client,
        and also allows us to have a single call site for adjustPoliciesForCompatibilityMode. This also enables our
        layout tests to opt into modern compatibility mode by default, when specifying modern compatibility mode on
        webpage preferences.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::adjustPoliciesForCompatibilityMode):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

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

        REGRESSION: changing iPad orientation on blogger.com crashes under RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations()
        https://bugs.webkit.org/show_bug.cgi?id=196813
        <rdar://problem/49393264>

        Reviewed by Simon Fraser.

        No test, can't repro.

        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations):

        Null check the nodes.

2019-04-10  Chris Dumez  <cdumez@apple.com>

        Regression(r244144) ProcessSwap.ReuseSuspendedProcessLoadHTMLString API test is flaky
        https://bugs.webkit.org/show_bug.cgi?id=196784

        Reviewed by Antti Koivisto.

        When we enter accelerated compositing mode in the new process, we supposed to *close* the last
        SuspendedPageProxy, not destroy it. This was causing flakiness in the test because it was testing
        that we were using the SuspendedPageProxy's process for a cross-site link navigation, which is
        an optimization. This optimization was partly broken by r244144 as the SuspendedPageProxy would
        not sometimes be gone by the time we need it.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::pageEnteredAcceleratedCompositingMode):

2019-04-10  Alex Christensen  <achristensen@webkit.org>

        WKNavigationResponse._downloadAttribute should be nil when no download attribute is present
        https://bugs.webkit.org/show_bug.cgi?id=196809
        <rdar://49800762>

        Reviewed by Brady Eidson.

        * UIProcess/API/Cocoa/WKNavigationResponse.mm:
        (-[WKNavigationResponse _downloadAttribute]):

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

        REGRESSION (r241734): ⌥⌘↑ and ⌥⌘↓ no longer navigate to previous/next Reading List article
        https://bugs.webkit.org/show_bug.cgi?id=196797
        <rdar://problem/48484715>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
        Validate the set of modifier keys pressed when handling a key event for scrolling:
        Ignore key events with multiple modifier keys pressed.
        Ignore key events with an invalid modifier key pressed for a given primary key.

2019-04-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Replace the calls to Page::layoutIfNeeded() and willDisplayPage() by
        a single call to Page::updateRendering(). This new function implements 
        "Update the rendering" step of the HTML Event Loop specification
        <https://html.spec.whatwg.org/multipage/webappapis.html#update-the-rendering>.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::scheduleCompositingLayerFlush):
        (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState):
        (WebKit::DrawingAreaCoordinatedGraphics::display):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::layerFlushTimerFired):

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        -- Call Page::updateRendering() to make sure that "Update the rendering"
           happens immediately before updating the page.

        -- Move the call to RemoteLayerBackingStoreCollection::willFlushLayers()
           to be exactly before flushing the layers. This fixes the assertion
           ASSERT(m_inLayerFlush) which was firing when running a layout test.
           RemoteLayerTreeDrawingArea::flushLayers() now can call itself through
           TestRunner::notifyDone(). flushLayers() was calling willFlushLayers()
           twice before calling didFlushLayers().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::layoutIfNeeded):
        (WebKit::WebPage::updateRendering):
        (WebKit::WebPage::willDisplayPage): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2019-04-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: save sheet should be anchored underneath the tab bar when detached
        https://bugs.webkit.org/show_bug.cgi?id=196722
        <rdar://problem/49613280>

        Reviewed by Timothy Hatcher.

        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::changeSheetRect): Added.
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::sheetRect const): Added.
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::setSheetRect): Added.
        (WebKit::WebInspectorProxy::platformSetSheetRect): Added.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSetSheetRect): Added.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter window:willPositionSheet:usingRect:]): Added.
        (WebKit::WebInspectorProxy::platformSetSheetRect): Added.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformSetSheetRect): Added.
        * UIProcess/wpe/WebInspectorProxyWPE.cpp:
        (WebKit::WebInspectorProxy::platformSetSheetRect): Added.

        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::changeSheetRect): Added.
        * UIProcess/RemoteWebInspectorProxy.messages.in:
        * UIProcess/RemoteWebInspectorProxy.h:
        (WebKit::RemoteWebInspectorProxy::sheetRect const): Added.
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::setSheetRect): Added.
        (WebKit::RemoteWebInspectorProxy::platformSetSheetRect): Added.
        * UIProcess/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformSetSheetRect): Added.
        * UIProcess/mac/RemoteWebInspectorProxyMac.mm:
        (-[WKRemoteWebInspectorProxyObjCAdapter window:willPositionSheet:usingRect:]): Added.
        (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorProxy::platformSetSheetRect): Added.

2019-04-10  Andy Estes  <aestes@apple.com>

        [iOS] Let PDFHostViewController specify the background color to use for WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=196785
        <rdar://problem/48240051>

        Reviewed by Tim Horton.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_initWithFrame:webView:mimeType:]):

2019-04-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r244146.

        Caused a few DeviceOrientation API test failures on iOS

        Reverted changeset:

        "Unable to run system Safari with trunk WebKit"
        https://bugs.webkit.org/show_bug.cgi?id=196777
        https://trac.webkit.org/changeset/244146

2019-04-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: lazy agents used outside of frontend/instrumentation can be accessed before being created
        https://bugs.webkit.org/show_bug.cgi?id=196725
        <rdar://problem/49669810>

        Reviewed by Timothy Hatcher.

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

2019-04-10  Youenn Fablet  <youenn@apple.com>

        Clear Cache Storage structures before removing all related files
        https://bugs.webkit.org/show_bug.cgi?id=196650

        Reviewed by Alex Christensen.

        Previously, we were clearing files in parallel to clearing the internal CacheStorage structures.
        To make things more deterministic, clear files/folders directly
        after CachesStorage structures have finished being cleared.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::clearAllCaches):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):

2019-04-10  Alex Christensen  <achristensen@webkit.org>

        Add SPI WKNavigationResponse._downloadAttribute
        https://bugs.webkit.org/show_bug.cgi?id=196755
        <rdar://49587365>

        Reviewed by Brady Eidson.

        * UIProcess/API/APINavigationResponse.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.mm:
        (-[WKNavigationResponse _downloadAttribute]):
        * UIProcess/API/Cocoa/WKNavigationResponsePrivate.h:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2019-04-10  Youenn Fablet  <youenn@apple.com>

        SWClientConnection should not double hop to fire some events
        https://bugs.webkit.org/show_bug.cgi?id=196735

        Reviewed by Alex Christensen.

        Removed unnecessary method.

        * WebProcess/Storage/WebSWClientConnection.cpp:
        * WebProcess/Storage/WebSWClientConnection.h:

2019-04-10  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix iokit-get-properties sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=196782
        <rdar://problem/49497720>

        Reviewed by Brent Fulgham.

        Add iokit properties to the WebContent sandbox on iOS.

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

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

        Add modern API for overriding the page's specified viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=167734
        <rdar://problem/30331795>

        Reviewed by Simon Fraser.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Plumb overrideViewportArguments in WebPageCreationParameters, so that
        if the process crashes (or swaps) they are maintained.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (viewportArgumentsFromDictionary):
        (-[WKWebView _overrideViewportWithArguments:]):
        Add SPI to set override viewport arguments. Parse them into a ViewportArguments
        object and use the existing (now improved) overrideViewportArguments mechanism
        to take over the page's viewport arguments.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setOverrideViewportArguments):
        * WebProcess/WebPage/WebPage.cpp:
        Plumb overrideViewportArguments around more.

2019-04-10  Jiewen Tan  <jiewen_tan@apple.com>

        Add runJavaScriptInFrame for WebPageProxy/WebPage
        https://bugs.webkit.org/show_bug.cgi?id=196750
        <rdar://problem/49755738>

        Reviewed by Youenn Fablet.

        Tests of the new method will be covered by the internal counterpart.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::loadData):
        * UIProcess/WebFrameProxy.h:
        Add a comment.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld):
        Merge the above two runJavaScriptInMainFrame*.
        (WebKit::WebPageProxy::runJavaScriptInFrame):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataInFrame):
        Add an assertion.
        (WebKit::WebPage::runJavaScript):
        (WebKit::WebPage::runJavaScriptInMainFrameScriptWorld):
        (WebKit::WebPage::runJavaScriptInFrame):
        (WebKit::WebPage::runJavaScriptInMainFrame): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-04-10  Chris Dumez  <cdumez@apple.com>

        Unable to run system Safari with trunk WebKit
        https://bugs.webkit.org/show_bug.cgi?id=196777
        <rdar://problem/49784574>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        Add a linkedOnAfter check so that throwing exceptions when related web views use a different
        data store only happens for apps rebuilt using recent SDK.

        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/Cocoa/VersionChecks.mm:
        (WebKit::linkedOnOrAfter):
        - By default, linkedOnOrAfter assumed Safari / MobileSafari is always linked-on-after. To satisfy my
          use cases, I introduced a new AssumeSafariIsAlwaysLinkedOnAfter parameter so that this behavior can
          be controlled by the caller.
        - In the header, DYLD_IOS_VERSION_* / DYLD_MACOS_VERSION_* constants are 0 when building with the
          non-internal SDK. As a result, the check instead linkedOnOrAfter() would cause us to always return
          true, which was wrong. I therefore updated the check inside linkedOnOrAfter() to special-case the
          0 value for sdkVersion.

2019-04-10  Chris Dumez  <cdumez@apple.com>

        Regression(r240562) Audio sometimes keeps playing in previous process after a process-swap
        https://bugs.webkit.org/show_bug.cgi?id=196774
        <rdar://problem/49460572>

        Reviewed by Alex Christensen.

        r240562 added logic to prevent flashing on navigation. When we receive the DidFailToSuspendAfterProcessSwap
        IPC from the previous process, we would delay closing the WebPage in that process until EnterAcceleratedCompositingMode
        IPC is received from the new process. The issue is that this was racy as we would receive the EnterAcceleratedCompositingMode
        IPC from the new process *before* receiving the DidFailToSuspendAfterProcessSwap IPC from the previous process, which which
        case we would fail to close the WebPage and audio could keep playing.

        To address the issue, the WebPageProxy keeps track of its last suspended page and notifies it whenever it receives the
        EnterAcceleratedCompositingMode IPC. If the suspended page already received the DidFailToSuspendAfterProcessSwap IPC, it
        will close the page. Otherwise, it will set a boolean data member indicating that we should not delay page closing when
        the DidFailToSuspendAfterProcessSwap is eventually received.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::pageEnteredAcceleratedCompositingMode):
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:

2019-04-10  Timothy Hatcher  <timothy@apple.com>

        WKScrollView background color does not match WKWebView before content is loaded.
        https://bugs.webkit.org/show_bug.cgi?id=196745
        rdar://problem/49750810

        Reviewed by Megan Gardner.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (scrollViewBackgroundColor): Default to _contentView.backgroundColor on invalid base color.
        (-[WKWebView _processDidExit]): Reset to _contentView.backgroundColor.
        (-[WKWebView setBackgroundColor:]): Call _updateScrollViewBackground since it can use
        _contentView.backgroundColor and it has changed.

2019-04-10  Megan Gardner  <megan_gardner@apple.com>

        Fix text autoscrolling when typing in modern webkit
        https://bugs.webkit.org/show_bug.cgi?id=196718
        <rdar://problem/49225507>

        Reviewed by Tim Horton.

        For staging only. We need to turn off UIKit's scrolling behavior to land
        the changes we are making. To keep from the build ever breaking,
        I am temporarily circumventing the changes in UIKit. This will be removed
        once the next UIKit submission happens.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKUIWKTextInteractionAssistant scrollSelectionToVisible]):
        (-[WKContentView setUpTextSelectionAssistant]):

2019-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOSMac] Opt into modern compatibility mode by default
        https://bugs.webkit.org/show_bug.cgi?id=196763
        <rdar://problem/49038732>

        Reviewed by Tim Horton.

        Achieve this by limiting legacy compatibility mode by default to non-iOSMac iOS only.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2019-04-10  Alex Christensen  <achristensen@webkit.org>

        RemoteObjectRegistry message receiver should be removed when WebPage::close is called instead of waiting until dealloc
        https://bugs.webkit.org/show_bug.cgi?id=196744
        <rdar://49415309>

        Reviewed by Chris Dumez.

        This is a similar problem to the one I fixed in r241306 so I piggy-backed on the same test.
        When you do a cross site navigation but the previous page is in a suspended process then you navigate back,
        you can get two WebPage objects in the same process with the same IDs.  WebPage::close has been called
        on the old one which is supposed to make it so all the message receivers associated with it have been removed
        so we don't have any loss of communication, but we missed the RemoteObjectRegistry messages, which are owned
        by the ObjC bundle object wrapping the WebPage (which can keep it alive if a strong reference to it is held).
        To fix the assertion that happens in this case and the resulting communication breakage, teach the WebPage about
        these messages so it can tear down the message receiver with the others it removes at close time.

        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController dealloc]):
        (-[WKWebProcessPlugInBrowserContextController _remoteObjectRegistry]):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::addRemoteObjectRegistry):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        * WebProcess/WebPage/WebPage.h:

2019-04-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, drop SuspendedPageProxy data member that is unused after r244075.

        * UIProcess/SuspendedPageProxy.h:

2019-04-10  Antoine Quint  <graouts@apple.com>

        Enable Pointer Events on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=196771
        <rdar://problem/49040909>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2019-04-10  Brady Eidson  <beidson@apple.com>

        Background tabs are not fully reactivated after a link is opened from an external application.
        <rdar://problem/49533278> and https://bugs.webkit.org/show_bug.cgi?id=196705

        Reviewed by Chris Dumez.

        If an app unparents a WKWebView right after activation but before the "applicationWillEnterForeground" notification
        is dispatched, then that WKWebView is in a broken state with a frozen layer tree.

        The WKApplicationStateTrackingView logic needs to be a little more resilient.

        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView willMoveToWindow:]): When clearing the window, remember the current background state.
        (-[WKApplicationStateTrackingView didMoveToWindow]): If our last observed background state doesn't match the current
          background state then fake the relevant notification.
        (-[WKApplicationStateTrackingView _applicationDidEnterBackground]): Remember that we've observed a backgrounding.
        (-[WKApplicationStateTrackingView _applicationWillEnterForeground]): Remember that we've observed a foregrounding.

2019-04-10  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, build fix for r244097

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::NetworkProcess::resume):
        Added guards for ENABLE(SERVICE_WORKER)

2019-04-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build maintenance -- update .xcfilelists.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2019-04-09  Zalan Bujtas  <zalan@apple.com>

        [AutoSizing] Avoid making text paragraphs scroll horizontally when there is a wide table
        https://bugs.webkit.org/show_bug.cgi?id=196743
        <rdar://problem/43897551>

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setViewLayoutSize):

2019-04-09  Youenn Fablet  <youenn@apple.com>

        Close service worker database on network process suspension
        https://bugs.webkit.org/show_bug.cgi?id=196623
        <rdar://problem/48930869>

        Reviewed by Alex Christensen.

        Close service worker database when preparing to suspend.
        On resume, push changes if any is needed.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::NetworkProcess::cancelPrepareToSuspend):
        (WebKit::NetworkProcess::processDidResume):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _sendNetworkProcessWillSuspendImminently]):
        (-[WKProcessPool _sendNetworkProcessDidResume]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendNetworkProcessWillSuspendImminently):
        (WebKit::WebProcessPool::sendNetworkProcessDidResume):
        * UIProcess/WebProcessPool.h:

2019-04-09  Daniel Bates  <dabates@apple.com>

        [iPad] Should open popover when the spacebar is pressed
        https://bugs.webkit.org/show_bug.cgi?id=196360
        <rdar://problem/49389129>

        Reviewed by Brent Fulgham.

        Pressing the spacebar should open the popover for a focused popup button (e.g. <select>) on iOS
        just like it does on the Mac.

        For now, we keep the iPhone behavior of blurring the element when the Done button is pressed and
        hence pressing spacebar does nothing (because there is no focused element).

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessoryOpen]): Added. Extracted the logic from -_elementDidFocus to scroll to
        the focused element, update the accessory and then tell the accessory to begin editing.
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        Write in terms of -accessoryOpen.
        * UIProcess/ios/forms/WKFormPeripheralBase.mm:
        (-[WKFormPeripheralBase handleKeyEvent:]): Interpret the spacebar when the peripheral is closed (!_editing)
        and call -accessoryOpen to ultimately call back to this peripheral to tell it to begin editing,
        which will cause the popover to appear again.

2019-04-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix webkitpy failure after r244085.

        Use a list instead of a set for header includes so that the order is
        maintained.

        * Scripts/webkit/messages.py:

2019-04-09  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add release logging to PaymentCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=196738

        Reviewed by Alex Christensen.

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::isAlwaysOnLoggingAllowed const):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

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

        [Cocoa] Awaken UIProcess if WebContent process is awakened from suspensions unexpectedly.
        https://bugs.webkit.org/show_bug.cgi?id=196659

        Reviewed by Chris Dumez.

        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithAsyncReply):
        * Platform/spi/ios/AssertionServicesSPI.h:
        * Shared/Cocoa/ProcessTaskStateObserver.h: Added.
        (WebKit::ProcessTaskStateObserver::setClient):
        (WebKit::ProcessTaskStateObserver::client):
        (WebKit::ProcessTaskStateObserver::taskState const):
        * Shared/Cocoa/ProcessTaskStateObserver.mm: Added.
        (-[WKProcessTaskStateObserverDelegate process:taskStateDidChange:]):
        (WebKit::toProcessTaskStateObserverTaskState):
        (WebKit::ProcessTaskStateObserver::ProcessTaskStateObserver):
        (WebKit::ProcessTaskStateObserver::~ProcessTaskStateObserver):
        (WebKit::ProcessTaskStateObserver::setTaskState):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::processWasUnexpectedlyUnsuspended):
        * UIProcess/ProcessAssertion.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertion):
        * UIProcess/ProcessThrottler.h:
        (WebKit::ProcessThrottler::shouldBeRunnable const):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::reasonForState):
        (WebKit::toBKSProcessAssertionReason):
        (WebKit::ProcessAssertion::ProcessAssertion):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::processTaskStateDidChange):

2019-04-09  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" from a safe browsing warning from an iframe should navigate the WKWebView back to the previous page
        https://bugs.webkit.org/show_bug.cgi?id=196665
        <rdar://45115669>

        Reviewed by Geoff Garen.

        It is insufficient to just not navigate the subframe.  We must leave the page that contained it.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarning:completionHandler:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showSafeBrowsingWarning):

2019-04-09  John Wilander  <wilander@apple.com>

        Pick up Ad Click Attribution conversions in NetworkResourceLoader::willSendRedirectedRequest()
        https://bugs.webkit.org/show_bug.cgi?id=196558
        <rdar://problem/47650245>

        Reviewed by Youenn Fablet.

        So called pixel requests have traditionally been used to send ad click
        attribution data to click sources. The privacy implications of such
        pixel requests are severe which is in part why browsers have started to
        block cookies from being sent in such third-party requests.

        To allow for a smooth transition to more privacy-friendly ad click
        attribution, we should allow servers to make a redirect to
        https://click-source.example/.well-known/ad-click-attribution/ to
        trigger a so called conversion.

        This patch checks for the well-known location in the path component of
        the redirect URL. If the request indeed goes to the well-known location,
        we parse the conversion data and send it to the storage in the network
        session.

        * NetworkProcess/NetworkAdClickAttribution.cpp:
        (WebKit::NetworkAdClickAttribution::convert):
            Reporting function.
        * NetworkProcess/NetworkAdClickAttribution.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
            Now checks for the well-known location through a call to
            WebCore::AdClickAttribution::parseConversionRequest().
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::convertAdClickAttribution):
            Piping to WebKit::NetworkAdClickAttribution::convert().
        * NetworkProcess/NetworkSession.h:

2019-04-09  Chris Dumez  <cdumez@apple.com>

        [iOS] WebContent processes should be marked as "Foreground Running" when their view is visible
        https://bugs.webkit.org/show_bug.cgi?id=196695
        <rdar://problem/48073787>

        Reviewed by Tim Horton.

        In order for WebContent processes to get marked as "Foreground Running" when their view
        is visible on iOS, we now construct a _UILayerHostView in the UIProcess and add it as
        a subview of the WKContentView. The _UILayerHostView's visibility target is the
        WebContent process currently associated with the view.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::didCreateContextForVisibilityPropagation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::contextIDForVisibilityPropagation):
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didCreateContextForVisibilityPropagation):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView _setupVisibilityPropagationView]):
        (-[WKContentView _processDidExit]):
        (-[WKContentView _didRelaunchProcess]):
        (-[WKContentView _processDidCreateContextForVisibilityPropagation]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCreateContextForVisibilityPropagation):
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::didCreateContextForVisibilityPropagation):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2019-04-09  Sihui Liu  <sihui_liu@apple.com>

        Remove unnecessary network process assertion for IDB close
        https://bugs.webkit.org/show_bug.cgi?id=196693

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createIDBServer):
        (WebKit::NetworkProcess::notifyHoldingLockedFiles): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::setIsIDBDatabaseHoldingLockedFiles): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

2019-04-09  Chris Dumez  <cdumez@apple.com>

        Loads using loadHTMLString() cause flashing when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=196714
        <rdar://problem/49637354>

        Reviewed by Antti Koivisto.

        Our logic to decide if we should construct a SuspendedPageProxy on process-swap was assuming
        a SuspendedPageProxy is only useful for PageCache and would therefore not create one if PageCache
        is disabled or if there is no associated WebBackForwardListItem. However, constructing a
        SuspendedPageProxy is also useful to prevent flashing when process-swapping as we need to keep
        displaying the layer of the previous process until there is something meaningful to show in the
        new process.

        This patch makes it so that we now construct a SuspendedPageProxy on process-swap, even if
        PageCache is disabled or if there is no associated WebBackForwardListItem. The process in
        question will not be useful for PageCache but it will avoid flashing. The SuspendedPageProxy's
        process may also get used for future navigations to the same site (as demonstrated by the
        API test) which is beneficial for performance.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::findReusableSuspendedPageProcess):

2019-04-08  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WinCairo] Separate copied headers into different directories
        https://bugs.webkit.org/show_bug.cgi?id=196655

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt:
        * PlatformWin.cmake:

2019-04-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Do not allow starting selection drags when selection views are not visible
        https://bugs.webkit.org/show_bug.cgi?id=196686
        <rdar://problem/49399192>

        Reviewed by Tim Horton.

        Currently, on iOS, it's possible to start dragging selected text in a web view even if the selection itself is
        not visible. This can happen if the user selects some text, focuses a native text field, and then long presses
        the previously selected text. This is because the text is still selected in the document since we don't clear
        the selection when resigning first responder on iOS, despite the fact that the native selection view is no
        longer present.

        To fix this, we add plumbing to specify the set of allowed drag source actions when requesting drag start; this
        set of allowed drag source actions only includes DragSourceActionSelection if the selection view can be visible
        (i.e. the content view is first responder, and isn't suppressing text interactions). We then update WebPage's
        allowed drag source actions with this given set of actions, while sending "dragstart" to the page.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

        Only bail out of text selection in text that is already selected if the web view allows dragging text selections
        (i.e. the web view is first responder, and is not suppressing text interactions).

        (-[WKContentView _allowedDragSourceActions]):
        (-[WKContentView _dragInteraction:itemsForAddingToSession:withTouchAtPoint:completion:]):
        (-[WKContentView _dragInteraction:prepareForSession:completion:]):

        Pass the set of allowed drag source actions when requesting a drag start or adding items to an existing session.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestDragStart):
        (WebKit::WebPageProxy::requestAdditionalItemsForDragSession):

        Plumb the allowed drag source actions from the UI process (WKContentView) over to the web process (WebPage).

        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::dragSourceActionMaskForPoint):

        Instead of always returning Any, consult WebPage's allowed drag source actions.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::allowedDragSourceActions const):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDragStart):
        (WebKit::WebPage::requestAdditionalItemsForDragSession):

        Set WebPage's allowed drag source actions to the given set of actions when sending a drag start to the page.

2019-04-08  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Fix Web GPU experimental feature on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196632

        Reviewed by Myles C. Maxfield.

        Add feature conditionals for iOS 11.
        Properly make Web GPU available on iOS 11+.

        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2019-04-08  Alex Christensen  <achristensen@webkit.org>

        Fix selector name after r243834
        https://bugs.webkit.org/show_bug.cgi?id=196549

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        I forgot the colon in the setter's name.

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

        Compute touch actions for touch point from remote layer tree regions
        https://bugs.webkit.org/show_bug.cgi?id=196701

        Reviewed by Simon Fraser.

        Add a function for finding the right layer and getting the touch actions in UI process side.

        The code is not used yet.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::touchActionsForPoint):

        Use the same code as overlap hit testing for collecting the candidate layers for the touch point,
        taking event regions into account.
        Return the touch actions from the deepest event sensitive layer hit.

        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):

        Modernize.

2019-04-08  Brent Fulgham  <bfulgham@apple.com>

        Make HSTS list handling more robust against unexpected content 
        https://bugs.webkit.org/show_bug.cgi?id=196552
        <rdar://problem/43403817>

        Reviewed by Chris Dumez.

        Crash logs indicate we sometimes encounter null key values during processing.
        This patch adds some debug assertions to catch this in test environments, and
        allows the code to skip the bad entries if encountered.

        It also avoids calling CFDictionaryApplyFunction when the HSTS policies returned
        by _CFNetworkCopyHSTSPolicies is nullptr, which is a possible return value.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::filterPreloadHSTSEntry):
        (WebKit::NetworkProcess::getHostNamesWithHSTSCache):

2019-04-05  Brian Burg  <bburg@apple.com>

        Web Automation: clean up some WebAutomationSession methods to use modern async IPC
        https://bugs.webkit.org/show_bug.cgi?id=196168

        Reviewed by Devin Rousso.

        Modern WebKit IPC is capable of providing completion handlers and can track callback IDs.
        So, most messages between WebAutomationSession and its proxy can use this facility and stop
        keeping track of callback IDs manually. This makes most code easier to read on both the
        sender and receiver side.

        There are two cases that could not be converted:
        - For evaluateJavaScript, we cannot use async IPC because WebAutomationSession expects to
        be able to cancel all pending replies when a page navigates away, the web process crashes,
        or when handling an alert.
        - For takeScreenshot, there is not currently support in the modern async IPC code paths for
        sending the result back. ShareableBitmap and friends lack a modern decoder implementation.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::computeElementLayout):
        (WebKit::WebAutomationSession::selectOptionElement):
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::viewportInViewCenterPointOfElement):
        (WebKit::WebAutomationSession::didResolveChildFrame): Deleted.
        (WebKit::WebAutomationSession::didResolveParentFrame): Deleted.
        (WebKit::WebAutomationSession::didComputeElementLayout): Deleted.
        (WebKit::WebAutomationSession::didSelectOptionElement): Deleted.
        (WebKit::WebAutomationSession::didGetCookiesForFrame): Deleted.
        (WebKit::WebAutomationSession::didDeleteCookie): Deleted.
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.messages.in:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithOrdinal):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithName):
        (WebKit::WebAutomationSessionProxy::resolveParentFrame):
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        (WebKit::WebAutomationSessionProxy::selectOptionElement):
        (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
        (WebKit::WebAutomationSessionProxy::deleteCookie):
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:

2019-04-08  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(236463) DownloadManager can call a null CompletionHandler
        https://bugs.webkit.org/show_bug.cgi?id=196414
        <rdar://problem/48389434>

        Reviewed by Geoff Garen.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::convertToDownload):
        DownloadManager::continueDecidePendingDownloadDestination is being called when there is no completion handler.
        r236463 introduced an unchecked code path that can allow this to happen.

2019-04-07  Commit Queue  <commit-queue@webkit.org>

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

        Broke API Test SafeBrowsing.WKWebViewGoBackIFrame (Requested
        by aakashjain on #webkit).

        Reverted changeset:

        "Clicking "Go Back" from a safe browsing warning from an
        iframe should navigate the WKWebView back to the previous
        page"
        https://bugs.webkit.org/show_bug.cgi?id=196665
        https://trac.webkit.org/changeset/243956

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

        Remove stray byte added by r241131
        https://bugs.webkit.org/show_bug.cgi?id=196682

        Reviewed by Alexey Proskuryakov.

        Sublime Text thinks WKWebView.mm is binary instead of text.

        According to online documentation and bisecting, this is because r241131
        introduced a stray byte (probably a null byte?) into the file.

        I fixed this with Cmd-C Cmd-V.

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

2019-04-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Hide next and previous form control buttons when WKWebView is editable
        https://bugs.webkit.org/show_bug.cgi?id=196672
        <rdar://problem/35625321>

        Reviewed by Tim Horton.

        Adopt new UIKit SPI to hide or show next and previous controls in the form accessory view when changing
        editability.

        Test: KeyboardInputTests.FormNavigationAssistantBarButtonItems

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setEditable:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _updateAccessory]):
        (-[WKContentView _didChangeWebViewEditability]):

2019-04-06  Antti Koivisto  <antti@apple.com>

        Combine event and touch action regions into a single class
        https://bugs.webkit.org/show_bug.cgi?id=196644
        <rdar://problem/49643614>

        Reviewed by Darin Adler.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        (WebKit::RemoteLayerTreeNode::eventRegion const):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (WebKit::RemoteLayerTreeNode::setEventRegion):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::setEventRegion):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:

2019-04-05  Yongjun Zhang  <yongjun_zhang@apple.com>

        We should pass minimumEffectiveDeviceWidth to web process on new page creation.
        https://bugs.webkit.org/show_bug.cgi?id=196077
        <rdar://problem/49108202>

        Reviewed by Chris Dumez.

        When a new web view is created, it is possible we don't have the web content process till a load
        is requested. This patch stashes minimumEffectiveDeviceWidth in WebPageProxy.cpp and passes that
        value down to web process via WebPageCreationParameters when a new process is created, just like
        we did for other values like viewportConfigurationLayoutSizeScaleFactor or viewportConfigurationViewLayoutSize.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const): Encode viewportConfigurationMinimumEffectiveDeviceWidth value.
        (WebKit::WebPageCreationParameters::decode): Decode viewportConfigurationMinimumEffectiveDeviceWidth value.
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm: Now that we stash the minimumEffectiveDeviceWidth value in WebPageProxy, we
            don't need the iVar in WKWebView any more.
        (-[WKWebView _dispatchSetViewLayoutSize:]): Use _page->minimumEffectiveDeviceWidth().
        (-[WKWebView _setViewScale:]): Ditto.
        (-[WKWebView _setMinimumEffectiveDeviceWidth:]): Ditto.
        (-[WKWebView _minimumEffectiveDeviceWidth]): Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Also add viewportConfigurationMinimumEffectiveDeviceWidth to
            web process creation parameter.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::minimumEffectiveDeviceWidth const): Returns m_viewportConfigurationMinimumEffectiveDeviceWidth.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize): Pass parameters.viewportConfigurationMinimumEffectiveDeviceWidth
            to web process.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Take viewportConfigurationMinimumEffectiveDeviceWidth value from the parameter and
            set that to viewport configuration.

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

        [Cocoa] Deactivate the audio session before the WebProcess suspends.
        https://bugs.webkit.org/show_bug.cgi?id=196658

        Reviewed by Eric Carlson.

        Notify the PlatformMediaSessionManager when the process suspends or resumes.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):

2019-04-05  Sihui Liu  <sihui_liu@apple.com>

        [iOS] Web process gets suspended while holding locked database files
        https://bugs.webkit.org/show_bug.cgi?id=196519
        <rdar://problem/49531797>

        Reviewed by Chris Dumez.

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

2019-04-05  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" from a safe browsing warning from an iframe should navigate the WKWebView back to the previous page
        https://bugs.webkit.org/show_bug.cgi?id=196665
        <rdar://45115669>

        Reviewed by Geoff Garen.

        It is insufficient to just not navigate the subframe.  We must leave the page that contained it.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarning:completionHandler:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showSafeBrowsingWarning):

2019-04-05  Alex Christensen  <achristensen@webkit.org>

        Undeprecate WKNavigationData
        https://bugs.webkit.org/show_bug.cgi?id=196559
        <rdar://44927425>

        Reviewed by Geoff Garen.

        * UIProcess/API/Cocoa/WKNavigationData.h:
        It is used to communicate information from FrameLoaderClient::updateGlobalHistory() to the application.
        This use in WKBrowsingContextHistoryDelegate is definitely still deprecated, but its use in
        WKHistoryDelegatePrivate does not have an adequate replacement yet, so it must remain undeprecated SPI.

2019-04-05  Sihui Liu  <sihui_liu@apple.com>

        [iOS] Web process gets suspended while holding locked database files
        https://bugs.webkit.org/show_bug.cgi?id=196519
        <rdar://problem/49531797>

        Reviewed by Chris Dumez.

        * Shared/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::~WebSQLiteDatabaseTracker):
        * Shared/WebSQLiteDatabaseTracker.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::m_webSQLiteDatabaseTracker):
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::processWillSuspendImminently):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):
        * WebProcess/WebProcess.h:

2019-04-05  Commit Queue  <commit-queue@webkit.org>

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

        This change breaks build of WPE and GTK ports (Requested by
        annulen on #webkit).

        Reverted changeset:

        "[CMake][WTF] Mirror XCode header directories"
        https://bugs.webkit.org/show_bug.cgi?id=191662
        https://trac.webkit.org/changeset/243833

2019-04-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION(r240685): Remove duplicate Headers entry for _WKInspectorWindow.h in Xcode project
        <https://bugs.webkit.org/show_bug.cgi?id=193951>
        <rdar://problem/47621366>

        Fixes the following build warnings:
            Warning: Multiple build commands for output file WebKit2_WebKit.roots/BuildRecords/WebKit2_installhdrs/Root/System/Library/Frameworks/WebKit.framework/PrivateHeaders/_WKInspectorWindow.h
            Warning: Multiple build commands for output file WebKit2_WebKit.roots/BuildRecords/WebKit2_installapi/Root/System/Library/Frameworks/WebKit.framework/PrivateHeaders/_WKInspectorWindow.h
            Warning: Multiple build commands for output file WebKit2_WebKit.roots/BuildRecords/WebKit2_install/Root/System/Library/Frameworks/WebKit.framework/PrivateHeaders/_WKInspectorWindow.h

        * WebKit.xcodeproj/project.pbxproj: Remove duplicate entry for
        _WKInspectorWindow.h.  In r240685, a second Headers entry was
        added, but the first one was never removed.

2019-04-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Use a smart pointer for AccessibilityObject wrapper and remove GTK specific code
        https://bugs.webkit.org/show_bug.cgi?id=196593
        <rdar://problem/49599153>

        Reviewed by Michael Catanzaro.

        * WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.cpp:
        (accessibilityRootObjectWrapper): Cast wrapper() as AtkObject.

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

        Simple iframe scrolling test fails to get a composited scrolling frame in WebKitTestRunnerApp
        https://bugs.webkit.org/show_bug.cgi?id=196635

        Reviewed by Antti Koivisto.

        Remove WKBundleSetAsyncFrameScrollingEnabled().

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAsyncFrameScrollingEnabled): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:

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

        [iOS WK2] REGRESSION (r242687): Programmatic scroll of overflow scroll results in bad rendering
        https://bugs.webkit.org/show_bug.cgi?id=195584

        Reviewed by Zalan Bujtas.

        Push data to the scrolling tree about whether an overflow:scroll scroll was programmatic, by having
        RenderLayer::scrollToOffset() call into AsyncScrollingCoordinator::requestScrollPositionUpdate(),
        just as we do for frames.

        AsyncScrollingCoordinator::requestScrollPositionUpdate() is generalized to take any ScrollableArea.

        Fix an assumption in the ScrollingTree that we only care about programmatic scrolls on the root node.
        ScrollingTree::commitTreeState() no longer sets isHandlingProgrammaticScroll; instead,
        callers of ScrollingTreeScrollingNode::scrollTo() pass a ScrollType. Commit functions pass
        ScrollType::Programmatic when handling RequestedScrollPosition changes as necessary.

        Programmatic scrolls need to get to the scrolling tree in the UI process so that we update
        the tree's notion of scroll position, and trigger actual UIScrollView scrolls (layers may have
        already been put in the right locations, but the UI process needs to know that a scroll happened).
        However, we need to prevent notifications from programmatic scrolls getting back to the
        web process, because this causes jumpiness. This is done via an early return in
        RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll().

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateAfterChildren): Subframe nodes have
        a delegate, and that will take care of the requestedScrollPosition update.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::commitStateAfterChildren):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):

2019-04-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r243888.

        Introduced layout test crashes.

        Reverted changeset:

        "[macOS][iOS] Add filter to syscall sandbox rule"
        https://bugs.webkit.org/show_bug.cgi?id=196613
        https://trac.webkit.org/changeset/243888

2019-04-04  Youenn Fablet  <youenn@apple.com>

        Pass storage quota parameters from UIProcess to NetworkProcess as part of WebsiteDataStore parameters
        https://bugs.webkit.org/show_bug.cgi?id=196543

        Reviewed by Alex Christensen.

        Renamed methods used to set cache storage quota to be storage generic
        since they will apply to all storage.

        Pass quota parameters as part of WebsiteDataStoreParameters from UIProcess
        to NetworkProcess (start-up time and new WebsiteDataStore time).

        Compute on UIProcess the quota for third party origins using the default rule of dividing by 10.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::initializeStorageQuota):
        (WebKit::NetworkProcess::setCacheStorageParameters):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        * Shared/WebsiteDataStoreParameters.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetPerOriginStorageQuota):
        (WKWebsiteDataStoreSetCacheStoragePerOriginQuota): Deleted.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _perOriginStorageQuota]):
        (-[WKWebsiteDataStore _setPerOriginStorageQuota:]):
        (-[WKWebsiteDataStore _cacheStoragePerOriginQuota]): Deleted.
        (-[WKWebsiteDataStore _setCacheStoragePerOriginQuota:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::perOriginStorageQuota const):
        (WebKit::WebsiteDataStore::setPerOriginStorageQuota):
        (WebKit::WebsiteDataStore::cacheStoragePerOriginQuota const): Deleted.
        (WebKit::WebsiteDataStore::setCacheStoragePerOriginQuota): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::perOriginStorageQuota):
        (WebKit::WebsiteDataStoreConfiguration::setPerOriginStorageQuota):
        (WebKit::WebsiteDataStoreConfiguration::cacheStoragePerOriginQuota): Deleted.
        (WebKit::WebsiteDataStoreConfiguration::setCacheStoragePerOriginQuota): Deleted.

2019-04-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Changing default website policies shouldn't change default website policies in subsequent navigations
        https://bugs.webkit.org/show_bug.cgi?id=196562
        <rdar://problem/49573377>

        Reviewed by Tim Horton.

        Currently, changing the default WKWebpagePreferences object when deciding navigation policy causes the set of
        default policies to change in subsequent navigations. Among other things, this prevents clients from passing
        a modified version of the default website policies into the decision handler without impacting future
        navigations. To fix this, teach API::WebsitePolicies to make a copy of itself, and then use this to pass a copy
        of the default website policies to the navigation delegate when deciding navigation policies.

        Test: DoNotAllowChangingDefaultWebpagePreferencesInDelegateMethod

        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):

        Add a helper method to copy a set of website policies.

        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

2019-04-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wreturn-type warning

        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::ownerProcess):

2019-04-04  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Fix sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=196616
        <rdar://problem/49498040>

        Reviewed by Brent Fulgham.

        Fix some observed sandbox violations in the WebContent process on macOS.

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

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

        [MediaStream] Host should be able to mute screen capture and camera/microphone independently
        https://bugs.webkit.org/show_bug.cgi?id=196555
        <rdar://problem/47303865>

        Reviewed by Youenn Fablet.

        * UIProcess/API/C/WKPagePrivate.h: Add kWKMediaScreenCaptureMuted.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setPageMuted:]):
        (-[WKWebView _setMediaCaptureMuted:]): Deleted, it was unused.
        (-[WKWebView _muteMediaCapture]): Deleted, it was unused.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionValidRequest): Fix
        a log comment typo.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMediaStreamCaptureMuted): Use the new flag.
        (WebKit::WebPageProxy::activateMediaStreamCaptureInPage): Ditto.
        (WebKit::WebPageProxy::setMuted): Ditto.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isMediaStreamCaptureMuted const): Ditto.

2019-04-04  Per Arne Vollan  <pvollan@apple.com>

        [macOS][iOS] Add filter to syscall sandbox rule
        https://bugs.webkit.org/show_bug.cgi?id=196613
        <rdar://problem/49531420>

        Reviewed by Brent Fulgham.

        This will restrict the existing sandbox rule for the syscall.

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

2019-04-04  Youenn Fablet  <youenn@apple.com>

        Service Worker Process does not have the right domain name
        https://bugs.webkit.org/show_bug.cgi?id=196585

        Reviewed by Chris Dumez.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getExtraInitializationData):
        Updated extraInitializationData to go from "security-origin" to "registrable-domain".

2019-04-04  Chris Dumez  <cdumez@apple.com>

        Temporarily disable delayed WebProcess launch on iOS to address PLT regression
        https://bugs.webkit.org/show_bug.cgi?id=196604
        <rdar://problem/49074131>

        Reviewed by Geoffrey Garen.

        Temporarily disable delayed WebProcess launch on iOS to address PLT regression. This
        is while I figure out how to enable this on iOS without regressed PLT.

        * UIProcess/WebProcessPool.h:

2019-04-04  Miguel Gomez  <magomez@igalia.com>

        [CoordGraphics] Revalidate need for 'coordinated update completion' in ThreadedCompositor
        https://bugs.webkit.org/show_bug.cgi?id=188839

        Reviewed by Žan Doberšek.

        Even if a platform layer has changed, don't wait for a main thread callback to finish the
        CompositingRunLoop update. It can be finished as soon as we receive the frameComplete signal.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::scheduleUpdate):
        (WebKit::CompositingRunLoop::stopUpdates):
        (WebKit::CompositingRunLoop::updateCompleted):
        (WebKit::CompositingRunLoop::updateTimerFired):
        (WebKit::CompositingRunLoop::compositionCompleted): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::renderLayerTree):
        (WebKit::ThreadedCompositor::sceneUpdateFinished):
        (WebKit::ThreadedCompositor::displayRefreshMonitor):
        (WebKit::ThreadedCompositor::handleDisplayRefreshMonitorUpdate): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::handleDisplayRefreshMonitorUpdate):

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

        [ATK] Cleanup WebPageAccessibilityObjectAtk
        https://bugs.webkit.org/show_bug.cgi?id=196537

        Reviewed by Michael Catanzaro.

        Several changes and cleanups:

         - Add WebKit prefix so that style checker doesn't complain about GObject conventions.
         - Rename the header to remove the Atk prefix to match the cpp file and class name.
         - Use pragma once.
         - Use nullptr instead of 0.
         - Use WEBKIT_DEFINE_TYPE instead of G_DEFINE_TYPE.
         - Return generic AtkObject* from constructor.

        * SourcesGTK.txt:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.cpp: Renamed from Source/WebKit/WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp.
        (accessibilityRootObjectWrapper):
        (webkitWebPageAccessibilityObjectInitialize):
        (webkitWebPageAccessibilityObjectGetIndexInParent):
        (webkitWebPageAccessibilityObjectGetNChildren):
        (webkitWebPageAccessibilityObjectRefChild):
        (webkit_web_page_accessibility_object_class_init):
        (webkitWebPageAccessibilityObjectNew):
        (webkitWebPageAccessibilityObjectRefresh):
        * WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.h: Added.
        * WebProcess/WebPage/atk/WebPageAccessibilityObject.h: Removed.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::updateAccessibilityTree):

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

        [ATK] Set ATK_STATE_TRANSIENT on the atk socket until it's embedded
        https://bugs.webkit.org/show_bug.cgi?id=196535

        Reviewed by Michael Catanzaro.

        This way the properties are not cached. Right now, if number of children is queried before the socket is
        embedded, 0 is returned and cached, so ATs don't see the child even after the socket has been embedded.

        * UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:
        (webkitWebViewBaseAccessibleRefStateSet): Set ATK_STATE_TRANSIENT is the socket is not occupied.
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::bindAccessibilityTree): Unset ATK_STATE_TRANSIENT.

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

        [ATK] Embed the AtkSocket as soon as we receive the plug ID
        https://bugs.webkit.org/show_bug.cgi?id=196534

        Reviewed by Michael Catanzaro.

        We are currently storing the ID and waiting for the next time get_accessible is called to embed the socket. We
        can simply embed the socket when the plug ID is received.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseGetAccessible):
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::bindAccessibilityTree):

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

        [ATK] Don't touch accessibility tree in WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld
        https://bugs.webkit.org/show_bug.cgi?id=193914

        Reviewed by Michael Catanzaro.

        Move it to dispatchDidFinishDocumentLoad, since we know we have the document at that point and we can create the
        root accessibility object wrapper.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):

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

        Simplify some "programmaticScroll" code paths
        https://bugs.webkit.org/show_bug.cgi?id=196589

        Reviewed by Zalan Bujtas.

        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm: Remove the parameter.
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode): Use the enum type.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2019-04-03  Chris Dumez  <cdumez@apple.com>

        The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash
        https://bugs.webkit.org/show_bug.cgi?id=196588
        <rdar://problem/49365787>

        Reviewed by Ryosuke Niwa.

        The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash.
        This can lead to returning stale frames to the client if it asks for those.

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

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

        Remove the isProgrammaticScroll argument to requestScroll() because no-one uses it
        https://bugs.webkit.org/show_bug.cgi?id=196587

        Reviewed by Zalan Bujtas.

        This argument was unused.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/win/PageClientImpl.h:

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        -apple-trailing-word is needed for browser detection
        https://bugs.webkit.org/show_bug.cgi?id=196575

        Unreviewed.

        * Configurations/FeatureDefines.xcconfig:

2019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a WebKit internal feature flag to always enable modern compatibility mode by default
        https://bugs.webkit.org/show_bug.cgi?id=196526
        <rdar://problem/49532923>

        Reviewed by Tim Horton.

        Change UseModernCompatibilityModeByDefault from an internal preference to a debug preference, so that it may be
        enabled for all apps on the system.

        * Shared/WebPreferences.yaml:

2019-04-03  Alex Christensen  <achristensen@webkit.org>

        Fix internal build after r243829
        https://bugs.webkit.org/show_bug.cgi?id=196549

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        Some SDK's don't include this selector in the header.
        Use NSSelectorFromString.

2019-04-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WTF] Mirror XCode header directories
        https://bugs.webkit.org/show_bug.cgi?id=191662

        Reviewed by Konstantin Tokarev.

        Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
        builds.

        * CMakeLists.txt:

2019-04-03  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable legacy TLS fallback
        https://bugs.webkit.org/show_bug.cgi?id=196549
        <rdar://44979744>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setAllowsTLSFallback:]):
        (-[WKWebsiteDataStore _allowsTLSFallback]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setSourceApplicationSecondaryIdentifier):
        (WebKit::WebsiteDataStore::setAllowsTLSFallback):
        (WebKit::WebsiteDataStore::setSourceApplicationBundleIdentifier):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::allowsTLSFallback const):
        (WebKit::WebsiteDataStore::networkingHasBegun):
        (WebKit::WebsiteDataStore::finalizeApplicationIdentifiers): Deleted.

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=196525

        Reviewed by Zalan Bujtas.

        This CSS property is nonstandard and not used.

        * Configurations/FeatureDefines.xcconfig:

2019-04-03  Alex Christensen  <achristensen@webkit.org>

        Resurrect and fix layout test http/tests/adClickAttribution/store-ad-click-attribution.html
        https://bugs.webkit.org/show_bug.cgi?id=196476

        Reviewed by Chris Dumez.

        Re-apply a change I reverted in r241754 now that it's safe to do so.

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

2019-04-03  Daniel Bates  <dabates@apple.com>

        [iOS] Should be able to dismiss picker or popover using the keyboard
        https://bugs.webkit.org/show_bug.cgi?id=196272
        <rdar://problem/48943170>

        Reviewed by Wenson Hsieh.

        Intercept key events and route them to the current input peripheral (if we have one). Add a base key event handler
        for all form peripherals that dismisses the accessory when either the Escape key is pressed or Command + . is pressed.
        I will fix this issue for the file upload picker/popover in <https://bugs.webkit.org/show_bug.cgi?id=196287>.

        * SourcesCocoa.txt: Add file WKFormPeripheralBase.mm.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView endEditingAndUpdateFocusAppearanceWithReason]): Added.
        (-[WKContentView resignFirstResponderForWebView]): Write in terms of -endEditingAndUpdateFocusAppearance.
        (-[WKContentView inputView]): Code style nit while I am here; add an empty line to demarcate the "crazy"
        code that the FIXME is referring to and should ideally be removed from the code that is sane to always do.
        (-[WKContentView accessoryDone]): When the accessory is dismissed via the Done button (iPhone) or by pressing
        Escape or Command + . using a hardware keyboard (iPhone or iPad) then end the current editing session, but
        do not resign first responder status as the page activation state should not be changed.
        (-[WKContentView _handleKeyUIEvent:]): Bring back this code when building with USE(UIKIT_KEYBOARD_ADDITIONS)
        as we need to route key events to the input peripheral (if we have one). If the input peripheral handles it
        then we're done: no need to let UIKit or WebKit handle it when building with USE(UIKIT_KEYBOARD_ADDITIONS),
        respectively. If the input peripheral does not handle it then do what we do now.
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        If the element is re-focused and we have an input peripheral then we want to ensure we are first responder,
        reveal the focused element, update the accessory and tell the peripheral that editing has begun (again).
        For all other element re-focusing where we don't have a peripheral do what we do now. Also, update _isEditable
        to reflect whether the focused element contains selectable text. This is what UIKit wants to know when it queries
        -isEditable. Now that we no longer blur the focused element on iPad when the popover is dismissed and keep the
        peripheral until there is a focus change we need to ensure that we give the correct answer to UIKit on view
        editability. Otherwise, UIKit thinks it needs to update the text selection state when a popup button is tapped
        again (as part of its gesture recognizer logic) and this causes an assertion failure in UIKit after it calls back
        into us to ask for selection details, which we correctly respond with the equivalent of "we have none" and is
        not the answer UIKit expects since we told it we are editable. (Currently we manage to get away with telling UIKit
        we are always editable because it is not possible to perform a selection operation when we have a popover open.
        Closing the popover blurs the element, setting -isEditable to NO and deallocates the peripheral avoiding this issue).
        * UIProcess/ios/forms/WKFormColorControl.h:
        * UIProcess/ios/forms/WKFormColorControl.mm:
        (-[WKColorPopover controlEndEditing]): Dismiss the popover.
        (-[WKFormColorControl initWithView:]): Modified to call base class initializer.
        (-[WKFormColorControl assistantView]): Deleted.
        (-[WKFormColorControl beginEditing]): Deleted.
        (-[WKFormColorControl endEditing]): Deleted.
        * UIProcess/ios/forms/WKFormInputControl.h:
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKFormInputControl initWithView:]): Modified to call base class initializer.
        (-[WKFormInputControl dateTimePickerCalendarType]): Write in terms of self.control.
        (-[WKDateTimePopover controlEndEditing]): Dismiss the popover and tell the controller that editing ended.
        (-[WKFormInputControl beginEditing]): Deleted.
        (-[WKFormInputControl endEditing]): Deleted.
        (-[WKFormInputControl assistantView]): Deleted.
        * UIProcess/ios/forms/WKFormPeripheral.h:
        * UIProcess/ios/forms/WKFormPeripheralBase.h: Added.
        * UIProcess/ios/forms/WKFormPeripheralBase.mm: Added.
        (-[WKFormPeripheralBase initWithView:control:]): Take ownership of the passed WKFormControl.
        (-[WKFormPeripheralBase beginEditing]): Turn around and tell the control.
        (-[WKFormPeripheralBase endEditing]): Ditto.
        (-[WKFormPeripheralBase assistantView]): Ditto.
        (-[WKFormPeripheralBase control]): Return the control.
        (-[WKFormPeripheralBase handleKeyEvent:]): Dismiss the accessory (in the same way we dismiss when the Done
        button is pressed on iPhone) on keydown of the Escape key or when we receive a UIKeyInputEscape event (for
        Command + .).
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl initWithView:]): Modified to call base class initializer.
        (-[WKFormSelectControl selectRow:inComponent:extendingSelection:]): Write in terms of self.control.
        (-[WKFormSelectControl selectFormPopoverTitle]): Ditto.
        (-[WKFormSelectControl assistantView]): Deleted.
        (-[WKFormSelectControl beginEditing]): Deleted.
        (-[WKFormSelectControl endEditing]): Deleted.
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover controlEndEditing]): Dismiss the popover.
        * WebKit.xcodeproj/project.pbxproj: Add files WKFormPeripheralBase.{h, mm}.

2019-04-03  Youenn Fablet  <youenn@apple.com>

        Resetting quota should take into account third party origins
        https://bugs.webkit.org/show_bug.cgi?id=196462

        Reviewed by Geoffrey Garen.

        When clearing the storage quota, we were resetting it to the default value
        without taking care of whether third party or not.
        Updated the code to ensure that the default quota is computed based on the origin.

        Updated existing test to cover this case.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearStorageQuota):
        (WebKit::NetworkProcess::setCacheStorageParameters):
        (WebKit::NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting):
        (WebKit::NetworkProcess::storageQuotaManager):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::StorageQuotaManagers::defaultQuota const):
        (WebKit::NetworkProcess::StorageQuotaManagers::setDefaultQuotas):
        (WebKit::NetworkProcess::StorageQuotaManagers::managersPerOrigin):

2019-04-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Get rid of HTMLInputElement::setEditingValue
        https://bugs.webkit.org/show_bug.cgi?id=196402

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMElement.cpp:
        (webkit_dom_element_html_input_element_set_editing_value):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        (webkit_dom_html_input_element_set_editing_value):

2019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a WebKit internal feature flag to always enable modern compatibility mode by default
        https://bugs.webkit.org/show_bug.cgi?id=196526
        <rdar://problem/49532923>

        Reviewed by Antoine Quint.

        * Shared/WebPreferences.yaml:

2019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce and add plumbing for a website policy for meta viewport tag handling
        https://bugs.webkit.org/show_bug.cgi?id=196285

        Reviewed by Tim Horton.

        Add WebsiteMetaViewportPolicy, a bit that can be used to determine whether to respect or ignore the meta
        viewport tag and use native web page parameters instead of the default parameters.

        * Shared/WebsiteMetaViewportPolicy.h: Copied from Source/WebKit/Shared/WebsitePoliciesData.h.
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):

        Convert WebKit::WebsiteMetaViewportPolicy into WebCore::MetaViewportPolicy.

        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:

        Add additional plumbing for the policy flag.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetViewportDefaultConfiguration):

        Use native web page parameters if either "shouldIgnoreMetaViewport" is enabled, or the new policy is set.
        Eventually, the policy should completely replace the former preference once no internal clients depend on it.

2019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add plumbing for a compatibility mode preference in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=196005

        Reviewed by Tim Horton.

        Add plumbing between the Cocoa API object (WKWebpagePreferences) and the inner C++ API object
        (API::WebsitePolicies) for compatibility mode.

        * Shared/WebCompatibilityMode.h: Added.
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::adjustPoliciesForCompatibilityMode):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * WebKit.xcodeproj/project.pbxproj:

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

        [CoordinatedGraphics] Hidden pages are not suspended after a web view resize
        https://bugs.webkit.org/show_bug.cgi?id=196487

        Reviewed by Žan Doberšek.

        When resizing the window, the hidden tabs are updated too, to avoid flickering or getting the old size when
        switching tabs. For that we need to resume painting but we are not suspending it again after the update.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState): Suspend the painting again after a
        synchronous update if needed.

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

        Web Inspector: [GTK] Copy copies to nowhere
        https://bugs.webkit.org/show_bug.cgi?id=181228

        Reviewed by Michael Catanzaro.

        The thing is that those items are actually submenu items, with options, for example in the case of Copy to copy
        HTML, Text, XPath, etc. We are not correctly handling submenus when populating the context menu received from
        the web process.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::populateSubMenu): Helper to populate submenu items recursively.
        (WebKit::WebContextMenuProxyGtk::populate): Handle submenu items.
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

2019-04-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add new API around WKWebpagePreferences in WKNavigationDelegate and WKWebViewConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=196284
        <rdar://problem/47228232>

        Reviewed by Tim Horton.

        Tests for both of these APIs will be added in a subsequent patch.

        * Shared/API/Cocoa/WebKit.h:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::defaultWebsitePolicies const):
        (API::PageConfiguration::setDefaultWebsitePolicies):
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:

        Add a new navigation delegate hook to allow clients to return a WKWebpagePreference targeting the given
        navigation action.

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

        Add new API on WKWebViewConfiguration to specify a default WKWebpagePreference to use when navigating.

        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration defaultWebpagePreferences]):
        (-[WKWebViewConfiguration setDefaultWebpagePreferences:]):
        * UIProcess/API/Cocoa/WKWebpagePreferences.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

        Invoke the new WKWebpagePreferences-based navigation delegate method.

        * WebKit.xcodeproj/project.pbxproj:
        * mac/postprocess-framework-headers.sh:
        * mac/replace-webkit-additions-in-framework-headers.sh: Added.

        Move logic in the "Postprocess Framework Headers" step responsible for stripping away included files from
        WebKitAdditions out into a separate build phase, called "Replace WebKitAdditions in Framework Headers". This
        ensures headers attempting to include from WebKitAdditions have these additional statements removed.

2019-04-02  Geoffrey Garen  <ggaren@apple.com>

        Eliminate plugin sandbox exceptions
        https://bugs.webkit.org/show_bug.cgi?id=196510

        Reviewed by Chris Dumez.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::initializeSandbox):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::shouldAllowPluginToRunUnsandboxed): Deleted.
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        (WebKit::PluginInfoStore::shouldAllowPluginToRunUnsandboxed): Deleted.

2019-04-02  Alex Christensen  <achristensen@webkit.org>

        Fix assertion in http/tests/adClickAttribution/store-ad-click-attribution.html
        https://bugs.webkit.org/show_bug.cgi?id=196503

        Reviewed by Chris Dumez.

        In WebPageProxy::didDestroyNavigation we try to ignore a request to destroy a navigation from a page being navigated from
        during a cross-site navigation, but if the old web process sends the message after WebPageProxy::commitProvisionalPage
        has been called, we can still destroy a navigation when we are continuing a navigation in another process.  To prevent this,
        have the process not send the message when it knows the navigation is continuing in another process.
        Also make the use of unchecked navigation pointers more robust by checking it for nullity.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision):
        (WebKit::WebFrame::documentLoaderDetached):
        * WebProcess/WebPage/WebFrame.h:

2019-04-02  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix iokit-get-properties sandbox violation in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=196500
        <rdar://problem/49497788>

        Reviewed by Brent Fulgham.

        Attempting to get the iokit properties 'product-description', 'artwork-display-gamut' and
        'artwork-scale-factor' is causing sandbox violations.

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

2019-04-02  Chris Dumez  <cdumez@apple.com>

        [WK2] Add support for Window's beforeprint / afterprint events
        https://bugs.webkit.org/show_bug.cgi?id=196478

        Reviewed by Alex Christensen.

        Add support for Window's beforeprint / afterprint events as per:
        - https://html.spec.whatwg.org/#dom-print

        Blink and Gecko already support this.

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

2019-04-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r243726): Crash at unrecognized selector: -[WKWebpagePreferences webpagePreferences]
        https://bugs.webkit.org/show_bug.cgi?id=196496
        <rdar://problem/49521634>

        Reviewed by Chris Dumez.

        r243726 made an incorrect assumption that all callers of -decidePolicyForNavigationAction:decisionHandler: and
        -decidePolicyForNavigationAction:userInfo:decisionHandler: must be instances of _WKWebsitePolicies, as opposed
        to the new WKWebpagePreferences. However, it's possible for clients (in this case, Safari) to already generate
        and pass in an instance of WKWebpagePreferences by bridging the C API opaque ref (WKWebsitePoliciesRef) into the
        Objective-C object (which is now WKWebpagePreferences, after my change).

        To maintain binary compatibility of trunk WebKit against prior versions of Safari, we need to handle both
        WKWebpagePreferences and the soon-to-be-deprecated _WKWebsitePolicies in the navigation action policy decision
        handler.

        Tests:  WebKit.WebsitePoliciesWithBridgingCast
                WebKit.WebsitePoliciesWithUnexpectedType

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

2019-04-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed, drop debug logging landed as part of r242903 by mistake.

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

2019-04-01  Remy Demarest  <rdemarest@apple.com>

        Add SPI to give injected bundles access to displayed PDFDocuments
        https://bugs.webkit.org/show_bug.cgi?id=196471
        <rdar://problem/48080768>

        Reviewed by Tim Horton.

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageMac.h: Added.
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageMac.mm: Added.
        (WKBundlePageGetPDFDocumentInFrame):

2019-04-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit2] Introduce a public version of WKWebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=195989
        <rdar://problem/47228232>

        Reviewed by Tim Horton.

        Expose the existing _WKWebsitePolicies object as WKWebpagePreferences, in what will eventually become a public
        header in the WebKit SDK (WKWebpagePreferences.h). Following a similar transitioning strategy as
        _WKWebsiteDataStore and WKWebsiteDataStore, we move existing logic from _WKWebsitePolicies to WKWebpagePreferences
        and make _WKWebsitePolicies a wrapper around WKWebpagePreferences.

        No change in behavior.

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

        Wrap API::WebsitePolicies with WKWebpagePreferences.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateWebsitePolicies:]):
        * UIProcess/API/Cocoa/WKWebpagePreferences.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h.
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm.

        Introduce WKWebpagePreferences.

        (+[WKWebpagePreferences defaultPreferences]):
        (-[WKWebpagePreferences dealloc]):
        (-[WKWebpagePreferences init]):
        (-[WKWebpagePreferences _setContentBlockersEnabled:]):
        (-[WKWebpagePreferences _contentBlockersEnabled]):
        (-[WKWebpagePreferences _setAllowedAutoplayQuirks:]):
        (-[WKWebpagePreferences _allowedAutoplayQuirks]):
        (-[WKWebpagePreferences _setAutoplayPolicy:]):
        (-[WKWebpagePreferences _autoplayPolicy]):
        (-[WKWebpagePreferences _setDeviceOrientationAndMotionAccessPolicy:]):
        (-[WKWebpagePreferences _deviceOrientationAndMotionAccessPolicy]):
        (-[WKWebpagePreferences _setPopUpPolicy:]):
        (-[WKWebpagePreferences _popUpPolicy]):
        (-[WKWebpagePreferences _customHeaderFields]):
        (-[WKWebpagePreferences _setCustomHeaderFields:]):
        (-[WKWebpagePreferences _websiteDataStore]):
        (-[WKWebpagePreferences _setWebsiteDataStore:]):
        (-[WKWebpagePreferences _setCustomUserAgent:]):
        (-[WKWebpagePreferences _customUserAgent]):
        (-[WKWebpagePreferences _setCustomJavaScriptUserAgentAsSiteSpecificQuirks:]):
        (-[WKWebpagePreferences _customJavaScriptUserAgentAsSiteSpecificQuirks]):
        (-[WKWebpagePreferences _setCustomNavigatorPlatform:]):
        (-[WKWebpagePreferences _customNavigatorPlatform]):
        (-[WKWebpagePreferences _apiObject]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h.
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.h.

        Reintroduce all the interfaces currently available on _WKWebsitePolicies as underscore-prefixed SPI on
        WKWebpagePreferences.

        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:

        Make _WKWebsitePolicies wrap WKWebpagePreferences, and plumb all existing SPI on WKWebsitePolicies through to
        WKWebpagePreferences.

        (-[_WKWebsitePolicies init]):
        (-[_WKWebsitePolicies webpagePreferences]):
        (-[_WKWebsitePolicies setContentBlockersEnabled:]):
        (-[_WKWebsitePolicies contentBlockersEnabled]):
        (-[_WKWebsitePolicies setAllowedAutoplayQuirks:]):
        (-[_WKWebsitePolicies allowedAutoplayQuirks]):
        (-[_WKWebsitePolicies setAutoplayPolicy:]):
        (-[_WKWebsitePolicies autoplayPolicy]):
        (-[_WKWebsitePolicies setDeviceOrientationAndMotionAccessPolicy:]):
        (-[_WKWebsitePolicies deviceOrientationAndMotionAccessPolicy]):
        (-[_WKWebsitePolicies setPopUpPolicy:]):
        (-[_WKWebsitePolicies popUpPolicy]):
        (-[_WKWebsitePolicies customHeaderFields]):
        (-[_WKWebsitePolicies setCustomHeaderFields:]):
        (-[_WKWebsitePolicies websiteDataStore]):
        (-[_WKWebsitePolicies setWebsiteDataStore:]):
        (-[_WKWebsitePolicies setCustomUserAgent:]):
        (-[_WKWebsitePolicies customUserAgent]):
        (-[_WKWebsitePolicies setCustomJavaScriptUserAgentAsSiteSpecificQuirks:]):
        (-[_WKWebsitePolicies customJavaScriptUserAgentAsSiteSpecificQuirks]):
        (-[_WKWebsitePolicies setCustomNavigatorPlatform:]):
        (-[_WKWebsitePolicies customNavigatorPlatform]):
        (-[_WKWebsitePolicies description]):
        (-[_WKWebsitePolicies _apiObject]):
        (-[_WKWebsitePolicies dealloc]): Deleted.
        * UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * WebKit.xcodeproj/project.pbxproj:

2019-04-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unable to copy and paste a PDF from Notes into Mail compose body
        https://bugs.webkit.org/show_bug.cgi?id=196442
        <rdar://problem/48573098>

        Reviewed by Tim Horton.

        Relax the -canPerformAction: logic in the case of pasting an attachment. Consider an NSItemProvider to possibly
        paste as an attachment if either it has a preferred presentation style of UIPreferredPresentationStyleAttachment
        or has a style of UIPreferredPresentationStyleUnspecified, but has a suggested file name.

        This allows for the "Paste" action to be shown in the callout menu when copying and pasting a non-text file.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):

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

        Make UIWKDocumentContext rects per-character instead of per-word
        https://bugs.webkit.org/show_bug.cgi?id=196459

        Reviewed by Wenson Hsieh.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDocumentEditingContext):
        Switch to CharacterIterator instead of TextIterator directly, to get
        per-character rects as the API requests.

2019-04-01  Chris Dumez  <cdumez@apple.com>

        UIProcess crash when a prewarmed process is terminated
        https://bugs.webkit.org/show_bug.cgi?id=196451
        <rdar://problem/49245471>

        Reviewed by Geoffrey Garen.

        Stop assuming that WebProcessProxy::m_websiteDataStore is non-null as this is no longer
        true after r243384. For example, prewarmed WebContent processe do not get a data store
        until they actually get used.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _prewarmedProcessIdentifier]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessIdentifier):
        (WebKit::WebProcessPool::prewarmedProcessIdentifier):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::requestTermination):
        (WebKit::WebProcessProxy::isReleaseLoggingAllowed const):
        * UIProcess/WebProcessProxy.h:

2019-04-01  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Add more websitedatastore directories to web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=196447

        Reviewed by Michael Catanzaro.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):
        * UIProcess/glib/WebProcessProxyGLib.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):

2019-04-01  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Crash when loading Twitter with autoplay video enabled.
        https://bugs.webkit.org/show_bug.cgi?id=196446
        <rdar://problem/49060359>

        Reviewed by Brent Fulgham.

        This is caused by a syscall violation.

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

2019-04-01  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Fix seccomp rule for blacklisting TIOCSTI
        https://bugs.webkit.org/show_bug.cgi?id=196297

        Reviewed by Michael Catanzaro.

        More information can be found here: https://www.exploit-db.com/exploits/46594

        Note that this sandbox never made it into production so does not
        warrant any CVE specific to WebKit.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::setupSeccomp):

2019-03-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Crash when changing inputmode for certain types of focusable elements
        https://bugs.webkit.org/show_bug.cgi?id=196431
        <rdar://problem/49454962>

        Reviewed by Tim Horton.

        The crash is happening because WebPage::focusedElementDidChangeInputMode assumes that the document's focused
        element must be the same as m_focusedElement in WebPage. However, this is not the case, since m_focusedElement
        is only set for certain types of elements that require user input (e.g. text fields, editable content, select
        menus, etc.). The function then attempts to dereference m_focusedElement, which may be null if the document's
        focused element doesn't fall into one of the aforementioned categories.

        To fix this, bail if the element that is changing inputmode is not equal to the WebPage's current focused
        element. See below for more details.

        Test: fast/forms/change-inputmode-crash.html

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

        Clean up some existing logic by introducing a helper method for determining whether an element should
        propagate inputmode attribute changes to the UI process. Also, check the element type using type traits instead
        of checking against the tag name.

        (WebKit::WebPage::elementDidFocus):
        (WebKit::WebPage::focusedElementDidChangeInputMode):

2019-03-31  Sam Weinig  <weinig@apple.com>

        Remove more i386 specific configurations
        https://bugs.webkit.org/show_bug.cgi?id=196430

        Reviewed by Alexey Proskuryakov.

        * Configurations/BaseTarget.xcconfig:
        WK_HAVE_CORE_PREDICTION can now be enabled unconditionally.
 
        * Configurations/FeatureDefines.xcconfig:
        ENABLE_WEB_AUTHN_macosx can now be enabled unconditionally on macOS.

2019-03-31  Andy Estes  <aestes@apple.com>

        [iOS] WebKit should consult the navigation response policy delegate before previewing a QuickLook document
        https://bugs.webkit.org/show_bug.cgi?id=196433
        <rdar://problem/49293305>

        Reviewed by Tim Horton.

        Added WKWebViewConfiguration SPI for setting the QuickLook navigation response policy
        decision behavior. The configuration setting defaults to YES for clients linked on or after
        this WebKit change and NO otherwise.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptions):
        * Shared/WebPreferences.yaml:
        * Shared/ios/QuickLookDocumentData.cpp:
        (WebKit::QuickLookDocumentData::isEmpty const):
        * Shared/ios/QuickLookDocumentData.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (defaultShouldDecidePolicyBeforeLoadingQuickLookPreview):
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _shouldDecidePolicyBeforeLoadingQuickLookPreview]):
        (-[WKWebViewConfiguration _setShouldDecidePolicyBeforeLoadingQuickLookPreview:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/Cocoa/VersionChecks.h:
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp:
        (WebKit::WebPreviewLoaderClient::didReceiveDataArray):

2019-03-30  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Subframe load should not reset content observation on the mainframe
        https://bugs.webkit.org/show_bug.cgi?id=196408
        <rdar://problem/49436797>

        Reviewed by Simon Fraser.

        Hover intent fails when an unrelated frame commits a load the same time.
        cancelPotentialTapInFrame is called from didCommitLoad, but what we are looking for here is the user initiated cancel of a tap (cancelPotentialTap).
        (If the current frame navigates away, willDetachPage takes care of canceling the observation.)

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

2019-03-29  John Wilander  <wilander@apple.com>

        Move WebResourceLoadStatisticsStore IPC calls from the UI process to the network process
        https://bugs.webkit.org/show_bug.cgi?id=196407
        <rdar://problem/47859936>

        Reviewed by Brent Fulgham.

        The two WebResourceLoadStatisticsStore IPC endpoints were left behind when we
        moved Resource Load Statistics from the UI process to the network process. One
        of the endpoints is the message RequestStorageAccessUnderOpener which underpins
        our compatibility fix for federated logins using popups. This patch redirects
        these IPC calls to the network process and cleans up some assumptions around
        them.

        * CMakeLists.txt:
            Removed the old IPC receiver.
        * DerivedSources.make:
            Removed the old IPC receiver.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestUpdate): Deleted.
            This is no longer needed since there is a dedicated update mechanism
            that actually sends the update.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::resourceLoadStatisticsUpdated):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccessUnderOpener):
            Two new IPC receivers to pipe the calls to the network process.
        (WebKit::NetworkConnectionToWebProcess::requestResourceLoadStatisticsUpdate): Deleted.
            NetworkConnectionToWebProcess::resourceLoadStatisticsUpdated now serves
            this purpose.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * UIProcess/WebResourceLoadStatisticsStore.messages.in: Removed.
            Removed the old IPC receiver.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleResourceLoadStatisticsNotifyObserver):
            Function name update.
        * WebProcess/WebProcess.cpp:
            Now calls IPC to the network process instead of the UI process.

2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete WebMetal implementation in favor of WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=195418

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2019-03-29  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Add Server Trust Evaluation Support.
        https://bugs.webkit.org/show_bug.cgi?id=191646

        Reviewed by Fujii Hironori.

        Tests: http/tests/ssl/iframe-upgrade.https.html
               http/tests/ssl/mixedContent/insecure-websocket.html
               http/tests/ssl/upgrade-origin-usage.html

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::curlDidFailWithError):
        (WebKit::NetworkDataTaskCurl::tryServerTrustEvaluation):
        (WebKit::NetworkDataTaskCurl::restartWithCredential):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:

2019-03-29  Cathie Chen  <cathiechen@igalia.com>

        Implement ResizeObserver.
        https://bugs.webkit.org/show_bug.cgi?id=157743

        Reviewed by Simon Fraser.

        Add WebPreferences and FeatureDefines for ResizeObserver.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:

2019-03-28  Timothy Hatcher  <timothy@apple.com>

        CFDictionary encoder crashes on non-string keys.
        https://bugs.webkit.org/show_bug.cgi?id=196388
        rdar://problem/49339242

        Reviewed by Ryosuke Niwa.

        Allow non-string keys in CFDictionary encoding/decoding. Encode the correct
        size for dictionaries and arrays when unknown keys or values are skipped.
        Allow null array encoding and decoding like dictionary already allowed.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode):
        (IPC::decode):

2019-03-28  John Wilander  <wilander@apple.com>

        Resource Load Statistics: IPC to the WebsiteDataStore in the UI process from NetworkProcess::deleteWebsiteDataForRegistrableDomains()
        https://bugs.webkit.org/show_bug.cgi?id=196281
        <rdar://problem/48938748>

        Reviewed by Alex Christensen.

        The move of Resource Load Statistics to the network process requires that it
        calls the UI process when clearing website data (previously the other way
        around). This patch achieves that.

        Specifically, NetworkProcess::deleteWebsiteDataForRegistrableDomains() now
        filters its WebsiteDataTypes down to just the ones applicable for the UI
        process and then calls DeleteWebsiteDataInUIProcessForRegistrableDomains over
        IPC.

        NetworkProcessProxy::deleteWebsiteDataInUIProcessForRegistrableDomains() on
        the UI process side makes use of the re-introduced
        WebsiteDataStore::fetchDataForRegistrableDomains() function to get the relevant
        data records and call WebsiteDataStore::removeData(). The re-introduced
        WebsiteDataStore::fetchDataForRegistrableDomains() was removed as dead code in
        https://trac.webkit.org/changeset/242056/webkit, then under the name
        WebsiteDataStore::fetchDataForTopPrivatelyControlledDomains(). The reason it
        was dead code was the lack of IPC call that this patch adds.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
           Now calls DeleteWebsiteDataInUIProcessForRegistrableDomains over IPC if there
           are WebsiteDataTypes applicable to the UI process.
        * NetworkProcess/NetworkProcess.h:
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::ownerProcess):
        (WebKit::WebsiteData::filter):
            Convenience functions to manage process ownership of website data types.
        * Shared/WebsiteData/WebsiteData.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsHasLocalStorage):
            Test infrastructure, called by the TestRunner.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::deleteWebsiteDataInUIProcessForRegistrableDomains):
            New function to be called from the network process.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::matches const):
            Now matches with WebCore::RegistrableDomain instead of a string.
        (WebKit::WebsiteDataRecord::matchesTopPrivatelyControlledDomain const): Deleted.
            Replaced by WebsiteDataRecord::matches().
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataForRegistrableDomains):
            Re-introduced. It was removed as dead code in r242056.
        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::hasLocalStorageForTesting const):
            Test infrastructure, called by the TestRunner.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2019-03-28  Jiewen Tan  <jiewen_tan@apple.com>

        API::Data::createWithoutCopying should do a null check before calling CFRelease
        https://bugs.webkit.org/show_bug.cgi?id=196276
        <rdar://problem/48059859>

        Reviewed by Alex Christensen.

        * Shared/Cocoa/APIDataCocoa.mm:
        (API::Data::createWithoutCopying):

2019-03-28  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Automatic focus of input field is flaky
        https://bugs.webkit.org/show_bug.cgi?id=196302

        Reviewed by Brent Fulgham.

        Sometimes the status of whether a keyboard is connected can be incorrect, both in the UI process, and in
        the WebContent process. Fix this by sending the keyboard status to the WebContent process as part of the
        Web page creation parameters. Stop caching the keyboard status in the Web process proxy, and call
        [UIKeyboard isInHardwareKeyboardMode] instead, since this method is swizzled in the test harness.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (hardwareKeyboardAvailabilityChangedCallback):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::setKeyboardIsAttached): Deleted.
        (WebKit::WebProcessProxy::keyboardIsAttached const): Deleted.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::isInHardwareKeyboardMode):
        (WebKit::WebPageProxy::applicationWillEnterForeground):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:

2019-03-28  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistant:showCustomSheetForElement:]):

2019-03-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] webkit_web_resource_get_data_finish can return NULL without setting error
        https://bugs.webkit.org/show_bug.cgi?id=186276

        Reviewed by Carlos Garcia Campos.

        Currently it's possible for webkit_web_resource_get_data_finish() to return NULL without
        setting the error parameter. This is illegal because it is an API guarantee (and a GObject
        convention) that if an error parameter exists, it should be set whenever a function call
        returns NULL. Epiphany correctly dereferences the error in this case without checking if it
        is NULL, because it knows it does not have to, and crashes. Fix this. We'll return a byte
        array of length 1 containing a NUL character. This isn't great, but there's not really any
        better solution without deprecating the API or returning an error code to indicate an empty
        resource, and it at least fixes the Epiphany crash.

        This does not fix bug #186276, in which this function incorrectly returns no data when it
        ought to. But that is a different bug. Now, at least we won't crash when no data is
        available.

        * UIProcess/API/glib/WebKitWebResource.cpp:
        (resourceDataCallback):

2019-03-28  Daniel Bates  <dabates@apple.com>

        [iPad] Tapping on a popup form control may not show a popover
        https://bugs.webkit.org/show_bug.cgi?id=196322
        <rdar://problem/49229632>

        Reviewed by Wenson Hsieh.

        Stop taking advantage of -[WKContentView inputView] being called when we invoke -reloadInputViews
        to "lazily" allocate the input peripheral for the currently focused element. In theory, UIKit only
        needs to call -inputView when it actually needs to display the input view (the keyboard). For
        popup menu buttons, like <select>, no keyboard is needed. Instead we should create the peripheral
        as part of the logic in the UI process to focus a new element before we call -reloadInputViews.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputView]): Extract logic to allocate the peripheral from here and moved it to createInputPeripheralWithView().
        (-[WKContentView accessoryTab:]): While I am here, add a FIXME comment to explain why we need to
        end the input sessions and nullify the input peripheral before we tell the web process to switch
        focus as opposed to letting this happen after the web process tells us it focused a new element.
        (createInputPeripheralWithView): Added.
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        Write in terms of createInputPeripheralWithView(). Create the input peripheral after becoming
        first responder because creating the peripheral has known side-effects: for popup buttons it
        tells the popup controller to present the popover. For key input to popovers to work from the get-go,
        the content view must be the first responder. See <https://bugs.webkit.org/show_bug.cgi?id=196272>
        for more details.

2019-03-28  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Silence lot of warnings when compiling with clang
        https://bugs.webkit.org/show_bug.cgi?id=196310

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitInjectedBundleClient.cpp: add missing
        override clause.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h: add
        missing override clause.

2019-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        [macOS] Select element doesn't show popup if select element had lost focus while popup was previosuly shown
        https://bugs.webkit.org/show_bug.cgi?id=196336

        Reviewed by Tim Horton.

        The bug was caused by WebPopupMenu::hide never notifying PopupClient that the popup had been dismissed.
        This resulted in RenderMenuList::m_popupIsVisible to be never reset.

        Also fixed a bug in WebPopupMenuProxyMac::hidePopupMenu that this function was never dismissing
        the popup as the selector "dismissPopUp", on the contrary to its name, does not dimiss the popup.
        Send cancelTracking to NSMenu instead, which DOES dismiss the popup.

        Tests: fast/forms/select/mac-wk2/blur-dismisses-select-popup.html
               fast/forms/select/mac-wk2/open-select-popup-after-dismissing-by-blur.html

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::hidePopupMenu):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::hide):

2019-03-27  Dean Jackson  <dino@apple.com>

        [ARKit] Black view when opening a 3D model usdz file in new tab
        https://bugs.webkit.org/show_bug.cgi?id=196333
        <rdar://problem/47693367>

        Reviewed by Tim Horton.

        When opening a new WKSystemPreviewView, we were exiting if there was no
        presentingViewController. This code was unnecessary, and causing blank
        content when opening a new tab.

        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]):
        Remove the code looking for a presentingViewController.

2019-03-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Need a way to include WebKitAdditions code in WebKit API headers
        https://bugs.webkit.org/show_bug.cgi?id=196173

        Reviewed by Tim Horton.

        Introduce a mechanism that allows us to insert code from WebKitAdditions into public or private SDK headers
        using `#import`s of the form:

        ```
        #if USE(APPLE_INTERNAL_SDK)
        #import <WebKitAdditions/WKWebViewConfigurationAdditions.h>
        #endif
        ```

        The resulting header in the built products directory will contain the contents of the imported file inserted in
        place of the `#if USE(APPLE_INTERNAL_SDK) … #endif` block; however, when building with the Apple internal SDK,
        the additions header content will be imported by the usual means.

        * mac/postprocess-framework-headers.sh:
        * mac/replace-webkit-additions-includes.py: Added.

        Add a step when post-processing framework headers to replace instances of `#if USE(APPLE_INTERNAL_SDK) … #endif`
        with the text content of the additions files. The replacement script first searches in the built products
        directory for the matching additions file, and falls back to the SDK if no matching file is found. If neither
        are present (e.g. a build using the public SDK), then the block is simply replaced by the empty string.

        (read_content_from_webkit_additions):
        (main):

2019-03-27  Andy Estes  <aestes@apple.com>

        REGRESSION (r242686): package-root creates roots with broken symlinks in WebKit.framework/XPCServices/
        https://bugs.webkit.org/show_bug.cgi?id=196317

        Reviewed by Dan Bernstein.

        Removed some remnants of the Storage Process.

        * Configurations/BaseTarget.xcconfig:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Storage.sb: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2019-03-27  Keith Rollin  <krollin@apple.com>

        Include the CFNetworking task UUID to the NSError when a resource-load fails
        https://bugs.webkit.org/show_bug.cgi?id=196156

        Reviewed by Alex Christensen.

        In order to help track the connection between a failed resource-load
        and a user-visible error message, include the CFNetworking task UUID
        in the associated error as an element of the userInfo property. This
        can then be pulled out and reported in the logging at the point the
        error is reported to the user.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):

2019-03-27  Chris Dumez  <cdumez@apple.com>

        [ iOS Sim ] REGRESSION (r242277) Layout Test http/tests/cookies/same-site/lax-samesite-cookie-after-cross-site-history-load.php is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=195425
        <rdar://problem/48682403>

        Reviewed by Alex Christensen.

        When process-swapping on history navigation, we lookup the WebProcessProxy we'd like to use from the
        process identifier that is saved on the WebBackForwardListItem, to try and load the item in the process
        in which it was previously loaded. However, we were failing to check if the WebProcess in question was
        still running so we could potentially try to use a process that's already exited.

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

2019-03-27  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Always dispatch the synthetic click asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=196278
        <rdar://problem/49299968>

        Reviewed by Simon Fraser.

        This patch ensures that all completeSyntheticClick() calls happen in an asynchronous manner (unless the feature is turned off).

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

2019-03-27  Tim Horton  <timothy_horton@apple.com>

        Fix some more deprecation warnings in WKDrawingView
        https://bugs.webkit.org/show_bug.cgi?id=196282
        <rdar://problem/47637608>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/PencilKitSPI.h:
        * SourcesCocoa.txt:
        * UIProcess/ios/PencilKitSoftLink.h:
        * UIProcess/ios/PencilKitSoftLink.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKDrawingCoordinator.h:
        * UIProcess/ios/WKDrawingCoordinator.mm:
        (-[WKDrawingCoordinator initWithContentView:]):
        (-[WKDrawingCoordinator currentInk]):
        (-[WKDrawingCoordinator undoManagerForInkPicker:]):
        (-[WKDrawingCoordinator containingViewForInkPicker:]):
        (-[WKDrawingCoordinator inkPickerDidToggleRuler:]):
        (-[WKDrawingCoordinator inkPickerDidChangeInk:]):
        (-[WKDrawingCoordinator installInkPickerForDrawing:]):
        (-[WKDrawingCoordinator uninstallInkPicker]):
        (-[WKDrawingCoordinator inkPicker]): Deleted.
        (-[WKDrawingCoordinator didChangeRulerState:]): Deleted.
        (-[WKDrawingCoordinator didChangeInk:]): Deleted.
        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView _canvasViewWillBeginDrawing:]):
        * UIProcess/ios/WKInkPickerView.h: Removed.
        * UIProcess/ios/WKInkPickerView.mm: Removed.
        * WebKit.xcodeproj/project.pbxproj:
        Adopt the new names.

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

        Geolocation request not complete when watch request was started in a different web process
        https://bugs.webkit.org/show_bug.cgi?id=195996

        Reviewed by Alex Christensen.

        In WebGeolocationManagerProxy::startUpdating() we do nothing when the provider is already updating. We should
        reply with a DidChangePosition using the last known position, if available. If we are updating, but we still
        don't have a known position, the request will be completed when
        WebGeolocationManagerProxy::providerDidChangePosition() is called since it always notifies all web
        processes.

        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::providerDidChangePosition): Cache the position.
        (WebKit::WebGeolocationManagerProxy::startUpdating): Reply using cached position if already known.
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebKit::WebGeolocationManagerProxy::lastPosition const): Return cached position.
        * WebProcess/WebCoreSupport/WebGeolocationClient.cpp:
        (WebKit::WebGeolocationClient::lastPosition): Remove the FIXME since we don't want this feature.

2019-03-26  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Correct kerberos-related sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=196279
        <rdar://problem/48622502>

        Reviewed by Per Arne Vollan.

        We need to allow communications with a Kerberos-related service on macOS
        until <rdar://problem/35542803> is fixed.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2019-03-26  Chris Dumez  <cdumez@apple.com>

        [macOS] The network process is not exiting reliably when the WebProcessPool is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=196277
        <rdar://problem/49127581>

        Reviewed by Alex Christensen.

        When, an AuxiliaryProcess receives the AuxiliaryProcess::Terminate IPC, it calls stopRunLoop()
        to exit. WebProcess overrides AuxiliaryProcess::stopRunLoop() to call exit(0) on the main
        thread. Other auxiliary processes such as the NetworkProcess would end up calling
        platformStopRunLoop(). On iOS and iOSMac, platformStopRunLoop() calls XPCServiceExit(), which
        makes sense since auxiliary processes run their run loop by calling xpc_main(). However, on
        macOS, platformStopRunLoop() was calling RunLoop::main().stop() to exit instead, which was
        unreliable as demonstrated by the test app attached to the radar.

        Updating platformStopRunLoop() to call XPCServiceExit() on macOS fixes the problem and I now
        see the NetworkProcess exiting reliably there. This is the approach I have chosen in this
        patch since it appears to be reliable and it makes the code consistent on all Cocoa platforms.

        * Shared/AuxiliaryProcess.cpp:
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::platformStopRunLoop):
        * Shared/ios/AuxiliaryProcessIOS.mm:
        (WebKit::AuxiliaryProcess::platformStopRunLoop): Deleted.
        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::AuxiliaryProcess::platformStopRunLoop): Deleted.

2019-03-26  Keith Rollin  <krollin@apple.com>

        Inhibit CFNetwork logging in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=196268
        <rdar://problem/48210793>

        Reviewed by Alex Christensen.

        Before performing any logging, the NetworkProcess checks to see if
        it's performing an operation associated with a private (ephemeral)
        browsing session. If so, it skips the logging. However, networking
        layers below the NetworkProcess don't know about private browsing, so
        they would still perform their own logging. CFNetwork now has a flag
        that lets us control that, so set it to False if private browsing.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::configurationForSessionID):

2019-03-26  Chris Dumez  <cdumez@apple.com>

        Add basic layout test coverage for File Picker on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196265

        Reviewed by Wenson Hsieh.

        Add layout test infrastructure to test the file picker on iOS.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _dismissFilePicker]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dismissFilePicker]):
        (-[WKContentView _contentsOfUserInterfaceItem:]):
        * UIProcess/ios/forms/WKFileUploadPanel.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel currentAvailableActionTitles]):

2019-03-26  Daniel Bates  <dabates@apple.com>

        [iOS][WK2] Use a better concept to describe the reason we defer zooming a focused element: selectabiltiy
        https://bugs.webkit.org/show_bug.cgi?id=196264

        Reviewed by Wenson Hsieh.

        Rename shouldDeferZoomingToSelectionWhenRevealingFocusedElement() to mayContainSelectableText() to describe
        the criterion that we will use to decide whether to defer zooming or not. We defer zooming only for elements
        that may support text selection on initial focus because we do not have an up-to-date selection rect at that
        time. For element, like <select>, that do not support text selection, we can zoom them immediately when focused.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (mayContainSelectableText): Renamed from shouldDeferZoomingToSelectionWhenRevealingFocusedElement.
        List all the input types in the switch block and remove the default case to force the compiler to check that we
        covered all cases. This will prevent unforseen keyboard issues (why isn't the keyboard shown? or why is the keyboard shown?)
        for future input types that we may add.
        (rectToRevealWhenZoomingToFocusedElement): Update for renaming.
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): Add a
        comment to explain why we may need to defer the zoom: the focused element supports text selection and we need
        to wait for the web process to call back to provide an up-to-date selection rect for us to zoom and reveal.
        (-[WKContentView _didReceiveEditorStateUpdateAfterFocus]): Update for renaming.
        (shouldDeferZoomingToSelectionWhenRevealingFocusedElement): Deleted.

2019-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement async paste method on UIWKInteractionViewProtocol
        https://bugs.webkit.org/show_bug.cgi?id=196267
        <rdar://problem/49236346>

        Reviewed by Tim Horton.

        Implement a new UIWKInteractionViewProtocol hook to perform a paste command, and invoke the given completion
        handler when pasting is finished.

        Test: UIPasteboardTests.PasteWithCompletionHandler

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView pasteWithCompletionHandler:]):

2019-03-26  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Fix sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=196262
        <rdar://problem/47738015>

        Reviewed by Brent Fulgham.

        Fix various observed sandbox violations.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2019-03-26  Tomoki Imai  <Tomoki.Imai@sony.com>

        Assertion failure !isInAcceleratedCompositingMode() in DrawingAreaProxyCoordinatedGraphics::incorporateUpdate when forceCompositingMode is turned on
        https://bugs.webkit.org/show_bug.cgi?id=195879

        Reviewed by Carlos Garcia Campos.

        The root cause is that DrawingAreaProxyCoordinatedGraphics::isInAcceleratedCompositingMode checks both of alwaysUseCompositing() and !m_layerTreeContext.isEmpty().
        alwaysUseCompositing() refers preferences, which is written by the application (UIProcess).
        On the other hand, m_layerTreeContext is changed when it receives enterAcceleratedCompositingMode/exitAcceleratedCompositingMode from WebProcess.

        It results when we set forceCompositingMode and acceleratedCompositingEnabled to true, WebProcess and UIProcess is out of sync until WebProcess sends enterAcceleratedCompositingMode message.
        In such situation, WebProcess sends incorporateUpdate to UIProcess because WebProcess is in non-AC mode, but isInAcceleratedCompositingMode becomes true in UIProcess side.

        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaProxyCoordinatedGraphics::~DrawingAreaProxyCoordinatedGraphics): Should call exitAcceleratedCompositingMode even when alwaysUseCompositing is true.
        (WebKit::DrawingAreaProxyCoordinatedGraphics::enterAcceleratedCompositingMode): enterAcceleratedCompositingMode should check enterAcceleratedCompositingMode is not called twice.
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h: Remove alwaysUseCompositing from isInAcceleratedCompositingMode

2019-03-26  Antoine Quint  <graouts@apple.com>

        Remove mousemoveEventHandlingPreventsDefault internal setting and quirk
        https://bugs.webkit.org/show_bug.cgi?id=196254
        <rdar://problem/49124334>

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2019-03-26  Philippe Normand  <pnormand@igalia.com>

        [WPE][Qt] Uninitialized racy ViewBackend
        https://bugs.webkit.org/show_bug.cgi?id=196247

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/wpe/qt/WPEQtView.h: Initialize the backend pointer to nullptr.

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

        Unreviewed. Fix typo in GLib geolocation API after r243285.

        gelocation -> geolocation.

        * UIProcess/API/glib/WebKitGeolocationManager.cpp:
        (webkit_geolocation_manager_class_init):
        (webkit_geolocation_manager_update_position):
        (webkit_geolocation_manager_failed):
        (webkit_gelocation_manager_update_position): Deleted.
        (webkit_gelocation_manager_failed): Deleted.
        * UIProcess/API/gtk/WebKitGeolocationManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitGeolocationManager.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2019-03-26  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Disable process warming
        https://bugs.webkit.org/show_bug.cgi?id=196208

        Reviewed by Chris Dumez.

        Fixes crash caused by r243384.

        Process warming is incompatible with our launcher as it expects a valid
        WebsiteDataStore at initialization time for sandbox permissions.

        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitialize):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef
        https://bugs.webkit.org/show_bug.cgi?id=196213

        Reviewed by Geoff Garen.

        A release assertion added in r230225 was reachable.  I reached it in a unit test that responds to a challenge
        with a SecIdentityRef wrapped in an NSCredential.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::decode):

2019-03-25  Chris Dumez  <cdumez@apple.com>

        Regression(r242369) Trying to change profile picture on linked in shows file picker, not the image picker
        https://bugs.webkit.org/show_bug.cgi?id=196205
        <rdar://problem/49083324>

        Reviewed by Geoffrey Garen.

        Update our FileUploadPanel code on iOS to properly deal with the MIME types containing
        wild cards (e.g. "image/*") that are defined in the HTML specification:
        - https://html.spec.whatwg.org/multipage/input.html#attr-input-accept

        Previously, we would fail to convert those to UTIs.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:

2019-03-25  Tim Horton  <timothy_horton@apple.com>

        Remove some now-unnecessary dynamic class lookup
        https://bugs.webkit.org/show_bug.cgi?id=196237

        Reviewed by Simon Fraser.

        * Shared/DocumentEditingContext.mm:
        (WebKit::DocumentEditingContext::toPlatformContext):

2019-03-25  Tim Horton  <timothy_horton@apple.com>

        Get rid of ENABLE(ANIMATED_KEYBOARD_SCROLLING)
        https://bugs.webkit.org/show_bug.cgi?id=196224

        Reviewed by Simon Fraser.

        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator invalidate]):
        (perpendicularAbsoluteUnitVector):
        (-[WKKeyboardScrollingAnimator beginWithEvent:]):
        (-[WKKeyboardScrollingAnimator stopAnimatedScroll]):
        (-[WKKeyboardScrollingAnimator willStartInteractiveScroll]):
        (-[WKKeyboardScrollViewAnimator scrollToContentOffset:animated:]):
        (-[WKKeyboardScrollViewAnimator scrollWithScrollToExtentAnimationTo:]):
        (-[WKKeyboardScrollingAnimator startRepeatTimerIfNeeded]): Deleted.
        (-[WKKeyboardScrollingAnimator stopRepeatTimer]): Deleted.
        (-[WKKeyboardScrollingAnimator performDiscreteScroll]): Deleted.

2019-03-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Enable IPC sending and receiving non-default-constructible types
        https://bugs.webkit.org/show_bug.cgi?id=196132
        <rdar://problem/49229221>

        Unreviewed build fix for WinCairo port.

        error C2440: '=': cannot convert from 'int' to 'HANDLE'

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::Handle): std::exchange HANDLE with nullptr, not 0.
        (WebKit::SharedMemory::Handle::operator=): Ditto.

2019-03-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Coordinated Graphics][WinCairo] ASSERTION FAILED: state.id == m_nicosia.state.id
        https://bugs.webkit.org/show_bug.cgi?id=196190

        Reviewed by Žan Doberšek.

        This assertion assumes the pre-committed and the committed scenes
        are identical. But, the pre-committed scene is updated in the main
        thread. Removed the false assertion.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::purgeGLResources): Remove the
        assertion. Removed layers of committed scene, not pre-committed
        scene.

2019-03-25  Brady Eidson  <beidson@apple.com>

        Add socket-delegate to another entitlements config
        rdar://problem/48090350 and https://bugs.webkit.org/show_bug.cgi?id=196227

        Reviewed by Geoffrey Garen.

        * Configurations/Network-iOSMac.entitlements:

2019-03-25  Commit Queue  <commit-queue@webkit.org>

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

        the test doesn't build (Requested by thorton on #webkit).

        Reverted changeset:

        "Do not terminate the NetworkProcess if a third party
        application sends a NSCredential with a SecIdentityRef"
        https://bugs.webkit.org/show_bug.cgi?id=196213
        https://trac.webkit.org/changeset/243465

2019-03-25  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r242687): Flicker when pinch-zooming pages in macOS Safari
        https://bugs.webkit.org/show_bug.cgi?id=196126
        rdar://problem/49095791

        Reviewed by Tim Horton.
        
        I fumbled the commit after the enum rename. Make this actually work.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2019-03-25  Simon Fraser  <simon.fraser@apple.com>

        Zoom on macOS is centered around a point lower than the cursor
        https://bugs.webkit.org/show_bug.cgi?id=196225
        rdar://problem/49213574

        Reviewed by Tim Horton.
        
        The origin handed to ViewGestureController::handleMagnificationGestureEvent is in WKWebView
        coordinates, but we end up setting the transform on the RenderView's layer, so we need
        to subtract the topContentInset.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::handleMagnificationGestureEvent):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef
        https://bugs.webkit.org/show_bug.cgi?id=196213

        Reviewed by Geoff Garen.

        A release assertion added in r230225 was reachable.  I reached it in a unit test that responds to a challenge
        with a SecIdentityRef wrapped in an NSCredential.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::decode):

2019-03-25  Chris Dumez  <cdumez@apple.com>

        Get rid of WebPage::m_shouldResetDrawingAreaAfterSuspend flag
        https://bugs.webkit.org/show_bug.cgi?id=196210
        <rdar://problem/48681326>

        Reviewed by Geoffrey Garen.

        Get rid of WebPage::m_shouldResetDrawingAreaAfterSuspend flag and use the drawing area identifier
        instead to reset the DrawingArea in the WebProcess whenever the UIProcess did.

        This is less error-prone and guarantees that the WebProcess and the UIProcess can reliably
        communicate via DrawingArea IPC.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::setIsSuspended):
        * WebProcess/WebPage/WebPage.h:

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Enable IPC sending and receiving non-default-constructible types
        https://bugs.webkit.org/show_bug.cgi?id=196132

        Reviewed by Geoff Garen.

        * Platform/IPC/ArgumentCoder.h:
        * Platform/IPC/ArgumentCoders.h:
        (IPC::TupleEncoder::encode):
        (IPC::tupleFromTupleAndObject):
        (IPC::TupleDecoderImpl::decode):
        (IPC::TupleDecoderImpl<Type>::decode):
        (IPC::TupleDecoder::decode):
        (IPC::TupleDecoder<0>::decode):
        (IPC::TupleCoder::encode): Deleted.
        (IPC::TupleCoder::decode): Deleted.
        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithReply):
        (IPC::TupleMover::move):
        (IPC::moveTuple):
        (IPC::Connection::sendSync):
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::decode):
        (IPC::Decoder::operator>>):
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessage):
        (IPC::handleMessageSynchronous):
        (IPC::handleMessageSynchronousWantsConnection):
        (IPC::handleMessageAsync):
        * Platform/SharedMemory.h:
        * Scripts/webkit/LegacyMessages-expected.h:
        * Scripts/webkit/Messages-expected.h:
        * Scripts/webkit/MessagesSuperclass-expected.h:
        * Scripts/webkit/messages.py:
        * Shared/Databases/IndexedDB/WebIDBResult.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        * Shared/ShareableBitmap.h:
        * Shared/ShareableResource.h:
        * Shared/UpdateInfo.h:
        * Shared/WebEvent.h:
        * Shared/WebProcessCreationParameters.cpp:
        * Shared/WebProcessCreationParameters.h:
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::SecItemResponseData):
        (WebKit::SecItemResponseData::decode):
        * Shared/mac/SecItemResponseData.h:
        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.h:

2019-03-25  Tim Horton  <timothy_horton@apple.com>

        Animated keyboard scrolling is extremely chaotic
        https://bugs.webkit.org/show_bug.cgi?id=196164
        <rdar://problem/48702444>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        Consume keyboard events instead of interpreting them traditionally
        if WKKeyboardScrollingAnimator is animating.

        * UIProcess/ios/WKKeyboardScrollingAnimator.h:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator beginWithEvent:]):
        (-[WKKeyboardScrollingAnimator handleKeyEvent:]):
        (-[WKKeyboardScrollingAnimator stopAnimatedScroll]):
        (-[WKKeyboardScrollingAnimator scrollTriggeringKeyIsPressed]):
        (-[WKKeyboardScrollingAnimator displayLinkFired:]):
        (-[WKKeyboardScrollViewAnimator scrollTriggeringKeyIsPressed]):
        Expose the current state of interactive scrolling, and rename the related member.

2019-03-25  Keith Rollin  <krollin@apple.com>

        Add WebKit logging for first paint and other interesting layout milestones
        https://bugs.webkit.org/show_bug.cgi?id=196159
        <rdar://problem/49128952>

        Reviewed by Simon Fraser.

        Add some logging to indicate what layout milestones have been reached.
        This should help us determine if there's a client, rendering, layout,
        or some other issue when page content does not appear in the client
        window.

        The logging is being added to
        WebFrameLoaderClient::dispatchDidReachLayoutMilestone. This seems like
        a nice central place to capture layout milestones. However, it will
        only log notifications that are being sent to clients. It does not
        indicate all milestones that have occurred. That is, it does not
        report milestones that are filtered out due to client disinterest.
        There doesn't seem to be a good central place to capture all
        milestones, regardless of client interest.

        * Platform/Logging.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReachLayoutMilestone):

2019-03-25  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Remove network access from web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=189967

        Reviewed by Michael Catanzaro.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::createFlatpakInfo):
        (WebKit::bubblewrapSpawn):
        * UIProcess/Launcher/glib/FlatpakLauncher.cpp:
        (WebKit::flatpakSpawn):

2019-03-25  Andy Estes  <aestes@apple.com>

        [Apple Pay] Call +canMakePayments on a work queue
        https://bugs.webkit.org/show_bug.cgi?id=196179
        <rdar://problem/45388749>

        Reviewed by Brady Eidson.

        Calling +canMakePayments on either PKPaymentAuthorizationController or
        PKPaymentAuthorizationViewController results in synchronous IPC and is therefore very
        expensive to call on the main thread. On iOS, these calls are made in the network process,
        and on Mac in the UI process.

        Call these methods on a work queue to avoid main thread spins.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::canMakePayments):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePayments):
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePayments):

2019-03-25  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove the AvailablePaymentNetworks synchronous message
        https://bugs.webkit.org/show_bug.cgi?id=196180

        Reviewed by Youenn Fablet.

        Unlike many PassKit interactions, it's ok to call +[PKPaymentRequest availableNetworks]
        without an entitlement. Therefore, we can call it from the web process directly rather than
        synchronously messaging the entitled UI or networking process.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::availablePaymentNetworks):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/ApplePay/cocoa/WebPaymentCoordinatorCocoa.mm: Added.
        (WebKit::WebPaymentCoordinator::platformAvailablePaymentNetworks const):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]):
        (-[WKAccessibilityWebPageObjectBase setWebPage:]):

2019-03-25  Chris Dumez  <cdumez@apple.com>

        Unreviewed, tiny fix after r243388 to address API test failures on iOS

        m_processType was properly initialized on macOS but not iOS.

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

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

        [GTK][WPE] Do not allow changes in active URI before provisional load starts for non-API requests
        https://bugs.webkit.org/show_bug.cgi?id=194208

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewWillStartLoad): Block updates of active URL.
        (webkitWebViewLoadChanged): Unblock updates of active URL on WEBKIT_LOAD_STARTED.

2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove NavigatorContentUtils in WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=196070

        Reviewed by Alex Christensen.

        NavigatorContentUtils was to support the custom scheme spec [1].
        However, in WebKit side, no port has supported the feature in
        WebKit layer after EFL port was removed. So there has been the
        only IDL implementation of the NavigatorContentUtils in WebCore.
        So we don't need to keep the implementation in WebCore anymore.

        [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebCoreSupport/WebNavigatorContentUtilsClient.h: Removed.

2019-03-24  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix.

        * UIProcess/wpe/WebPasteboardProxyWPE.cpp:
        Add an explicit CompletionHandler.h include to avoid a trip-up in
        unified builds.

2019-03-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] WebProcessDataStoreParameters.h(32): error C2653: 'SandboxExtension': is not a class or namespace name
        https://bugs.webkit.org/show_bug.cgi?id=196192

        Unreviewed for WinCairo port.

        * Shared/WebProcessDataStoreParameters.h: Added #include "SandboxExtension.h".

2019-03-24  Andy Estes  <aestes@apple.com>

        [watchOS] Remove unused Proximity Networking code
        https://bugs.webkit.org/show_bug.cgi?id=196188

        Reviewed by Tim Horton.

        * Configurations/WebKit.xcconfig:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformPrepareToSuspend):
        (WebKit::NetworkProcess::platformProcessDidResume):
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
        * NetworkProcess/watchos/NetworkProximityAssertion.h: Removed.
        * NetworkProcess/watchos/NetworkProximityAssertion.mm: Removed.
        * NetworkProcess/watchos/NetworkProximityManager.h: Removed.
        * NetworkProcess/watchos/NetworkProximityManager.mm: Removed.
        * SourcesCocoa.txt:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration wirelessContextIdentifier]):
        (-[_WKProcessPoolConfiguration setWirelessContextIdentifier:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebKit.xcodeproj/project.pbxproj:

2019-03-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix typo in comment added in r243379.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup setDelegate:]):

2019-03-23  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (iOS 8): Scrollbar can't be hidden when webkit-overflow-scrolling is set to touch
        https://bugs.webkit.org/show_bug.cgi?id=137043
        rdar://problem/16595330

        Reviewed by Zalan Bujtas.

        Plumb horizontalScrollbarHiddenByStyle/verticalScrollbarHiddenByStyle through ScrollableAreaParameters
        to the UI process, and use it to set UIScrollView indicators visible or not.
        
        The scroll snap changes in ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren() fix a bug
        where hasChangedProperty(HorizontalSnapOffsets) was nested inside another set of hasChangedProperty()
        tests, so would never get called.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):

2019-03-23  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Taping on a form control should always result in click.
        https://bugs.webkit.org/show_bug.cgi?id=196177

        Reviewed by Simon Fraser.

        This patch enures that we send a synthetic click when the traget node is a form control (button, edit field etc) even if
        the mousemove brings up some hover content.

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

2019-03-23  Andy Estes  <aestes@apple.com>

        [Apple Pay] Stop calling PKPaymentAuthorizationViewController class methods on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196163
        <rdar://problem/48787564>

        Reviewed by Anders Carlsson.

        Now that we've transitioned to PKPaymentAuthorizationController on iOS, we should stop
        calling PKPaymentAuthorizationViewController class methods on iOS in favor of their
        PKPaymentAuthorizationController alternatives.

        While we're here, we should also transition to calling
        +paymentServicesMerchantURLForAPIType:completion: on both
        PKPaymentAuthorizationViewController and PKPaymentAuthorizationController.

        * Platform/cocoa/PaymentAuthorizationViewController.mm:
        (-[WKPaymentAuthorizationViewControllerDelegate _paymentServicesMerchantURLForAPIType:completion:]):
        * Platform/cocoa/WKPaymentAuthorizationDelegate.h:
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
        (-[WKPaymentAuthorizationDelegate _initWithRequest:presenter:]):
        (-[WKPaymentAuthorizationDelegate _paymentServicesMerchantURLForAPIType:completion:]):
        * Platform/ios/PaymentAuthorizationController.mm:
        (-[WKPaymentAuthorizationControllerDelegate _paymentServicesMerchantURLForAPIType:completion:]):
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePayments): Deleted.
        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePayments):
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePayments):

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

        Unreviewed. Fix GTK build after r243409.

        Build failure is actually unrelated to r243409, it's yet another unified build failure that happens when source
        file list changes.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformShowCertificate): Use WebCore namespace for CertificateInfo parameter.

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

        [GTK] Remove build time dependency on Geoclue2
        https://bugs.webkit.org/show_bug.cgi?id=195994

        Reviewed by Michael Catanzaro.

        Add GeoclueGeolocationProvider class to provide geolocation position updates using Geoclue2 DBus service.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitGeolocationManager.cpp:
        (_WebKitGeolocationPosition::_WebKitGeolocationPosition):
        (webkitGeolocationManagerStop):
        (webkitGeolocationManagerSetEnableHighAccuracy):
        (webkitGeolocationManagerDispose):
        (webkit_geolocation_manager_class_init):
        * UIProcess/geoclue/GeoclueGeolocationProvider.cpp: Added.
        (WebKit::GeoclueGeolocationProvider::GeoclueGeolocationProvider):
        (WebKit::GeoclueGeolocationProvider::~GeoclueGeolocationProvider):
        (WebKit::GeoclueGeolocationProvider::start):
        (WebKit::GeoclueGeolocationProvider::stop):
        (WebKit::GeoclueGeolocationProvider::setEnableHighAccuracy):
        (WebKit::GeoclueGeolocationProvider::destroyManagerLater):
        (WebKit::GeoclueGeolocationProvider::destroyManager):
        (WebKit::GeoclueGeolocationProvider::setupManager):
        (WebKit::GeoclueGeolocationProvider::createClient):
        (WebKit::GeoclueGeolocationProvider::setupClient):
        (WebKit::GeoclueGeolocationProvider::startClient):
        (WebKit::GeoclueGeolocationProvider::stopClient):
        (WebKit::GeoclueGeolocationProvider::requestAccuracyLevel):
        (WebKit::GeoclueGeolocationProvider::clientLocationUpdatedCallback):
        (WebKit::GeoclueGeolocationProvider::createLocation):
        (WebKit::GeoclueGeolocationProvider::locationUpdated):
        (WebKit::GeoclueGeolocationProvider::didFail):
        * UIProcess/geoclue/GeoclueGeolocationProvider.h: Added.

2019-03-22  Simon Fraser  <simon.fraser@apple.com>

        Undo collision with r243390.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (stringForSSLProtocol):

2019-03-22  Simon Fraser  <simon.fraser@apple.com>

        Fix internal builds.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (stringForSSLProtocol):

2019-03-22  Keith Rollin  <krollin@apple.com>

        Enable ThinLTO support in Production builds
        https://bugs.webkit.org/show_bug.cgi?id=190758
        <rdar://problem/45413233>

        Reviewed by Daniel Bates.

        Enable building with Thin LTO in Production when using Xcode 10.2 or
        later. This change results in a 1.45% progression in PLT5. Full
        Production build times increase about 2-3%. Incremental build times
        are more severely affected, and so LTO is not enabled for local
        engineering builds.

        LTO is enabled only on macOS for now, until rdar://problem/49013399,
        which affects ARM builds, is fixed.

        To change the LTO setting when building locally:

        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
          command line.
        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
          on the command line.
        - If building with `build-root`, specify --lto={none,thin,full} on the
          command line.
        - If building with Xcode, create a LocalOverrides.xcconfig file at the
          top level of your repository directory (if needed) and define
          WK_LTO_MODE to full, thin, or none.

        * Configurations/Base.xcconfig:

2019-03-22  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r243388.

        * WebProcess/WebProcess.h:

2019-03-22  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Fix sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=196153
        <rdar://problem/49123855>

        Reviewed by Brent Fulgham.

        The sandbox on macOS is blocking the mach lookup.

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

2019-03-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix the build with recent SDKs.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (stringForSSLProtocol):

2019-03-22  Chris Dumez  <cdumez@apple.com>

        Implement WebProcess freezer opt-in completely on WebContent process side
        https://bugs.webkit.org/show_bug.cgi?id=196149

        Reviewed by Brady Eidson.

        Implement WebProcess freezer opt-in completely on WebContent process side, we do not need
        to involve the UIProcess with this and rely on IPC which may be fragile.

        In the future, we may want to set freezable state from the UIProcess when the API supports
        it. We can move the logic to be fully on the UIProcess side then. In the mean time, it is
        likely best not to rely on IPC and process coordination for this.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::globalPageMap):
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::setIsInProcessCache):
        (WebKit::WebProcessProxy::markIsNoLongerInPrewarmedPool):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::validateFreezerStatus): Deleted.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::removeProvisionalPageProxy):
        (WebKit::WebProcessProxy::WebPageProxyMap::WebPageProxyMap): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::size const): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::values): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::values const): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::begin): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::end): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::get): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::contains const): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::isEmpty const): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::set): Deleted.
        (WebKit::WebProcessProxy::WebPageProxyMap::take): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setIsInProcessCache):
        (WebKit::WebProcess::markIsNoLongerPrewarmed):
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::setFreezable): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateProcessName):
        (WebKit::WebProcess::shouldFreezeOnSuspension const):
        (WebKit::WebProcess::updateFreezerStatus):

2019-03-22  Chris Dumez  <cdumez@apple.com>

        Prewarmed processes should be usable with any website data store
        https://bugs.webkit.org/show_bug.cgi?id=196104

        Reviewed by Alex Christensen.

        Split WebsiteDataStore-specific data out of WebProcessCreationParameters and into a new
        WebProcessDataStoreParameters struct so that we do not need a WebsiteDataStore in order
        to lauch and initialize a WebProcess. When the process finally gets used and we thus
        know which WebsiteDataStore they will be used for, we send the WebProcessDataStoreParameters
        to the process to that it can do its data store-specific initialization.

        This allows prewarmed processes not not have a WebsiteDataStore assocated with them. They
        can then be used for any WebsiteDataStore when we need them.

        This is also used by our dummy WebProcessProxy since it does not have a backing process and
        thus has no associated WebsiteDataStore.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebProcessDataStoreParameters.h: Added.
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextWarmInitialProcess):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _warmInitialProcess]):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::notifyProcessPoolToPrewarm):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::sendWebProcessDataStoreParameters):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::prewarmProcess):
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToOneProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::setWebsiteDataStore):
        (WebKit::WebProcessProxy::addExistingWebPage):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::websiteDataStore const):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::setWebsiteDataStore):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/WebProcessSupplement.h:
        (WebKit::WebProcessSupplement::initialize):
        (WebKit::WebProcessSupplement::setWebsiteDataStore):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):

2019-03-22  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r242687): Flicker when pinch-zooming pages in macOS Safari
        https://bugs.webkit.org/show_bug.cgi?id=196126
        rdar://problem/49095791

        Reviewed by Antti Koivisto.

        The scrolling tree doesn't have an accurate picture of the main view's scroll position
        during pinch-zooming, so don't have it apply layer positions if a transient zoom is
        in progress.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):

2019-03-22  Antti Koivisto  <antti@apple.com>

        Handle UI side hit testing for ScrollPositioningBehavior::Stationary positioned nodes
        https://bugs.webkit.org/show_bug.cgi?id=196100
        <rdar://problem/49117933>

        Reviewed by Simon Fraser.

        Test: fast/scrolling/ios/overflow-scroll-overlap-6.html

        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        (WebKit::RemoteLayerTreeNode::relatedScrollContainerIDs const):
        (WebKit::RemoteLayerTreeNode::relatedScrollContainerPositioningBehavior const):

        Make more generic and save the associated positioning behavior.

        (WebKit::RemoteLayerTreeNode::nonAncestorScrollContainerIDs const): Deleted.
        (WebKit::RemoteLayerTreeNode::addNonAncestorScrollContainerID): Deleted.
        (WebKit::RemoteLayerTreeNode::clearNonAncestorScrollContainerIDs): Deleted.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (WebKit::RemoteLayerTreeNode::setRelatedScrollContainerBehaviorAndIDs):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::isScrolledBy):

        Stationary relationship means the layer won't scroll the scroller.

        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations):

2019-03-22  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r243094): ePub files do not render or open in Books
        https://bugs.webkit.org/show_bug.cgi?id=196119
        <rdar://problem/49121686>

        Reviewed by Brady Eidson.

        Do not delay the WebProcess launch until a load when contructing a web view and the client
        may observe when its injected bundle is loaded via WKProcessGroupDelegate's
        didCreateConnectionToWebProcessPlugIn.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup setDelegate:]):
        * UIProcess/WebInspectorUtilities.cpp:
        (WebKit::inspectorProcessPool):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessPool.h:

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

        REGRESSION(r243094): Automation: browser crash in WebAutomationSession::exitFullscreenWindowForPage()
        https://bugs.webkit.org/show_bug.cgi?id=196140

        Reviewed by Chris Dumez.

        Since r243094, the WebPageProxy fullscreen manager is not created in the constructor, but once the page has a
        process launched.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::exitFullscreenWindowForPage): Null check WebPageProxy::fullScreenManager() before
        using it.

2019-03-22  Timothy Hatcher  <timothy@apple.com>

        Change macosx() to macos() in WK_API... and JSC_API... macros.
        https://bugs.webkit.org/show_bug.cgi?id=196106

        Reviewed by Brian Burg.

        * Shared/API/Cocoa/WKBrowsingContextHandle.h:
        * Shared/API/Cocoa/WKDragDestinationAction.h:
        * Shared/API/Cocoa/WKMain.h:
        * Shared/API/Cocoa/_WKFrameHandle.h:
        * Shared/API/Cocoa/_WKHitTestResult.h:
        * Shared/API/Cocoa/_WKNSWindowExtras.h:
        * Shared/API/Cocoa/_WKRemoteObjectInterface.h:
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.h:
        * Shared/API/Cocoa/_WKRenderingProgressEvents.h:
        * Shared/API/Cocoa/_WKSameDocumentNavigationType.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/Cocoa/NSAttributedString.h:
        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h:
        * UIProcess/API/Cocoa/WKContentRuleList.h:
        * UIProcess/API/Cocoa/WKContentRuleListStore.h:
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKErrorPrivate.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKFrameInfoPrivate.h:
        * UIProcess/API/Cocoa/WKHTTPCookieStore.h:
        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h:
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKOpenPanelParameters.h:
        * UIProcess/API/Cocoa/WKOpenPanelParametersPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKSecurityOrigin.h:
        * UIProcess/API/Cocoa/WKSnapshotConfiguration.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKURLSchemeHandler.h:
        * UIProcess/API/Cocoa/WKURLSchemeTask.h:
        * UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/API/Cocoa/WKUserScript.h:
        * UIProcess/API/Cocoa/WKUserScriptPrivate.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/WKWindowFeaturesPrivate.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAutomationDelegate.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionConfiguration.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownloadDelegate.h:
        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKExperimentalFeature.h:
        * UIProcess/API/Cocoa/_WKFindOptions.h:
        * UIProcess/API/Cocoa/_WKFocusedElementInfo.h:
        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/API/Cocoa/_WKFullscreenDelegate.h:
        * UIProcess/API/Cocoa/_WKGeolocationCoreLocationProvider.h:
        * UIProcess/API/Cocoa/_WKInspector.h:
        * UIProcess/API/Cocoa/_WKInspectorWindow.h:
        * UIProcess/API/Cocoa/_WKInternalDebugFeature.h:
        * UIProcess/API/Cocoa/_WKLayoutMode.h:
        * UIProcess/API/Cocoa/_WKLinkIconParameters.h:
        * UIProcess/API/Cocoa/_WKOverlayScrollbarStyle.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h:
        * UIProcess/API/Cocoa/_WKSessionState.h:
        * UIProcess/API/Cocoa/_WKTextInputContext.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.h:
        * UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h:
        * UIProcess/API/Cocoa/_WKUserContentWorld.h:
        * UIProcess/API/Cocoa/_WKUserInitiatedAction.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataSize.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreDelegate.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * WebProcess/API/Cocoa/WKWebProcess.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInEditingDelegate.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMText.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

2019-03-22  Yousuke Kimoto  <Yousuke.Kimoto@sony.com>

        Unreviewed build fix.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:

2019-03-22  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r243354
        https://bugs.webkit.org/show_bug.cgi?id=196138
        <rdar://problem/49145951>

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/DocumentEditingContext.mm:
        (WebKit::DocumentEditingContext::toPlatformContext):
        * UIProcess/ios/WKContentViewInteraction.mm:

2019-03-21  Simon Fraser  <simon.fraser@apple.com>

        Clean up some TiledCoreAnimationDrawingArea members
        https://bugs.webkit.org/show_bug.cgi?id=196124

        Reviewed by Tim Horton.

        The giant m_transform was unused.
        
        Group the bools etc.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):

2019-03-21  Brady Eidson  <beidson@apple.com>

        Certain WebProcesses should opt-out of the freezer.
        <rdar://problem/42846139> and https://bugs.webkit.org/show_bug.cgi?id=196062

        Reviewed by Andy Estes.

        WebProcesses should opt-in and opt-out of the freezer as is appropriate.
        By default a WebProcess is freezer eligible.
        If any of the following become true then it should become ineligible:
        - The WebProcess is a pre-warmed process.
        - The WebProcess is in the process cache.
        - The WebProcess is not actively hosting any web pages (e.g. it only has suspending web pages)

        The most complicated part of the above is guaranteeing that any operation that changes
        the active pages hosted by the process causes a recalculation of the freezer opt-in state.

        To do that this replaces the basic WebPageProxyMap with a custom class.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::globalPageMap):
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::validateFreezerStatus):
        (WebKit::WebProcessProxy::setIsInProcessCache):
        (WebKit::WebProcessProxy::markIsNoLongerInPrewarmedPool):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::WebPageProxyMap::WebPageProxyMap):
        (WebKit::WebProcessProxy::WebPageProxyMap::size const):
        (WebKit::WebProcessProxy::WebPageProxyMap::values):
        (WebKit::WebProcessProxy::WebPageProxyMap::values const):
        (WebKit::WebProcessProxy::WebPageProxyMap::begin):
        (WebKit::WebProcessProxy::WebPageProxyMap::end):
        (WebKit::WebProcessProxy::WebPageProxyMap::get):
        (WebKit::WebProcessProxy::WebPageProxyMap::contains const):
        (WebKit::WebProcessProxy::WebPageProxyMap::isEmpty const):
        (WebKit::WebProcessProxy::WebPageProxyMap::set):
        (WebKit::WebProcessProxy::WebPageProxyMap::take):

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setFreezable):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-03-21  Tim Horton  <timothy_horton@apple.com>

        Adopt UIWKDocumentContext
        https://bugs.webkit.org/show_bug.cgi?id=196040
        <rdar://problem/48642440>

        Reviewed by Ryosuke Niwa.

        * Platform/spi/ios/UIKitSPI.h:
        * Scripts/webkit/messages.py:
        * Shared/DocumentEditingContext.h: Added.
        * Shared/DocumentEditingContext.mm: Added.
        (WebKit::toNSRange):
        (WebKit::DocumentEditingContext::toPlatformContext):
        (IPC::ArgumentCoder<WebKit::DocumentEditingContext::Range>::encode):
        (IPC::ArgumentCoder<WebKit::DocumentEditingContext::Range>::decode):
        (IPC::ArgumentCoder<WebKit::DocumentEditingContext::TextRect>::encode):
        (IPC::ArgumentCoder<WebKit::DocumentEditingContext::TextRect>::decode):
        (IPC::ArgumentCoder<WebKit::DocumentEditingContext>::encode):
        (IPC::ArgumentCoder<WebKit::DocumentEditingContext>::decode):
        (IPC::ArgumentCoder<WebKit::DocumentEditingContextRequest>::encode):
        (IPC::ArgumentCoder<WebKit::DocumentEditingContextRequest>::decode):
        Add DocumentEditingContext(Request), and coders.
        Also expose DocumentEditingContext::toPlatformContext, which populates
        a UIWKDocumentContext with the relevant values.

        * SourcesCocoa.txt:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toWebDocumentRequestOptions):
        (toWebRequest):
        (-[WKContentView adjustSelectionWithDelta:completionHandler:]):
        (-[WKContentView requestDocumentContext:completionHandler:]):
        (-[WKContentView selectPositionAtPoint:withContextRequest:completionHandler:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::adjustSelectionWithDelta):
        (WebKit::WebPageProxy::requestDocumentEditingContext):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Plumb DocumentEditingContext(Request) around.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::adjustSelectionWithDelta):
        Adjust the current selection given deltas to apply to the location and length.

        (WebKit::visiblePositionAdjacentToVisiblePosition):
        (WebKit::visiblePositionForPointInRootViewCoordinates):
        (WebKit::WebPage::requestDocumentEditingContext):
        Retrieve the relevant part of the selection, as well as the context,
        given either the selection, or a rect.
        If we're collecting context for a rect, we split the context between
        before and after (except for the part that intersects the selection).
        The three strings will always be directly adjacent, and any of the three
        can sometimes be null.

2019-03-21  James Magahern  <jmagahern@apple.com>

        Long press gesture recognizers in WKWebView are conflicting with internal scroll view long press gesture recognizers
        https://bugs.webkit.org/show_bug.cgi?id=195726
        rdar://problem/48582449

        Reviewed by Megan Gardner.

        We just need to add another clause to WKContentViewInteraction's
        canPreventGestureRecognizer whitelist. 

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:canPreventGestureRecognizer:]):

2019-03-21  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Turn on async overflow scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=196011
        rdar://problem/48453859

        Reviewed by Antti Koivisto.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Remove last use of LegacySync IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=196113

        Reviewed by Chris Dumez.

        Also rename "Delayed" to "Synchronous" now that there's only one type of synchronous message.

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::syncTerminateWorkerFromClient):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchMessage):
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessageSynchronous):
        (IPC::handleMessageSynchronousWantsConnection):
        (IPC::handleMessageLegacySync): Deleted.
        (IPC::handleMessageDelayed): Deleted.
        (IPC::handleMessageDelayedWantsConnection): Deleted.
        * PluginProcess/PluginControllerProxy.messages.in:
        * PluginProcess/WebProcessConnection.messages.in:
        * Scripts/webkit/LegacyMessageReceiver-expected.cpp:
        (WebKit::WebPage::didReceiveSyncWebPageMessage):
        * Scripts/webkit/MessageReceiver-expected.cpp:
        (WebKit::WebPage::didReceiveSyncMessage):
        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp:
        (Messages::WebPage::TestSyncMessage::send):
        (Messages::WebPage::TestSynchronousMessage::send):
        (WebKit::WebPage::didReceiveSyncMessage):
        (Messages::WebPage::TestDelayedMessage::send): Deleted.
        * Scripts/webkit/MessagesSuperclass-expected.h:
        (Messages::WebPage::TestSynchronousMessage::name):
        (Messages::WebPage::TestSynchronousMessage::TestSynchronousMessage):
        (Messages::WebPage::TestDelayedMessage::receiverName): Deleted.
        (Messages::WebPage::TestDelayedMessage::name): Deleted.
        (Messages::WebPage::TestDelayedMessage::TestDelayedMessage): Deleted.
        (Messages::WebPage::TestDelayedMessage::arguments const): Deleted.
        * Scripts/webkit/messages.py:
        * Scripts/webkit/messages_unittest.py:
        * Scripts/webkit/test-legacy-messages.in:
        * Scripts/webkit/test-messages.in:
        * Scripts/webkit/test-superclass-messages.in:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/WebFullScreenManagerProxy.messages.in:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/WebProcessPool.messages.in:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/WebStorage/StorageManager.messages.in:
        * UIProcess/mac/SecItemShimProxy.messages.in:
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        * WebProcess/Plugins/PluginProxy.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::syncTerminateWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.messages.in:

2019-03-21  Brian Burg  <bburg@apple.com>

        Web Automation: support uploading non-local file paths
        https://bugs.webkit.org/show_bug.cgi?id=196081
        <rdar://problem/45819897>

        Reviewed by Devin Rousso and Joseph Pecoraro.

        To support cases where supplied file paths do not exist on the session host, add support for
        receiving file contents via Automation.setFilesToSelectForFileUpload.

        * UIProcess/Automation/Automation.json: Add new parameter.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::setFilesToSelectForFileUpload):
        Add support for receiving and saving file contents to a temporary directory. Rewrite the used paths so
        that WebCore knows to look at the revised paths where the file contents have been saved.

        (WebKit::WebAutomationSession::platformGenerateLocalFilePathForRemoteFile):
        Since WebKit does not have usable FileSystem implementations for all ports, shell out the actual
        saving of base64-encoded file data. Provide a Cocoa implementation, since that's what I can test.

        * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformGenerateLocalFilePathForRemoteFile):
        Use WTF::FileSystem to create a temporary directory, and use Cocoa methods to actually write the file.

2019-03-21  Youenn Fablet  <youenn@apple.com>

        Cache API and IDB space usages should be initialized on first quota check
        https://bugs.webkit.org/show_bug.cgi?id=195707

        Reviewed by Chris Dumez.

        When the quota manager is created, make sure it delays quota check decisions until IDB and Cache API quota users are initialized.
        For IDB, the creation is synchronous but it may not be synchronous for Cache API.
        For that purpose, add a temporary quota user that will stay uninitialized until these two quota users are added.
        Once added, the temporary quota user is removed.
        The addition of the real users is made asynchronously as this is triggered by the creation of one of the two quota users.

        In the case of a Cache API caches being cleared, make sure to reset the size to zero and to redo the quota user initialization dance.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::QuotaUserInitializer::initialize):
        (WebKit::QuotaUserInitializer::~QuotaUserInitializer):
        (WebKit::QuotaUserInitializer::QuotaUserInitializer):
        (WebKit::NetworkProcess::storageQuotaManager):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::initializeQuotaUser):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::clear):

2019-03-21  Per Arne Vollan  <pvollan@apple.com>

        [iOS][macOS] Fix sandbox call violations
        https://bugs.webkit.org/show_bug.cgi?id=195809
        <rdar://problem/48829655>

        Reviewed by Brent Fulgham.

        An additional syscall needs to be added to the sandbox allow list.

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

2019-03-21  Eric Carlson  <eric.carlson@apple.com>

        Add UI process WebRTC runtime logging.
        https://bugs.webkit.org/show_bug.cgi?id=196020
        <rdar://problem/49071443>

        Reviewed by Youenn Fablet.

        * Platform/Logging.cpp:
        (WebKit::getLogChannel): New.
        * Platform/Logging.h:
        * Shared/WebCoreArgumentCoders.h: Add coders for WTFLogChannelState and WTFLogLevel.

        Add runtime logging.
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::UserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaPermissionRequestManagerProxy::stopCapture):
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::clearCachedState):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManagerProxy::resetAccess):
        (WebKit::UserMediaPermissionRequestManagerProxy::grantAccess):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionInvalidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionValidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::computeFilteredDeviceList):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::captureStateChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::watchdogTimerFired):
        (WebKit::UserMediaPermissionRequestManagerProxy::logChannel const):
        (WebKit::convertEnumerationToString):

        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        (WTF::LogArgument<WebKit::UserMediaPermissionRequestManagerProxy::RequestAction>::toString):
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::convertEnumerationToString): Add an enum specialization for logging.

        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WTF::LogArgument<WebKit::UserMediaPermissionRequestProxy::UserMediaAccessDenialReason>::toString): Ditto.

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

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::configureLoggingChannel):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::configureLoggingChannel):
        * WebProcess/WebPage/WebPage.h:

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Stop using LegacySync messages in WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=196056

        Reviewed by Chris Dumez.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::loadRecentSearches):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::backForwardGoToItem):
        (WebKit::ProvisionalPageProxy::didReceiveSyncMessage):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleSynchronousMessage):
        (WebKit::WebPageProxy::hasInsecureContent):
        (WebKit::WebPageProxy::accessibilityScreenToRootView):
        (WebKit::WebPageProxy::rootViewToAccessibilityScreen):
        (WebKit::WebPageProxy::printFrame):
        (WebKit::WebPageProxy::backForwardGoToItem):
        (WebKit::WebPageProxy::backForwardGoToItemShared):
        (WebKit::WebPageProxy::backForwardItemAtIndex):
        (WebKit::WebPageProxy::backForwardBackListCount):
        (WebKit::WebPageProxy::backForwardForwardListCount):
        (WebKit::WebPageProxy::canUndoRedo):
        (WebKit::WebPageProxy::executeUndoRedo):
        (WebKit::WebPageProxy::checkTextOfParagraph):
        (WebKit::WebPageProxy::checkSpellingOfString):
        (WebKit::WebPageProxy::checkGrammarOfString):
        (WebKit::WebPageProxy::spellingUIIsShowing):
        (WebKit::WebPageProxy::getGuessesForWord):
        (WebKit::WebPageProxy::substitutionsPanelIsShowing):
        (WebKit::WebPageProxy::showCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanelSoon):
        (WebKit::WebPageProxy::recordAutocorrectionResponse):
        (WebKit::WebPageProxy::dictationAlternatives):
        (WebKit::WebPageProxy::wrapCryptoKey):
        (WebKit::WebPageProxy::unwrapCryptoKey):
        (WebKit::WebPageProxy::signedPublicKeyAndChallengeString):
        (WebKit::WebPageProxy::serializedAttachmentDataForIdentifiers):
        (WebKit::WebPageProxy::speechSynthesisVoiceList):
        (WebKit::WebPageProxy::printMainFrame): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::createPluginContainer):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::interpretKeyEvent):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getIsSpeaking):
        (WebKit::WebPageProxy::executeSavedCommandBySelector):
        (WebKit::WebPageProxy::showPDFContextMenu):

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Stop using LegacySync messages in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=196057

        Reviewed by Chris Dumez.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::markLayersVolatile):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::getCenterForZoomGesture):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::readSelectionFromPasteboard):
        (WebKit::WebPage::getStringSelectionForPasteboard):
        (WebKit::WebPage::getDataSelectionForPasteboard):
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::replaceSelectionWithPasteboardData):
        (WebKit::WebPage::readSelectionFromPasteboard):
        (WebKit::WebPage::getStringSelectionForPasteboard):
        (WebKit::WebPage::getDataSelectionForPasteboard):
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Stop using LegacySync messages in WebPasteboardProxy
        https://bugs.webkit.org/show_bug.cgi?id=196060

        Reviewed by Chris Dumez.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardTypes):
        (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType):
        (WebKit::WebPasteboardProxy::getPasteboardStringForType):
        (WebKit::WebPasteboardProxy::getPasteboardStringsForType):
        (WebKit::WebPasteboardProxy::getPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::pasteboardCopy):
        (WebKit::WebPasteboardProxy::getPasteboardChangeCount):
        (WebKit::WebPasteboardProxy::getPasteboardUniqueName):
        (WebKit::WebPasteboardProxy::getPasteboardColor):
        (WebKit::WebPasteboardProxy::getPasteboardURL):
        (WebKit::WebPasteboardProxy::addPasteboardTypes):
        (WebKit::WebPasteboardProxy::setPasteboardTypes):
        (WebKit::WebPasteboardProxy::setPasteboardURL):
        (WebKit::WebPasteboardProxy::setPasteboardColor):
        (WebKit::WebPasteboardProxy::setPasteboardStringForType):
        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::getNumberOfFiles):
        (WebKit::WebPasteboardProxy::typesSafeForDOMToReadAndWrite):
        (WebKit::WebPasteboardProxy::writeCustomData):
        (WebKit::WebPasteboardProxy::readStringFromPasteboard):
        (WebKit::WebPasteboardProxy::readURLFromPasteboard):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        (WebKit::WebPasteboardProxy::getPasteboardItemsCount):
        (WebKit::WebPasteboardProxy::allPasteboardItemInfo):
        (WebKit::WebPasteboardProxy::informationForItemAtIndex):
        * UIProcess/WebPasteboardProxy.cpp:
        (WebKit::WebPasteboardProxy::typesSafeForDOMToReadAndWrite):
        (WebKit::WebPasteboardProxy::writeCustomData):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        (WebKit::WebPasteboardProxy::writeToClipboard):
        (WebKit::WebPasteboardProxy::readFromClipboard):
        * UIProcess/wpe/WebPasteboardProxyWPE.cpp:
        (WebKit::WebPasteboardProxy::getPasteboardTypes):
        (WebKit::WebPasteboardProxy::readStringFromPasteboard):
        (WebKit::WebPasteboardProxy::writeWebContentToPasteboard):
        (WebKit::WebPasteboardProxy::writeStringToPasteboard):

2019-03-21  Andy Estes  <aestes@apple.com>

        [iOS] Apple Pay should be available in documents with no user agent scripts
        https://bugs.webkit.org/show_bug.cgi?id=196061
        <rdar://problem/48649391>

        Reviewed by Brady Eidson.

        * Shared/AuxiliaryProcess.h:
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::parentProcessHasEntitlement):

        Added a convenience function for checking parent process entitlements.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):

        Enabled Apple Pay by default on platforms that enable APPLE_PAY_REMOTE_UI.

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::supportsUnrestrictedApplePay const):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

        Implemented supportsUnrestrictedApplePay by checking for the
        com.apple.private.WebKit.UnrestrictedApplePay entitlement on platforms that enable
        APPLE_PAY_REMOTE_UI.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didClearWindowObjectForFrame):
        (setUpPageLoaderClient):

        Added injected bundle SPI that TestWebKitAPI uses to inject the WebCore Internals interface.

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

        Changed to call ScriptController::executeUserAgentScriptInWorld.

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

        WebKit should throw when trying to create a WKWebView with a related view that is using a different data store
        https://bugs.webkit.org/show_bug.cgi?id=196041
        <rdar://problem/49083230>

        Reviewed by Alex Christensen.

        WebKit should throw when trying to create a WKWebView with a related view that is using a different data store.
        We do not support having several WebsiteDataStores sharing the same WebProcess.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform applications of WKContentRuleList actions
        https://bugs.webkit.org/show_bug.cgi?id=195965
        <rdar://problem/42664365>

        Reviewed by Geoff Garen.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::processContentRuleListsForLoad):
        (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad): Deleted.
        * NetworkProcess/NetworkLoadChecker.h:
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::contentRuleListNotification):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::contentRuleListNotification):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contentRuleListNotification):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentRuleListNotification):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2019-03-21  Simon Fraser  <simon.fraser@apple.com>

        Add an internal feature flag to disable the -webkit-overflow-scrolling CSS property
        https://bugs.webkit.org/show_bug.cgi?id=196058
        rdar://problem/49078202

        Reviewed by Antti Koivisto.

        Add an internal feature flag called "LegacyOverflowScrollingTouchEnabled", initially
        on by default.

        * Shared/WebPreferences.yaml:

2019-03-21  Antti Koivisto  <antti@apple.com>

        UI-process hit-testing needs to know about containing block relationships
        https://bugs.webkit.org/show_bug.cgi?id=195845
        <rdar://problem/48949633>

        Reviewed by Simon Fraser.

        Test: fast/scrolling/ios/overflow-scroll-overlap-5.html

        When an overflow scroller contains a positioned element the element may not be on a descendant layer of the scroller,
        yet should move along with it. This needs to be taken into account in UI-side hit testing.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        (WebKit::RemoteLayerTreeNode::nonAncestorScrollContainerIDs const):
        (WebKit::RemoteLayerTreeNode::addNonAncestorScrollContainerID):
        (WebKit::RemoteLayerTreeNode::clearNonAncestorScrollContainerIDs):

        Maintain non-ancestor scrolling relationships for layers.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::commitScrollingTreeState):
        (WebKit::RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::isScrolledBy):

        Helper to figure out who scrolls who.

        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations):

        After commit, pull the non-ancestor scrolling relationships from the scrolling tree and update the layer tree.

2019-03-21  Daniel Bates  <dabates@apple.com>

        [iOS] Inline -_ensureFormAccessoryView into -formAccessoryView and have -_updateAccessory ensure we have a form accessory
        https://bugs.webkit.org/show_bug.cgi?id=196021

        Reviewed by Wenson Hsieh.

        Every caller of -_ensureFormAccessoryView, except -formAccessoryView, immediately follows the call
        with a call to -_updateAccessory. Let's just have -_updateAccessory ensure we have a form accessory
        view and inline the implementation of -_ensureFormAccessoryView into -formAccessoryView so we can
        remove one method.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputView]): Remove call to -_ensureFormAccessoryView, -_updateAccessory will do
        the equivalent work for us.
        (-[WKContentView formAccessoryView]): Moved implementation of -_ensureFormAccessoryView into here.
        (-[WKContentView _updateAccessory]): Call self.formAccessoryView to ensure we have a form accessory view.
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        Remove call to -_ensureFormAccessoryView, -_updateAccessory will do
        the equivalent work for us.
        (-[WKContentView _ensureFormAccessoryView]): Deleted.

2019-03-21  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r243250.

        Causing 109 Failures and 2 crashes on iOS Sim Debug
        OpenSource/Internal queues

        Reverted changeset:

        "[iOS WK2] Turn on async overflow scrolling by default"
        https://bugs.webkit.org/show_bug.cgi?id=196011
        https://trac.webkit.org/changeset/243250

2019-03-21  Brent Fulgham  <bfulgham@apple.com>

        Fix possible memory leak when dismissing a color picker
        https://bugs.webkit.org/show_bug.cgi?id=196026
        <rdar://problem/48778568>

        Reviewed by Wenson Hsieh.

        Fix a problem with WebPageProxy::endColorPicker where an early return could leave a color picker
        with a +1 reference count after dismissing it.

        * UIProcess/WebColorPicker.cpp:
        (WebKit::WebColorPicker::endPicker):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::endColorPicker):
        (WebKit::WebPageProxy::didEndColorPicker):

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

        [GTK][WPE] Add API to provide geolocation information
        https://bugs.webkit.org/show_bug.cgi?id=195940

        Reviewed by Michael Catanzaro.

        Add WebKitGeolocationManager public class to handle geolocation position updates. WebKitGeolocationProvider has
        been removed and the default implementation based on GeoClue is done by WebKitGeolocationManager.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitGeolocationManager.cpp: Added.
        (_WebKitGeolocationPosition::_WebKitGeolocationPosition):
        (webkit_geolocation_position_new):
        (webkit_geolocation_position_copy):
        (webkit_geolocation_position_free):
        (webkit_geolocation_position_set_timestamp):
        (webkit_geolocation_position_set_altitude):
        (webkit_geolocation_position_set_altitude_accuracy):
        (webkit_geolocation_position_set_heading):
        (webkit_geolocation_position_set_speed):
        (webkitGeolocationManagerStop):
        (webkitGeolocationManagerSetEnableHighAccuracy):
        (webkitGeolocationManagerCreate):
        (webkitGeolocationManagerGetProperty):
        (webkit_geolocation_manager_class_init):
        (webkit_gelocation_manager_update_position):
        (webkit_gelocation_manager_failed):
        (webkit_geolocation_manager_get_enable_high_accuracy):
        * UIProcess/API/glib/WebKitGeolocationManagerPrivate.h: Copied from Source/WebCore/platform/geoclue/GeolocationProviderGeoclueClient.h.
        * UIProcess/API/glib/WebKitGeolocationProvider.cpp: Removed.
        * UIProcess/API/glib/WebKitGeolocationProvider.h: Removed.
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed): Create a WebKitGeolocationManager instead of a WebKitGeolocationProvider.
        (webkit_web_context_get_geolocation_manager): Get the WebKitGeolocationManager.
        * UIProcess/API/gtk/WebKitGeolocationManager.h: Added.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * 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:
        * UIProcess/API/wpe/WebKitGeolocationManager.h: Added.
        * UIProcess/API/wpe/WebKitWebContext.h:
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt:
        * UIProcess/API/wpe/docs/wpe-docs.sgml:
        * UIProcess/API/wpe/webkit.h:

2019-03-20  Youenn Fablet  <youenn@apple.com>

        Compute quota after network process restart based on default quota and space used
        https://bugs.webkit.org/show_bug.cgi?id=195804

        Reviewed by Chris Dumez.

        Make sure that Cache Storage quota user waits to declare as initialized to its manager
        until all data is loaded so that it can report a valid space used from the start.

        Add test API to reset the quota to its default value and compute it according current space use.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::create):
        (WebKit::CacheStorage::Caches::Caches):
        (WebKit::CacheStorage::Caches::whenInitialized):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:
        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::dereference):
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        (WebKit::WebCacheStorageConnection::setQuotaBasedOnSpaceUsage):
        * WebProcess/Cache/WebCacheStorageConnection.h:

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
        https://bugs.webkit.org/show_bug.cgi?id=196049

        Reviewed by Tim Horton.

        This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
        overflow scrolling in general, so rename it.

        * Configurations/FeatureDefines.xcconfig:

2019-03-20  Jiewen Tan  <jiewen_tan@apple.com>

        Extend Networking Process sandbox for some system frameworks
        https://bugs.webkit.org/show_bug.cgi?id=196036
        <rdar://problem/47594150>

        Reviewed by Brent Fulgham.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:

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

        Reduce use of LegacySync IPC message type
        https://bugs.webkit.org/show_bug.cgi?id=194835

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::getNetworkLoadInformationRequest):
        (WebKit::NetworkConnectionToWebProcess::getNetworkLoadInformationResponse):
        (WebKit::NetworkConnectionToWebProcess::getNetworkLoadIntermediateInformation):
        (WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationMetrics):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManagerProxy::capabilities):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::launchProcess):
        (WebKit::PluginProcessProxy::launchApplicationAtURL):
        (WebKit::PluginProcessProxy::openURL):
        (WebKit::PluginProcessProxy::openFile):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebFullScreenManagerProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::fetchWebsiteData):
        (WebKit::WebProcess::deleteWebsiteData):
        (WebKit::WebProcess::deleteWebsiteDataForOrigins):
        (WebKit::WebProcess::processWillSuspendImminently):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-03-20  Keith Rollin  <krollin@apple.com>

        Update checks that determine if WebKit is system WebKit
        https://bugs.webkit.org/show_bug.cgi?id=195756

        Unreviewed tweak of r243251 after unreviewed build fix after r243230.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::AuxiliaryProcess::isSystemWebKit):

2019-03-20  Keith Rollin  <krollin@apple.com>

        Update checks that determine if WebKit is system WebKit
        https://bugs.webkit.org/show_bug.cgi?id=195756

        Unreviewed build fix after r243230.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::AuxiliaryProcess::isSystemWebKit):

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Turn on async overflow scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=196011
        rdar://problem/48453859

        Reviewed by Antti Koivisto.

        Turn async overflow scroll on by default for iOS WK2.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2019-03-20  Youenn Fablet  <youenn@apple.com>

        Have smaller default quotas for third party frames
        https://bugs.webkit.org/show_bug.cgi?id=195841

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::storageQuotaManager):
        For third party iframes, use the default quota divided by 10.

2019-03-20  Dean Jackson  <dino@apple.com>

        [iOS] Enable fast clicking everywhere
        https://bugs.webkit.org/show_bug.cgi?id=196023
        <rdar://problem/49073589>

        Reviewed by Wenson Hsieh.

        Set FastClicksEverywhere to on by default for iPhone & iPad.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2019-03-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): ViewGestureController is not properly notified of process swaps on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196029
        <rdar://problem/48954651>

        Reviewed by Tim Horton.

        If there is a ViewGestureController when process swapping, make sure we disconnect it
        from the old process and reconnect it to the new one. This matches what is done in
        WebViewImpl for macOS (see r238356).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processWillSwap]):
        (-[WKWebView _processDidExit]):
        (-[WKWebView _didRelaunchProcess]):

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

        [GTK] REGRESSION(r243094): crash when launching minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=195951

        Reviewed by Joseph Pecoraro.

        Always return the inspector from WebPageProxy::inspector() when the page hasn't been closed. The inspector is
        created in WebPageProxy constructor and it's safe to use even before a process has been launched, because
        m_inspectedPage is null-checked everywhere.

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

2019-03-20  Keith Rollin  <krollin@apple.com>

        Update checks that determine if WebKit is system WebKit
        https://bugs.webkit.org/show_bug.cgi?id=195756

        Reviewed by Alexey Proskuryakov.

        The system WebKit can be installed in additional locations, so check
        for and allow those, too.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::AuxiliaryProcess::isSystemWebKit):

2019-03-20  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Unable to PiP web videos in Safari due to sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=196015
        <rdar://problem/48867037>

        Reviewed by Brent Fulgham.

        The sandbox should allow getting the iokit property 'ui-pip'.

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

2019-03-20  John Wilander  <wilander@apple.com>

        (Test fix) Override minimumTimeBetweenDataRecordsRemoval in ResourceLoadStatisticsStore::shouldRemoveDataRecord() during layout tests
        https://bugs.webkit.org/show_bug.cgi?id=196017

        Unreviewed test fix.

        This patch adds a check of parameters().isRunningTest to the return of
        ResourceLoadStatisticsStore::shouldRemoveDataRecord() to allow successive
        layout tests to remove website data, effectively overriding the
        minimumTimeBetweenDataRecordsRemoval setting.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::shouldRemoveDataRecords const):

2019-03-20  Daniel Bates  <dabates@apple.com>

        [iOS] Group UIWebFormAccessoryDelegate-related code and tighten it up a bit
        https://bugs.webkit.org/show_bug.cgi?id=196018

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessoryClear]): Use uniform initializer syntax. Code could send the empty
        string, but I resisted since null string, as we do now, likely encodes more compactly and we
        avoid a per-process alloc.
        (-[WKContentView accessoryTab:]): Fix style nit; missing space between capture list and arguments
        in lambda. Also use lamdba capture initializer syntax and remove a local.
        (-[WKContentView _updateAccessory]): Remove a FIXME as it can't be satified with the current
        design without more bookkeeping. The design for showing and hiding an AutoFill button added in
        r166933 requires knowing the title for the button when showing it via -setAccessoryViewCustomButtonTitle.
        We could re-implement such that -setAccessoryViewCustomButtonTitle: stores the title and calls
        -_updateAccessory, but that has the disadvantage of increasing the memory footprint of WKContentView
        for the stored title and that seems worse than centralizing the logic in _updateAccessory. So,
        let's not fix this FIXME. Now that we are removing the FIXME, change to use an early return style.
        (-[WKContentView _hideKeyboard]): Micro optimization; only call _updateAccessory if we have
        a form accessory view. This method is called everytime we load a page (more precisely when we
        commit the load for a page) in addition to everytime we blur (defocus) an element. No need to
        update an accessory if we don't have one.
 
2019-03-20  Olivier Robin  <olivierrobin@chromium.org>

        Fix _getContentsAsAttributedStringWithCompletionHandler availability for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=195999

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2019-03-20  Brent Fulgham  <bfulgham@apple.com>

        Adopt RegistrableDomain in the Storage Access API prompt code paths
        https://bugs.webkit.org/show_bug.cgi?id=195957
        <rdar://problem/49048028>

        Reviewed by Chris Dumez.

        While making the code changes in Bug 195866 we noticed that strings were being
        used to pass the origins for the API calls. We should adopt the RegistrableDomain
        class to improve type safety and avoid introducing bugs in the future.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::requestStorageAccessConfirm):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::requestStorageAccessConfirm):
        * UIProcess/Cocoa/WKStorageAccessAlert.h:
        * UIProcess/Cocoa/WKStorageAccessAlert.mm:
        (WebKit::presentStorageAccessAlert):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestStorageAccessConfirm):

2019-03-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix typo in comment added in r243156.

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

2019-03-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, drop invalid assertions landed in r243163.

        Those assertions were causing some API tests to crash.
        Also include some post-review suggestions from Darin.

        * Shared/CallbackID.h:
        (WebKit::CallbackID::operator=):
        * Shared/OptionalCallbackID.h:
        (WebKit::OptionalCallbackID::operator=):

2019-03-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix assertion failures in API tests after r243159.

        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::removeProcess):

2019-03-20  Tim Horton  <timothy_horton@apple.com>

        Add an platform-driven spell-checking mechanism
        https://bugs.webkit.org/show_bug.cgi?id=195795

        Reviewed by Ryosuke Niwa.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/TextCheckingController.h: Added.
        * UIProcess/Cocoa/TextCheckingController.mm: Added.
        (WebKit::TextCheckingController::TextCheckingController):
        (WebKit::TextCheckingController::replaceRelativeToSelection):
        (WebKit::TextCheckingController::removeAnnotationRelativeToSelection):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView replaceSelectionOffset:length:withAnnotatedString:relativeReplacementRange:]):
        (-[WKContentView removeAnnotation:forSelectionOffset:length:]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::textCheckingController):
        Plumb two UITextInput methods through to the Web Content process.
        I added a new object instead of just sticking things on WebPage
        because there are quite a few more related ones coming down the pipeline,
        and will also end up being messages going in the opposite direction.

        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.h: Added.
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.messages.in: Added.
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm: Added.
        (WebKit::TextCheckingControllerProxy::TextCheckingControllerProxy):
        (WebKit::TextCheckingControllerProxy::~TextCheckingControllerProxy):
        (WebKit::relevantMarkerTypes):
        (WebKit::TextCheckingControllerProxy::rangeAndOffsetRelativeToSelection):
        (WebKit::TextCheckingControllerProxy::replaceRelativeToSelection):
        (WebKit::TextCheckingControllerProxy::removeAnnotationRelativeToSelection):
        Make it possible for the platform to maintain arbitrary key-value pairs
        attached to document ranges, as a way for it to keep track of various
        text checking context (e.g. if something has been checked, replaced,
        what language it might be, ...).

        Allow it to replace the text of a range and the annotations in that range,
        or remove annotations in a range. Ranges are specified relative to
        the selection.

        One large missing piece is giving the platform the ability to retrieve
        annotations in a range; that is coming in a future patch.

        We translate certain annotations into traditional WebCore spelling
        and grammar document markers, for normal display-time treatment.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject convertScreenPointToRootView:]):
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):
        Unified sources fixes.

2019-03-19  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement FIDO AppID extension
        https://bugs.webkit.org/show_bug.cgi?id=143491
        <rdar://problem/48298273>

        Reviewed by Brent Fulgham.

        In U2fHidAuthenticator::continueSignCommandAfterResponseReceived, it will retry the current command
        with the AppID if it exists when SW_WRONG_DATA is received from devices. Noted, it will not set
        the AuthenticationExtensionsClientOutputs::appid to false in any circumstances. In other words, the
        field will be empty if AppID is supplied in AuthenticationExtensionsClientInputs and not used.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserConsented):
        * UIProcess/WebAuthentication/fido/U2fHidAuthenticator.cpp:
        (WebKit::U2fHidAuthenticator::issueSignCommand):
        (WebKit::U2fHidAuthenticator::continueSignCommandAfterResponseReceived):
        * UIProcess/WebAuthentication/fido/U2fHidAuthenticator.h:

2019-03-19  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed adjustment to r242842 per Darin's request.

        * Platform/win/LoggingWin.cpp:
        (WebKit::logLevelString):

2019-03-19  Gyuyoung Kim  <gyuyoung.kim@lge.com>

        [WPE] Fix build warnings because of missing an argument when initializing wpe_input_axis_event
        https://bugs.webkit.org/show_bug.cgi?id=195931

        Reviewed by Michael Catanzaro.

        There are still build warnings when building wpe port. It looks like
        these build warnings have been caused by missing to set an argument
        for the modifier parameter of wpe_input_axis_event. This patch sets 0
        for the modifier argument to avoid the build warnings.

        * UIProcess/API/wpe/ScrollGestureController.cpp:
        (WebKit::ScrollGestureController::handleEvent):

2019-03-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Clear non-cookie website data for sites that have been navigated to, with link decoration, by a prevalent resource
        https://bugs.webkit.org/show_bug.cgi?id=195923
        <rdar://problem/49001272>

        Reviewed by Alex Christensen.

        Cross-site trackers abuse link query parameters to transport user identifiers and then store
        them in first-party storage space. To address this, we've done three things:
        - r236448 capped all persistent client-side cookies to seven days of storage.
        - r242288 further capped persistent client-side cookies for navigations with link decoration from prevalent resources.
        - r242603 added logging of navigations with link decoration from prevalent resources.

        This patch introduces an experimental feature that removes non-cookie website data for sites
        that have been navigated to, with link decoration, by a prevalent resource.

        To achieve this, resource domains to remove website data for are now marked with an enum called
        WebsiteDataToRemove with values All, AllButHttpOnlyCookies, AllButCookies. As resources are
        iterated, they are marked for either of these values and the new function
        ResourceLoadStatisticsMemoryStore::shouldRemoveAllButCookiesFor() leads to the marking with
        WebsiteDataToRemove::AllButCookies.

        Then NetworkProcess::deleteWebsiteDataForRegistrableDomains() looks at this setting and removes
        website data accordingly.

        The thinking behind this is that the lifetime cap applied in r236448 and r242288 take care of
        script writable cookies, and this patch takes care of all other script writable storage.

        The infrastructure to handle user interaction expiration is now parameterized so that multiple
        expiries can be applied. In this particular case, seven days of browser use.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllWebsiteDataFor const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllButCookiesFor const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToRemoveWebsiteDataFor):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasHadUnexpiredRecentUserInteraction const):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveAllWebsiteDataFor const):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveAllButCookiesFor const):
        (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToRemoveWebsiteDataFor):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::domainsToString):
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsStore::statisticsEpirationTime const):
        (WebKit::ResourceLoadStatisticsStore::mergeOperatingDates):
        (WebKit::ResourceLoadStatisticsStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsStore::hasStatisticsExpired const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForRegistrableDomains):
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores): Deleted.
           Renamed to reflect that it actually takes a parameter for which types of data to remove.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setCrossSiteLoadWithLinkDecorationForTesting):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::deleteCookiesForTesting):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores): Deleted.
           Renamed to reflect that it actually takes a parameter for which types of data to remove.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkSession::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores): Deleted.
           Renamed to reflect that it actually takes a parameter for which types of data to remove.
        * NetworkProcess/NetworkSession.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsCrossSiteLoadWithLinkDecoration):
        (WKWebsiteDataStoreSetStatisticsTimeToLiveUserInteraction):
        (WKWebsiteDataStoreStatisticsProcessStatisticsAndDataRecords):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setCrossSiteLoadWithLinkDecorationForTesting):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setCrossSiteLoadWithLinkDecorationForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2019-03-19  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r243173.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::requestStorageAccessConfirm):

2019-03-19  Brent Fulgham  <bfulgham@apple.com>

        Add default prompt implementation for the Storage Access API
        https://bugs.webkit.org/show_bug.cgi?id=195866
        <rdar://problem/45150009>

        Reviewed by Chris Dumez.

        This patch revises the UIDelegate implementation with a default permission dialog
        for the Storage Access API. This allows us to use and test the API in MiniBrowser,
        rather than requiring a full-fledged web browser to drive testing.
 
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::presentStorageAccessConfirmDialog): Added.
        (WebKit::UIDelegate::UIClient::requestStorageAccessConfirm): Modify to call new default
        implementation if the WKWebVIew client doesn't implement the necessary SPI.
        * UIProcess/Cocoa/WKStorageAccessAlert.h: Added.
        * UIProcess/Cocoa/WKStorageAccessAlert.mm: Added.
        (WebKit::presentStorageAccessAlert):
        * WebKit.xcodeproj/project.pbxproj:

2019-03-19  Conrad Shultz  <conrad_shultz@apple.com>

        REGRESSION (r242369): Only use picker-supported UTIs when creating image picker
        https://bugs.webkit.org/show_bug.cgi?id=195955

        Reviewed by Chris Dumez and Wenson Hsieh.

        r242369 started passing UTIs to -[UIImagePickerController setMediaTypes:] that correspond to types accepted by the
        file input element. However, UIImagePickerController expects a specific subset of UTIs. In the worst case, if no
        expected types are passed, this can cause a crash.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (UTIsForMIMETypes):
        Return a set rather than an array.
        (-[WKFileUploadPanel _mediaTypesForPickerSourceType:]):
        Rather than hardcode specific UTIs, ask UIImagePickerController for its available types. If an accepted type
        is in the list of available types, use it. Otherwise, if an accepted type conforms to an available type,
        use the available type. This is an O(n^2) process, but there typically are only a handful of types, so
        this seems acceptable.
        (-[WKFileUploadPanel _showDocumentPickerMenu]):
        Convert the set from UTIsForMIMETypes() to an array.

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Build cleanly with GCC 9
        https://bugs.webkit.org/show_bug.cgi?id=195920

        Reviewed by Chris Dumez.

        WebKit triggers three new GCC 9 warnings:

        """
        -Wdeprecated-copy, implied by -Wextra, warns about the C++11 deprecation of implicitly
        declared copy constructor and assignment operator if one of them is user-provided.
        """

        Solution is to either add a copy constructor or copy assignment operator, if required, or
        else remove one if it is redundant.

        """
        -Wredundant-move, implied by -Wextra, warns about redundant calls to std::move.
        -Wpessimizing-move, implied by -Wall, warns when a call to std::move prevents copy elision.
        """

        These account for most of this patch. Solution is to just remove the bad WTFMove().

        Additionally, -Wclass-memaccess has been enhanced to catch a few cases that GCC 8 didn't.
        These are solved by casting nontrivial types to void* before using memcpy. (Of course, it
        would be safer to not use memcpy on nontrivial types, but that's too complex for this
        patch. Searching for memcpy used with static_cast<void*> will reveal other cases to fix.)

        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::decode):
        * Platform/IPC/ArgumentCoders.h:
        * Shared/CallbackID.h:
        (WebKit::CallbackID::operator=):
        * Shared/OptionalCallbackID.h:
        (WebKit::OptionalCallbackID::operator=):
        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::decode):
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::decode):
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::getOrCreate):
        * Shared/RTCNetwork.cpp:
        (WebKit::RTCNetwork::IPAddress::decode):
        * Shared/SessionState.cpp:
        (WebKit::HTTPBody::Element::decode):
        (WebKit::FrameState::decode):
        (WebKit::BackForwardListItemState::decode):
        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::decode):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FloatPoint>::decode):
        (IPC::ArgumentCoder<FloatRect>::decode):
        (IPC::ArgumentCoder<FloatQuad>::decode):
        (IPC::ArgumentCoder<ViewportArguments>::decode):
        (IPC::ArgumentCoder<IntPoint>::decode):
        (IPC::ArgumentCoder<IntRect>::decode):
        (IPC::ArgumentCoder<IntSize>::decode):
        (IPC::ArgumentCoder<MimeClassInfo>::decode):
        (IPC::ArgumentCoder<PluginInfo>::decode):
        (IPC::ArgumentCoder<SelectionRect>::decode):
        (IPC::ArgumentCoder<CompositionUnderline>::decode):
        (IPC::ArgumentCoder<BlobPart>::decode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
        (IPC::ArgumentCoder<ScrollOffsetRange<float>>::decode):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPlatformTouchPoint.cpp:
        (WebKit::WebPlatformTouchPoint::decode):
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::Entry::decode):
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::decode):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::decodeContentRuleListMetaData):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcessForReload):
        (WebKit::WebPageProxy::launchProcessWithItem):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::reload):
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::takeProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::findReusableSuspendedPageProcess):
        * WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.cpp:
        (WebKit::InjectedBundleCSSStyleDeclarationHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::create):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::tryLoadingSynchronouslyUsingURLSchemeHandler):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::createGraphicsLayer):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pdfSnapshotAtSize):
        (WebKit::WebPage::createDocumentLoader):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::copy):

2019-03-19  Chris Dumez  <cdumez@apple.com>

        Spew: Unhandled web process message 'VisitedLinkTableController:VisitedLinkStateChanged'
        https://bugs.webkit.org/show_bug.cgi?id=194787
        <rdar://problem/48175520>

        Reviewed by Geoff Garen.

        The unhandled 'VisitedLinkTableController:VisitedLinkStateChanged' message logging happens
        when IPC is sent to a WebProcess which does not have a VisitedLinkTableController with the
        given identifier. VisitedLinkTableController are kept alive by the WebPage in the WebProcess
        side so this indicates that there is no WebPage using this VisitedLinkTableController anymore.

        In the UIProcess side, our tracking of who is using which VisitedLinkStore was very poor.
        WebPageProxy objects would ask their process to register itself with the page's visitedLinkStore
        as soon as the WebPage object has been created on the WebProcess side. This part was fine.
        However, unregistration from the visitedLinkStores would only happen when either the
        visitedLinkStore would get destroyed or when the WebProcess would shutdown. This means that
        WebProcess could stay registered with a visitedLinkStore even after the page that was using it
        has been closed, which would lead to such logging.

        To address the issue, the WebProcessProxy now keeps track for which pages are using which
        visitedLinkStore. When a visitedLinkStore is used by a page for the first time, the
        WebProcessProxy will register itself with the visitedLinkStore. Similarly, when the last page
        using a given visitedLinkStore is closed, the process unregisters itself from the
        visitedLinkStore, thus avoiding the bug.

        I also simplified a lot the logic for having a page telling the WebProcessProxy it started
        using a visitedLinkStore. Previously, it would have to wait until the process is done launching
        before notifying the WebProcessProxy. Now, the WebPageProxy merely tells the WebProcessProxy
        that it is starting to use a visitedLinkStore as soon as it sent the CreateWebPage IPC to the
        WebProcess (no matter if the process is still launching or not). At this point, the
        WebProcessProxy registers the page as a user of the visitedLinkStore and takes care of waiting
        until it is done launching before registering itself with the visitedLinkStore.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::initializeWebPage):
        (WebKit::ProvisionalPageProxy::processDidFinishLaunching): Deleted.
        (WebKit::ProvisionalPageProxy::finishInitializingWebPageAfterProcessLaunch): Deleted.
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::~VisitedLinkStore):
        (WebKit::VisitedLinkStore::addProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::finishInitializingWebPageAfterProcessLaunch): Deleted.
        (WebKit::WebPageProxy::processDidFinishLaunching): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::addVisitedLinkStoreUser):
        (WebKit::WebProcessProxy::removeVisitedLinkStoreUser):
        (WebKit::WebProcessProxy::addWebUserContentControllerProxy):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::addVisitedLinkStore): Deleted.
        (WebKit::WebProcessProxy::didDestroyVisitedLinkStore): Deleted.
        * UIProcess/WebProcessProxy.h:

2019-03-19  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r243094): internal media test fairplay-hls-error.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=195954
        <rdar://problem/49005981>

        Reviewed by Geoffrey Garen.

        TestController::resetStateToConsistentValues() tries to send a "reset" message to its
        injected bundle. Part of the "reset" message sets the external hosts that we're allowed
        to load. If there is no WebProcess yet when WKPagePostMessageToInjectedBundle() is called,
        then this message does not get sent and the allowed hosts do not get set, causing this
        test failure.

        To address the issue, make sure we launch the initial process if necessary when
        WebPageProxy::postMessageToInjectedBundle() is called, in order to maintain backward
        compatibility.

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

2019-03-19  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r243142.

        Caused assertion hits in WK2 Debug

        Reverted changeset:

        "Spew: Unhandled web process message
        'VisitedLinkTableController:VisitedLinkStateChanged'"
        https://bugs.webkit.org/show_bug.cgi?id=194787
        https://trac.webkit.org/changeset/243142

2019-03-19  Daniel Bates  <dabates@apple.com>

        [iOS] Focus not preserved when switching between tabs
        https://bugs.webkit.org/show_bug.cgi?id=195820
        <rdar://problem/43614450>

        Reviewed by Brent Fulgham.

        Fixes a usability annoyance when using a hardware keyboard; focus is not preserved when switching between tabs.
        Do not unconditionally tell the WebProcess to blur the currently focused element when the content view (WKContentView)
        resigns first responder. Instead only tell it to blur when the content view is resigning because either the
        accessory view was dismissed (Done button was pressed) or the keyboard was dismissed (the hide keyboard button
        was pressed).

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm: Add new ivar to track whether the content view is resigning
        first responder status because the accessory view is being dismissed.
        (-[WKContentView resignFirstResponderForWebView]): Only tell WebKit to blur the focused element if we are
        resigning because the accessory view is being dismissed or the keyboard was hidden. We continue to do all
        other steps when resigning, including hiding the keyboard. Note that by not telling WebKit to blur the
        focused element we let it's focus controller manage the focused element with respect to the current
        page activation state (i.e. whether the content view is first responder or not). When the content view
        becomes the first responder then WebKit's focus controller will be told that the page has become activated
        and will tell the UIProcess to focus the currently focused element, which will bring up the keyboard.
        (-[WKContentView accessoryDone]): Update state so we know that a subsequent call to resign first responder
        was due to the accessory view being dismissed.

2019-03-19  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Remove overridden rules in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=193840
        <rdar://problem/47558526>

        Reviewed by Brent Fulgham.

        On iOS, there are some rules overridden in the same sandbox file. The overridden rules
        should be removed.

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

2019-03-19  Timothy Hatcher  <timothy@apple.com>

        Make WebKit/NSAttributedString.h a public header.
        https://bugs.webkit.org/show_bug.cgi?id=195944

        Reviewed by Dean Jackson.

        * WebKit.xcodeproj/project.pbxproj:

2019-03-19  Chris Dumez  <cdumez@apple.com>

        Drop NetworkCacheStatistics code
        https://bugs.webkit.org/show_bug.cgi?id=195910

        Reviewed by Antti Koivisto.

        Drop NetworkCacheStatistics code. It was a temporary experiment and has not been used in a long time.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::Cache):
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::storeRedirect):
        (WebKit::NetworkCache::Cache::update):
        (WebKit::NetworkCache::Cache::clear):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp: Removed.
        * NetworkProcess/cache/NetworkCacheStatistics.h: Removed.
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::traverseRecordsFiles):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * Sources.txt:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebKit.xcodeproj/project.pbxproj:

2019-03-19  Chris Dumez  <cdumez@apple.com>

        Spew: Unhandled web process message 'VisitedLinkTableController:VisitedLinkStateChanged'
        https://bugs.webkit.org/show_bug.cgi?id=194787
        <rdar://problem/48175520>

        Reviewed by Geoffrey Garen.

        The unhandled 'VisitedLinkTableController:VisitedLinkStateChanged' message logging happens
        when IPC is sent to a WebProcess which does not have a VisitedLinkTableController with the
        given identifier. VisitedLinkTableController are kept alive by the WebPage in the WebProcess
        side so this indicates that there is no WebPage using this VisitedLinkTableController anymore.

        In the UIProcess side, our tracking of who is using which VisitedLinkStore was very poor.
        WebPageProxy objects would ask their process to register itself with the page's visitedLinkStore
        as soon as the WebPage object has been created on the WebProcess side. This part was fine.
        However, unregistration from the visitedLinkStores would only happen when either the
        visitedLinkStore would get destroyed or when the WebProcess would shutdown. This means that
        WebProcess could stay registered with a visitedLinkStore even after the page that was using it
        has been closed, which would lead to such logging.

        To address the issue, the WebProcessProxy now keeps track for which pages are using which
        visitedLinkStore. When a visitedLinkStore is used by a page for the first time, the
        WebProcessProxy will register itself with the visitedLinkStore. Similarly, when the last page
        using a given visitedLinkStore is closed, the process unregisters itself from the
        visitedLinkStore, thus avoiding the bug.

        I also simplified a lot the logic for having a page telling the WebProcessProxy it started
        using a visitedLinkStore. Previously, it would have to wait until the process is done launching
        before notifying the WebProcessProxy. Now, the WebPageProxy merely tells the WebProcessProxy
        that it is starting to use a visitedLinkStore as soon as it sent the CreateWebPage IPC to the
        WebProcess (no matter if the process is still launching or not). At this point, the
        WebProcessProxy registers the page as a user of the visitedLinkStore and takes care of waiting
        until it is done launching before registering itself with the visitedLinkStore.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::initializeWebPage):
        (WebKit::ProvisionalPageProxy::processDidFinishLaunching): Deleted.
        (WebKit::ProvisionalPageProxy::finishInitializingWebPageAfterProcessLaunch): Deleted.
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::~VisitedLinkStore):
        (WebKit::VisitedLinkStore::addProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::finishInitializingWebPageAfterProcessLaunch): Deleted.
        (WebKit::WebPageProxy::processDidFinishLaunching): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::addVisitedLinkStoreUser):
        (WebKit::WebProcessProxy::removeVisitedLinkStoreUser):
        (WebKit::WebProcessProxy::addWebUserContentControllerProxy):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::addVisitedLinkStore): Deleted.
        (WebKit::WebProcessProxy::didDestroyVisitedLinkStore): Deleted.
        * UIProcess/WebProcessProxy.h:

2019-03-19  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::logSpeculativeLoadingDiagnosticMessage):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r243132.

        Broke GTK build

        Reverted changeset:

        "Make WTFLogChannelState and WTFLogLevel enum classes"
        https://bugs.webkit.org/show_bug.cgi?id=195904
        https://trac.webkit.org/changeset/243132

2019-03-19  Antti Koivisto  <antti@apple.com>

        Layer with no backing store should still hit-test over a scroller
        https://bugs.webkit.org/show_bug.cgi?id=195378
        <rdar://problem/48652078>

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::collectDescendantViewsAtPoint):

        No need for special WKTiledBackingView, tiled views now have correct event regions.

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::logSpeculativeLoadingDiagnosticMessage):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):

2019-03-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243092 and r243096.
        https://bugs.webkit.org/show_bug.cgi?id=195926

        Caused assertions in tests (Requested by smfr on #webkit).

        Reverted changesets:

        "Layer with no backing store should still hit-test over a
        scroller"
        https://bugs.webkit.org/show_bug.cgi?id=195378
        https://trac.webkit.org/changeset/243092

        "Try to fix Windows build."
        https://trac.webkit.org/changeset/243096

2019-03-18  Timothy Hatcher  <timothy@apple.com>

        WKWebView.GetContentsShouldReturnAttributedString is crashing on iOS Simulator.
        https://bugs.webkit.org/show_bug.cgi?id=195916

        Reviewed by Tim Horton.

        Add direct support for UIColor so it does not try to use the NSSecureCoding path.
        This avoids needs to list the classes when decoding the attributes NSDictionary
        and matches the macOS NSColor encoder/decoder.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::typeFromObject):
        (IPC::encodeColorInternal):
        (IPC::decodeColorInternal):
        (IPC::encodeObject):
        (IPC::decodeObject):

2019-03-18  Timothy Hatcher  <timothy@apple.com>

        Add new NSAttributedString API for converting HTML.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h:
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/NSAttributedString.h: Added.
        * UIProcess/API/Cocoa/NSAttributedString.mm: Added.
        (-[_WKAttributedStringNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[_WKAttributedStringNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[_WKAttributedStringNavigationDelegate webView:didFailNavigation:withError:]):
        (-[_WKAttributedStringNavigationDelegate webView:didFinishNavigation:]):
        (+[_WKAttributedStringWebViewCache cache]):
        (+[_WKAttributedStringWebViewCache configuration]):
        (+[_WKAttributedStringWebViewCache clearConfiguration]):
        (+[_WKAttributedStringWebViewCache retrieveOrCreateWebView]):
        (+[_WKAttributedStringWebViewCache cacheWebView:]):
        (+[_WKAttributedStringWebViewCache resetPurgeDelay]):
        (+[_WKAttributedStringWebViewCache purgeSingleWebView]):
        (+[_WKAttributedStringWebViewCache purgeAllWebViews]):
        (+[NSAttributedString _loadFromHTMLWithOptions:contentLoader:completionHandler:]):
        (+[NSAttributedString loadFromHTMLWithRequest:options:completionHandler:]):
        (+[NSAttributedString loadFromHTMLWithFileURL:options:completionHandler:]):
        (+[NSAttributedString loadFromHTMLWithString:options:completionHandler:]):
        (+[NSAttributedString loadFromHTMLWithData:options:completionHandler:]):
        * UIProcess/API/Cocoa/NSAttributedStringPrivate.h: Copied from Source/WebKit/UIProcess/API/Cocoa/WKErrorInternal.h.
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKError.mm:
        (localizedDescriptionForErrorCode):
        (createNSError):
        * UIProcess/API/Cocoa/WKErrorInternal.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::getContentsAsAttributedString):

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Implement DownloadMonitor to prevent long-running slow downloads from background apps
        https://bugs.webkit.org/show_bug.cgi?id=195785

        Reviewed by Geoffrey Garen.

        This is similar to what was updated in <rdar://problem/42677685> but for WebKit Downloads.
        To test it I implemented a throttled TCP server, SPI to speed up DownloadMonitor's timer,
        and SPI to synthesize the application going into the background and foreground, which
        NSNotificationCenter does on iOS.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::applicationEnteredBackground):
        (WebKit::Download::applicationEnteredForeground):
        (WebKit::Download::manager const):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::downloadFinished):
        (WebKit::DownloadManager::applicationDidEnterBackground):
        (WebKit::DownloadManager::applicationWillEnterForeground):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/DownloadMap.cpp:
        (WebKit::DownloadMap::values):
        * NetworkProcess/Downloads/DownloadMap.h:
        * NetworkProcess/Downloads/DownloadMonitor.cpp: Added.
        (WebKit::operator _kbps):
        (WebKit::timeUntilNextInterval):
        (WebKit::DownloadMonitor::DownloadMonitor):
        (WebKit::DownloadMonitor::measuredThroughputRate const):
        (WebKit::DownloadMonitor::downloadReceivedBytes):
        (WebKit::DownloadMonitor::applicationEnteredForeground):
        (WebKit::DownloadMonitor::applicationEnteredBackground):
        (WebKit::DownloadMonitor::speedMultiplier const):
        (WebKit::DownloadMonitor::timerFired):
        * NetworkProcess/Downloads/DownloadMonitor.h: Added.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::applicationDidEnterBackground):
        (WebKit::NetworkProcess::applicationWillEnterForeground):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextDownloadURLRequest):
        (WKContextResumeDownload):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _synthesizeAppIsBackground:]):
        (-[WKProcessPool _downloadURLRequest:originatingWebView:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration downloadMonitorSpeedMultiplier]):
        (-[_WKProcessPoolConfiguration setDownloadMonitorSpeedMultiplier:]):
        * UIProcess/Cocoa/DownloadProxyMapCocoa.mm: Added.
        (WebKit::DownloadProxyMap::platformCreate):
        (WebKit::DownloadProxyMap::platformDestroy):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didFinish):
        (WebKit::DownloadProxy::didFail):
        (WebKit::DownloadProxy::didCancel):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::DownloadProxyMap):
        (WebKit::DownloadProxyMap::~DownloadProxyMap):
        (WebKit::DownloadProxyMap::platformCreate):
        (WebKit::DownloadProxyMap::platformDestroy):
        (WebKit::DownloadProxyMap::applicationDidEnterBackground):
        (WebKit::DownloadProxyMap::applicationWillEnterForeground):
        (WebKit::DownloadProxyMap::createDownloadProxy):
        (WebKit::DownloadProxyMap::downloadFinished):
        * UIProcess/Downloads/DownloadProxyMap.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::synthesizeAppIsBackground):
        (WebKit::NetworkProcessProxy::createDownloadProxy):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::handleDownloadRequest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        (WebKit::WebProcessPool::resumeDownload):
        (WebKit::WebProcessPool::createDownloadProxy):
        (WebKit::WebProcessPool::synthesizeAppIsBackground):
        * UIProcess/WebProcessPool.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * WebKit.xcodeproj/project.pbxproj:

2019-03-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Native selection views sometimes appear in hidden editable areas after losing focus
        https://bugs.webkit.org/show_bug.cgi?id=195894
        <rdar://problem/48849989>

        Reviewed by Tim Horton.

        On certain websites, focus is moved away from an editable element while maintaining a selection inside the
        editable element. In the case where the editable element is hidden, this currently breaks our text interaction
        suppression heuristics, which suppress text selection gestures and overlays inside focused hidden editable
        elements. To fix this, we refactor our text interaction suppression heuristics, such that they are not dependent
        on an editable element being focused. See changes below for more details.

        Test: editing/selection/ios/hide-selection-in-non-focused-element.html

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:

        Rename elementIsTransparentOrFullyClipped to editableRootIsTransparentOrFullyClipped, and additionally compute
        this flag by checking whether the root editable element containing the selection is transparent or clipped,
        instead of using the currently focused element.

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

        Remove the elementIsTransparentOrFullyClipped flag from FocusedElementInformation (see below for more detail).

        * UIProcess/ios/WKContentViewInteraction.h:

        Rename FocusedElementIsTransparentOrFullyClipped to EditableRootIsTransparentOrFullyClipped.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _zoomToRevealFocusedElement]):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

        Remove logic that currently uses state on FocusedElementInformation to determine whether to suppress platform
        text interactions; instead, only use EditorState to make this determination. This logic was originally added in
        the initial implementation of the text interaction suppression heuristic as a way to begin suppressing text
        selection state before zooming to reveal the focused element; however, since we now zoom to reveal the text
        selection when focusing editable elements, zooming is deferred until the next complete EditorState update
        arrives in the UI process so we don't need to worry about beginning to suppress text interactions prior to this
        initial editor state update.

        (-[WKContentView _elementDidBlur]):
        (-[WKContentView _updateSelectionAssistantSuppressionState]):

        Add a helper method that updates text selection suppression state using the current EditorState.

        (-[WKContentView _selectionChanged]):
        (-[WKContentView _updateChangedSelection:]):

        Always update text suppression state when receiving an EditorState, instead of only doing so when processing a
        text selection gesture.

        (-[WKContentView _startSuppressingSelectionAssistantForReason:]):

        Renamed from _beginSuppressingSelectionAssistantForReason:, to better match "start/end" terminology of
        _endSuppressingSelectionAssistantForReason:.

        (-[WKContentView dropInteraction:performDrop:]):
        (-[WKContentView _beginSuppressingSelectionAssistantForReason:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::editorStateChanged):

        Ensure that we run logic to zoom to the focused element *after* updating text selection suppression state, so we
        don't erroneously zoom to reveal hidden editable elements.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::getFocusedElementInformation):

2019-03-18  Chris Dumez  <cdumez@apple.com>

        Delay WebProcess launch until a load is triggered in a Web view
        https://bugs.webkit.org/show_bug.cgi?id=195758
        <rdar://problem/48126013>

        Reviewed by Geoff Garen.

        This is achieved by constructing WebPageProxy objects with a WebProcessProxy that is in
        terminated state (because it never launched its process). This is convenient because
        it is a state that the WebPageProxy supports, which normally happened by the WebProcess
        crashes. When trying to do a load, we were already checking if the WebPageProxy's process
        was running (via an isValid() check) and we would re-launch the WebProcess if necessary
        by calling reattachToWebProcess(). For clarity, given that this state is no longer
        indicating that the WebProcess crashed, I renamed isValid() to hasRunningProcess() and
        reattachToWebProcess() to launchProcess().

        The reason delaying the WebProcess launch until the first load is useful is because it
        allows us to leverage the WebProcessCache given that we now know which registrable
        domain is going to be loaded in the process.

        This is a progression from a power usage standpoint. When it comes to page load time,
        it would be a progression if we found a suitable process in the cache. I do not expect
        a performance hit when no process is found in the cache because of process prewarming.

        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::m_launchInitialProcessIfNecessary):
        (WebKit::RemoteObjectRegistry::sendInvocation):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _processCacheSize]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isValid]):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::willShowJavaScriptDialog):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection):
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaProxyCoordinatedGraphics::sendUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::waitForAndDispatchDidUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::dispatchAfterEnsuringDrawing):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setViewExposedRect):
        (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision):
        * UIProcess/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::connect):
        (WebKit::InspectorTargetProxy::disconnect):
        (WebKit::InspectorTargetProxy::sendMessageToTargetBackend):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::sizeDidChange):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::captureStateChanged):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::ViewGestureController):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::~WebBackForwardList):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply):
        (WebKit::WebEditCommandProxy::reapply):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::stopLoading const):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::hasRunningProcess const):
        (WebKit::WebPageProxy::setUIClient):
        (WebKit::WebPageProxy::setIconLoadingClient):
        (WebKit::WebPageProxy::launchProcess):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::launchProcessForReload):
        (WebKit::WebPageProxy::launchProcessWithItem):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::tryRestoreScrollPosition):
        (WebKit::WebPageProxy::setControlledByAutomation):
        (WebKit::WebPageProxy::setIndicating):
        (WebKit::WebPageProxy::setBackgroundColor):
        (WebKit::WebPageProxy::setTopContentInset):
        (WebKit::WebPageProxy::setUnderlayColor):
        (WebKit::WebPageProxy::viewWillStartLiveResize):
        (WebKit::WebPageProxy::viewWillEndLiveResize):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        (WebKit::WebPageProxy::waitForDidUpdateActivityState):
        (WebKit::WebPageProxy::setInitialFocus):
        (WebKit::WebPageProxy::clearSelection):
        (WebKit::WebPageProxy::restoreSelectionInFocusedEditableElement):
        (WebKit::WebPageProxy::validateCommand):
        (WebKit::WebPageProxy::increaseListLevel):
        (WebKit::WebPageProxy::decreaseListLevel):
        (WebKit::WebPageProxy::changeListType):
        (WebKit::WebPageProxy::setBaseWritingDirection):
        (WebKit::WebPageProxy::setNeedsFontAttributes):
        (WebKit::WebPageProxy::executeEditCommand):
        (WebKit::WebPageProxy::requestFontAttributesAtSelectionStart):
        (WebKit::WebPageProxy::setEditable):
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::dragEnded):
        (WebKit::WebPageProxy::didStartDrag):
        (WebKit::WebPageProxy::dragCancelled):
        (WebKit::WebPageProxy::handleMouseEvent):
        (WebKit::WebPageProxy::processNextQueuedMouseEvent):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::handleGestureEvent):
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::handleTouchEventAsynchronously):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::scrollBy):
        (WebKit::WebPageProxy::centerSelectionInVisibleArea):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::setUserAgent):
        (WebKit::WebPageProxy::resumeActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::suspendActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::setCustomTextEncodingName):
        (WebKit::WebPageProxy::setTextZoomFactor):
        (WebKit::WebPageProxy::setPageZoomFactor):
        (WebKit::WebPageProxy::setPageAndTextZoomFactors):
        (WebKit::WebPageProxy::scalePage):
        (WebKit::WebPageProxy::scalePageInViewCoordinates):
        (WebKit::WebPageProxy::scaleView):
        (WebKit::WebPageProxy::windowScreenDidChange):
        (WebKit::WebPageProxy::setCustomDeviceScaleFactor):
        (WebKit::WebPageProxy::accessibilitySettingsDidChange):
        (WebKit::WebPageProxy::updateAccessibilityEventsEnabled):
        (WebKit::WebPageProxy::setUseFixedLayout):
        (WebKit::WebPageProxy::setFixedLayoutSize):
        (WebKit::WebPageProxy::setAlwaysShowsHorizontalScroller):
        (WebKit::WebPageProxy::setAlwaysShowsVerticalScroller):
        (WebKit::WebPageProxy::listenForLayoutMilestones):
        (WebKit::WebPageProxy::setSuppressScrollbarAnimations):
        (WebKit::WebPageProxy::setEnableVerticalRubberBanding):
        (WebKit::WebPageProxy::setEnableHorizontalRubberBanding):
        (WebKit::WebPageProxy::setBackgroundExtendsBeyondPage):
        (WebKit::WebPageProxy::setPaginationMode):
        (WebKit::WebPageProxy::setPaginationBehavesLikeColumns):
        (WebKit::WebPageProxy::setPageLength):
        (WebKit::WebPageProxy::setGapBetweenPages):
        (WebKit::WebPageProxy::setPaginationLineGridEnabled):
        (WebKit::WebPageProxy::countStringMatches):
        (WebKit::WebPageProxy::replaceMatches):
        (WebKit::WebPageProxy::launchInitialProcessIfNecessary):
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getContentsAsAttributedString):
        (WebKit::WebPageProxy::getBytecodeProfile):
        (WebKit::WebPageProxy::getSamplingProfilerOutput):
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::preferencesDidChange):
        (WebKit::WebPageProxy::setMediaVolume):
        (WebKit::WebPageProxy::setMuted):
        (WebKit::WebPageProxy::setMediaCaptureEnabled):
        (WebKit::WebPageProxy::stopMediaCapture):
        (WebKit::WebPageProxy::stopAllMediaPlayback):
        (WebKit::WebPageProxy::suspendAllMediaPlayback):
        (WebKit::WebPageProxy::resumeAllMediaPlayback):
        (WebKit::WebPageProxy::handleMediaEvent):
        (WebKit::WebPageProxy::setVolumeOfMediaElement):
        (WebKit::WebPageProxy::setMayStartMediaWhenInWindow):
        (WebKit::WebPageProxy::didChooseColor):
        (WebKit::WebPageProxy::didEndColorPicker):
        (WebKit::WebPageProxy::didSelectOption):
        (WebKit::WebPageProxy::inspector const):
        (WebKit::WebPageProxy::didChooseFilesForOpenPanelWithDisplayStringAndIcon):
        (WebKit::WebPageProxy::didChooseFilesForOpenPanel):
        (WebKit::WebPageProxy::didCancelForOpenPanel):
        (WebKit::WebPageProxy::removeEditCommand):
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        (WebKit::WebPageProxy::processDidTerminate):
        (WebKit::WebPageProxy::processWillBecomeSuspended):
        (WebKit::WebPageProxy::processWillBecomeForeground):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::setCanRunModal):
        (WebKit::WebPageProxy::canRunModal):
        (WebKit::WebPageProxy::computePagesForPrinting):
        (WebKit::WebPageProxy::drawRectToImage):
        (WebKit::WebPageProxy::drawPagesToPDF):
        (WebKit::WebPageProxy::drawPagesForPrinting):
        (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
        (WebKit::WebPageProxy::setViewLayoutSize):
        (WebKit::WebPageProxy::setAutoSizingShouldExpandToViewHeight):
        (WebKit::WebPageProxy::setViewportSizeForCSSViewportUnits):
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::cancelComposition):
        (WebKit::WebPageProxy::setScrollPinningBehavior):
        (WebKit::WebPageProxy::setOverlayScrollbarStyle):
        (WebKit::WebPageProxy::changeFontAttributes):
        (WebKit::WebPageProxy::changeFont):
        (WebKit::WebPageProxy::setTextAsync):
        (WebKit::WebPageProxy::insertTextAsync):
        (WebKit::WebPageProxy::getMarkedRangeAsync):
        (WebKit::WebPageProxy::getSelectedRangeAsync):
        (WebKit::WebPageProxy::characterIndexForPointAsync):
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync):
        (WebKit::WebPageProxy::setCompositionAsync):
        (WebKit::WebPageProxy::confirmCompositionAsync):
        (WebKit::WebPageProxy::takeSnapshot):
        (WebKit::WebPageProxy::requestActiveNowPlayingSessionInfo):
        (WebKit::WebPageProxy::setUseSystemAppearance):
        (WebKit::WebPageProxy::installActivityStateChangeCompletionHandler):
        (WebKit::WebPageProxy::setPlaybackTarget):
        (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange):
        (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget):
        (WebKit::WebPageProxy::clearWheelEventTestTrigger):
        (WebKit::WebPageProxy::callAfterNextPresentationUpdate):
        (WebKit::WebPageProxy::setShouldScaleViewToFitDocument):
        (WebKit::WebPageProxy::getLoadDecisionForIcon):
        (WebKit::WebPageProxy::setResourceCachingDisabled):
        (WebKit::WebPageProxy::setUserInterfaceLayoutDirection):
        (WebKit::WebPageProxy::effectiveAppearanceDidChange):
        (WebKit::WebPageProxy::insertAttachment):
        (WebKit::WebPageProxy::updateAttachmentAttributes):
        (WebKit::WebPageProxy::getApplicationManifest):
        (WebKit::WebPageProxy::textInputContextsInRect):
        (WebKit::WebPageProxy::focusTextInputContext):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::maybeShutDown):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp:
        (WebKit::InstallMissingMediaPluginsPermissionRequest::allow):
        (WebKit::InstallMissingMediaPluginsPermissionRequest::didEndRequestInstallMissingMediaPlugins):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformDetach):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _hoverGestureRecognizerChanged:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestFocusedElementInformation):
        (WebKit::WebPageProxy::updateVisibleContentRects):
        (WebKit::WebPageProxy::updateStringForFind):
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize):
        (WebKit::WebPageProxy::setForceAlwaysUserScalable):
        (WebKit::WebPageProxy::setMaximumUnobscuredSize):
        (WebKit::WebPageProxy::setDeviceOrientation):
        (WebKit::WebPageProxy::setOverrideViewportArguments):
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::updateSelectionWithTouches):
        (WebKit::WebPageProxy::requestAutocorrectionData):
        (WebKit::WebPageProxy::applyAutocorrection):
        (WebKit::WebPageProxy::selectTextWithGranularityAtPoint):
        (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::selectPositionAtPoint):
        (WebKit::WebPageProxy::beginSelectionInDirection):
        (WebKit::WebPageProxy::updateSelectionWithExtentPoint):
        (WebKit::WebPageProxy::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPageProxy::requestDictationContext):
        (WebKit::WebPageProxy::getSelectionContext):
        (WebKit::WebPageProxy::selectWithTwoTouches):
        (WebKit::WebPageProxy::requestRectsForGranularityWithSelectionOffset):
        (WebKit::WebPageProxy::requestRectsAtSelectionOffsetWithText):
        (WebKit::WebPageProxy::moveSelectionByOffset):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        (WebKit::WebPageProxy::focusNextFocusedElement):
        (WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF):
        (WebKit::WebPageProxy::requestEvasionRectsAboveSelection):
        (WebKit::WebPageProxy::requestDragStart):
        (WebKit::WebPageProxy::requestAdditionalItemsForDragSession):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::sizeDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::viewLayoutSizeDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        (WebKit::WebPageProxy::setMainFrameIsScrollable):
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::fontAtSelection):
        (WebKit::WebPageProxy::stringSelectionForPasteboard):
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        (WebKit::WebPageProxy::readSelectionFromPasteboard):
        (WebKit::WebPageProxy::sendComplexTextInputToPlugin):
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        (WebKit::WebPageProxy::acceptsFirstMouse):
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformDetach):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::cursorToShow const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_hostFileDescriptor):

2019-03-18  Antti Koivisto  <antti@apple.com>

        Layer with no backing store should still hit-test over a scroller
        https://bugs.webkit.org/show_bug.cgi?id=195378
        <rdar://problem/48652078>

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::collectDescendantViewsAtPoint):

        No need for special WKTiledBackingView, tiled views now have correct event regions.

2019-03-18  Daniel Bates  <dabates@apple.com>

        [iOS] No DOM keypress event emitted for cursor key commands when non-editable element is focused
        https://bugs.webkit.org/show_bug.cgi?id=195626
        <rdar://problem/48810626>

        Reviewed by Wenson Hsieh.

        Following the UIKit fix <rdar://problem/47333786> WebKit will be asked whether it can perform some
        more actions, including cursor movements and more editing actions. All such actions are only applicable
        to editable elements. By responding NO to UIKit for such actions when we are not in an editable element
        we avoid the need to do such bookkeeping ourselves as UIKit will forward our response back to us
        on return from -handleKeyTextCommandForCurrentEvent, called from -[WKContentView _interpretKeyEvent].
        WebKit is then in a position to try to handle the event or in the case of all standard text editing
        key commands at the time of writing (e.g. Control + a) tell WebCore that it did not handle the event
        so that WebCore can continue the DOM key event dispatch algorithm. For standard text editing key
        commands, such as Control + a, we will emit a DOM keypress event for the 'a'.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformAction:withSender:]):

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump public API to wpe-1.0
        https://bugs.webkit.org/show_bug.cgi?id=195887

        Reviewed by Philippe Normand.

        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt: Renamed from Source/WebKit/UIProcess/API/wpe/docs/wpe-0.1-sections.txt.
        * WebProcess/InjectedBundle/API/wpe/docs/wpe-webextensions-1.0-sections.txt: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/wpe/docs/wpe-webextensions-0.1-sections.txt.

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump dependencies to wpe-1.0 and wpebackend-fdo-1.0
        https://bugs.webkit.org/show_bug.cgi?id=195786

        Reviewed by Philippe Normand.

        * wpe/wpe-web-extension.pc.in: Change dependency to wpe-1.0
        * wpe/wpe-webkit.pc.in: Ditto.

2019-03-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [iOS] Block the accessibility server when accessibility is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=195342
        <rdar://problem/48615720>

        Unreviewed build fix for WinCairo.

        * Shared/SandboxExtension.h: Use ProcessID instead of pid_t.

2019-03-16  Dean Jackson  <dino@apple.com>

        ASSERT(gestureRecognizer == _doubleTapGestureRecognizer) in _doubleTapDidFail:
        https://bugs.webkit.org/show_bug.cgi?id=195857
        <rdar://problem/48954679>

        Reviewed by Wenson Hsieh.

        Reset an existing gesture recognizer before creating a new one.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createAndConfigureDoubleTapGestureRecognizer]):
        (-[WKContentView _setDoubleTapGesturesEnabled:]):

2019-03-16  Jer Noble  <jer.noble@apple.com>

        Add a new MediaCapabilitiesExtensionsEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=195843

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferences.yaml:

2019-03-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Software keyboard never appears when editing on some websites
        https://bugs.webkit.org/show_bug.cgi?id=195824
        <rdar://problem/48020610>

        Reviewed by Ryosuke Niwa.

        In the scenario where an element has already been programmatically focused but the UI process isn't showing an
        input view for it, there are a couple of different ways in which an input view may still be shown for that
        element:

        1. If the page attempts to programmatically focus the element, we'll invoke elementDidRefocus to recompute
        information about the focused element and propagate it to the UI process. By default, if programmatic focus was
        triggered under the scope of user interaction, we'll allow the input view to appear.

        2. In the case where page does not attempt to programmatically focus the element but a click is dispatched,
        there is logic in WebPage::completeSyntheticClick to send information about the already-focused element.

        On the web page relevant to this bug, focus is programmatically moved to hidden contenteditable areas upon page
        load, and touchstart is also prevented; furthermore, the page does not attempt to programmatically refocus the
        hidden editable area upon receiving touchstart. This means that the user will never be able to bring up the
        keyboard, since the editable area is already programmatically focused and subsequent attempts to tap in the
        page do nothing, because the page has already focused the hidden editable area (with the expectation that the
        software keyboard should already be present).

        To fix this, we bring some of the same logic in completeSyntheticClick over to dispatchTouchEvent, by sending
        focused element information to the UI process if the focused element did not change over the course of
        dispatching the touch event. Similar code was introduced in r167774 to fix the same type of issue (i.e.
        inability to bring up the software keyboard), but this was later reverted in r188405 due to causing bugs such as
        <rdar://problem/22204108>, wherein this logic to bring up the keyboard in dispatchTouchEvent would scroll and
        zoom the page, such that the click event fired after touchend would be dispatched in the wrong location and (in
        the case of <rdar://problem/22204108>) caused the focused element to immediately blur again.

        To mitigate this issue, we add the additional constraint that we only send focused element info in the case
        where the touch won't also generate a click later down the road, by requiring that the dispatched event was
        handled by the page (i.e. prevented).

        Test: fast/events/touch/ios/show-keyboard-after-preventing-touchstart.html

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

2019-03-16  Zalan Bujtas  <zalan@apple.com>

        Unable to close trending window on naver.com.
        https://bugs.webkit.org/show_bug.cgi?id=195842
        <rdar://problem/48067338>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::dispatchSyntheticMouseMove):
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver):

2019-03-16  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r242807): Unified sources build failure from missing imports.
        https://bugs.webkit.org/show_bug.cgi?id=195852

        Unreviewed speculative build fix.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        Include <wtf/SoftLinking.h> and "UIKitSPI.h" on iOS.

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Block the accessibility server when accessibility is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=195342

        Reviewed by Brent Fulgham.

        By default, block the iOS accessibility server in the sandbox. If accessibility is enabled,
        let the UI process issue a mach extension to the WebContent process. The UI process will
        issue the mach extension the the WebContent process by its process identifier. The sandbox
        extension handle is sent to the WebContent process to be consumed. The message will be sent
        when the WebProcess has finished launching, and also when accessibility is turned on.

        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/SandboxExtension.h:
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtensionImpl::create):
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::SandboxExtensionImpl::SandboxExtensionImpl):
        (WebKit::SandboxExtension::createHandleForMachLookupByPid):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::unblockAccessibilityServer):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-03-15  Timothy Hatcher  <timothy@apple.com>

        Unreviewed speculative build fix for non-Cocoa ports after r243012.

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

2019-03-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r243008.

        This revision broke High Sierra builders

        Reverted changeset:

        "[iOS] Block the accessibility server when accessibility is
        not enabled."
        https://bugs.webkit.org/show_bug.cgi?id=195342
        https://trac.webkit.org/changeset/243008

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        All networking from WebKit.Networking fails when Network Extension content filter is enabled
        https://bugs.webkit.org/show_bug.cgi?id=195815
        <rdar://problem/47598758>

        Reviewed by Brent Fulgham.

        The sandbox needs to allow an associated mach lookup.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:

2019-03-15  Sihui Liu  <sihui_liu@apple.com>

        [ Mojave WK1 ] Layout Test storage/indexeddb/database-odd-names.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=190350
        <rdar://problem/45089503>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::collectIndexedDatabaseOriginsForVersion):
        (WebKit::NetworkProcess::indexedDatabaseOrigins):
        * NetworkProcess/NetworkProcess.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::addSession):
        (WebKit::NetworkProcessProxy::createSymLinkForFileUpgrade): For efficientcy and atomicity, we choose to use
        symlink to create v0 folder. Because network process does not have the permission to create a symlink, we need 
        to do this in UI process. UI process would create v0 folder inside the IndexedDB directory if there isn't one.
        Also if there is a v0 directory but it doesn't have content, it means it's not a correct symlink and we need to 
        delete it and create again.

        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2019-03-15  Sihui Liu  <sihui_liu@apple.com>

        [ Mojave WK1 ] Layout Test storage/indexeddb/database-odd-names.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=190350
        <rdar://problem/45089503>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::collectIndexedDatabaseOriginsForVersion):
        (WebKit::NetworkProcess::indexedDatabaseOrigins):
        * NetworkProcess/NetworkProcess.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::addSession):
        (WebKit::NetworkProcessProxy::createSymLinkForFileUpgrade):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Restrict iokit-user-client-class "IOHIDLibUserClient" from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=195821
        <rdar://problem/47606250>

        Reviewed by Brent Fulgham.

        This should be removed from the WebContent sandbox on iOS.

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

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

        _WKDownload should conform to NSCopying protocol
        https://bugs.webkit.org/show_bug.cgi?id=195718

        Reviewed by Tim Horton.

        This will allow us to use it as keys in NSMutableDictionaries, which Safari already kind of does.

        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload copyWithZone:]):

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

        Provide an option for an always-on fast click mode in iOS
        https://bugs.webkit.org/show_bug.cgi?id=195822
        <rdar://problem/48939357>

        Reviewed by Sam Weinig.

        Add an option that will always trigger a click and never
        wait for a double tap to zoom. It is disabled by default.

        * Shared/WebPreferences.yaml:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:]):

2019-03-15  Timothy Hatcher  <timothy@apple.com>

        Add support to WebPage for getting the contents as an attributed string.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Tim Horton.

        * Shared/mac/AttributedString.h:
        (WebKit::AttributedString::AttributedString):
        * Shared/mac/AttributedString.mm:
        (IPC::ArgumentCoder<WebKit::AttributedString>::encode):
        (IPC::ArgumentCoder<WebKit::AttributedString>::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _getContentsAsAttributedStringWithCompletionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getContentsAsAttributedString):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::getContentsAsAttributedString):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=195387
        <rdar://problem/48442387>

        Reviewed by Brent Fulgham.

        The sandbox on iOS and macOS needs to allow mach lookup to the "com.apple.nesessionmanager.content-filter"
        mach service. Also, mach lookups to "com.apple.nehelper" should be allowed.

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

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

        [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
        https://bugs.webkit.org/show_bug.cgi?id=195747

        Reviewed by Geoff Garen.

        Make sure the WebProcessCache and the prewarmed process are used when relaunching a process
        after termination (e.g. crash).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::WebProcessPool::tryPrewarmWithDomainInformation):
        * UIProcess/WebProcessPool.h:

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Block the accessibility server when accessibility is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=195342

        Reviewed by Brent Fulgham.

        By default, block the iOS accessibility server in the sandbox. If accessibility is enabled,
        let the UI process issue a mach extension to the WebContent process. The UI process will
        issue the mach extension the the WebContent process by its process identifier. The sandbox
        extension handle is sent to the WebContent process to be consumed. The message will be sent
        when the WebProcess has finished launching, and also when accessibility is turned on.

        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/SandboxExtension.h:
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtensionImpl::create):
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::SandboxExtensionImpl::SandboxExtensionImpl):
        (WebKit::SandboxExtension::createHandleForMachLookupByPid):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::unblockAccessibilityServer):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-03-15  Antti Koivisto  <antti@apple.com>

        Use Region for event region even when it is a rectangle
        https://bugs.webkit.org/show_bug.cgi?id=195803

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode const):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        (WebKit::RemoteLayerTreeNode::eventRegion const):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (WebKit::RemoteLayerTreeNode::setEventRegion):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::collectDescendantViewsAtPoint):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::setEventRegion):
        (WebKit::PlatformCALayerRemote::eventRegion const): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:

2019-03-15  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r242952.

        Causing API failures on iOS Simulator

        Reverted changeset:

        "[PSON] Make sure the WebProcessCache is leverage when
        relaunching a process after termination"
        https://bugs.webkit.org/show_bug.cgi?id=195747
        https://trac.webkit.org/changeset/242952

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Broker access to Speech Synthesis
        https://bugs.webkit.org/show_bug.cgi?id=195645
        <rdar://problem/35369026>

        Reviewed by Brent Fulgham.

        To be able to close the connection to the speech synthesis daemon in the WebContent process,
        speech synthesis should be performed in the UI process. This patch forwards speech synthesis
        requests to the UI process by sending messages. On the UI process side, the speech synthesis
        is performed by simply using the existing platform speech synthesizer. Speech synthesis
        events are sent back to the WebContent process. All messages are async, except for the
        message to get the list of available voices.

        * Sources.txt:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::didStartSpeaking):
        (WebKit::WebPageProxy::didFinishSpeaking):
        (WebKit::WebPageProxy::didPauseSpeaking):
        (WebKit::WebPageProxy::didResumeSpeaking):
        (WebKit::WebPageProxy::speakingErrorOccurred):
        (WebKit::WebPageProxy::boundaryEventOccurred):
        (WebKit::WebPageProxy::voicesDidChange):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::ensureSpeechSynthesisData):
        (WebKit::WebPageProxy::speechSynthesisVoiceList):
        (WebKit::WebPageProxy::speechSynthesisSpeak):
        (WebKit::WebPageProxy::speechSynthesisCancel):
        (WebKit::WebPageProxy::speechSynthesisPause):
        (WebKit::WebPageProxy::speechSynthesisResume):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp: Added.
        (WebKit::WebSpeechSynthesisClient::voiceList):
        (WebKit::WebSpeechSynthesisClient::speak):
        (WebKit::WebSpeechSynthesisClient::cancel):
        (WebKit::WebSpeechSynthesisClient::pause):
        (WebKit::WebSpeechSynthesisClient::resume):
        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.h: Added.
        (WebKit::WebSpeechSynthesisClient::WebSpeechSynthesisClient):
        (WebKit::WebSpeechSynthesisClient::~WebSpeechSynthesisClient):
        * WebProcess/WebCoreSupport/WebSpeechSynthesisVoice.h: Added.
        (WebKit::WebSpeechSynthesisVoice::encode const):
        (WebKit::WebSpeechSynthesisVoice::decode):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_hostFileDescriptor):
        (WebKit::WebPage::speakingErrorOccurred):
        (WebKit::WebPage::boundaryEventOccurred):
        (WebKit::WebPage::voicesDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/com.apple.WebProcess.sb.in:
        * WebProcess/glib/WebProcessGLib.cpp:

2019-03-15  Antti Koivisto  <antti@apple.com>

        Optimize Region for single rectangle case
        https://bugs.webkit.org/show_bug.cgi?id=195743

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<EventTrackingRegions>::decode):
        (IPC::ArgumentCoder<Region::Span>::encode): Deleted.
        (IPC::ArgumentCoder<Region::Span>::decode): Deleted.
        (IPC::ArgumentCoder<Region>::encode): Deleted.
        (IPC::ArgumentCoder<Region>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:

2019-03-14  Per Arne Vollan  <pvollan@apple.com>

        [iOS] WebKit crashes when opening pages documents
        https://bugs.webkit.org/show_bug.cgi?id=195784
        <rdar://problem/48904334>

        Reviewed by Brent Fulgham.

        The sandbox needs to allow additional syscalls.

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

2019-03-14  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test scrolling tree layer manipulation more easily
        https://bugs.webkit.org/show_bug.cgi?id=195780

        Reviewed by Tim Horton.

        Add a boolean attribute 'scrollUpdatesDisabled' on UIScriptController that
        cuts off communication of scrolling tree scrolls back to the web process
        (in RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll()). This
        allows tests to trigger scrolls which run the scrolling tree layer positioning
        logic, but never get another commit from the web process that might mask
        scrolling tree bugs.
        
        WKWebView's testing protocol get @property _scrollingUpdatesDisabledForTesting,
        whose getters and setters are overridden by TestRunnerWKWebView. Plumbing
        via PageClient and WebPageProxy makes this flag reachable by RemoteScrollingCoordinatorProxy.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollingUpdatesDisabledForTesting]):
        (-[WKWebView _setScrollingUpdatesDisabledForTesting:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::scrollingUpdatesDisabledForTesting):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::scrollingUpdatesDisabledForTesting):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::scrollingUpdatesDisabledForTesting):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/WebPageProxy.h:

2019-03-14  Youenn Fablet  <youenn@apple.com>

        Move IDB storage in private browsing mode to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=195602

        Reviewed by Brady Eidson.

        Covered by existing IDB tests and added API test.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createIDBServer):
        Make sure that path is empty for private sessions.
        This will make IDB use a memory backing store.
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
        Use NetworkProcess IDB server instead of InProcessIDBServer.

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

        REGRESSION (r242801): [iOS] preventDefault() on touchstart in a subframe does not prevent focusing the subframe
        https://bugs.webkit.org/show_bug.cgi?id=195749
        <rdar://problem/48892367>

        Reviewed by Tim Horton.

        r242801 added logic to fetch interaction information at the touch location upon touch start. However this,
        combined with an existing behavior where the process of computing InteractionInformationAtPosition in WebPage
        moves focus into the frame of the hit-tested node below the touch location, means that we'll always trigger a
        blur event on the window and move focus into the subframe when performing a touch inside a subframe, even if the
        page prevents default on touchstart.

        To fix this, add a "readonly" flag to InteractionInformationRequest, and only change focus when requesting
        position information in the case where the request is not readonly. For now, this readonly flag is false by
        default; in a future patch, we should identify the (hopefully few) places that rely on position information
        requests to move focus, explicitly turn this bit off in those places, and otherwise send readonly position
        information requests by default.

        * Shared/ios/InteractionInformationRequest.cpp:
        (WebKit::InteractionInformationRequest::encode const):
        (WebKit::InteractionInformationRequest::decode):
        (WebKit::InteractionInformationRequest::isValidForRequest):
        (WebKit::InteractionInformationRequest::isApproximatelyValidForRequest):

        Ensure that a readonly request is not valid for a non-readonly request.

        * Shared/ios/InteractionInformationRequest.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]):

        Send a readonly position information request in the case where a WebKit SPI client is querying for element
        information at the given location.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):

        Send a readonly position information request on touchstart.

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

2019-03-14  Chris Dumez  <cdumez@apple.com>

        Add WebsitePolicy for the client to specify the device orientation & motion access policy
        https://bugs.webkit.org/show_bug.cgi?id=195750

        Reviewed by Geoffrey Garen.

        Add WebsitePolicy for the client to specify the device orientation & motion access policy. If
        the client already knows access to the device motion & orientation API will be granted / denied,
        it can let WebKit know via WebsitePolicies so that WebKit will not ask the client when the
        permission is requested by JS.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setDeviceOrientationAndMotionAccessPolicy:]):
        (-[_WKWebsitePolicies deviceOrientationAndMotionAccessPolicy]):

2019-03-14  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r242908): TestWebKitAPI.WebKit.AddAndRemoveDataDetectors Crashed
        https://bugs.webkit.org/show_bug.cgi?id=195751

        Reviewed by Wenson Hsieh.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::decodeArrayInternal): Added allowedClasses, pass to internal decodeObject for values.
        (IPC::decodeDictionaryInternal): Ditto for keys and values.
        (IPC::decodeObject): Pass allowedClasses to array and dictionary decoders.

2019-03-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
        https://bugs.webkit.org/show_bug.cgi?id=195747

        Reviewed by Geoff Garen.

        Make sure the WebProcessCache and the prewarmed process are used when relaunching a process
        after termination (e.g. crash).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::WebProcessPool::tryPrewarmWithDomainInformation):
        * UIProcess/WebProcessPool.h:

2019-03-14  Timothy Hatcher  <timothy@apple.com>

        Unreviewed speculative build fix for watchOS after r242908.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:

2019-03-14  Youenn Fablet  <youenn@apple.com>

        Reset storage quota when clearing IDB/Cache API entries
        https://bugs.webkit.org/show_bug.cgi?id=195716

        Reviewed by Chris Dumez.

        On clearing DOMCache or IDB data, reset quota value to the default value.
        This ensures consistent layout test runs.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::clearStorageQuota):
        * NetworkProcess/NetworkProcess.h:

2019-03-13  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Stop content observation when content calls preventDefault() on touch events
        https://bugs.webkit.org/show_bug.cgi?id=195724
        <rdar://problem/48873456>

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::didPreventDefaultForEvent):

2019-03-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make -[_WKAttachment setFileWrapper:contentType:completion:] robust when given a nil completion handler
        https://bugs.webkit.org/show_bug.cgi?id=195725
        <rdar://problem/48545062>

        Reviewed by Tim Horton.

        Add a missing nil check before invoking the given completionHandler in the case where the attachment is invalid.
        Tested by augmenting WKAttachmentTests.SetFileWrapperForPDFImageAttachment to exercise this scenario.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::invalidate):

        Additionally make sure that an invalidated _WKAttachment is also considered to be disconnected.

        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachment setFileWrapper:contentType:completion:]):

2019-03-13  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r242908):  'NSInvalidArgumentException', reason: '+[PKPaymentMerchantSession count]: unrecognized selector sent to class 0x1c0fae060'
        https://bugs.webkit.org/show_bug.cgi?id=195720

        Reviewed by Andy Estes.

        Add back decode(Decoder& decoder, Class allowedClass) for Apple Pay code.

        * Shared/Cocoa/ArgumentCodersCocoa.h:
        (IPC::decode): Added.

2019-03-13  Tim Horton  <timothy_horton@apple.com>

        Stop using some deprecated SPI in WKDrawingView
        https://bugs.webkit.org/show_bug.cgi?id=195706
        <rdar://problem/48062599>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView renderedDrawing]):
        (-[WKDrawingView PNGRepresentation]):
        (-[WKDrawingView loadDrawingFromPNGRepresentation:]):

2019-03-13  Timothy Hatcher  <timothy@apple.com>

        Unreviewed speculative build fix for watchOS after r242908.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::decodeObject):

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

        Block all plugins smaller than 5x5px
        https://bugs.webkit.org/show_bug.cgi?id=195702
        <rdar://problem/28435204>

        Reviewed by Sam Weinig.

        Block all plugins that are smaller than a threshold, in this case
        5x5px. Other browsers have implemented this for a while, and now
        that we have Intersection Observers, small plugins are no longer
        necessary.

        * Shared/WebPreferences.yaml: New setting for this feature.

        * UIProcess/WebPageProxy.cpp: Handle new unavailability type.
        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldUnavailablePluginMessageBeButton const):

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: Removed this function
        as it was never being called.
        (WebKit::WebFrameLoaderClient::recreatePlugin): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::pluginIsSmall): Checks the size of the plugin.
        (WebKit::WebPage::createPlugin): If the plugin is too small, stop it from
        launching.

2019-03-13  Keith Rollin  <krollin@apple.com>

        Add support for new StagedFrameworks layout
        https://bugs.webkit.org/show_bug.cgi?id=195543

        Reviewed by Alexey Proskuryakov.

        When creating the WebKit layout for out-of-band Safari/WebKit updates,
        use an optional path prefix when called for.

        Update the dyld_env path in OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH to
        also understand about this layout.

        * Configurations/BaseTarget.xcconfig:

2019-03-13  Simon Fraser  <simon.fraser@apple.com>

        Scrolling tree should reposition non-stacking order descendents of overflow:scroll.
        https://bugs.webkit.org/show_bug.cgi?id=195608

        Reviewed by Zalan Bujtas.

        Step 1: add scrolling tree positioning nodes classes (but don't create them yet).

        Add Scrolling{State,Tree}PositionedNode to track composited layers that have to be repositioned when
        an async overflow:scroll scrolls. There are two instances in which this is necessary, reflected by
        the values of ScrollPositioningBehavior:

        ScrollPositioningBehavior::Moves - a composited layer whose containing block chain includes an
            async overflow scroller, but whose composited (i.e. z-order) parent is outside of the overflow.
            When the overflow scrolls, this layer has to move along with the overflow.

        ScrollPositioningBehavior::Stationary - a composited layer whose containing block chain skips the
            overflow scroller, but whose compositing (z-order) parent is the scroller, or inside the scroller.
            This only applies to position:absolute, on, for example, an overflow:scroll ith opacity.

        PositionedNodes are modeled after Fixed/Sticky nodes, with a new type of layout constraint just called LayoutConstraints.
        
        This patch adds support for PositionedNodes in the scrolling trees, but RenderLayerCompositor::computeCoordinatedPositioningForLayer()
        is just a stub so the new node types aren't created yet.
        
        RenderLayerBacking stores a ScrollingNodeID for the positioning role (just like the other roles). Since the Positioning
        role is about position relative to ancestors, a node with both Positioning and FrameHosting or Scrolling roles treats
        the Positioning node as the parent of the other types. A node should never have both Positioning and ViewportConstrained roles.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStatePositionedNode>::encode):
        (ArgumentCoder<ScrollingStatePositionedNode>::decode):
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::dump):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<LayoutConstraints>::encode):
        (IPC::ArgumentCoder<LayoutConstraints>::decode):
        (IPC::ArgumentCoder<StickyPositionViewportConstraints>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

2019-03-13  Youenn Fablet  <youenn@apple.com>

        Check IDB quota usage through QuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=195302

        Reviewed by Chris Dumez.

        Set the quota manager getter for IDBServer at creation time.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createIDBServer):
        (WebKit::NetworkProcess::idbServer):
        * NetworkProcess/NetworkProcess.h:
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):

2019-03-13  Timothy Hatcher  <timothy@apple.com>

        Consolidate ArgumentCodersMac and ArgumentCodersCocoa.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Ryosuke Niwa.

        Merge the two similar encoders and decoders. This avoids issues where
        one encoder could be used and the other decoder, which caused a crash.
        It also stops handling NSAttributedString specifically and just uses
        the NSSecureCoding path to handle more complex attributes.

        Some WebCore encoders code needed to move to platform files, since
        ArgumentCodersCocoa.h requires an ObjectiveC++ implementation to work.

        * Shared/Cocoa/ArgumentCodersCocoa.h:
        (IPC::encode):
        (IPC::decode):
        (IPC::ArgumentCoder<RetainPtr<T>>::encode):
        (IPC::ArgumentCoder<RetainPtr<T>>::decode):
        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::typeFromObject):
        (IPC::isSerializableFont):
        (IPC::isSerializableValue):
        (IPC::encodeObject):
        (IPC::decodeObject):
        * Shared/Cocoa/LoadParametersCocoa.mm:
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::DictionaryPopupInfo>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::DictionaryPopupInfo>::decodePlatformData):
        (IPC::ArgumentCoder<WebCore::FontAttributes>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::FontAttributes>::decodePlatformData):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DictionaryPopupInfo>::encode):
        (IPC::ArgumentCoder<DictionaryPopupInfo>::decode):
        (IPC::ArgumentCoder<FontAttributes>::encode):
        (IPC::ArgumentCoder<FontAttributes>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/ArgumentCodersMac.h: Removed.
        * Shared/mac/ArgumentCodersMac.mm: Removed.
        * Shared/mac/AttributedString.mm:
        (WebKit::AttributedString::encode const):
        * Shared/mac/ObjCObjectGraph.mm:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

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

        Use a ServiceWorker process per registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=195649

        Reviewed by Youenn Fablet.

        Use a ServiceWorker process per registrable domain instead of one per security origin. This is
        more in line with PSON and avoids launching too many processes.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::connectionToContextProcessWasClosed):
        (WebKit::NetworkProcess::needsServerToContextConnectionForRegistrableDomain const):
        (WebKit::NetworkProcess::serverToContextConnectionForRegistrableDomain):
        (WebKit::NetworkProcess::createServerToContextConnection):
        (WebKit::NetworkProcess::swContextConnectionMayNoLongerBeNeeded):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcessForExplicitSession):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::create):
        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
        (WebKit::ServiceWorkerProcessProxy::getLaunchOptions):
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::updateProcessAssertions):
        * UIProcess/WebProcessPool.h:

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

        REGRESSION(PSON, r240660): Navigation over process boundary is flashy when using Cmd-left/right arrow to navigate
        https://bugs.webkit.org/show_bug.cgi?id=195684
        <rdar://problem/48294714>

        Reviewed by Antti Koivisto.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::backForwardAddItem):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        Drop legacy WebCore::toRegistrableDomain() utility function
        https://bugs.webkit.org/show_bug.cgi?id=195637

        Reviewed by Geoffrey Garen.

        Drop legacy toRegistrableDomain() / registrableDomainAreEqual() utility functions.
        Update call sites to use modern RegistrableDomain type instead.

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

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

        Take UnboundedNetworking assertion when a file upload is in progress.
        https://bugs.webkit.org/show_bug.cgi?id=195497

        Reviewed by Geoff Garen.

        This patch implements whole bunch of bookkeeping in both the Networking and UI processes.

        The TLDR of that bookkeeping is:
        - Whenever any uploads are in progress, take an assertion for both Networking and UI processes.
        - Whenever a particular WebProcess has an upload in progress, take an assertion for it.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::setProcessIdentifier):
        (WebKit::NetworkConnectionToWebProcess::setConnectionHasUploads):
        (WebKit::NetworkConnectionToWebProcess::clearConnectionHasUploads):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * NetworkProcess/NetworkResourceLoadMap.cpp: Added.
        (WebKit::NetworkResourceLoadMap::add):
        (WebKit::NetworkResourceLoadMap::remove):
        (WebKit::NetworkResourceLoadMap::get const):
        * NetworkProcess/NetworkResourceLoadMap.h: Added.
        (WebKit::NetworkResourceLoadMap::NetworkResourceLoadMap):
        (WebKit::NetworkResourceLoadMap::isEmpty const):
        (WebKit::NetworkResourceLoadMap::contains const):
        (WebKit::NetworkResourceLoadMap::begin):
        (WebKit::NetworkResourceLoadMap::values):

        * NetworkProcess/NetworkSession.cpp:
 
       * Scripts/webkit/messages.py:

        * Sources.txt:

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::takeUploadAssertion):
        (WebKit::NetworkProcessProxy::clearUploadAssertion):
        * UIProcess/Network/NetworkProcessProxy.h:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setWebProcessHasUploads):
        (WebKit::WebProcessPool::clearWebProcessHasUploads):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
 
       * WebKit.xcodeproj/project.pbxproj:

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

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

        Use new RegistrableDomain type in PSON code
        https://bugs.webkit.org/show_bug.cgi?id=195634

        Reviewed by Youenn Fablet.

        Use new RegistrableDomain type in PSON code instead of more error-prone String type.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::canCacheProcess const):
        (WebKit::WebProcessCache::addProcessIfPossible):
        (WebKit::WebProcessCache::takeProcess):
        (WebKit::WebProcessCache::clearAllProcessesForSession):
        * UIProcess/WebProcessCache.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::addProcessToOriginCacheSet):
        (WebKit::WebProcessPool::removeProcessFromOriginCacheSet):
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::WebProcessPool::findReusableSuspendedPageProcess):
        (WebKit::WebProcessPool::didCollectPrewarmInformation):
        (WebKit::WebProcessPool::tryPrewarmWithDomainInformation):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const):
        (WebKit::WebProcessProxy::maybeShutDown):
        (WebKit::WebProcessProxy::didCollectPrewarmInformation):
        (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::registrableDomain const):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::sendPrewarmInformation):

2019-03-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][PlayStation] Remove WebCore::standardUserAgentForURL
        https://bugs.webkit.org/show_bug.cgi?id=195662

        Reviewed by Ryosuke Niwa.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformUserAgent const): Return an empty string as well as mac/ios ports.

2019-03-12  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Fix a slew of simple clang-cl warnings.
        https://bugs.webkit.org/show_bug.cgi?id=195652

        Reviewed by Don Olmstead.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::invokeDidReceiveResponse): -Wswitch
        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::readEventHandler): -Wunused-variable
        * Platform/win/LoggingWin.cpp:
        (WebKit::logLevelString): -Wwritable-strings
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess): -Wunused-variable

2019-03-12  Ryosuke Niwa  <rniwa@webkit.org>

        Move the code for determining the need for touch bar quirks to Quirks class
        https://bugs.webkit.org/show_bug.cgi?id=195654

        Reviewed by Brent Fulgham.

        Moved the code to determine whether touch bar quirks are needed or not to WebCore.

        Also renamed HiddenContentEditableQuirk to IsTouchBarUpdateSupressedForHiddenContentEditable
        and PlainTextQuirk to NeverRichlyEditableForTouchBar.

        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::isRichlyEditableForTouchBar): Renamed.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateTouchBar):
        (WebKit::WebViewImpl::candidateListTouchBarItem const):
        (WebKit::WebViewImpl::isRichlyEditableForTouchBar const): Renamed from isRichlyEditable.
        (WebKit::WebViewImpl::textTouchBar const):
        (WebKit::WebViewImpl::updateTextTouchBar):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setIsTouchBarUpdateSupressedForHiddenContentEditable): Renamed from
        setNeedsHiddenContentEditableQuirk.
        (WebKit::WebPageProxy::setIsNeverRichlyEditableForTouchBar): Renamed from setNeedsPlainTextQuirk.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isTouchBarUpdateSupressedForHiddenContentEditable const): Renamed from
        needsHiddenContentEditableQuirk.
        (WebKit::WebPageProxy::isNeverRichlyEditableForTouchBar const): Renamed from needsPlainTextQuirk.
        * UIProcess/WebPageProxy.messages.in: Renamed the IPC messages.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::needsHiddenContentEditableQuirk): Deleted. Moved to WebCore.
        (WebKit::needsPlainTextQuirk): Deleted. Moved to WebCore.
        (WebKit::WebPage::didStartPageTransition):
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage):

2019-03-12  Jiewen Tan  <jiewen_tan@apple.com>

        Add WebFrameProxy::loadData
        https://bugs.webkit.org/show_bug.cgi?id=195647
        <rdar://problem/48826856>

        Reviewed by Youenn Fablet.

        This patch adds WebFrameProxy::loadData which is a simplified version of WebPageProxy::loadData that
        loads substitute data to an iframe. This is needed by the Load Optimizer.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::loadData):
        * UIProcess/WebFrameProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataInFrame):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-03-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Input view sometimes flickers when blurring and refocusing an element
        https://bugs.webkit.org/show_bug.cgi?id=195639
        <rdar://problem/48735337>

        Reviewed by Tim Horton.

        On iOS, if a focused element is blurred and immediately refocused in the scope of user interaction, we will end
        up reloading interaction state (input views, autocorrection contexts, etc.) in the UI process. On certain well-
        trafficked websites, this results in the input view and input accessory view flickering (or more egregiously,
        scrolling to re-reveal the focused element) when changing selection.

        To fix the issue, this patch refactors some focus management logic to suppress sending focused element updates
        to the UI process in the case where the same element is being blurred and immediately refocused. To do this, we
        track the most recently blurred element and bail when the recently blurred element is identical to the newly
        focused element. See below for more detail.

        Test: fast/forms/ios/keyboard-stability-when-refocusing-element.html

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _elementDidBlur]):

        Update the web process' notion of whether an input view is showing. Importantly, this accounts for decisions
        made by _WKUIDelegate. See below for more details.

        (isAssistableInputType): Deleted.

        Removed this helper function; this was only used in one place as a sanity check that the focused element's type
        is not none, right before attempting to show an input view. Instead, we can just check the focused element's
        type directly against InputType::None in the if statement of the early return.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setIsShowingInputViewForFocusedElement):

        Add a hook to notify the web process when an input view is showing or not (see below for more detail).

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartPageTransition):
        (WebKit::WebPage::elementDidRefocus):
        (WebKit::WebPage::shouldDispatchUpdateAfterFocusingElement const):

        Add a helper to determine whether we notify the UI process about a newly focused element. On macOS, this is true
        only when the new focused element is neither the currently focused element, nor the focused element that was
        just blurred. On iOS, we have an additional constraint that when the input view is not showing, we still need to
        notify the UI process, since the UI process might want to begin showing the keyboard for an element that has
        only been programmatically focused, for which we aren't currently showing the input view.

        (WebKit::WebPage::elementDidFocus):
        (WebKit::WebPage::elementDidBlur):

        Replace a couple of existing member variables in WebPage used for focus management:
        -   Replace m_hasPendingBlurNotification with m_recentlyBlurredElement, a RefPtr to the Element that is being
            blurred. Behavior here is the same as before (i.e. having a pending blur notification is equivalent to
            having recently blurred a focused element). However, this allows us to check newly focused elements against
            the recently blurred element in WebPage::elementDidFocus().
        -   Replace m_isFocusingElementDueToUserInteraction with m_isShowingInputViewForFocusedElement. The flag
            m_isFocusingElementDueToUserInteraction was originally added to fix <webkit.org/b/146735>, by ensuring that
            we don't send redundant ElementDidFocus (formerly, StartAssistingNode) messages to the UI process even when
            the keyboard is already up. In these simpler times, user interaction when focusing an element was equivalent
            to showing an input view for the focused element. However, in today's world, there are a variety of reasons
            why we might or might not show an input view for a given element (including, but not limited to activity
            state changes and decisions made by _WKInputDelegate). As such, it doesn't make sense to continue relying on
            m_isFocusingElementDueToUserInteraction in this early return. Instead, have the UI process propagate a
            message back to the web process, to let it know whether there is a keyboard showing, and use this flag
            instead.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setIsShowingInputViewForFocusedElement):

2019-03-12  Tim Horton  <timothy_horton@apple.com>

        More attempts at build fixing.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        Yet more.

2019-03-12  Chris Dumez  <cdumez@apple.com>

        Device Orientation access permission should be denied unless explicitly granted by the client
        https://bugs.webkit.org/show_bug.cgi?id=195625

        Reviewed by Youenn Fablet.

        Device Orientation access permission should be denied unless explicitly granted by the client.
        Previously, it was granted by default.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):

2019-03-12  Antti Koivisto  <antti@apple.com>

        [iOS] Enable asynchronous frame scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=195622
        <rdar://problem/48658028>

        Reviewed by Simon Fraser

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2019-03-12  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Block access to backboardd service
        https://bugs.webkit.org/show_bug.cgi?id=195484

        Reviewed by Brent Fulgham.

        This patch is addressing blocking the backboardd service "com.apple.backboard.hid.services". Getting the
        backlight level in the WebContent process will initiate a connection with this service. To be able to
        block the service, the backlight level is queried in the UI process and sent to the WebContent process
        when the WebContent process is started, and when the backlight level is changed. On the WebContent side,
        the method getting the backlight level is swizzled to return the value sent from the UI process.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::displayBrightness):
        (WebKit::WebProcessPool::backlightLevelDidChangeCallback):
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::currentBacklightLevel):
        (WebKit::WebProcess::backlightLevelDidChange):

2019-03-12  Tim Horton  <timothy_horton@apple.com>

        Fix the build after 242801

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _elementActionForDDAction:]):
        More.

2019-03-12  Tim Horton  <timothy_horton@apple.com>

        Fix the build after 242801

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _elementActionForDDAction:]):

2019-03-12  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Sandbox must allow mach lookup required to compress video
        https://bugs.webkit.org/show_bug.cgi?id=195627
        <rdar://problem/48811072>

        Reviewed by Youenn Fablet.

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

2019-03-12  Jennifer Moore  <jennifer.moore@apple.com>

        Check whether to launch a default action instead of action sheet
        https://bugs.webkit.org/show_bug.cgi?id=195225
        <rdar://problem/47715544>

        Reviewed by Daniel Bates and Tim Horton.

        Notify DataDetectors at the start of a touch on a link, and check whether to immediately
        launch the default action instead of an action sheet.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant interactionDidStart]):
        (-[WKActionSheetAssistant _createSheetWithElementActions:defaultTitle:showLinkTitle:]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]): Deleted.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):
:
2019-03-12  Zalan Bujtas  <zalan@apple.com>

        [Synthetic Click] Dispatch mouseout soon after mouseup
        https://bugs.webkit.org/show_bug.cgi?id=195575
        <rdar://problem/47093049>

        Reviewed by Simon Fraser.

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

2019-03-12  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Stop content change observation when the touch event turns into long press
        https://bugs.webkit.org/show_bug.cgi?id=195601
        <rdar://problem/48796324>

        Reviewed by Wenson Hsieh.

        Add didRecognizeLongPress() message to be able to cancel content observation (started at touchStart).

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _longPressRecognized:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didRecognizeLongPress):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didRecognizeLongPress):

2019-03-11  Andy Estes  <aestes@apple.com>

        [Mac] Ensure Apple Pay is unavailable when PassKit.framework is missing
        https://bugs.webkit.org/show_bug.cgi?id=195583
        <rdar://problem/48420224>

        Reviewed by Daniel Bates.

        PassKit.framework is optionally soft-linked on Mac because it is missing from the Recovery
        Partition. We need to check if the framework is available before calling into it.

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePayments):
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinatorProxy::platformOpenPaymentSetup):
        (WebKit::WebPaymentCoordinatorProxy::platformAvailablePaymentNetworks):
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):

2019-03-12  Antti Koivisto  <antti@apple.com>

        Compositing layer that renders two positioned elements should not hit test
        https://bugs.webkit.org/show_bug.cgi?id=195371
        <rdar://problem/48649586>

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode const):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):

        Pass event region to UI process.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        (WebKit::RemoteLayerTreeNode::layerID const):
        (WebKit::RemoteLayerTreeNode::eventRegion const):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (WebKit::RemoteLayerTreeNode::RemoteLayerTreeNode):
        (WebKit::RemoteLayerTreeNode::~RemoteLayerTreeNode):
        (WebKit::RemoteLayerTreeNode::setEventRegion):

        Maintain event region in RemoteLayerTreeNodes.

        (WebKit::RemoteLayerTreeNode::initializeLayer):
        (WebKit::RemoteLayerTreeNode::layerID):
        (WebKit::RemoteLayerTreeNode::forCALayer):

        Move layerID to RemoteLayerTreeNode and store RemoteLayerTreeNode pointer to CALayers instead.
        This makes it easy to find the matching RemoteLayerTreeNode from a layer, globally.

        (WebKit::RemoteLayerTreeNode::setLayerID): Deleted.
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::collectDescendantViewsAtPoint):

        If we have event region, use it for hit testing.

        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):
        (collectDescendantViewsAtPoint): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::eventRegion const):
        (WebKit::PlatformCALayerRemote::setEventRegion):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:

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

        [WPE][GTK] Load events may occur in unexpected order when JS redirects page before subresource load finishes
        https://bugs.webkit.org/show_bug.cgi?id=194131

        Reviewed by Michael Catanzaro.

        Ensure we emit the load-failed and load-changed with finished event when there's still an ongoing load when a
        new provisional load strarts. Previous load fails with cancelled error.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewWillStartLoad): Call webkitWebViewLoadFailed() if current page load state is not finished.
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame): Call webkitWebViewWillStartLoad().
        * UIProcess/API/wpe/APIViewClient.h:
        (API::ViewClient::willStartLoad): Add willStartLoad() to API::ViewClient
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame): Call WPEView::willStartLoad().
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::willStartLoad): Call API::ViewClient::willStartLoad().
        * UIProcess/API/wpe/WPEView.h:
        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::isProvisional const):
        (WebKit::PageLoadState::isCommitted const):
        (WebKit::PageLoadState::isFinished const):

2019-03-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242763.

        Causes layout test crashes on iOS simulator

        Reverted changeset:

        "[Synthetic Click] Dispatch mouseout soon after mouseup"
        https://bugs.webkit.org/show_bug.cgi?id=195575
        https://trac.webkit.org/changeset/242763

2019-03-11  Ross Kirsling  <ross.kirsling@sony.com>

        Add Optional to Forward.h.
        https://bugs.webkit.org/show_bug.cgi?id=195586

        Reviewed by Darin Adler.

        * Shared/RTCNetwork.cpp:
        * Shared/RTCNetwork.h:
        * Shared/RTCPacketOptions.cpp:
        * Shared/RTCPacketOptions.h:
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.h:
        Remove unnecessary includes from headers.

2019-03-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r242745 and r242756.
        https://bugs.webkit.org/show_bug.cgi?id=195606

        Breaks internal builds (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[iOS] Block access to backboardd service"
        https://bugs.webkit.org/show_bug.cgi?id=195484
        https://trac.webkit.org/changeset/242745

        "Unreviewed build fix after r242745."
        https://trac.webkit.org/changeset/242756

2019-03-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CoordinatedGraphics] ASSERTION FAILED: !m_state.isSuspended
        https://bugs.webkit.org/show_bug.cgi?id=195550

        Reviewed by Carlos Garcia Campos.

        CompositingRunLoop::suspend() locks a mutex and stops the update
        timer. But, the timer can be fired after the lock was acquired and
        before the timer is stopped.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::updateTimerFired): Removed the
        assertion. Return early if m_state.isSuspended.

2019-03-11  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Remove the Kerberos rules from the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195464
        <rdar://problem/35369230>

        Reviewed by Brent Fulgham.

        Kerberos auth is done in the UIProcess or NetworkProcess now.

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

2019-03-11  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Add entitlement to enable use of graphics endpoint with limited capabilities
        https://bugs.webkit.org/show_bug.cgi?id=195582
        <rdar://problem/36082379>

        Reviewed by Brent Fulgham.

        This is a QuartzCore endpoint with a minimal set of capabilities.

        * Configurations/WebContent-iOS.entitlements:

2019-03-11  John Wilander  <wilander@apple.com>

        Move NetworkProcess/Classifier/ResourceLoadStatisticsStoreCocoa.mm functionality into UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=195117
        <rdar://problem/48448715>

        Reviewed by Brent Fulgham.

        Reading of user defaults on Cocoa platforms should be done in the UI process and
        forwarded to Resource Load Statistics in the network process through the
        WebKit::NetworkSessionCreationParameters struct.

        This patch does away with some old user defaults we don't use anymore. It also
        changes the developer-facing default name to ITPManualPrevalentResource.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
            Removed the call to the old registerUserDefaultsIfNeeded().
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
            Removed the call to the old registerUserDefaultsIfNeeded().
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
            Removed the declaration of the old registerUserDefaultsIfNeeded().
        * NetworkProcess/Classifier/ResourceLoadStatisticsStoreCocoa.mm: Removed.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
            Added an enum class EnableResourceLoadStatisticsDebugMode.
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
           The struct now has two new fields:
           - enableResourceLoadStatisticsDebugMode
           - resourceLoadStatisticsManualPrevalentResource
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
            Forwarding of the parameters.
        * SourcesCocoa.txt:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
            Forwarding of the parameters.
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
            This is where user defaults for Resource Load Statistics are now read.
        * WebKit.xcodeproj/project.pbxproj:

2019-03-11  Zalan Bujtas  <zalan@apple.com>

        [Synthetic Click] Dispatch mouseout soon after mouseup
        https://bugs.webkit.org/show_bug.cgi?id=195575
        <rdar://problem/47093049>

        Reviewed by Simon Fraser.

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

2019-03-11  Tim Horton  <timothy_horton@apple.com>

        API test WebKit.RequestTextInputContext fails on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195585

        Reviewed by Wenson Hsieh and Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _convertRectFromRootViewCoordinates:]):
        (-[WKWebView _convertRectToRootViewCoordinates:]):
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]):
        (-[WKWebView _focusTextInputContext:completionHandler:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::elementRectInRootViewCoordinates):
        (WebKit::WebPage::textInputContextsInRect):
        (WebKit::elementRectInWindowCoordinates): Deleted.
        Text input context SPI should be in terms of WKWebView coordinates,
        for consistency's sake. This is a bit irritating; WebPage(Proxy) continue
        to operate in "root view" coordinates, which means different things
        depending on if delegatesScrolling is true or not. So, WKWebView does
        the conversion, re-creating objects as needed.

2019-03-09  Jiewen Tan  <jiewen_tan@apple.com>

        Optimizing loads when creating new pages
        https://bugs.webkit.org/show_bug.cgi?id=195516
        <rdar://problem/48738086>

        Reviewed by Darin Adler.

        This patch adds hooks in WebPageProxy::createNewPage to optimize loads, and moves the creationParameters
        of API::NavigationAction from UI clients to WebPageProxy::createNewPage. Also, we now pass the whole
        API::NavigationAction to the load optimizer instead of the request within.

        * UIProcess/API/APINavigationAction.h:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryOptimizingLoad):
        (WebKit::tryInterceptNavigation):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::tryOptimizingLoad):
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:

2019-03-11  Dean Jackson  <dino@apple.com>

        [iOS] Implement a faster click detection that intercepts double-tap-to-zoom if possible
        https://bugs.webkit.org/show_bug.cgi?id=195473
        <rdar://problem/48718396>

        Reviewed by Wenson Hsieh (with some help from Dan Bates).

        Adds a new algorithm, behind a flag FasterClicksEnabled, that can trigger a click
        event without waiting to see if a double tap will occur. It does this by examining
        the amount of zoom that would be triggered if it was a double tap, and if that value
        doesn't exceed a set threshold, commits to the click event instead.

        This is implemented by having the Web Process respond to the potential click with
        some geometry information. If the UI Process receives the information before the
        second tap in a double tap, it can decide to trigger a click.

        * Shared/WebPreferences.yaml: New internal feature so this can be toggled in
            a UI for testing.

        * SourcesCocoa.txt: Renamed WKSyntheticTapGestureRecognizer.
        * WebKit.xcodeproj/project.pbxproj: Ditto.

        * UIProcess/ios/WKSyntheticTapGestureRecognizer.h:
        * UIProcess/ios/WKSyntheticTapGestureRecognizer.m:
        (-[WKSyntheticTapGestureRecognizer setGestureIdentifiedTarget:action:]):
        (-[WKSyntheticTapGestureRecognizer setGestureFailedTarget:action:]):
        (-[WKSyntheticTapGestureRecognizer setResetTarget:action:]):
        (-[WKSyntheticTapGestureRecognizer setState:]):
        (-[WKSyntheticTapGestureRecognizer reset]):  Renamed WKSyntheticClickTapGestureRecognizer to
            WKSyntheticTapGestureRecognizer, changed the signature of the main function to be a bit
            more clear about what it does, and added a gesture failed target.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initialScaleFactor]):
        (-[WKWebView _contentZoomScale]):
        (-[WKWebView _targetContentZoomScaleForRect:currentScale:fitEntireRect:minimumScale:maximumScale:]):
            Exposed the initial content scale, the current scale and added a declaration that
            was missing from the .h.

        * UIProcess/WebPageProxy.messages.in: Add a new message,
            HandleSmartMagnificationInformationForPotentialTap, to
            communicate the geometry of the clicked node to the UI Process.

        * UIProcess/PageClient.h: Pure virtual function for the geometry message response.
        * UIProcess/WebPageProxy.h: Ditto.

        * UIProcess/ios/PageClientImplIOS.h: Calls into the WKContentView.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleSmartMagnificationInformationForPotentialTap):

        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::calculatePotentialZoomParameters): A new method that
            asks the WKContentView to work out what the zoom factor will be for a potential double
            tap at a location.
        (WebKit::SmartMagnificationController::smartMagnificationTargetRectAndZoomScales): New implementation
            of this function to avoid multiple out-arguments.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _initialScaleFactor]):
        (-[WKContentView _contentZoomScale]):
        (-[WKContentView _targetContentZoomScaleForRect:currentScale:fitEntireRect:minimumScale:maximumScale:]):
            Exposed the initial content scale, the current scale and the target zoom scale. These
            all just call into the WKWebView implementation.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createAndConfigureDoubleTapGestureRecognizer]): Use a WKSyntheticTapGestureRecognizer instead
            of a generic one, so we can capture the failure.
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:origin:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:]):
            New method that responds to the incoming Web Process message, and decides if any
            potential zoom would be "significant".
        (-[WKContentView _singleTapIdentified:]):
        (-[WKContentView _doubleTapDidFail:]):
        (-[WKContentView _didCompleteSyntheticClick]):
        (-[WKContentView _singleTapRecognized:]):
        (-[WKContentView _doubleTapRecognized:]):
            Add some release logging.
        (-[WKContentView _singleTapCommited:]): Deleted.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::potentialTapAtPosition):
        (WebKit::WebPageProxy::handleSmartMagnificationInformationForPotentialTap):
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
            Removed an unused parameter from the existing message.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::potentialTapAtPosition): Calculates the geometry of the element
        if requested, and sends it to the UIProcess.

2019-03-11  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed build fix after r242745.

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

2019-03-11  Chris Dumez  <cdumez@apple.com>

        Assert in WebPageProxy::suspendCurrentPageIfPossible()
        https://bugs.webkit.org/show_bug.cgi?id=195506
        <rdar://problem/48733477>

        Reviewed by Alex Christensen.

        The crash was caused by the top-hit preloading logic in MobileSafari which creates a new Web view that is *related*
        to the previous one, restores the session state onto it and then triggers a load in this new Web view.

        Initially, the 2 Web views use the same process as they are related. However, if the new load's URL is cross-site
        with regards to the first view's URL, then we decide to process swap in the new view. This process swap makes
        sense from a security standpoint. However, when we commit the load in the new process and call
        suspendCurrentPageIfPossible() we end up in an unexpected state because we have a fromItem (due to the session
        state having been restored on the new view) but we haven't committed any load yet in this new view.

        To address the issue, suspendCurrentPageIfPossible() now returns early and does not attempt to suspend anything
        if we have not committed any load yet.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        Do not attempt to suspend to current page if we have not committed any provisional load yet.

2019-03-11  Chris Dumez  <cdumez@apple.com>

        Update device orientation & motion permission native SPI as per latest proposal
        https://bugs.webkit.org/show_bug.cgi?id=195567

        Reviewed by Youenn Fablet.

        The native SPI is now:
        +- (void)_webView:(WKWebView *)webView shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:(WKFrameInfo *)frameInfo decisionHandler:(void (^)(BOOL))decisionHandler;

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestDeviceOrientationAndMotionAccess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldAllowDeviceOrientationAndMotionAccess):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess):
        * WebProcess/WebPage/WebPage.h:

2019-03-11  Andy Estes  <aestes@apple.com>

        [Apple Pay] Use PKPaymentAuthorizationController to present the Apple Pay UI remotely from the Networking service on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195530
        <rdar://problem/48747164>

        Reviewed by Alex Christensen.

        * Configurations/Network-iOS.entitlements: Added the 'com.apple.payment.all-access'
        entitlement and reordered the others.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage): Forwarded
        WebPaymentCoordinatorProxy messages to the payment coordinator.
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage): Ditto.
        (WebKit::NetworkConnectionToWebProcess::didClose): Set m_paymentCoordinator to nullptr.
        * NetworkProcess/NetworkConnectionToWebProcess.h: Inherited from
        WebPaymentCoordinatorProxy::Client and added a unique_ptr<WebPaymentCoordinatorProxy> member.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h: Declared getters for source application bundle
        and secondary identifiers, and CTDataConnectionServiceType on iOS.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::sourceApplicationBundleIdentifier const): Defined getter.
        (WebKit::NetworkSessionCocoa::sourceApplicationSecondaryIdentifier const): Ditto.
        (WebKit::NetworkSessionCocoa::ctDataConnectionServiceType const): Ditto.
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): Initialized
        m_sourceApplicationBundleIdentifier and m_sourceApplicationSecondaryIdentifier with
        corresponding NetworkSessionCreationParameters.

        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm: Added.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinator): Added. Returns
        m_paymentCoordinator after lazily initializing it.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorConnection): Added. Returns the
        connection to the web process.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorPresentingViewController): Added.
        Returns nil.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorCTDataConnectionServiceType):
        Added. Returns the value from the network session identified by sessionID.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorSourceApplicationBundleIdentifier):
        Ditto.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorSourceApplicationSecondaryIdentifier):
        Ditto.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorAuthorizationPresenter): Added.
        Returns a new PaymentAuthorizationController.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorAddMessageReceiver): Added empty
        definition. NetworkConnectionToWebProcess explicitly forwards WebPaymentCoordinatorProxy
        messages to its payment coordinator, so there's no need to register with a MessageReceiverMap.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorRemoveMessageReceiver): Ditto.

        * Platform/ios/PaymentAuthorizationController.h: Added. Declares a
        PaymentAuthorizationPresenter subclass based on PKPaymentAuthorizationController.
        * Platform/ios/PaymentAuthorizationController.mm: Added.
        (-[WKPaymentAuthorizationControllerDelegate initWithRequest:presenter:]):
        Initialized WKPaymentAuthorizationDelegate with request and presenter.
        (-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationControllerDidFinish:]):
        Forwarded call to WKPaymentAuthorizationDelegate.
        (-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didAuthorizePayment:handler:]):
        Ditto.
        (-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didSelectShippingMethod:handler:]):
        Ditto.
        (-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didSelectShippingContact:handler:]):
        Ditto.
        (-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didSelectPaymentMethod:handler:]):
        Ditto.
        (-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:willFinishWithError:]):
        Ditto.
        (-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didRequestMerchantSession:]):
        Ditto.
        (WebKit::PaymentAuthorizationController::PaymentAuthorizationController):
        Initialized m_controller with a new PKPaymentAuthorizationController and m_delegate with a
        new WKPaymentAuthorizationControllerDelegate.
        (WebKit::PaymentAuthorizationController::platformDelegate): Returned m_delegate.
        (WebKit::PaymentAuthorizationController::dismiss): Dismissed the controller, set its
        delegates to nil, set m_controller to nil, invalidated the delegate, and set m_delegate to
        nil.
        (WebKit::PaymentAuthorizationController::present): Called -presentWithCompletion: on the
        controller, forwarding the passed-in completion handler.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Allowed PassKit to look up
        the "com.apple.passd.in-app-payment" and "com.apple.passd.library" service endpoints.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy): Changed to call
        paymentCoordinatorAddMessageReceiver.
        (WebKit::WebPaymentCoordinatorProxy::~WebPaymentCoordinatorProxy): Changed to call
        paymentCoordinatorRemoveMessageReceiver.
        (WebKit::WebPaymentCoordinatorProxy::messageSenderDestinationID const): Deleted.
        (WebKit::WebPaymentCoordinatorProxy::canMakePaymentsWithActiveCard): Passed sessionID to
        platformCanMakePaymentsWithActiveCard.
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI): Stored destinationID and passed
        sessionID to platformShowPaymentUI.
        (WebKit::WebPaymentCoordinatorProxy::cancelPaymentSession): Changed to account for new
        behavior of didCancelPaymentSession.
        (WebKit::WebPaymentCoordinatorProxy::didCancelPaymentSession): Changed to call hidePaymentUI.
        (WebKit::WebPaymentCoordinatorProxy::presenterDidFinish): Changed to only call hidePaymentUI
        when didReachFinalState is true, since didCancelPaymentSession is called otherwise.
        (WebKit::WebPaymentCoordinatorProxy::didReachFinalState): Cleared m_destinationID.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h: Added m_destionationID member.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in: Changed
        CanMakePaymentsWithActiveCard and ShowPaymentUI messages to take destinationID and sessionID
        arguments.

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard): Passed
        sessionID to paymentCoordinatorSourceApplicationSecondaryIdentifier.
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest): Passed sessionID to various
        m_client call sites.

        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Passed sessionID to
        platformPaymentRequest.
        (WebKit::WebPaymentCoordinatorProxy::hidePaymentUI): Null-checked m_authorizationPresenter
        before calling dismiss.

        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Passed sessionID to
        platformPaymentRequest.
        (WebKit::WebPaymentCoordinatorProxy::hidePaymentUI): Null-checked m_authorizationPresenter
        before calling dismiss.

        * Shared/WebPreferences.yaml: Added ApplePayRemoteUIEnabled as an internal preference.

        * SourcesCocoa.txt: Added NetworkConnectionToWebProcessIOS.mm and
        PaymentAuthorizationController.mm.

        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::messageReceiverMap): Deleted.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::paymentCoordinatorConnection): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationBundleIdentifier): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationSecondaryIdentifier): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorAddMessageReceiver): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorRemoveMessageReceiver): Ditto.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::paymentCoordinatorConnection): Moved to WebPageProxyCocoa.mm.
        (WebKit::WebPageProxy::paymentCoordinatorMessageReceiver): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationBundleIdentifier): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationSecondaryIdentifier): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorDestinationID): Ditto.
        * UIProcess/WebPageProxy.h:

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::paymentCoordinatorCTDataConnectionServiceType): Asserted that
        sessionID equals the website data store's sessionID.

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::networkProcessConnectionClosed): Added. Cancels the current
        session if Apple Pay Remote UI is enabled and the network process connection closes.
        (WebKit::WebPaymentCoordinator::availablePaymentNetworks): Changed to account for
        WebPaymentCoordinator being an IPC::MessageSender.
        (WebKit::WebPaymentCoordinator::canMakePayments): Ditto.
        (WebKit::WebPaymentCoordinator::canMakePaymentsWithActiveCard): Ditto.
        (WebKit::WebPaymentCoordinator::openPaymentSetup): Ditto.
        (WebKit::WebPaymentCoordinator::showPaymentUI): Ditto.
        (WebKit::WebPaymentCoordinator::completeMerchantValidation): Ditto.
        (WebKit::WebPaymentCoordinator::completeShippingMethodSelection): Ditto.
        (WebKit::WebPaymentCoordinator::completeShippingContactSelection): Ditto.
        (WebKit::WebPaymentCoordinator::completePaymentMethodSelection): Ditto.
        (WebKit::WebPaymentCoordinator::completePaymentSession): Ditto.
        (WebKit::WebPaymentCoordinator::abortPaymentSession): Ditto.
        (WebKit::WebPaymentCoordinator::cancelPaymentSession): Ditto.
        (WebKit::WebPaymentCoordinator::messageSenderConnection const): Added. Returns a connection
        to the network process if Apple Pay Remote UI is enabled. Otherwise, returned the web
        process's parent connection.
        (WebKit::WebPaymentCoordinator::messageSenderDestinationID const): Added. Returns the web
        page's ID.
        (WebKit::WebPaymentCoordinator::remoteUIEnabled const): Added. Calls Settings::applePayRemoteUIEnabled.
        * WebProcess/ApplePay/WebPaymentCoordinator.h: Inherited from IPC::MessageSender.

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage): Forwarded WebPaymentCoordinator
        messages to the payment coordinator of the web page matching the decoder's destination ID.
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage): Ditto for sync messages.

        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::paymentCoordinator): Added a payment coordinator getter.
        * WebProcess/WebPage/WebPage.h: Ditto.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed): Called
        WebPaymentCoordinator::networkProcessConnectionClosed when the network process connection
        closes.

2019-03-11  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Block access to backboardd service
        https://bugs.webkit.org/show_bug.cgi?id=195484

        Reviewed by Brent Fulgham.

        This patch is addressing blocking the backboardd service "com.apple.backboard.hid.services". Getting the
        backlight level in the WebContent process will initiate a connection with this service. To be able to
        block the service, the backlight level is queried in the UI process and sent to the WebContent process
        when the WebContent process is started, and when the backlight level is changed. On the WebContent side,
        the method getting the backlight level is swizzled to return the value sent from the UI process.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::displayBrightness):
        (WebKit::WebProcessPool::backlightLevelDidChangeCallback):
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::currentBacklightLevel):
        (WebKit::WebProcess::backlightLevelDidChange):

2019-03-11  Brent Fulgham  <bfulgham@apple.com>

        Remove obsolete runtime flag for StorageAccess API Prompt
        https://bugs.webkit.org/show_bug.cgi?id=195564
        <rdar://problem/37279014>

        Reviewed by Chris Dumez.

        This bug tracks the work of removing the obsolete flag that had been used to optionally
        prevent display of the StorageAccess API prompt. We have since shipped the final version
        of this feature with an always-on prompt, and should have removed this runtime flag.

        No test changes because this has no change in behavior. Tests already assume the prompt
        behavior, and did not test turning the flag off.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::ResourceLoadStatisticsStore::debugModeEnabled const):
        (WebKit::ResourceLoadStatisticsStore::storageAccessPromptsEnabled const): Deleted.
        (WebKit::ResourceLoadStatisticsStore::setStorageAccessPromptsEnabled): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::requestStorageAccess):
        (WebKit::NetworkProcess::requestStorageAccessGranted):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetStorageAccessPromptsEnabled): Deleted.
        (WKPreferencesGetStorageAccessPromptsEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _storageAccessPromptsEnabled]): Deleted.
        (-[WKPreferences _setStorageAccessPromptsEnabled:]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::requestStorageAccess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::requestStorageAccess):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestStorageAccess):

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

        Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
        https://bugs.webkit.org/show_bug.cgi?id=195511
        <rdar://problem/44873269>

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkContentRuleListManager.cpp:
        (WebKit::NetworkContentRuleListManager::addContentRuleLists):
        * NetworkProcess/NetworkContentRuleListManager.h:
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::pathRegisteredAsUnsafeToMemoryMapForTesting):
        (WebKit::NetworkCache::registerPathAsUnsafeToMemoryMapForTesting):
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * Shared/WebCompiledContentRuleList.cpp:
        (WebKit::WebCompiledContentRuleList::usesCopiedMemory const):
        (WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const):
        (WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const):
        (WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const):
        (WebKit::WebCompiledContentRuleList::topURLFiltersBytecode const):
        (WebKit::WebCompiledContentRuleList::actions const):
        * Shared/WebCompiledContentRuleList.h:
        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::size const):
        (WebKit::WebCompiledContentRuleListData::dataPointer const):
        (WebKit::WebCompiledContentRuleListData::encode const):
        (WebKit::WebCompiledContentRuleListData::decode):
        * Shared/WebCompiledContentRuleListData.h:
        (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
        * UIProcess/API/APIContentRuleList.cpp:
        (API::ContentRuleList::usesCopiedMemory const):
        * UIProcess/API/APIContentRuleList.h:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::getData):
        (API::decodeContentRuleListMetaData):
        (API::ContentRuleListStore::readContentsOfFile):
        (API::MappedOrCopiedData::dataPointer const):
        (API::openAndMapOrCopyContentRuleList):
        (API::compiledToFile):
        (API::createExtension):
        (API::ContentRuleListStore::lookupContentRuleList):
        (API::ContentRuleListStore::compileContentRuleList):
        (API::ContentRuleListStore::getContentRuleListSource):
        (API::openAndMapContentRuleList): Deleted.
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:
        (API::ContentRuleListStore::readContentsOfFile):
        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (+[WKContentRuleListStore _registerPathAsUnsafeToMemoryMapForTesting:]):
        * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter usesCopiedMemory]):
        * UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addContentRuleLists):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_hostFileDescriptor):

2019-03-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix assertions in layout tests on iOS Simulator after r242666.

        Log an error but do not crash if we fail to acquire a ProcessAssertion.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):

2019-03-11  Chris Dumez  <cdumez@apple.com>

        WebProcessCache should keep track of processes being added
        https://bugs.webkit.org/show_bug.cgi?id=195538

        Reviewed by Geoffrey Garen.

        WebProcessCache should keep track of processes being added, while they are being
        checked for responsiveness. This is useful so that:
        - Requests to clear the cache also clear processes being added
        - Requests to remove a given process from the cache (either because it crashed
          or because it is being used for a history navigation) actually remove the
          process if it is still being checked for responsiveness.
        - The cached process eviction timer applies to such processes in case something
          goes wrong with the code and the pending request does not get processed.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::generateAddRequestIdentifier):
        (WebKit::WebProcessCache::addProcessIfPossible):
        (WebKit::WebProcessCache::addProcess):
        (WebKit::WebProcessCache::clear):
        (WebKit::WebProcessCache::clearAllProcessesForSession):
        (WebKit::WebProcessCache::removeProcess):
        (WebKit::WebProcessCache::CachedProcess::evictionTimerFired):
        (WebKit::WebProcessCache::evictProcess): Deleted.
        * UIProcess/WebProcessCache.h:
        (WebKit::WebProcessCache::size const):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):

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

        REGRESSION: ( r240978-r240985 ) [ iOS Release ] Layout Test imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm is crashing
        https://bugs.webkit.org/show_bug.cgi?id=194523

        Reviewed by Alexey Proskuryakov.

        Attempt another workaround to prevent crashes.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:needNewBodyStream:]):

2019-03-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242688, r242643, r242624.

        Caused multiple layout test failures and crashes on iOS and macOS.

        Reverted changeset:

        "requestAnimationFrame should execute before the next frame"
        https://bugs.webkit.org/show_bug.cgi?id=177484
        https://trac.webkit.org/changeset/242624/webkit

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::scheduleCompositingLayerFlush):
        (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState):
        (WebKit::DrawingAreaCoordinatedGraphics::display):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::layerFlushTimerFired):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::layoutIfNeeded):
        (WebKit::WebPage::willDisplayPage):
        (WebKit::WebPage::renderingUpdate): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2019-03-11  Darin Adler  <darin@apple.com>

        Specify fixed precision explicitly to prepare to change String::number and StringBuilder::appendNumber floating point behavior
        https://bugs.webkit.org/show_bug.cgi?id=195533

        Reviewed by Brent Fulgham.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::dumpContentsToFile): Use appendFixedPrecisionNumber.
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::asJSON const): Ditto.
        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::loggingString const): Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::logDiagnosticMessageWithValue): Use numberToStringFixedPrecision.

2019-03-11  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make it possible exclude localhost from classification
        https://bugs.webkit.org/show_bug.cgi?id=195474
        <rdar://problem/47520577>

        Reviewed by Brent Fulgham.

        This patch allows for localhost to be excluded from classification and
        treatment as a prevalent resource.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::reclassifyResources):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        (WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        (WebKit::ResourceLoadStatisticsDatabaseStore::isPrevalentResource const):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        (WebKit::ResourceLoadStatisticsDatabaseStore::isVeryPrevalentResource const):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        (WebKit::ResourceLoadStatisticsDatabaseStore::setVeryPrevalentResource):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
        (WebKit::ResourceLoadStatisticsMemoryStore::classifyPrevalentResources):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        (WebKit::ResourceLoadStatisticsMemoryStore::setPrevalentResource):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        (WebKit::ResourceLoadStatisticsMemoryStore::isPrevalentResource const):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        (WebKit::ResourceLoadStatisticsMemoryStore::isVeryPrevalentResource const):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        (WebKit::ResourceLoadStatisticsMemoryStore::setVeryPrevalentResource):
            Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::ResourceLoadStatisticsStore):
            Now takes a ShouldIncludeLocalhost parameter.
        (WebKit::ResourceLoadStatisticsStore::shouldSkip const):
            Convenience function, currently supporting the localhost exclusion.
        (WebKit::ResourceLoadStatisticsStore::setIsRunningTest):
            Test infrastructure.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setIsRunningTest):
            Test infrastructure.
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
            Now takes a ShouldIncludeLocalhost parameter.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
            Defines the new ShouldIncludeLocalhost boolean enum.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setIsRunningResourceLoadStatisticsTest):
            Test infrastructure.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
            Forwards the localhost setting to the create function.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
            New parameter called shouldIncludeLocalhostInResourceLoadStatistics.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
            Picks up the localhost setting from the parameters.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsIsRunningTest):
            Test infrastructure.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setIsRunningResourceLoadStatisticsTest):
            Test infrastructure.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
            Picks up the localhost setting from the WebsiteDataStore parameters.
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
            Makes sure Safari does not exclude localhost.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setIsRunningResourceLoadStatisticsTest):
            Test infrastructure.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        Unreviewed, rolling out r242698.

        API test crashes on bots.

        Reverted changeset:

        "Add a WKContentRuleList variant that uses copied memory
        instead of mmap'd shared memory for class A containerized
        apps"
        https://bugs.webkit.org/show_bug.cgi?id=195511
        https://trac.webkit.org/changeset/242698

2019-03-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Enable web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195169

        Reviewed by Daniel Bates.

        * PlatformWPE.cmake:
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):

2019-03-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r242697.

        Broke internal builders.

        Reverted changeset:

        "Optimizing loads when creating new pages"
        https://bugs.webkit.org/show_bug.cgi?id=195516
        https://trac.webkit.org/changeset/242697

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

        Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
        https://bugs.webkit.org/show_bug.cgi?id=195511
        <rdar://problem/44873269>

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkContentRuleListManager.cpp:
        (WebKit::NetworkContentRuleListManager::addContentRuleLists):
        * NetworkProcess/NetworkContentRuleListManager.h:
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::pathRegisteredAsUnsafeToMemoryMapForTesting):
        (WebKit::NetworkCache::registerPathAsUnsafeToMemoryMapForTesting):
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * Shared/WebCompiledContentRuleList.cpp:
        (WebKit::WebCompiledContentRuleList::usesCopiedMemory const):
        (WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const):
        (WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const):
        (WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const):
        (WebKit::WebCompiledContentRuleList::topURLFiltersBytecode const):
        (WebKit::WebCompiledContentRuleList::actions const):
        * Shared/WebCompiledContentRuleList.h:
        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::size const):
        (WebKit::WebCompiledContentRuleListData::dataPointer const):
        (WebKit::WebCompiledContentRuleListData::encode const):
        (WebKit::WebCompiledContentRuleListData::decode):
        * Shared/WebCompiledContentRuleListData.h:
        (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
        * UIProcess/API/APIContentRuleList.cpp:
        (API::ContentRuleList::usesCopiedMemory const):
        * UIProcess/API/APIContentRuleList.h:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::getData):
        (API::decodeContentRuleListMetaData):
        (API::ContentRuleListStore::readContentsOfFile):
        (API::MappedOrCopiedData::dataPointer const):
        (API::openAndMapOrCopyContentRuleList):
        (API::compiledToFile):
        (API::createExtension):
        (API::ContentRuleListStore::lookupContentRuleList):
        (API::ContentRuleListStore::compileContentRuleList):
        (API::ContentRuleListStore::getContentRuleListSource):
        (API::openAndMapContentRuleList): Deleted.
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:
        (API::ContentRuleListStore::readContentsOfFile):
        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (+[WKContentRuleListStore _registerPathAsUnsafeToMemoryMapForTesting:]):
        * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter usesCopiedMemory]):
        * UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addContentRuleLists):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_hostFileDescriptor):

2019-03-10  Jiewen Tan  <jiewen_tan@apple.com>

        Optimizing loads when creating new pages
        https://bugs.webkit.org/show_bug.cgi?id=195516
        <rdar://problem/48738086>

        Reviewed by Darin Adler.

        This patch adds hooks in WebPageProxy::createNewPage to optimize loads, and moves the creationParameters
        of API::NavigationAction from UI clients to WebPageProxy::createNewPage. Also, we now pass the whole
        API::NavigationAction to the load optimizer instead of the request within.

        * UIProcess/API/APINavigationAction.h:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryOptimizingLoad):
        (WebKit::tryInterceptNavigation):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::tryOptimizingLoad):
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:

2019-03-10  Tim Horton  <timothy_horton@apple.com>

        Add SPI to retrieve the set of text inputs in a given rect, and later focus one
        https://bugs.webkit.org/show_bug.cgi?id=195499

        Reviewed by Darin Adler.

        * Scripts/webkit/messages.py:
        * Shared/TextInputContext.cpp: Added.
        (IPC::ArgumentCoder<WebKit::TextInputContext>::encode):
        (IPC::ArgumentCoder<WebKit::TextInputContext>::decode):
        * Shared/TextInputContext.h: Added.
        (WebKit::TextInputContext::operator== const):
        Add TextInputContext, which represents a minimal set of information
        about a text field.

        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]):
        (-[WKWebView _focusTextInputContext:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Add SPI that allows clients to asynchronously request text input
        contexts for a given rect, and later focus a given context.

        * UIProcess/API/Cocoa/_WKTextInputContext.h: Added.
        * UIProcess/API/Cocoa/_WKTextInputContext.mm: Added.
        (-[_WKTextInputContext _initWithTextInputContext:]):
        (-[_WKTextInputContext boundingRect]):
        (-[_WKTextInputContext _textInputContext]):
        (-[_WKTextInputContext isEqual:]):
        (-[_WKTextInputContext hash]):
        (-[_WKTextInputContext copyWithZone:]):
        * UIProcess/API/Cocoa/_WKTextInputContextInternal.h: Added.
        Add an SPI object that exposes a read-only window on a TextInputContext to clients.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::textInputContextsInRect):
        (WebKit::WebPageProxy::focusTextInputContext):
        * UIProcess/WebPageProxy.h:
        Plumbing from WKWebView<->WebPage.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::elementRectInWindowCoordinates):
        (WebKit::isEditableTextInputElement):
        (WebKit::WebPage::textInputContextsInRect):
        Search the DOM for text input contexts: <input type='text'> (or other
        form fields that fall back on text field behavior), <textarea>, and
        contenteditable roots. Store the WebPage, Document, and Element identifiers
        so that we can find the element again later.

        (WebKit::WebPage::focusTextInputContext):
        Find the element for a given (web page, document, element) triple and focus it,
        if it's still available.

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

2019-03-10  Tim Horton  <timothy_horton@apple.com>

        iOS: Using ⌥ to scroll horizontally is no different than arrow key
        https://bugs.webkit.org/show_bug.cgi?id=195268
        <rdar://problem/48326682>

        Reviewed by Brent Fulgham.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:inDirection:]):
        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]): Deleted.
        * UIProcess/ios/WKKeyboardScrollingAnimator.h:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
        (-[WKKeyboardScrollViewAnimator setDelegate:]):
        (-[WKKeyboardScrollViewAnimator distanceForIncrement:inDirection:]):
        (-[WKKeyboardScrollViewAnimator distanceForIncrement:]): Deleted.
        Add a direction parameter to -distanceForIncrement:, so the client
        can return a different page/document size based on the scrolling axis.
        Adopt it both in the default implementation and in WKContentViewInteraction.
        Make the option key scroll by page when scrolling horizontally, like it
        does when scrolling vertically.

2019-03-10  David Quesada  <david_quesada@apple.com>

        ASSERT(m_downloads.isEmpty()) fails in DownloadProxyMap::~DownloadProxyMap()
        https://bugs.webkit.org/show_bug.cgi?id=152480

        Reviewed by Chris Dumez.

        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::downloadFinished):
            If the DownloadProxy is holding the last reference to the process pool, then
            invalidating the proxy will cause the process pool, the network process proxy,
            and this DownloadProxyMap to deallocate. Ensure that doesn't happen until this
            method has done everything it wants to do to clean up.

2019-03-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix some misleading function and variable names in WKContentViewInteraction.mm
        https://bugs.webkit.org/show_bug.cgi?id=195536

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (shouldDeferZoomingToSelectionWhenRevealingFocusedElement):

        Rename shouldZoomToRevealSelectionRect to shouldDeferZoomingToSelectionWhenRevealingFocusedElement; this
        function is used to determine whether we should zoom to the selection rect when revealing the focused element,
        and therefore affects whether we need to defer zooming until we get selection information.

        (rectToRevealWhenZoomingToFocusedElement):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

        Rename shouldShowKeyboard to shouldShowInputView; this boolean indicates whether we should show not only the
        keyboard, but other UI for user input such as date and select pickers.

        (-[WKContentView _didReceiveEditorStateUpdateAfterFocus]):
        (shouldZoomToRevealSelectionRect): Deleted.

2019-03-10  Simon Fraser  <simon.fraser@apple.com>

        ScrollingTree should have the final say on where layers go
        https://bugs.webkit.org/show_bug.cgi?id=195507

        Reviewed by Antti Koivisto.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::applyScrollingTreeLayerPositions):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2019-03-09  Darin Adler  <darin@apple.com>

        [Cocoa] Code signing fails because services are copied into XPCServices after the framework is signed
        https://bugs.webkit.org/show_bug.cgi?id=195523

        Reviewed by Dan Bernstein.

        * WebKit.xcodeproj/project.pbxproj: Make symbolic links while building the WebKit
        framework instead of copying in the services after the framework is built.

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

        REGRESSION (r242551): Sporadic hangs when tapping to change selection on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195475
        <rdar://problem/48721153>

        Reviewed by Chris Dumez.

        r242551 refactored synchronous autocorrection context requests to send an async IPC message and then use
        waitForAndDispatchImmediately, instead of calling sendSync. However, this exposes a couple of existing issues in
        the implementation of waitForAndDispatchImmediately that causes sporadic IPC deadlocks when changing selection.

        First, passing in InterruptWaitingIfSyncMessageArrives when synchronously waiting for an IPC message currently
        does not fulfill its intended behavior of interrupting waiting when a sync message arrives. This is because sync
        IPC messages, by default, may be dispatched while the receiver is waiting for a sync reply. This means that the
        logic in Connection::SyncMessageState::processIncomingMessage to dispatch an incoming sync message on the main
        thread will attempt to handle the incoming message by enqueueing it on the main thread, and then waking up the
        client runloop (i.e. signaling m_waitForSyncReplySemaphore). This works in the case of sendSync since the sync
        reply semaphore is used to block the main thread, but in the case of waitForAndDispatchImmediately, a different
        m_waitForMessageCondition is used instead, so SyncMessageState::processIncomingMessage will only enqueue the
        incoming sync message on the main thread, and not actually invoke it.

        To fix this first issue, observe that there is pre-existing logic to enqueue the incoming message and signal
        m_waitForMessageCondition in Connection::processIncomingMessage. This codepath is currently not taken because we
        end up bailing early in the call to SyncMessageState::processIncomingMessage. Instead, we can move this early
        return further down in the function, such that if there is an incoming sync message and we're waiting with the
        InterruptWaitingIfSyncMessageArrives option, we will correctly enqueue the incoming message, wake the runloop,
        and proceed to handle the incoming message.

        The second issue is more subtle; consider the scenario in which we send a sync message A from the web process to
        the UI process, and simultaneously, in the UI process, we schedule some work to be done on the main thread.
        Let's additionally suppose that this scheduled work will send an IPC message B to the web process and
        synchronously wait for a reply (in the case of this particular bug, this is the sync autocorrection context
        request). What happens upon receiving sync message A is that the IPC thread in the UI process will schedule A on
        the main thread; however, before the scheduled response to A is invoked, we will first invoke previously
        scheduled work that attempts to block synchronously until a message B is received. In summary:

        1. (Web process)    sends sync IPC message A to UI process.
        2. (UI process)     schedules some main runloop task that will block synchronously on IPC message B.
        3. (UI process)     receives sync IPC message A and schedules A on the main runloop.
        4. (UI process)     carry out the task scheduled in (2) and block on B.

        ...and then, the UI process and web process are now deadlocked because the UI process is waiting for B to
        arrive, but the web process can't send B because it's waiting for a reply for IPC message A! To fix this second
        deadlock, we first make an important observation: when using sendSync, we don't run into this problem because
        immediately before sending sync IPC, we will attempt to handle any incoming sync IPC messages that have been
        queued up. However, when calling waitForAndDispatchImmediately, we don't have this extra step, so a deadlock may
        occur in the manner described above. To fix this, we make waitForAndDispatchImmediately behave more like
        sendSync, by handling all incoming sync messages prior to blocking on an IPC response.

        Test: editing/selection/ios/change-selection-by-tapping.html

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForMessage):
        (IPC::Connection::processIncomingMessage):

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

        [Apple Pay] CanMakePaymentsWithActiveCard and OpenPaymentSetup should be async messages
        https://bugs.webkit.org/show_bug.cgi?id=195526
        <rdar://problem/48745636>

        Reviewed by Chris Dumez.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::canMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinatorProxy::openPaymentSetup):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinator::openPaymentSetup):
        (WebKit::generateCanMakePaymentsWithActiveCardReplyID): Deleted.
        (WebKit::generateOpenPaymentSetupReplyID): Deleted.
        (WebKit::WebPaymentCoordinator::canMakePaymentsWithActiveCardReply): Deleted.
        (WebKit::WebPaymentCoordinator::openPaymentSetupReply): Deleted.
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/ApplePay/WebPaymentCoordinator.messages.in:

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

        [iOS] Remove unneeded entitlements and sandbox allowances from the Networking service
        https://bugs.webkit.org/show_bug.cgi?id=195527

        Reviewed by Eric Carlson.

        * Configurations/Network-iOS.entitlements:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:

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

        Use modern async IPC with reply for device orientation permission
        https://bugs.webkit.org/show_bug.cgi?id=195529

        Reviewed by Ryosuke Niwa.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestDeviceOrientationAndMotionAccess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess):
        (WebKit::nextDeviceOrientationAndMotionPermissionCallbackID): Deleted.
        (WebKit::WebPage::didReceiveDeviceOrientationAndMotionAccessDecision): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-03-09  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Start observing for content change between touchEnd and mouseMoved start
        https://bugs.webkit.org/show_bug.cgi?id=195510
        <rdar://problem/48735695>

        Reviewed by Simon Fraser.

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

2019-03-08  Chris Dumez  <cdumez@apple.com>

        Enable ProcessAssertions on iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=195479

        Reviewed by Alexey Proskuryakov.

        Enable ProcessAssertions on iOS Simulator. We have some layout tests timing out in the
        iOS Simulator due to the WebContent process suspending. Turning on ProcessAssertions in
        the iOS Simulator seems to make those tests pass.

        * UIProcess/ProcessAssertion.cpp:
        * UIProcess/ProcessAssertion.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:

2019-03-08  Chris Dumez  <cdumez@apple.com>

        Add support for Device Orientation / Motion permission API
        https://bugs.webkit.org/show_bug.cgi?id=195329
        <rdar://problem/47645367>

        Reviewed by Geoffrey Garen.

        Add support for Device Orientation / Motion permission API:
        - https://github.com/w3c/deviceorientation/issues/57

        This adds new SPI to WKUIDelegatePrivate, until we can make this API.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestDeviceOrientationAndMotionAccess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldAllowDeviceOrientationAndMotionAccess):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::nextDeviceOrientationAndMotionPermissionCallbackID):
        (WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess):
        (WebKit::WebPage::didReceiveDeviceOrientationAndMotionAccessDecision):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-03-08  Brady Eidson  <beidson@apple.com>

        Have the UIProcess take the UnboundedNetworking assertion when downloads are in progress.
        https://bugs.webkit.org/show_bug.cgi?id=195468

        Reviewed by Andy Estes.

        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::DownloadProxyMap):
        (WebKit::DownloadProxyMap::createDownloadProxy): If this is the first download, and the process has the entitlement,
          take the assertion.
        (WebKit::DownloadProxyMap::downloadFinished):
        (WebKit::DownloadProxyMap::processDidClose):
        * UIProcess/Downloads/DownloadProxyMap.h:

2019-03-08  Chris Dumez  <cdumez@apple.com>

        Add assertions to help debug a WebProcessCache crash
        https://bugs.webkit.org/show_bug.cgi?id=195469

        Reviewed by Brady Eidson.

        I suspect the process's registrableDomain in null when evictProcess() gets
        called, thus crashing when lookup it up in the HashMap. Confirm this and
        how this could happen via assertions.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::evictProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):

2019-03-08  Brady Eidson  <beidson@apple.com>

        Rename AssertionState::Download.
        https://bugs.webkit.org/show_bug.cgi?id=195465

        Reviewed by Andy Estes.

        It's (currently) about uploads and downloads.
        Let's call it "UnboundedNetworking"

        * NetworkProcess/Downloads/DownloadMap.cpp:
        (WebKit::DownloadMap::add):

        * UIProcess/ProcessAssertion.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didSetAssertionState):

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::flagsForState):
        (WebKit::reasonForState):

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

        [macOS UI-side compositing] Mouse handling can trigger a crash before we have a scrolling tree root
        https://bugs.webkit.org/show_bug.cgi?id=195467

        Reviewed by Antti Koivisto.
        
        When launching MiniBrowser with UI-side compositing enabled in a state where the window
        appears under the mouse, we can hit RemoteScrollingTree::handleMouseEvent() for a mouseEnter
        event before we have a scrolling tree root node, so add a null check.

        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::handleMouseEvent):

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

        REGRESSION(r242624): [GTK] New rAF code path assumes AC mode
        https://bugs.webkit.org/show_bug.cgi?id=195459

        Reviewed by Žan Doberšek.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::scheduleCompositingLayerFlush):
        The refresh monitor now calls scheduleLayerFlush() but when AC
        mode is disabled this method does nothing, so setNeedsDisplay()
        needs to be called instead.

2019-03-07  Tim Horton  <timothy_horton@apple.com>

        Crash under RemoteLayerTreePropertyApplier::applyProperties
        https://bugs.webkit.org/show_bug.cgi?id=195448
        <rdar://problem/48588226>

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        Under some currently-unknown circumstances, the UI process is receiving
        commits referring to layers that it does not know about.
        One understood case of this was fixed in r241899, but there seem to be
        cases remaining that are not understood.
        Also, add a release log so that we can identify any downstream effects.

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Introduce fixed duration content observation
        https://bugs.webkit.org/show_bug.cgi?id=195295
        <rdar://problem/48579913>

        Reviewed by Simon Fraser.

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

2019-03-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][WebKit] Nothing is drawn after Web process crashed
        https://bugs.webkit.org/show_bug.cgi?id=195399

        Reviewed by Alex Christensen.

        PageClientImpl::viewSize returned 0x0 size after Web process
        crashed. Restored the original implementation using GetClientRect
        (Bug 52175).

        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::viewSize):

2019-03-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Replace the calls to Page::layoutIfNeeded() and willDisplayPage() by
        a single call to Page::renderingUpdate(). This new function implements 
        "Update the rendering" step of the HTML Event Loop specification
        <https://html.spec.whatwg.org/multipage/webappapis.html#update-the-rendering>.

        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::updateBackingStoreState):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::layerFlushTimerFired):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::layoutIfNeeded):
        (WebKit::WebPage::renderingUpdate):
        (WebKit::WebPage::willDisplayPage): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add a setting to be able to turn content change observation on/off
        https://bugs.webkit.org/show_bug.cgi?id=195353
        <rdar://problem/48626394>

        Reviewed by Simon Fraser.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetContentChangeObserverEnabled):
        (WKPreferencesGetContentChangeObserverEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _contentChangeObserverEnabled]):
        (-[WKPreferences _setContentChangeObserverEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):

2019-03-07  Andy Estes  <aestes@apple.com>

        [Apple Pay] Untangle PKPaymentAuthorizationViewController from WebPaymentCoordinatorProxy
        https://bugs.webkit.org/show_bug.cgi?id=195349
        <rdar://problem/48625510>

        Reviewed by Alex Christensen.

        Introduced PaymentAuthorizationPresenter and WKPaymentAuthorizationDelegate to encapsulate
        PKPaymentAuthorizationViewController and its delegate. Taught WebPaymentCoordinatorProxy to
        interact with PaymentAuthorizationPresenter rather than PKPAVC directly.

        These changes will allow us to swap out PKPaymentAuthorizationViewController with PKPaymentAuthorizationController in a follow-on patch.

        * Platform/cocoa/PaymentAuthorizationPresenter.h: Added. Defined the abstract interface for
        payment authorization presenters that use PKPA(V)C.
        * Platform/cocoa/PaymentAuthorizationPresenter.mm: Added.
        (WebKit::toPKPaymentAuthorizationStatus): Moved from WebPaymentCoordinatorProxyCocoa.mm.
        (WebKit::toPKPaymentErrorCode): Ditto.
        (WebKit::toNSError): Ditto.
        (WebKit::toNSErrors): Ditto.
        (WebKit::toPKShippingMethods): Ditto.
        (WebKit::PaymentAuthorizationPresenter::completeMerchantValidation): Added. Implements the
        logic previously in WebPaymentCoordinatorProxy::platformCompleteMerchantValidation.
        (WebKit::PaymentAuthorizationPresenter::completePaymentMethodSelection): Ditto for
        WebPaymentCoordinatorProxy::platformCompletePaymentMethodSelection.
        (WebKit::PaymentAuthorizationPresenter::completePaymentSession): Ditto for 
        (WebKit::PaymentAuthorizationPresenter::completeShippingContactSelection): Ditto for
        WebPaymentCoordinatorProxy::platformCompletePaymentSession.
        (WebKit::PaymentAuthorizationPresenter::completeShippingMethodSelection): Ditto for
        WebPaymentCoordinatorProxy::platformCompleteShippingMethodSelection.
        * Platform/cocoa/PaymentAuthorizationViewController.h: Added. Defined a subclass of PaymentAuthorizationPresenter for PKPaymentAuthorizationViewController.
        * Platform/cocoa/PaymentAuthorizationViewController.mm: Added.
        (-[WKPaymentAuthorizationViewControllerDelegate initWithPresenter:]): Added a PKPAVC
        delegate that's a subclass of WKPaymentAuthorizationDelegate.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewControllerDidFinish:]):
        Called -[WKPaymentAuthorizationDelegate _didFinish].
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didAuthorizePayment:handler:]): Called
        -[WKPaymentAuthorizationDelegate _didAuthorizePayment:completion:].
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingMethod:handler:]): Called
        -[WKPaymentAuthorizationDelegate _didSelectShippingMethod:completion:].
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingContact:handler:]): Called
        -[WKPaymentAuthorizationDelegate _didSelectShippingContact:completion:].
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectPaymentMethod:handler:]): Called
        -[WKPaymentAuthorizationDelegate _didSelectPaymentMethod:completion:].
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:willFinishWithError:]):
        Called -[WKPaymentAuthorizationDelegate _willFinishWithError:].
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didRequestMerchantSession:]): Called
        -[WKPaymentAuthorizationDelegate _didRequestMerchantSession:].
        * Platform/cocoa/WKPaymentAuthorizationDelegate.h: Added.
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm: Added.
        (-[WKPaymentAuthorizationDelegate summaryItems]): Added a summaryItems getter.
        (-[WKPaymentAuthorizationDelegate shippingMethods]): Ditto for shippingMethods.
        (-[WKPaymentAuthorizationDelegate completeMerchantValidation:error:]): Called
        _didRequestMerchantSessionCompletion then set it to nil.
        (-[WKPaymentAuthorizationDelegate completePaymentMethodSelection:]): Ditto for
        _didSelectPaymentMethodCompletion.
        (-[WKPaymentAuthorizationDelegate completePaymentSession:errors:didReachFinalState:]): Ditto
        for _didAuthorizePaymentCompletion.
        (-[WKPaymentAuthorizationDelegate completeShippingContactSelection:summaryItems:shippingMethods:errors:]):
        Ditto for _didSelectShippingContactCompletion.
        (-[WKPaymentAuthorizationDelegate completeShippingMethodSelection:]): Ditto for
        _didSelectShippingMethodCompletion.
        (-[WKPaymentAuthorizationDelegate invalidate]): If there's an outstanding authorization
        callback, called -completePaymentSession:errors:didReachFinalState: with a state of
        PKPaymentAuthorizationStatusFailure.
        (-[WKPaymentAuthorizationDelegate _initWithPresenter:]):
        (-[WKPaymentAuthorizationDelegate _didAuthorizePayment:completion:]): Added. Implements the
        logic previously in WKPaymentAuthorizationViewControllerDelegate.
        (-[WKPaymentAuthorizationDelegate _didFinish]): Ditto.
        (-[WKPaymentAuthorizationDelegate _didRequestMerchantSession:]): Ditto.
        (-[WKPaymentAuthorizationDelegate _didSelectPaymentMethod:completion:]): Ditto.
        (-[WKPaymentAuthorizationDelegate _didSelectShippingContact:completion:]): Ditto.
        (toShippingMethod): Moved from WebPaymentCoordinatorProxyCocoa.mm.
        (-[WKPaymentAuthorizationDelegate _didSelectShippingMethod:completion:]): Added. Implements
        the logic previously in WKPaymentAuthorizationViewControllerDelegate.
        (-[WKPaymentAuthorizationDelegate _willFinishWithError:]): Ditto.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::presenterWillValidateMerchant): To conform to
        PaymentAuthorizationPresenter::Client, renamed from validateMerchant.
        (WebKit::WebPaymentCoordinatorProxy::presenterDidAuthorizePayment): Renamed from
        didAuthorizePayment.
        (WebKit::WebPaymentCoordinatorProxy::presenterDidFinish): Moved logic here that previously
        existed in WKPaymentAuthorizationViewControllerDelegate.
        (WebKit::WebPaymentCoordinatorProxy::presenterDidSelectShippingMethod): Renamed from
        didSelectShippingMethod.
        (WebKit::WebPaymentCoordinatorProxy::presenterDidSelectShippingContact): Renamed from
        didSelectShippingContact.
        (WebKit::WebPaymentCoordinatorProxy::presenterDidSelectPaymentMethod): Renamed from
        didSelectPaymentMethod.
        (WebKit::WebPaymentCoordinatorProxy::validateMerchant): Renamed to
        presenterWillValidateMerchant.
        (WebKit::WebPaymentCoordinatorProxy::didAuthorizePayment): Renamed to
        presenterDidAuthorizePayment.
        (WebKit::WebPaymentCoordinatorProxy::didSelectShippingMethod): Renamed to
        presenterDidSelectShippingMethod.
        (WebKit::WebPaymentCoordinatorProxy::didSelectShippingContact): Renamed to
        presenterDidSelectShippingContact.
        (WebKit::WebPaymentCoordinatorProxy::didSelectPaymentMethod): Renamed to
        didSelectPaymentMethod.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h: Changed WebPaymentCoordinatorProxy to
        subclass PaymentAuthorizationPresenter::Client.
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h: Removed WKPaymentAuthorizationViewControllerDelegate interface and declared some helper functions
        needed by PaymentAuthorizationPresenter.
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKPaymentSummaryItemType): Removed static keyword.
        (WebKit::toDecimalNumber): Ditto.
        (WebKit::toPKPaymentSummaryItem): Ditto.
        (WebKit::toPKPaymentSummaryItems): Ditto.
        (WebKit::toPKShippingMethod): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest): Changed to call
        m_authorizationPresenter.
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentSession): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteMerchantValidation): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingMethodSelection): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingContactSelection): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentMethodSelection): Ditto.
        (-[WKPaymentAuthorizationViewControllerDelegate initWithPaymentCoordinatorProxy:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate invalidate]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:willFinishWithError:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didRequestMerchantSession:]): Deleted.
        (toShippingMethod): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didAuthorizePayment:handler:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectPaymentMethod:handler:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingMethod:handler:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingContact:handler:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didAuthorizePayment:completion:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingMethod:completion:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectPaymentMethod:completion:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingContact:completion:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewControllerDidFinish:]): Deleted.
        (WebKit::toPKPaymentAuthorizationStatus): Moved to PaymentAuthorizationPresenter.mm.
        (WebKit::toPKPaymentErrorCode): Ditto.
        (WebKit::toNSError): Ditto.
        (WebKit::toNSErrors): Ditto.
        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Changed to present a
        PaymentAuthorizationPresenter rather than a PKPAVC.
        (WebKit::WebPaymentCoordinatorProxy::hidePaymentUI): Changed to dismiss a
        PaymentAuthorizationPresenter rather than a PKPAVC.
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::hidePaymentUI): Ditto.
        * SourcesCocoa.txt:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::paymentCoordinatorAuthorizationPresenter): Added. Returns a new
        PaymentAuthorizationViewController.
        * WebKit.xcodeproj/project.pbxproj:

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

        Regression(r242580) WebKit.NetworkProcessCrashWithPendingConnection API is crashing on iOS debug
        https://bugs.webkit.org/show_bug.cgi?id=195416

        Reviewed by Antti Koivisto.

        Drop ASSERT_NOT_REACHED() in WebPage::didCompletePageTransition() when the tree is still frozen due to
        LayerTreeFreezeReason::ProcessSuspended. As demonstrated by this API test, nothing prevents a load from
        completing and WebPage::didCompletePageTransition() to get called *after* WebProcess::prepareToSuspend()
        has been called. From the logging during the test, I can tell that WebProcess::processDidResume() gets
        called later on and the LayerTreeFreezeReason::ProcessSuspended freezing reason gets dropped, as expected.

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

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

        Clean up / simplify ProcessAssertion code
        https://bugs.webkit.org/show_bug.cgi?id=195394

        Reviewed by Geoffrey Garen.

        Clean up / simplify ProcessAssertion code to facilitate its maintenance and make it
        less error-prone.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::setState):
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::Client::~Client):
        (WebKit::ProcessAssertion::setClient):
        (WebKit::ProcessAssertion::client):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::didConnectToProcess):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager dealloc]):
        (-[WKProcessAssertionBackgroundTaskManager addAssertionNeedingBackgroundTask:]):
        (-[WKProcessAssertionBackgroundTaskManager removeAssertionNeedingBackgroundTask:]):
        (-[WKProcessAssertionBackgroundTaskManager _notifyAssertionsOfImminentSuspension]):
        (-[WKProcessAssertionBackgroundTaskManager _releaseBackgroundTask]):
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::processAssertionWasInvalidated):
        (WebKit::ProcessAssertion::setState):
        (WebKit::ProcessAndUIAssertion::updateRunInBackgroundCount):
        (WebKit::ProcessAndUIAssertion::ProcessAndUIAssertion):
        (WebKit::ProcessAndUIAssertion::~ProcessAndUIAssertion):
        (WebKit::ProcessAndUIAssertion::processAssertionWasInvalidated):
        (WebKit::ProcessAndUIAssertion::setState):
        (WebKit::ProcessAndUIAssertion::uiAssertionWillExpireImminently):

2019-03-07  Commit Queue  <commit-queue@webkit.org>

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

        Broke Microsoft Visio. (Requested by dydz on #webkit).

        Reverted changeset:

        "[iOS] Turn mouse event simulation on by default"
        https://bugs.webkit.org/show_bug.cgi?id=195218
        https://trac.webkit.org/changeset/242297

2019-03-07  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Log first-party navigations with link decoration
        https://bugs.webkit.org/show_bug.cgi?id=195301
        <rdar://problem/48569971>

        Reviewed by Brent Fulgham.

        This patch adds a call to the network process' resource load statistics to
        log cross-site navigations with link decoration. The logging checks if the
        source of the navigation is a prevalent resource and if so, sets the
        appropriate flag for the destination.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logSubresourceRedirect):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logCrossSiteLoadWithLinkDecoration):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::logCrossSiteLoadWithLinkDecoration):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logCrossSiteLoadWithLinkDecoration):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::committedCrossSiteLoadWithLinkDecoration):
            This now receives a completion handler. This is in preparation for
            test cases where we need to log such an event and wait for it to
            finish before continuing.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::committedCrossSiteLoadWithLinkDecoration):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::committedCrossSiteLoadWithLinkDecoration):
        * UIProcess/WebProcessPool.h:

2019-03-07  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Disable permissive call logging in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195288
        <rdar://problem/47683804>

        Reviewed by Brent Fulgham.

        As on macOS, we should enable strict call filtering in sandbox on iOS.

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

2019-03-07  Youenn Fablet  <youenn@apple.com>

        Introduce a quota manager for Cache API/Service Worker/IDB storage
        https://bugs.webkit.org/show_bug.cgi?id=195283

        Reviewed by Chris Dumez.

        Remove quota handling from Cache API storage and use StorageQuotaManager/StorageQuotaUser.
        CacheStorage::Caches becomes a quota user and has a StorageQuotaManager to check for space for any cache API write task.
        NetworkProcess is responsible to manage the quota managers.
        Quota managers will go through network process to ask UIProcess for quota extension.

        Remove pending callback handling from CacheStorage since they are queued in QuotaManager now.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::~NetworkProcess):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::cacheStorageRootPath):
        (WebKit::NetworkProcess::setCacheStorageParameters):
        (WebKit::NetworkProcess::storageQuotaManager):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::from):
        (WebKit::CacheStorage::Engine::Engine):
        (WebKit::CacheStorage::Engine::readCachesFromDisk):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::put):
        * NetworkProcess/cache/CacheStorageEngineCache.h:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::Caches):
        (WebKit::CacheStorage::Caches::~Caches):
        (WebKit::CacheStorage::Caches::requestSpace):
        (WebKit::CacheStorage::Caches::writeRecord):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:

2019-03-07  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make it possible to purge only script-accessible cookies
        https://bugs.webkit.org/show_bug.cgi?id=195383
        <rdar://problem/48570136>

        Reviewed by Brent Fulgham.

        This patch provides the ability to purge all script-accessible cookies while leaving
        HttpOnly cookies in place.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
            Support for a new boolean flag on whether or not to include HttpOnly Cookies.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
            Support for a new boolean flag on whether or not to include HttpOnly Cookies.
        (WebKit::NetworkProcess::deleteCookiesForTesting):
            Test infrastructure.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
            Support for a new boolean flag on whether or not to include HttpOnly Cookies.
        * NetworkProcess/NetworkSession.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsDeleteCookiesForTesting):
            Test infrastructure.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::deleteCookiesForTesting):
            Test infrastructure.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::deleteCookiesForTesting):
            Test infrastructure.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        REGRESSION(r242364): [WPE] Do not stop the compositing run loop update timer on suspend
        https://bugs.webkit.org/show_bug.cgi?id=195410

        Reviewed by Žan Doberšek.

        Calling CompositingRunLoop::stopUpdates() on suspend is leaving the threaded compositor in an inconsistent
        state, failing to resume and stopping the updates forever. This is causing timeouts in WPE layout tests. Instead
        of calling stopUpdates(), a new suspend() is called, that stops the update timer, without changing the current
        updae tha compositing state. A new method resume() is also added to schedule an update if needed.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::suspend): Set state as suspended and stop the update timer.
        (WebKit::CompositingRunLoop::resume): Set state as not suspended and start the update timer if it was scheduled
        while suspended.
        (WebKit::CompositingRunLoop::scheduleUpdate): Do not start the update timer when suspended.
        (WebKit::CompositingRunLoop::compositionCompleted): Ditto.
        (WebKit::CompositingRunLoop::updateCompleted): Ditto.
        (WebKit::CompositingRunLoop::updateTimerFired): Add an assert to ensure the update timer is not fired while suspended.
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::suspend): Call CompositingRunLoop::suspend() instead of stopUpdates().
        (WebKit::ThreadedCompositor::resume): Call CompositingRunLoop::resume().

2019-03-06  Mark Lam  <mark.lam@apple.com>

        Exception is a JSCell, not a JSObject.
        https://bugs.webkit.org/show_bug.cgi?id=195392

        Reviewed by Saam Barati.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::throwInvalidAccessError):
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2019-03-07  Commit Queue  <commit-queue@webkit.org>

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

        breaks layout tests in all configurations (Requested by
        zdobersek on #webkit).

        Reverted changeset:

        "[WPE] Enable web process sandbox"
        https://bugs.webkit.org/show_bug.cgi?id=195169
        https://trac.webkit.org/changeset/242354

2019-03-06  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346

        Reviewed by Fujii Hironori.

        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::createServerAndClientIdentifiers):
        * Platform/win/ModuleWin.cpp:
        (WebKit::Module::load):
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        (WebKit::createMenuItem):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setToolTip):
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::initialize):
        Use wchar helpers as needed.

2019-03-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Crash when attempting to change input type while dismissing datalist suggestions
        https://bugs.webkit.org/show_bug.cgi?id=195384
        <rdar://problem/48563718>

        Reviewed by Brent Fulgham.

        See WebCore ChangeLog for more details.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setActiveDataListSuggestionPicker):
        (WebKit::WebPage::didSelectDataListOption):
        (WebKit::WebPage::didCloseSuggestions):
        * WebProcess/WebPage/WebPage.h:

        Turn m_activeDataListSuggestionPicker from a raw pointer into a WeakPtr.

2019-03-06  Chris Dumez  <cdumez@apple.com>

        [iOS] ProcessDidResume() IPC should be sent upon resuming when ProcessWillSuspendImminently() IPC was sent
        https://bugs.webkit.org/show_bug.cgi?id=195382
        <rdar://problem/48642739>

        Reviewed by Geoffrey Garen.

        ProcessDidResume() IPC should be sent upon resuming when ProcessWillSuspendImminently() IPC was sent. Previously,
        we only send ProcessDidResume() to the WebProcess if PrepareToSuspend() was sent, not when the more urgent
        ProcessWillSuspendImminently() IPC was sent.

        This mismatch has lead to bugs because the WebProcess does not know it got resumed and failed to unfreeze the
        layers it froze upon suspension.

        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertionClient::~ProcessAssertionClient):

        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertion):
        (WebKit::ProcessThrottler::uiAssertionWillExpireImminently):
        (WebKit::ProcessThrottler::assertionWillExpireImminently): Deleted.

        * UIProcess/ProcessThrottler.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager _notifyClientsOfImminentSuspension]):
        (WebKit::ProcessAssertion::~ProcessAssertion):
        (WebKit::ProcessAndUIAssertion::~ProcessAndUIAssertion):
        (WebKit::ProcessAndUIAssertion::setClient):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCompletePageTransition):
        Revert change that was landed in r242098 to work around this ProcessThrottler bug.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationWillEnterForeground):
        Revert change that was landed in r242554 to work around this ProcessThrottler bug.

2019-03-06  Alex Christensen  <achristensen@webkit.org>

        Add gettid to allowed syscalls on Mac
        https://bugs.webkit.org/show_bug.cgi?id=195386
        <rdar://problem/48651255>

        Reviewed by Brent Fulgham.

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

2019-03-06  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Sandbox call violation causes WebContent process to crash
        https://bugs.webkit.org/show_bug.cgi?id=195379
        <rdar://problem/48647263>

        Reviewed by Brent Fulgham.

        A new call needs to be added to the allow list in the WebContent process' sandbox.

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

2019-03-06  Antti Koivisto  <antti@apple.com>

        [iOS] Basic hit testing for content overlapping fast-scrollable overflow
        https://bugs.webkit.org/show_bug.cgi?id=195360

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):

        Use new UIView subclass for tiled layer hosting (so we know they have content even when contents property is nil).

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (collectDescendantViewsAtPoint):

        Factor collection step into a function.
        Do basic skipping of event-transparent layers.

        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):

        To handle overlap cases, find the scroll view that has the deepest non-transparent view hit as its descendant.

        (-[UIView _web_recursiveFindDescendantInteractibleViewAtPoint:withEvent:]): Deleted.

2019-03-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move RenderObject::isTransparentOrFullyClippedRespectingParentFrames() to RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=195300

        Reviewed by Simon Fraser.

        Refactor some logic to use isTransparentOrFullyClippedRespectingParentFrames on RenderLayer rather than
        RenderObject; introduce a helper method to ask whether the enclosing layer of a renderer is transparent or
        clipped.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::enclosingLayerIsTransparentOrFullyClipped):
        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::requestEvasionRectsAboveSelection):
        (WebKit::WebPage::getFocusedElementInformation):

2019-03-06  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r238490): YouTube.com: Returning PiP to Safari after sleeping device loses page
        https://bugs.webkit.org/show_bug.cgi?id=195364
        <rdar://problem/48538837>

        Reviewed by Geoffrey Garen.

        Make sure we unset the LayerTreeFreezeReason::ProcessSuspended layer tree freeze reason
        when WebPage::applicationWillEnterForeground() is called. This restores pre-r238490
        behavior and addresses the issue with PiP on youtube.com.

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

2019-03-05  Dean Jackson  <dino@apple.com>

        Fix WKPasswordView compilation on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195344
        <rdar://problem/48620066>

        Reviewed by Dan Bates.

        Use WebKitAdditions.

        * UIProcess/ios/WKPasswordView.mm:
        (-[WKPasswordView showInScrollView:]):

2019-03-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Frequent 1 second IPC deadlocks when showing a paste callout
        https://bugs.webkit.org/show_bug.cgi?id=195354
        <rdar://problem/48624675>

        Reviewed by Tim Horton.

        When triggering programmatic paste, we frequently hit deadlocks due to sync IPC going from the UI process to the
        web process and vice versa. What happens in this scenario is that prior to triggering programmatic paste, the
        page may try to move focus to a different element (e.g. a hidden editable area) before calling `execCommand`.
        This causes us to send an ElementDidFocus message to the UI process, followed by RequestDOMPasteAccess.

        However, upon receiving ElementDidFocus, we reload input views and (in the process) UIKit requests the
        autocorrection context, which we implement in WebKit using a sync message to the web process due to
        <rdar://problem/16207002> and its blocking bug <rdar://problem/48383001>. This means we'll end up in a state
        where both the UI process and web process are blocked on each other waiting for a sync IPC response, and the UI
        process is hung for a second until the IPC message times out.

        Ideally, we should fix this by addressing <rdar://problem/16207002>. However, this requires potentially large
        changes in UIKit (<rdar://problem/48383001>); for the time being, work around this deadlock by refactoring
        synchronous autocorrection context requests such that they can be resolved by an out-of-band IPC response
        (HandleAutocorrectionContext). Then prior to requesting DOM paste access, preemptively send a
        HandleAutocorrectionContext message to the UI process to unblock any pending synchronous autocorrection context
        requests.

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

        Make it possible for WKContentView to remember its current pending autocorrection context completion handler.
        This is invoked and cleared out in `-_invokePendingAutocorrectionContextHandler:`.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _invokePendingAutocorrectionContextHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        (-[WKContentView _handleAutocorrectionContext:]):

        Handle an autocorrection context response. This is invoked when the web process either handles an autocorrection
        context message, or when it preemptively sends an autocorrection context before requesting DOM paste access.

        (+[WKAutocorrectionContext emptyAutocorrectionContext]):

        Add a helper to create an empty autocorrection context.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestAutocorrectionContext):
        (WebKit::WebPageProxy::handleAutocorrectionContext):
        (WebKit::WebPageProxy::autocorrectionContextSync): Deleted.

        Removed this sync version, since we now only have requestAutocorrectionContext.

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

        Send WebPageProxy::HandleAutocorrectionContext, and add a FIXME referencing <rdar://problem/16207002>.

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

        Split AutocorrectionContextSync into RequestAutocorrectionContext and HandleAutocorrectionContext; additionally,
        remove the existing RequestAutocorrectionContext message.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestAutocorrectionContext):
        (WebKit::WebPage::autocorrectionContextSync): Deleted.

2019-03-06  Rob Buis  <rbuis@igalia.com>

        Consider supporting the `referrerpolicy` attribute.
        https://bugs.webkit.org/show_bug.cgi?id=179053

        Reviewed by Darin Adler.

        Add a runtime flag for referrerpolicy attribute.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetReferrerPolicyAttributeEnabled):
        (WKPreferencesGetReferrerPolicyAttributeEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource): do not hardcode choosing
        the document referrer policy.

2019-03-06  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE build fix after r242503

        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        ServiceWorker messages moved from network process to another
        header, so it needs to be included.

2019-03-05  David Quesada  <david_quesada@apple.com>

        [WK2] It should be possible to follow links with 'download' attributes
        https://bugs.webkit.org/show_bug.cgi?id=195145
        rdar://problem/48462642

        Reviewed by Alex Christensen.

        When a link with a 'download' attribute is clicked and the navigation client
        says to allow the navigation (i.e. provides PolicyAction::Use),
        WebPageProxy::receivedNavigationPolicyDecision() should stop overriding this
        decision and downloading the link instead. Instead, web view should honor the
        policy chosen by the navigation delegate. This supports clients that want to
        offer the user the ability to view, rather than download, the contents of
        such links, which is permitted per the HTML spec.

        This change is only made on Cocoa platforms for now since no other ports
        expose an API on their navigation action to express whether the page intends
        to download the linked resource.

        * UIProcess/API/APINavigation.h:
        (API::Navigation::shouldPerformDownload const):
            Rename this to be in line with APINavigationAction's shouldPerformDownload()
            for consistency. 'Force' seems like too strong of a word for this property
            considering that 'forcing' the download isn't really an attribute inherent
            to the navigation, but a behavior implemented by the web page proxy.
        (API::Navigation::shouldForceDownload const): Deleted.
        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):

2019-03-05  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement Cookie Accept Policy.
        https://bugs.webkit.org/show_bug.cgi?id=191645

        Reviewed by Fujii Hironori.

        * NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::curlDidReceiveResponse):
        (WebKit::NetworkDataTaskCurl::handleCookieHeaders):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:

2019-03-05  Youenn Fablet  <youenn@apple.com>

        Introduce ServiceWorkerFetchTask
        https://bugs.webkit.org/show_bug.cgi?id=195130

        Reviewed by Chris Dumez.

        ServiceWorkerFetchTask is added to represent NetworkProcess side of an ongoing fetch intercepted by service worker.
        This patch should not change existing behavior.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didFailFetch): Deleted.
        (WebKit::NetworkProcess::didNotHandleFetch): Deleted.
        (WebKit::NetworkProcess::didReceiveFetchRedirectResponse): Deleted.
        (WebKit::NetworkProcess::didReceiveFetchResponse): Deleted.
        (WebKit::NetworkProcess::didReceiveFetchData): Deleted.
        (WebKit::NetworkProcess::didReceiveFetchFormData): Deleted.
        (WebKit::NetworkProcess::didFinishFetch): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::cancelFetch):
        (WebKit::WebSWServerConnection::continueDidReceiveFetchResponse):
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::didReceiveFetchRedirectResponse): Deleted.
        (WebKit::WebSWServerConnection::didReceiveFetchResponse): Deleted.
        (WebKit::WebSWServerConnection::didReceiveFetchData): Deleted.
        (WebKit::WebSWServerConnection::didReceiveFetchFormData): Deleted.
        (WebKit::WebSWServerConnection::didFinishFetch): Deleted.
        (WebKit::WebSWServerConnection::didFailFetch): Deleted.
        (WebKit::WebSWServerConnection::didNotHandleFetch): Deleted.
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::connectionClosed):
        (WebKit::WebSWServerToContextConnection::startFetch):
        (WebKit::WebSWServerToContextConnection::cancelFetch):
        (WebKit::WebSWServerToContextConnection::continueDidReceiveFetchResponse):
        (WebKit::WebSWServerToContextConnection::didReceiveFetchTaskMessage):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::startFetch):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveRedirection):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveResponse):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinish):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveBlobChunk):
        (WebKit::WebServiceWorkerFetchTaskClient::didFail):
        (WebKit::WebServiceWorkerFetchTaskClient::didFinish):
        (WebKit::WebServiceWorkerFetchTaskClient::didNotHandle):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp: Added.
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveData):
        (WebKit::ServiceWorkerFetchTask::didReceiveFormData):
        (WebKit::ServiceWorkerFetchTask::didFinish):
        (WebKit::ServiceWorkerFetchTask::didFail):
        (WebKit::ServiceWorkerFetchTask::didNotHandle):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h: Added.
        (WebKit::ServiceWorkerFetchTask::create):
        (WebKit::ServiceWorkerFetchTask::Identifier::hash const):
        (WebKit::ServiceWorkerFetchTask::identifier const):
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        (WebKit::operator==):
        (WTF::ServiceWorkerFetchTaskIdentifierHash::hash):
        (WTF::ServiceWorkerFetchTaskIdentifierHash::equal):
        (WTF::HashTraits<WebKit::ServiceWorkerFetchTask::Identifier>::emptyValue):
        (WTF::HashTraits<WebKit::ServiceWorkerFetchTask::Identifier>::constructDeletedValue):
        (WTF::HashTraits<WebKit::ServiceWorkerFetchTask::Identifier>::isDeletedValue):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in: Added.

2019-03-05  Youenn Fablet  <youenn@apple.com>

        Rename requestCacheStorageSpace to requestStorageSpace
        https://bugs.webkit.org/show_bug.cgi?id=195282

        Reviewed by Chris Dumez.

        Make the name more abstract as it might be used in the future for other storage
        like IDB or service worker registrations.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::requestStorageSpace):
        (WebKit::NetworkProcess::requestCacheStorageSpace): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::requestSpace):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (WebsiteDataStoreClient::WebsiteDataStoreClient):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreDelegate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::requestStorageSpace):
        (WebKit::NetworkProcessProxy::requestCacheStorageSpace): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStoreClient.h:
        (WebKit::WebsiteDataStoreClient::requestStorageSpace):
        (WebKit::WebsiteDataStoreClient::requestCacheStorageSpace): Deleted.

2019-03-05  Chris Dumez  <cdumez@apple.com>

        Drop cached WebProcesses for a given session when this session is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=195212
        <rdar://problem/48301483>

        Reviewed by Geoffrey Garen.

        Drop cached WebProcesses for a give session when this session is destroyed. This way, when you close
        your private browsing window, all the processes it used get cleared and it cannot leave any state
        behind.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::canCacheProcess const):
        (WebKit::WebProcessCache::addProcessIfPossible):
        (WebKit::WebProcessCache::addProcess):
        (WebKit::WebProcessCache::clearAllProcessesForSession):
        * UIProcess/WebProcessCache.h:
        (WebKit::WebProcessCache::capacity const):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore):
        (WebKit::WebProcessPool::hasPagesUsingWebsiteDataStore const):
        * UIProcess/WebProcessPool.h:

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

        Correctly handle sandbox extensions when the same WKWebView loads multiple file:// URLs.
        <rdar://problem/47820581> and https://bugs.webkit.org/show_bug.cgi?id=195291

        Reviewed by Tim Horton.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::SandboxExtensionTracker::shouldReuseCommittedSandboxExtension): If there is a pendingProvisionalSandboxExtension
          then its existence should override our willingness to reuse the existing committed extension.
        (WebKit::shouldReuseCommittedSandboxExtension): Deleted.
        * WebProcess/WebPage/WebPage.h:

2019-03-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242403.

        Caused layout test crashes on iOS simulator.

        Reverted changeset:

        "[ContentChangeObserver] Introduce fixed duration content
        observation"
        https://bugs.webkit.org/show_bug.cgi?id=195295
        https://trac.webkit.org/changeset/242403

2019-03-05  Loïc Yhuel  <loic.yhuel@softathome.com>

        [WPE] Do not create a PlatformDisplay in the Service Worker process
        https://bugs.webkit.org/show_bug.cgi?id=194830

        Reviewed by Žan Doberšek.

        It avoids opening the Wayland socket in this WPEWebProcess, which might cause issues
        depending on the platform, and allocates unneeded resources.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h: Add new isServiceWorkerProcess parameter.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess): Set isServiceWorkerProcess parameter.
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): No implementationLibraryName and hostClientFileDescriptor for Service Worker.
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): No wpe_loader_init nor PlatformDisplayLibWPE for Service Worker.

2019-03-04  Brady Eidson  <beidson@apple.com>

        Unreviewed, rolling out r242376.

        Broke some tests

        Reverted changeset:

        "Correctly handle sandbox extensions when the same WKWebView
        loads multiple file:// URLs."
        https://bugs.webkit.org/show_bug.cgi?id=195291
        https://trac.webkit.org/changeset/242376

2019-03-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use a SQLite database to hold the ResourceLoadStatistics data
        https://bugs.webkit.org/show_bug.cgi?id=194867
        <rdar://problem/24240854>

        Unreviewed build fix for WinCairo.

        ResourceLoadStatisticsDebug and RELEASE_LOG_INFO_IF are not
        defined because WinCairo port defines RELEASE_LOG_DISABLED.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess): Enclosed RELEASE_LOG_INFO_IF with #if !RELEASE_LOG_DISABLED.
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateCookieBlocking): Ditto.

2019-03-04  Brent Fulgham  <bfulgham@apple.com>

        Use a SQLite database to hold the ResourceLoadStatistics data
        https://bugs.webkit.org/show_bug.cgi?id=194867
        <rdar://problem/24240854>

        Reviewed by Chris Dumez.

        The ResourceLoadStatistics database plist is inefficient. It requires more memory use
        than it needs, and forces lots of looping and string comparisons to find information.

        This problem has already been solved in the form of relational databases. We use them
        elsewhere in WebKit, and should do so for this storage as well.

        This patch creates an optional SQLite database to handle ITP operations.

        1. It adds a new internal experimental feature flag to activate it. It requires the user
           exit and restart the process to take effect.
        2. It populates itself from the existing plist file (if it exists).
        3. It stops using the plist in favor of the database.
        4. It does queries and other operations using the database instead of the old hash table
           implementation.

        This patch refactors the exisiting ResourceLoadStatisticsMemoryStore class into a base
        ResourceLoadStatisticsStore class, which ResourceLoadStatisticsMemoryStore is based on.
        It adds a new ResourceLoadStatisticsDatabaseStore that is implemented in terms of SQL
        operations.

        These code changes should not have any impact on existing operations, and when enabled
        should produce the same test results.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp: Added.
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertObservedDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationship):
        (WebKit::ResourceLoadStatisticsDatabaseStore::confirmDomainDoesNotExist const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainIDFromString const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        (WebKit::ResourceLoadStatisticsDatabaseStore::databaseIsEmpty const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::populateFromMemoryStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::calculateAndSubmitTelemetry const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::recursivelyFindNonPrevalentDomainsThatRedirectedToThisDomain):
        (WebKit::buildList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::listToString):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::reclassifyResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::classifyPrevalentResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::syncStorageIfNeeded):
        (WebKit::ResourceLoadStatisticsDatabaseStore::syncStorageImmediately):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logSubresourceLoading):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logSubresourceRedirect):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setDomainsAsPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::dumpResourceLoadStatistics const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::predicateValueForDomain const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isPrevalentResource const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isVeryPrevalentResource const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isRegisteredAsSubresourceUnder const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isRegisteredAsSubFrameUnder const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isRegisteredAsRedirectingTo const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setGrandfathered):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isGrandfathered const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubframeUnderTopFrameOrigin):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setTopFrameUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setTopFrameUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureResourceStatisticsForPrimaryDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clear):
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieTreatmentForOrigin const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasUserGrantedStorageAccessThroughPrompt):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsToBlock const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateCookieBlocking):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearBlockingStateForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::processStatistics const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::prevalentDomains const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findExpiredUserInteractions const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearExpiredUserInteractions):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearGrandfathering):
        (WebKit::ResourceLoadStatisticsDatabaseStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor):
        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateLastSeen):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setLastSeen):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setVeryPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::removeAllStorageAccess):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h: Added.
        (WebKit::ResourceLoadStatisticsDatabaseStore::isEmpty const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
        (WebKit::ResourceLoadStatisticsMemoryStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::classifyPrevalentResources):
        (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageIfNeeded):
        (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageImmediately):
        (WebKit::ResourceLoadStatisticsMemoryStore::grandfatherDataForDomains):
        (WebKit::domainsToString): Deleted.
        (WebKit::OperatingDate::fromWallTime): Deleted.
        (WebKit::OperatingDate::today): Deleted.
        (WebKit::OperatingDate::secondsSinceEpoch const): Deleted.
        (WebKit::OperatingDate::operator== const): Deleted.
        (WebKit::OperatingDate::operator< const): Deleted.
        (WebKit::OperatingDate::operator<= const): Deleted.
        (WebKit::OperatingDate::OperatingDate): Deleted.
        (WebKit::mergeOperatingDates): Deleted.
        (WebKit::computeImportance): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::~ResourceLoadStatisticsMemoryStore): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setNotifyPagesWhenDataRecordsWereScanned): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setShouldClassifyResourcesBeforeDataRecordsRemoval): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setShouldSubmitTelemetry): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::processStatisticsAndDataRecords): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::grandfatherExistingWebsiteData): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setResourceLoadStatisticsDebugMode): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setPrevalentResourceForDebugMode): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::scheduleStatisticsProcessingRequestIfNecessary): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::cancelPendingStatisticsProcessingRequest): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setTimeToLiveUserInteraction): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setMinimumTimeBetweenDataRecordsRemoval): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setGrandfatheringTime): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setCacheMaxAgeCap): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCacheMaxAgeCap): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setAgeCapForClientSideCookies): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::updateClientSideCookiesAgeCap): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveDataRecords const): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setDataRecordsBeingRemoved): Deleted.
        (WebKit::debugLogDomainsInBatches): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::includeTodayAsOperatingDateIfNecessary): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStatisticsExpired const): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setMaxStatisticsEntries): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setPruneEntriesDownTo): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::resetParametersToDefaultValues): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::logTestingEvent): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::didCreateNetworkProcess): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        (WebKit::ResourceLoadStatisticsMemoryStore::data const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isDebugModeEnabled const): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::store const): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setStorageAccessPromptsEnabled): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setDebugLogggingEnabled): Deleted.
        (): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp: Added.
        (WebKit::domainsToString):
        (WebKit::OperatingDate::fromWallTime):
        (WebKit::OperatingDate::today):
        (WebKit::OperatingDate::secondsSinceEpoch const):
        (WebKit::OperatingDate::operator== const):
        (WebKit::OperatingDate::operator< const):
        (WebKit::OperatingDate::operator<= const):
        (WebKit::ResourceLoadStatisticsStore::ResourceLoadStatisticsStore):
        (WebKit::ResourceLoadStatisticsStore::~ResourceLoadStatisticsStore):
        (WebKit::ResourceLoadStatisticsStore::calculateAndSubmitTelemetry const):
        (WebKit::ResourceLoadStatisticsStore::computeImportance):
        (WebKit::ResourceLoadStatisticsStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::ResourceLoadStatisticsStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::ResourceLoadStatisticsStore::setShouldSubmitTelemetry):
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords):
        (WebKit::ResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
        (WebKit::ResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):
        (WebKit::ResourceLoadStatisticsStore::setPrevalentResourceForDebugMode):
        (WebKit::ResourceLoadStatisticsStore::scheduleStatisticsProcessingRequestIfNecessary):
        (WebKit::ResourceLoadStatisticsStore::cancelPendingStatisticsProcessingRequest):
        (WebKit::ResourceLoadStatisticsStore::setTimeToLiveUserInteraction):
        (WebKit::ResourceLoadStatisticsStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::ResourceLoadStatisticsStore::setGrandfatheringTime):
        (WebKit::ResourceLoadStatisticsStore::setCacheMaxAgeCap):
        (WebKit::ResourceLoadStatisticsStore::updateCacheMaxAgeCap):
        (WebKit::ResourceLoadStatisticsStore::setAgeCapForClientSideCookies):
        (WebKit::ResourceLoadStatisticsStore::updateClientSideCookiesAgeCap):
        (WebKit::ResourceLoadStatisticsStore::shouldRemoveDataRecords const):
        (WebKit::ResourceLoadStatisticsStore::setDataRecordsBeingRemoved):
        (WebKit::ResourceLoadStatisticsStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsStore::clearBlockingStateForDomains):
        (WebKit::ResourceLoadStatisticsStore::processStatistics const):
        (WebKit::ResourceLoadStatisticsStore::statisticsEpirationTime const):
        (WebKit::ResourceLoadStatisticsStore::mergeOperatingDates):
        (WebKit::ResourceLoadStatisticsStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsStore::hasStatisticsExpired const):
        (WebKit::ResourceLoadStatisticsStore::setMaxStatisticsEntries):
        (WebKit::ResourceLoadStatisticsStore::setPruneEntriesDownTo):
        (WebKit::ResourceLoadStatisticsStore::resetParametersToDefaultValues):
        (WebKit::ResourceLoadStatisticsStore::logTestingEvent):
        (WebKit::ResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::ResourceLoadStatisticsStore::didCreateNetworkProcess):
        (WebKit::ResourceLoadStatisticsStore::debugLogDomainsInBatches):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h: Copied from Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h.
        (WebKit::OperatingDate::OperatingDate):
        (WebKit::ResourceLoadStatisticsStore::isEmpty const):
        (WebKit::ResourceLoadStatisticsStore::data const):
        (WebKit::ResourceLoadStatisticsStore::isDebugModeEnabled const):
        (WebKit::ResourceLoadStatisticsStore::store const):
        (WebKit::ResourceLoadStatisticsStore::setStorageAccessPromptsEnabled):
        (WebKit::ResourceLoadStatisticsStore::setDebugLogggingEnabled):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStoreCocoa.mm: Renamed from Source/WebKit/UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm.
        (WebKit::ResourceLoadStatisticsStore::registerUserDefaultsIfNeeded):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebResourceLoadStatisticsStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsStore::setShouldSubmitTelemetry):
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        (WebKit::WebResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResourceForDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::performDailyTasks):
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        (WebKit::WebResourceLoadStatisticsStore::logWebSocketLoading):
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceLoading):
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceRedirect):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubresourceUnder):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubFrameUnder):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsRedirectingTo):
        (WebKit::WebResourceLoadStatisticsStore::clearPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setGrandfathered):
        (WebKit::WebResourceLoadStatisticsStore::isGrandfathered):
        (WebKit::WebResourceLoadStatisticsStore::setSubframeUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectFrom):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdate):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearBlockingStateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebResourceLoadStatisticsStore::setTimeToLiveUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsStore::setGrandfatheringTime):
        (WebKit::WebResourceLoadStatisticsStore::setMaxStatisticsEntries):
        (WebKit::WebResourceLoadStatisticsStore::setPruneEntriesDownTo):
        (WebKit::WebResourceLoadStatisticsStore::resetParametersToDefaultValues):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * Platform/classifier/ResourceLoadStatisticsClassifier.cpp:
        (WebKit::ResourceLoadStatisticsClassifier::calculateResourcePrevalence):
        * Platform/classifier/ResourceLoadStatisticsClassifier.h:
        * Shared/WebPreferences.yaml:
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebProcessPool.cpp:
        * WebKit.xcodeproj/project.pbxproj:

2019-03-04  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Introduce fixed duration content observation
        https://bugs.webkit.org/show_bug.cgi?id=195295
        <rdar://problem/48579913>

        Reviewed by Simon Fraser.

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

2019-03-04  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r242396.

        Found issue to be unrelated. reverting my rollout.

        Reverted changeset:

        "Unreviewed, rolling out r242222."
        https://bugs.webkit.org/show_bug.cgi?id=193683
        https://trac.webkit.org/changeset/242396

2019-03-04  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a followup after r242336

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::webViewDidMoveToWindow):
        Copy the list of observers before iterating it to avoid observers modifying the list.

2019-03-04  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r242222.

        Broke internal debug testing

        Reverted changeset:

        "[iOS] Move calls to [UIKeyboard isInHardwareKeyboardMode] to
        the UI process."
        https://bugs.webkit.org/show_bug.cgi?id=193683
        https://trac.webkit.org/changeset/242222

2019-03-04  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r242378

        * UIProcess/ios/EditableImageController.mm:
        (WebKit::EditableImageController::associateWithAttachment):

2019-03-04  Brent Fulgham  <bfulgham@apple.com>

        Check contextIDs when handling WebContent messages
        https://bugs.webkit.org/show_bug.cgi?id=195289
        <rdar://problem/48475870>

        Reviewed by Alex Christensen.

        The WebContent process is untrusted because it handles arbitrary markup and javascript from untrusted sources.
        We should handle its messages with suspicion, and make sure the arguments are valid and usable before honoring them.

        This patch hardens the message passing layer by performing MESSAGE_CHECK in places that had been overlooked.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::setUpPlaybackControlsManagerWithID):
        (WebKit::PlaybackSessionManagerProxy::currentTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::bufferedTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::seekableRangesVectorChanged):
        (WebKit::PlaybackSessionManagerProxy::canPlayFastReverseChanged):
        (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionManagerProxy::externalPlaybackPropertiesChanged):
        (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabledChanged):
        (WebKit::PlaybackSessionManagerProxy::mutedChanged):
        (WebKit::PlaybackSessionManagerProxy::volumeChanged):
        (WebKit::PlaybackSessionManagerProxy::durationChanged):
        (WebKit::PlaybackSessionManagerProxy::playbackStartedTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::rateChanged):
        (WebKit::PlaybackSessionManagerProxy::pictureInPictureSupportedChanged):
        (WebKit::PlaybackSessionManagerProxy::pictureInPictureActiveChanged):
        (WebKit::PlaybackSessionManagerProxy::handleControlledElementIDResponse const):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManagerProxy::startProducingData):
        (WebKit::UserMediaCaptureManagerProxy::stopProducingData):
        (WebKit::UserMediaCaptureManagerProxy::end):
        (WebKit::UserMediaCaptureManagerProxy::capabilities):
        (WebKit::UserMediaCaptureManagerProxy::setMuted):
        (WebKit::UserMediaCaptureManagerProxy::applyConstraints):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):
        (WebKit::VideoFullscreenManagerProxy::setHasVideo):
        (WebKit::VideoFullscreenManagerProxy::setVideoDimensions):
        (WebKit::VideoFullscreenManagerProxy::enterFullscreen):
        (WebKit::VideoFullscreenManagerProxy::exitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode):
        (WebKit::VideoFullscreenManagerProxy::setInlineRect):
        (WebKit::VideoFullscreenManagerProxy::setHasVideoContentLayer):
        (WebKit::VideoFullscreenManagerProxy::cleanupFullscreen):
        (WebKit::VideoFullscreenManagerProxy::preparedToReturnToInline):
        (WebKit::VideoFullscreenManagerProxy::preparedToExitFullscreen):
        * UIProcess/ios/EditableImageController.mm:
        (WebKit::EditableImageController::didCreateEditableImage):
        (WebKit::EditableImageController::didDestroyEditableImage):
        (WebKit::EditableImageController::associateWithAttachment):

2019-03-04  Alex Christensen  <achristensen@webkit.org>

        Fix crashes when NetworkResourceLoader/NetworkLoadChecker are destroyed during HTTPS upgrade check
        https://bugs.webkit.org/show_bug.cgi?id=195238
        <rdar://problem/47598656>

        Reviewed by Chris Dumez.

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

2019-03-04  Brady Eidson  <beidson@apple.com>

        Correctly handle sandbox extensions when the same WKWebView loads multiple file:// URLs.
        <rdar://problem/47820581> and https://bugs.webkit.org/show_bug.cgi?id=195291

        Reviewed by Andy Estes.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::shouldReuseCommittedSandboxExtension): Only retain the previous sandbox extension if the file URL
          we're currently loading is functionally equivalent to the previous one.

2019-03-04  Chris Dumez  <cdumez@apple.com>

        Drop legacy userAgentForURL injected bundle SPI
        https://bugs.webkit.org/show_bug.cgi?id=195222
        <rdar://problem/46734147>

        Reviewed by Darin Adler.

        Drop legacy userAgentForURL injected bundle SPI. There are no longer any clients, and using
        WebsitePolicies.customUserAgent is the way to go nowadays.

        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::willDestroyFrame):
        (API::InjectedBundle::PageLoaderClient::userAgentForURL const): Deleted.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (setUpPageLoaderClient):
        (userAgentForURL): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::userAgentForURL const): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::userAgent const):

2019-03-04  Chris Dumez  <cdumez@apple.com>

        Do not share WebProcesses between private and regular sessions
        https://bugs.webkit.org/show_bug.cgi?id=195189
        <rdar://problem/48421064>

        Reviewed by Alex Christensen.

        Do not share WebProcesses between private and regular sessions. There are some privacy concerns.
        Also, some of the WebsiteDataStore informations are passed via WebProcessCreationParameters (e.g.
        ApplicationCache path) and cannot be updated later.

        There were 2 cases where this could happen and that are fixed in the patch:
        - A process may be prewarmed with a given website data store and then later on used for a page
          associated with a different data store. We now prevent this. While this is not necessary for
          privacy reasons, it is still useful because our code currently does not support well uses
          different sessions inside a single WebProcess, as mentioned above.
        - The client can force a WebsiteDataStore swap when responding to the decidePolicyForNavigationAction,
          via the WebsitePolicies. To address the issue, we now force a process swap whenever the client
          makes such a change.

        As a result, WebProcessProxy::websiteDataStore() now makes sense and is always correct. It can
        also only contains pages whose WebPageProxy::websiteDataStore() returns the same store.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextWarmInitialProcess):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _warmInitialProcess]):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::notifyProcessPoolToPrewarm):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::websiteDataStore):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::prewarmProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::WebProcessPool::findReusableSuspendedPageProcess):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToOneProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::removeWebPage):
        * UIProcess/WebProcessProxy.h:

2019-03-04  Chris Dumez  <cdumez@apple.com>

        [iOS] Improve our file picker
        https://bugs.webkit.org/show_bug.cgi?id=195284
        <rdar://problem/45655856>

        Reviewed by Tim Horton and Wenson Hsieh.

        Improve our file picker on iOS so that:
        - Accepted file extensions specified in the HTML (e.g. <input type="file"> accept=".pdf">) are now
          properly reflected in the file picker. Previously, we only we only supported MIME types in the
          accept attribute that only Image / Video ones.
        - If accepted types are specified in the HTML and not of them are Video or Image types, then bypass
          the UIDocumentMenuViewController and show the file picker directly (as if the user had tapped on
          "Browse..." on that menu). Other menu items such as "Take Photo or Video" and "Photo Library" do
          not make sense if the page only accepts PDF files for example.

        Things that we should do but are not fixed in this patch:
        - Stop using UIDocumentMenuViewController entirely since it was deprecated in favor of using
          UIDocumentPickerViewController directly.
        - Add multiple selection support, which is supported both on the HTML side and in the
          UIDocumentPickerViewController API.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (arrayContainsUTIThatConformsTo):
        (-[WKFileUploadPanel dealloc]):
        (-[WKFileUploadPanel presentWithParameters:resultListener:]):
        (UTIsForMIMETypes):
        (-[WKFileUploadPanel _mediaTypesForPickerSourceType:]):
        (-[WKFileUploadPanel _cameraButtonLabelAllowingPhoto:allowingVideo:]):
        (-[WKFileUploadPanel _showDocumentPickerMenu]):

2019-03-04  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: ( r240978-r240985 ) [ iOS Release ] Layout Test imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm is crashing
        https://bugs.webkit.org/show_bug.cgi?id=194523

        Reviewed by Ryosuke Niwa.

        Attempt to work around a CFNetwork bug in the timing of tearing down tasks with upload streams.
        See rdar://problem/28233746.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:needNewBodyStream:]):

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

        [CoordinatedGraphics] The compositing loop is still running even after exiting AC mode
        https://bugs.webkit.org/show_bug.cgi?id=195270

        Reviewed by Don Olmstead.

        Suspend the threaded compositor when the painting is paused or layer flush disabled, and resume it again when
        painting is resumed and layer flush enabled.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::suspend): Increment the suspend counter and mark the scene as inactive if it was suspended.
        (WebKit::ThreadedCompositor::resume): Decrement the suspend counter and mark the scene as active if it's now resumed.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::forceRepaint): Return early if layer tree state is frozen.
        (WebKit::DrawingAreaCoordinatedGraphics::forceRepaintAsync): Ditto.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::setLayerFlushSchedulingEnabled): Call ThreadedCompositor::suspend()/resume().
        (WebKit::LayerTreeHost::pauseRendering): Call ThreadedCompositor::suspend.
        (WebKit::LayerTreeHost::resumeRendering): Call ThreadedCompositor::resume().

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

        Share more code between overflow and frame scrolling nodes, fixing overflow scrollbar display
        https://bugs.webkit.org/show_bug.cgi?id=195258

        Reviewed by Antti Koivisto.

        This patch moves management of scrollbar layers and scrollbar painters ("NSScrollerImp") down to
        ScrollingStateScrollingNode to be shared between frame and overflow nodes, allowing for
        scrolling thread updates of overflow scrollbars. It also moves some scrolling tree-side code
        to ScrollingTreeScrollingNodeDelegateMac to be shared between the "tree" nodes for overflow and frames.

        Layers for scrollbars are given to scrolling state nodes via setNodeLayers() now, and
        RenderLayerCompositor::updateScrollingNodeLayers() is added to provide a bottleneck to call that.
        At some point AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange() should be relieved
        of the responsibility of pushing scrollbar layers (but the scrolling state tree needs to hold
        references to GraphicsLayers before that becomes safe).
        
        The actual fix that allows overflow scrollbars to show is the change in
        AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange() that calls scrollableArea.*ScrollbarLayerDidChange()
        for all ScrollableAreas. This ensures that the CALayer is pushed onto the NSScrollerImp.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        * SourcesCocoa.txt:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::commitStateBeforeChildren):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::repositionRelatedLayers):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::handleMouseEvent):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp: Copied from Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp.
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::create):
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::ScrollingTreeOverflowScrollingNodeRemoteMac):
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::~ScrollingTreeOverflowScrollingNodeRemoteMac):
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::commitStateBeforeChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::repositionRelatedLayers):
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::handleWheelEvent):
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::handleMouseEvent):
        * WebKit.xcodeproj/project.pbxproj:

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

        [Apple Pay] Move WebPaymentCoordinatorProxy from Source/WebKit/UIProcess to Source/WebKit/Shared
        https://bugs.webkit.org/show_bug.cgi?id=195080
        <rdar://problem/48421558>

        Reviewed by Antti Koivisto.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp: Renamed from Source/WebKit/UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h: Renamed from Source/WebKit/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in: Renamed from Source/WebKit/UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in.
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h: Renamed from Source/WebKit/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h.
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: Renamed from Source/WebKit/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm.
        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm: Renamed from Source/WebKit/UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm.
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm: Renamed from Source/WebKit/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm.
        * Shared/mac/WebHitTestResultData.mm:
        * SourcesCocoa.txt:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        * WebKit.xcodeproj/project.pbxproj:

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

        [iOS] Fullscreen "stay in page" option breaks video playback
        https://bugs.webkit.org/show_bug.cgi?id=195277
        <rdar://problem/48537317>

        Reviewed by Eric Carlson.

        Make sure we resume media playback when the user chooses "stay in page" from the deceptive
        website warning dialog.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _showPhishingAlert]):

2019-03-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Enable web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195169

        Reviewed by Daniel Bates.

        * PlatformWPE.cmake:
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitialize):

2019-03-04  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Wrong license header in WebKit{,WebExtension}Autocleanups.h
        https://bugs.webkit.org/show_bug.cgi?id=195245

        Reviewed by Carlos Garcia Campos.

        Changed license headers to contain the LGPL, which is the correct one for the GTK
        and WPE ports. The change was agreed by the contributors to the files involved.

        * UIProcess/API/gtk/WebKitAutocleanups.h:
        * UIProcess/API/wpe/WebKitAutocleanups.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtensionAutocleanups.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitWebExtensionAutocleanups.h:

2019-03-04  Commit Queue  <commit-queue@webkit.org>

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

        WE not ready to enable PSON yet (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Enable PSON"
        https://bugs.webkit.org/show_bug.cgi?id=194979
        https://trac.webkit.org/changeset/242045

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

        [CoordinatedGraphics] Unify DrawingArea classes
        https://bugs.webkit.org/show_bug.cgi?id=195167

        Reviewed by Žan Doberšek.

        Add DrawingAreaProxyCoordinatedGraphics and DrawingAreaCoordinatedGraphics.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * Shared/DrawingAreaInfo.h:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::viewSize):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseUnrealize):
        (webkitWebViewBaseDraw):
        (webkitWebViewBaseSizeAllocate):
        (webkitWebViewBaseDidRelaunchWebProcess):
        (webkitWebViewBasePageClosed):
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/AcceleratedDrawingAreaProxy.cpp: Removed.
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp: Added.
        (WebKit::DrawingAreaProxyCoordinatedGraphics::DrawingAreaProxyCoordinatedGraphics):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::~DrawingAreaProxyCoordinatedGraphics):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::paint):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::sizeDidChange):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::deviceScaleFactorDidChange):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::waitForBackingStoreUpdateOnNextPaint):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::setBackingStoreIsDiscardable):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::update):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::updateAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::incorporateUpdate):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::alwaysUseCompositing const):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::backingStoreStateDidChange):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::sendUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::waitForAndDispatchDidUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::discardBackingStoreSoon):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::discardBackingStore):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::setNativeSurfaceHandleForCompositing):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::destroyNativeSurfaceHandleForCompositing):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::DrawingMonitor):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::~DrawingMonitor):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::webViewDrawCallback):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::start):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::stop):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::didDraw):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::dispatchAfterEnsuringDrawing):
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h: Renamed from Source/WebKit/UIProcess/AcceleratedDrawingAreaProxy.h.
        * UIProcess/DrawingAreaProxyImpl.cpp: Removed.
        * UIProcess/DrawingAreaProxyImpl.h: Removed.
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::update):
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint):
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp: Removed.
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp: Added.
        (WebKit::DrawingAreaCoordinatedGraphics::DrawingAreaCoordinatedGraphics):
        (WebKit::DrawingAreaCoordinatedGraphics::~DrawingAreaCoordinatedGraphics):
        (WebKit::DrawingAreaCoordinatedGraphics::setNeedsDisplay):
        (WebKit::DrawingAreaCoordinatedGraphics::setNeedsDisplayInRect):
        (WebKit::DrawingAreaCoordinatedGraphics::scroll):
        (WebKit::DrawingAreaCoordinatedGraphics::forceRepaint):
        (WebKit::DrawingAreaCoordinatedGraphics::forceRepaintAsync):
        (WebKit::DrawingAreaCoordinatedGraphics::setLayerTreeStateIsFrozen):
        (WebKit::DrawingAreaCoordinatedGraphics::updatePreferences):
        (WebKit::DrawingAreaCoordinatedGraphics::mainFrameContentSizeChanged):
        (WebKit::DrawingAreaCoordinatedGraphics::deviceOrPageScaleFactorChanged):
        (WebKit::DrawingAreaCoordinatedGraphics::didChangeViewportAttributes):
        (WebKit::DrawingAreaCoordinatedGraphics::graphicsLayerFactory):
        (WebKit::DrawingAreaCoordinatedGraphics::setRootCompositingLayer):
        (WebKit::DrawingAreaCoordinatedGraphics::scheduleCompositingLayerFlush):
        (WebKit::DrawingAreaCoordinatedGraphics::layerHostDidFlushLayers):
        (WebKit::DrawingAreaCoordinatedGraphics::createDisplayRefreshMonitor):
        (WebKit::DrawingAreaCoordinatedGraphics::setNativeSurfaceHandleForCompositing):
        (WebKit::DrawingAreaCoordinatedGraphics::destroyNativeSurfaceHandleForCompositing):
        (WebKit::DrawingAreaCoordinatedGraphics::activityStateDidChange):
        (WebKit::DrawingAreaCoordinatedGraphics::attachViewOverlayGraphicsLayer):
        (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState):
        (WebKit::DrawingAreaCoordinatedGraphics::didUpdate):
        (WebKit::DrawingAreaCoordinatedGraphics::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaCoordinatedGraphics::exitAcceleratedCompositingModeSoon):
        (WebKit::DrawingAreaCoordinatedGraphics::exitAcceleratedCompositingModeNow):
        (WebKit::DrawingAreaCoordinatedGraphics::discardPreviousLayerTreeHost):
        (WebKit::DrawingAreaCoordinatedGraphics::suspendPainting):
        (WebKit::DrawingAreaCoordinatedGraphics::resumePainting):
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaCoordinatedGraphics::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaCoordinatedGraphics::scheduleDisplay):
        (WebKit::DrawingAreaCoordinatedGraphics::displayTimerFired):
        (WebKit::DrawingAreaCoordinatedGraphics::display):
        (WebKit::shouldPaintBoundsRect):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h: Renamed from Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.h.
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::layerFlushThrottlingIsActive const):
        * WebProcess/WebPage/DrawingAreaImpl.cpp: Removed.
        * WebProcess/WebPage/DrawingAreaImpl.h: Removed.

2019-03-03  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Content observation should be limited to the current document.
        https://bugs.webkit.org/show_bug.cgi?id=195256
        <rdar://problem/48544402>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver):
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::commitPotentialTap):

2019-03-03  Tim Horton  <timothy_horton@apple.com>

        Rid the world of WK_API_ENABLED
        https://bugs.webkit.org/show_bug.cgi?id=195263

        Reviewed by Dan Bernstein.

        List of changed files elided because it's useless.

2019-03-03  Jiewen Tan  <jiewen_tan@apple.com>

        Add a WebViewDidMoveToWindowObserver for WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=195223
        <rdar://problem/48520161>

        Reviewed by Darin Adler.

        The load optimizer would only allow itself to optimize loads whenever the web view
        who owns the page is (visible && focused), otherwises it will wait until the web view
        becomes (visible && focused). Therefore, we need a way to notify the load optimizer
        changes of statuses.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView didMoveToWindow]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::addWebViewDidMoveToWindowObserver):
        (WebKit::WebPageProxy::removeWebViewDidMoveToWindowObserver):
        (WebKit::WebPageProxy::webViewDidMoveToWindow):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebViewDidMoveToWindowObserver.h: Added.
        * WebKit.xcodeproj/project.pbxproj:

2019-03-03  Andy Estes  <aestes@apple.com>

        [Apple Pay] Untangle WebPageProxy and WebPaymentCoordinatorProxy
        https://bugs.webkit.org/show_bug.cgi?id=195219
        <rdar://problem/48518082>

        Reviewed by Darin Adler.

        Rather than having WebPaymentCoordinatorProxy know about WebPageProxy, give
        WebPaymentCoordinatorProxy a client interface that WebPageProxy conforms to.

        In a follow-on patch, WebPaymentCoordinatorProxy will have a non-WebPageProxy client.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy): Replaced use of
        m_webPageProxy with m_client.
        (WebKit::WebPaymentCoordinatorProxy::~WebPaymentCoordinatorProxy): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::messageSenderConnection const): Implemented
        IPC::MessageSender via m_client.
        (WebKit::WebPaymentCoordinatorProxy::messageSenderDestinationID const): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::canMakePaymentsWithActiveCard): Replaced use of
        m_webPageProxy with m_client.
        (WebKit::WebPaymentCoordinatorProxy::openPaymentSetup): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::didCancelPaymentSession): Called our own
        MessageSender::send rather than going through m_webPageProxy.
        (WebKit::WebPaymentCoordinatorProxy::validateMerchant): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::didAuthorizePayment): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::didSelectShippingMethod): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::didSelectShippingContact): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::didSelectPaymentMethod): Ditto.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h: Defined the Client abstract class and
        changed m_webPageProxy to m_client.
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard): Replaced use of
        m_webPageProxy with m_client.
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest): Renamed from toPKPaymentRequest.
        (WebKit::toPKPaymentRequest): Renamed to WebPaymentCoordinatorProxy::platformPaymentRequest.
        * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Replaced use of m_webPageProxy
        with m_client.
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Ditto.
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::messageReceiverMap): Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::paymentCoordinatorConnection): Implemented WebPaymentCoordinatorProxy::Client.
        (WebKit::WebPageProxy::paymentCoordinatorMessageReceiver): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationBundleIdentifier): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationSecondaryIdentifier): Ditto.
        (WebKit::WebPageProxy::paymentCoordinatorDestinationID): Ditto.
        * UIProcess/WebPageProxy.h: Made WebPageProxy derive from WebPaymentCoordinatorProxy::Client.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::paymentCoordinatorPresentingViewController): Implemented WebPaymentCoordinatorProxy::Client.
        (WebKit::WebPageProxy::paymentCoordinatorCTDataConnectionServiceType): Ditto.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::paymentCoordinatorPresentingWindow): Ditto.
        * WebKit.xcodeproj/project.pbxproj:

2019-03-03  Tim Horton  <timothy_horton@apple.com>

        Remove some more unused 32-bit code
        https://bugs.webkit.org/show_bug.cgi?id=195255

        Reviewed by Darin Adler.

        * Platform/Module.cpp:
        (WebKit::Module::Module):
        * Platform/Module.h:
        * Platform/cf/ModuleCF.cpp:
        (WebKit::Module::unload):
        (WebKit::Module::bundleResourceMap): Deleted.
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeShim):
        (WebKit::PluginProcess::platformInitializeProcess):
        (WebKit::shouldCallRealDebugger): Deleted.
        (WebKit::isWindowActive): Deleted.
        (WebKit::getCurrentEventButtonState): Deleted.
        (WebKit::carbonWindowShown): Deleted.
        (WebKit::carbonWindowHidden): Deleted.
        (WebKit::openCFURLRef): Deleted.
        (WebKit::isMallocTinyMemoryTag): Deleted.
        (WebKit::shouldMapMemoryExecutable): Deleted.
        * PluginProcess/mac/PluginProcessShim.h:
        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shimDebugger): Deleted.
        (WebKit::shimGetCurrentEventButtonState): Deleted.
        (WebKit::shimIsWindowActive): Deleted.
        (WebKit::shimModalDialog): Deleted.
        (WebKit::shimAlert): Deleted.
        (WebKit::shimShowWindow): Deleted.
        (WebKit::shimHideWindow): Deleted.
        (WebKit::shimLSOpenCFURLRef): Deleted.
        (WebKit::shimMachVMMap): Deleted.
        * Shared/API/Cocoa/WKFoundation.h:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginArchitecture):
        (WebKit::NetscapePluginModule::determineQuirks):
        * Shared/Plugins/PluginQuirks.h:
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::sizeForNumberType):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::mouseButtonForEvent):
        (WebKit::globalPointForEvent):
        (WebKit::pointForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageLoadFileReturningNavigation):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::pressureChangeWithEvent):
        * UIProcess/Gamepad/cocoa/UIGamepadProviderCocoa.mm:
        (WebKit::UIGamepadProvider::platformSetDefaultGamepadProvider):
        * UIProcess/mac/ServicesController.mm:
        (WebKit::ServicesController::ServicesController):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::isWindowActive const): Deleted.
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::setDrawingModel):
        (WebKit::NetscapePlugin::setEventModel):
        (WebKit::NetscapePlugin::platformPostInitialize):
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::windowFocusChanged):
        (WebKit::NetscapePlugin::windowAndViewFramesChanged):
        (WebKit::NetscapePlugin::sendComplexTextInput):
        (): Deleted.
        (WebKit::windowMap): Deleted.
        (WebKit::NetscapePlugin::netscapePluginFromWindow): Deleted.
        (WebKit::NetscapePlugin::windowRef const): Deleted.
        (WebKit::NetscapePlugin::updateFakeWindowBounds): Deleted.
        (WebKit::NetscapePlugin::buttonState): Deleted.
        (WebKit::initializeEventRecord): Deleted.
        (WebKit::anyMouseButtonIsDown): Deleted.
        (WebKit::rightMouseButtonIsDown): Deleted.
        (WebKit::modifiersForEvent): Deleted.
        (WebKit::convertStringToKeyCodes): Deleted.
        (WebKit::scriptCodeFromCurrentKeyboardInputSource): Deleted.
        (WebKit::NetscapePlugin::nullEventTimerFired): Deleted.

2019-03-02  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Introduce ContentChangeObserver::MouseMovedScope
        https://bugs.webkit.org/show_bug.cgi?id=195252
        <rdar://problem/48539446>

        Reviewed by Simon Fraser.

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

2019-03-02  Tim Horton  <timothy_horton@apple.com>

        Move EditingRange <-> Range methods to EditingRange instead of WebPage
        https://bugs.webkit.org/show_bug.cgi?id=195201

        Reviewed by Sam Weinig.

        * Shared/EditingRange.h:
        * Shared/EditingRange.cpp:
        Also, modernize the coders.

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync):
        (WebKit::WebPage::getMarkedRangeAsync):
        (WebKit::WebPage::getSelectedRangeAsync):
        (WebKit::WebPage::characterIndexForPointAsync):
        (WebKit::WebPage::firstRectForCharacterRangeAsync):
        (WebKit::WebPage::setCompositionAsync):
        (WebKit::WebPage::rangeFromEditingRange): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::insertDictatedTextAsync):
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync):

2019-03-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Programmatic paste access should be granted when copying and pasting within the same origin
        https://bugs.webkit.org/show_bug.cgi?id=195053
        <rdar://problem/48134710>

        Reviewed by Ryosuke Niwa.

        Add support for automatically granting programmatic pasteboard access when the pasteboard identifier of the
        document requesting programmatic paste matches the identifier in the custom pasteboard data blob in the
        UIPasteboard. To do this, we send the pasteboard identifier of the document requesting the DOM paste to the UI
        process, and check this against the pasteboard identifiers for each item on the platform pasteboard. If all
        items in the platform pasteboard match the given pasteboard identifier (since we don't support writing multiple
        pasteboard items via bindings, this should only be a single item), we skip showing the paste callout and
        immediately invoke the programmatic paste handler.

        * Scripts/webkit/messages.py:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestDOMPasteAccess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Add plumbing to deliver the pasteboard identifier to the client when requesting DOM paste.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _willHideMenu:]):
        (-[WKContentView pasteForWebView:]):
        (-[WKContentView _handleDOMPasteRequestWithResult:]):
        (-[WKContentView _willPerformAction:sender:]):
        (-[WKContentView _didPerformAction:sender:]):
        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]):
        (allPasteboardItemOriginsMatchOrigin):
        (-[WKContentView _requestDOMPasteAccessWithElementRect:originIdentifier:completionHandler:]):
        (-[WKContentView _requestDOMPasteAccessWithElementRect:completionHandler:]): Deleted.

        Bail early in the case where all items' pasteboard identifiers (read via custom pasteboard data) match. When
        this happens, we only grant access for the current paste command, rather than granting access for the user
        gesture token.

        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/win/PageClientImpl.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestDOMPasteAccess):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestDOMPasteAccess):
        * WebProcess/WebPage/WebPage.h:

2019-02-27  Darin Adler  <darin@apple.com>

        Fixed makeString(float) to do shortest-form serialization without first converting to double
        https://bugs.webkit.org/show_bug.cgi?id=195142

        Reviewed by Daniel Bates.

        * UIProcess/PerActivityStateCPUUsageSampler.cpp: Removed unneeded include of DecimalNumber.h.

2019-03-02  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Public API headers are missing autocleanup definitions
        https://bugs.webkit.org/show_bug.cgi?id=195211

        Reviewed by Philippe Normand.

        * PlatformWPE.cmake: List new API headers as installable.
        * UIProcess/API/wpe/WebKitAutocleanups.h: Added. This is a copy of the header from the GTK
        port, adapted to fit the WPE port.
        * UIProcess/API/wpe/webkit.h: Add inclusion of WebKitAutocleanups.h
        * WebProcess/InjectedBundle/API/wpe/WebKitWebExtensionAutocleanups.h: Added. Also adapted
        from the equivalent header of the GTK port.
        * WebProcess/InjectedBundle/API/wpe/webkit-web-extension.h: Add inclusion of
        WebKitWebExtensionAutocleanups.h

2019-03-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove unused WebPageProxy::m_navigationID
        https://bugs.webkit.org/show_bug.cgi?id=195209

        Reviewed by Darin Adler.

        WebPageProxy::m_navigationID is never assigned to and is only used once by mistake in a
        debug LOG(). It must be a refactoring mistake.

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

2019-03-01  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::getAssertion): Use makeString, attempting to fix
        a problem where we passed an NSData * to format with a "%s"."

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

        Unreviewed Windows build fix after r242302.

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

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

        NetworkDataTask redirection should not keep alive its NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=194927

        Reviewed by Darin Adler.

        This should fix rdar://problem/47580502

        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):

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

        Revert r241223, r241235, and r241287
        https://bugs.webkit.org/show_bug.cgi?id=194427
        <rdar://48045861>

        This caused crashes, and feature design has evolved away from needing the daemon in this form.

        * NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm:
        (WebKit::DaemonMain):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler):
        (WebKit::XPCServiceMain):
        (WebKit::XPCEventHandler): Deleted.
        (WebKit::XPCInitializationHandler): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration usesNetworkingDaemon]): Deleted.
        (-[_WKProcessPoolConfiguration setUsesNetworkingDaemon:]): Deleted.
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::usesNetworkingDaemon const): Deleted.
        * UIProcess/WebProcessPool.h:

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

        Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=195229
        <rdar://problem/48520362>

        Reviewed by Chris Dumez.

        Just like _setBoundInterfaceIdentifier, we need a way to set these properties after instantiation of a WKWebsiteDataStore,
        but we need to make sure we don't set it after the parameters have been copied to the NetworkProcess.

        Functionality verified by manual testing.  See radar.
        Added an API test that verifies the setter restrictions work as expected.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _sourceApplicationBundleIdentifier]):
        (-[WKWebsiteDataStore _setSourceApplicationBundleIdentifier:]):
        (-[WKWebsiteDataStore _sourceApplicationSecondaryIdentifier]):
        (-[WKWebsiteDataStore _setSourceApplicationSecondaryIdentifier:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKPaymentRequest):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::setSourceApplicationSecondaryIdentifier):
        (WebKit::WebsiteDataStore::setSourceApplicationBundleIdentifier):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::sourceApplicationBundleIdentifier):
        (WebKit::WebsiteDataStore::sourceApplicationSecondaryIdentifier):

2019-03-01  Antoine Quint  <graouts@apple.com>

        [iOS] Turn mouse event simulation on by default
        https://bugs.webkit.org/show_bug.cgi?id=195218
        <rdar://problem/48516794>

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2019-03-01  Ross Kirsling  <ross.kirsling@sony.com>

        EnvironmentUtilities::stripValuesEndingWithString isn't thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=194612

        Reviewed by Alex Christensen.

        This API test really shouldn't be verifying that the actual environment was successfully modified.

        At its core, stripValuesEndingWithString is really just split-filter-join. By replacing it with a pair of
        simple functions -- one for string processing, one for environment processing -- the API test only needs to
        worry about the former.

        * Platform/unix/EnvironmentUtilities.cpp:
        (WebKit::EnvironmentUtilities::stripEntriesEndingWith):
        (WebKit::EnvironmentUtilities::removeValuesEndingWith):
        (WebKit::EnvironmentUtilities::stripValuesEndingWithString): Deleted.
        * Platform/unix/EnvironmentUtilities.h:
        Replace old function with a pair of simpler ones.

        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkServiceEntryPoint.mm:
        (NetworkServiceInitializer):
        * PluginProcess/EntryPoint/Cocoa/XPCService/PluginServiceEntryPoint.mm:
        (PluginServiceInitializer):
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):
        Update function name.

2019-03-01  Don Olmstead  <don.olmstead@sony.com>

        Unify WebsiteDataStore::defaultDataStoreConfiguration across ports
        https://bugs.webkit.org/show_bug.cgi?id=194844

        Reviewed by Youenn Fablet.

        Move the Cocoa implementation into APIWebsiteDataStore.cpp as the source of truth and
        append configuration for Glib's DeviceIdHashSalts storage directory. This also fixes
        a crash in Windows when running a Service Worker.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultDataStoreConfiguration): Deleted.
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        (API::WebsiteDataStore::defaultDataStoreConfiguration): Deleted.
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp:
        (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultDataStoreConfiguration): Deleted.

2019-03-01  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Further restrict client-side cookie persistence after cross-site navigations with link decoration
        https://bugs.webkit.org/show_bug.cgi?id=195196
        <rdar://problem/48006419>

        Reviewed by Brent Fulgham.

        Trackers abuse link query parameters to transport user identifiers cross-site.
        This patch detects such navigations and applies further restrictions to
        client-site cookies on the destination page.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::clearPageSpecificDataForResourceLoadStatistics):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage): Deleted.
            Renamed NetworkConnectionToWebProcess::clearPageSpecificDataForResourceLoadStatistics().
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::committedCrossSiteLoadWithLinkDecoration):
            Reporting IPC message when a link decorated cross-site navigation happens.
        (WebKit::NetworkProcess::resetCrossSiteLoadsWithLinkDecorationForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
            Added clearing of the new state between test runs.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::resetCrossSiteLoadsWithLinkDecorationForTesting):
            Test infrastructure.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::isNonUniqueNavigationWithLinkDecoration):
            Convenience function.
        (WebKit::WebPageProxy::didCommitLoadForFrame):
            This function now reports to the network process when a link decorated
            cross-site navigation happens.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resetCrossSiteLoadsWithLinkDecorationForTesting):
            Test infrastructure.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
            Name change of function called.

2019-03-01  Tim Horton  <timothy_horton@apple.com>

        Remove unused code in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=189614

        Reviewed by Simon Fraser.

        * mac/MigrateHeadersFromWebKitLegacy.make:

2019-03-01  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit::AttributedString a little bit
        https://bugs.webkit.org/show_bug.cgi?id=195200

        Reviewed by Wenson Hsieh.

        * Shared/mac/AttributedString.h:
        (WebKit::AttributedString::AttributedString):
        (WebKit::AttributedString::operator NSAttributedString * const):
        * Shared/mac/AttributedString.mm:
        (IPC::ArgumentCoder<WebKit::AttributedString>::encode):
        (IPC::ArgumentCoder<WebKit::AttributedString>::decode):
        (WebKit::AttributedString::encode const): Deleted.
        (WebKit::AttributedString::decode): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::attributedSubstringForProposedRange):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync):
        Modern coders, and a constructor and cast operator to/from NSAttributedString.
        Also adopt those in a few places just for fun.

2019-03-01  Youenn Fablet  <youenn@apple.com>

        Serialize IndexedDB::ObjectStoreOverwriteMode as an enum
        https://bugs.webkit.org/show_bug.cgi?id=195213

        Reviewed by Alex Christensen.

        Make use of enum trait to automatically check for correct enum value when receiving a putOrAdd message.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
        * Scripts/webkit/messages.py:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::putOrAdd):

2019-03-01  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Enable service worker
        https://bugs.webkit.org/show_bug.cgi?id=188318

        Reviewed by Youenn Fablet.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::terminateProcess):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * config.h:

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

        Flaky API Test TestWebKitAPI.ProcessSwap.LoadUnload
        https://bugs.webkit.org/show_bug.cgi?id=195110

        Reviewed by Ryosuke Niwa.

        The test was attempting to disable PageCache via view preferences instead of using the
        process pool configuration flag. This would fail to disable PageCache because the
        usesPageCache preference would not prevent the creation of SuspendedPageProxy objects.
        As a result, the firing on the unload event would get delayed until the SuspendedPageProxy
        objects would get destroyed, which would lead to flakiness.

        This patch updates WebPageProxy::suspendCurrentPageIfPossible() to not create suspended
        pages proxies when the usesPageCache preference is set to false.

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

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

        [ThreadedCompositor] Simply the compositing run loop worker thread
        https://bugs.webkit.org/show_bug.cgi?id=195208

        Reviewed by Don Olmstead.

        We can remove the WorkQueuePool, since we never really supported more than one thread, and now that single
        process model non longer exists it doesn't even make sense. We can simply use a RunLoop instead of a WorkQueue
        so that the implementation is not specific to the generic WorkQueue implementation.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::createRunLoop): Helper function to create the RunLoop in a worker thread before m_updateTimer is initialized.
        (WebKit::CompositingRunLoop::CompositingRunLoop): Use createRunLoop().
        (WebKit::CompositingRunLoop::~CompositingRunLoop): Stop the worker thread run loop in the next main run loop iteration.
        (WebKit::CompositingRunLoop::performTask): Use m_runLoop.
        (WebKit::CompositingRunLoop::performTaskSync): Ditto.
        (WebKit::WorkQueuePool::singleton): Deleted.
        (WebKit::WorkQueuePool::dispatch): Deleted.
        (WebKit::WorkQueuePool::runLoop): Deleted.
        (WebKit::WorkQueuePool::invalidate): Deleted.
        (WebKit::WorkQueuePool::WorkQueuePool): Deleted.
        (WebKit::WorkQueuePool::getOrCreateWorkQueueForContext): Deleted.
        (): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:

2019-03-01  Justin Fan  <justin_fan@apple.com>

        [Web GPU] 32-bit builds broken by attempt to disable WebGPU on 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=195191

        Rubber-stamped by Dean Jackson.

        Dropping support for 32-bit entirely, so I'm intentionally leaving 32-bit broken.

        * Configurations/FeatureDefines.xcconfig:

2019-02-28  Chris Dumez  <cdumez@apple.com>

        HTTPSUpgradeList.db database should be opened in readonly mode
        https://bugs.webkit.org/show_bug.cgi?id=195194
        <rdar://problem/47103889>

        Reviewed by Youenn Fablet.

        HTTPSUpgradeList.db database should be opened in readonly mode since it is not meant to be
        modified by WebKit. Opening it in ReadWrite mode causes sandbox violations.

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

2019-02-28  David Quesada  <david_quesada@apple.com>

        Expose APINavigationAction.shouldPerformDownload() on WKNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=195121
        rdar://problem/48450302

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction _shouldPerformDownload]):
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:

2019-02-28  Antoine Quint  <graouts@apple.com>

        Disable Web Animations in Safari Technology Preview
        https://bugs.webkit.org/show_bug.cgi?id=194748
        <rdar://problem/48139481>

        Reviewed by Dean Jackson.

        The test runners already opt into that feature explicitly, so all that is needed is to turn
        the default setting value to false.

        * Shared/WebPreferences.yaml:

2019-02-28  Antoine Quint  <graouts@apple.com>

        Enable the Pointer Events runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=195156

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2019-02-28  Sihui Liu  <sihui_liu@apple.com>

        Revert r232263: it caused processes to crash because process was suspended with locked file
        https://bugs.webkit.org/show_bug.cgi?id=195122
        <rdar://problem/48444599>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * Shared/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::hysteresisUpdated):
        * Shared/WebSQLiteDatabaseTracker.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::m_webSQLiteDatabaseTracker):
        (WebKit::m_nonVisibleProcessCleanupTimer): Deleted.
        * WebProcess/WebProcess.h:

2019-02-28  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Move calls to [UIKeyboard isInHardwareKeyboardMode] to the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=193683
        <rdar://problem/47634345>

        Reviewed by Brent Fulgham.

        When a keyboard is attached/deattached or the application becomes foreground, send a message from
        the UI process to the WebContent process, notifying whether a keyboard is attached or not. Also,
        cache the value of [UIKeyboard isInHardwareKeyboardMode] in the UI process, since this call seems
        to be expensive.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (hardwareKeyboardAvailabilityChangedCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::setKeyboardIsAttached):
        (WebKit::WebProcessProxy::keyboardIsAttached const):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationWillEnterForeground):
        (WebKit::WebPageProxy::hardwareKeyboardAvailabilityChanged):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::hardwareKeyboardAvailabilityChanged):

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

        [CoordinatedGraphics] Remove COORDINATED_GRAPHICS_THREADED option
        https://bugs.webkit.org/show_bug.cgi?id=195159

        Reviewed by Don Olmstead.

        Use COORDINATED_GRAPHICS instead.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::onNewBufferAvailable):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/SimpleViewportController.cpp:
        * Shared/CoordinatedGraphics/SimpleViewportController.h:
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::mainFrameContentSizeChanged):
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):
        (WebKit::WebPage::viewportPropertiesDidChange):
        * WebProcess/gtk/WebProcessMainGtk.cpp:

2019-02-28  Sihui Liu  <sihui_liu@apple.com>

        Stop using legacy IDB path by default when creating WebProcessPool from websiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=194958

        Reviewed by Geoffrey Garen.

        ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration should not use fixed IDB path.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration):
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::createLegacy):
        (API::indexedDBDatabaseDirectory):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _indexedDBDatabaseDirectory]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):

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

        [CoordinatedGraphics] Unify all LayerTreeHost classes
        https://bugs.webkit.org/show_bug.cgi?id=195094

        Reviewed by Žan Doberšek.

        There's no reason to have 3 classes, since currently LayerTreeHost is only used by coordinated graphics based
        ports.

        * PlatformWin.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode):
        (WebKit::AcceleratedDrawingArea::exitAcceleratedCompositingModeNow):
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: Removed.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h: Removed.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp: Renamed from Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp.
        (WebKit::LayerTreeHost::LayerTreeHost):
        (WebKit::LayerTreeHost::~LayerTreeHost):
        (WebKit::LayerTreeHost::setLayerFlushSchedulingEnabled):
        (WebKit::LayerTreeHost::scheduleLayerFlush):
        (WebKit::LayerTreeHost::cancelPendingLayerFlush):
        (WebKit::LayerTreeHost::layerFlushTimerFired):
        (WebKit::LayerTreeHost::setRootCompositingLayer):
        (WebKit::LayerTreeHost::setViewOverlayRootLayer):
        (WebKit::LayerTreeHost::invalidate):
        (WebKit::LayerTreeHost::scrollNonCompositedContents):
        (WebKit::LayerTreeHost::forceRepaint):
        (WebKit::LayerTreeHost::forceRepaintAsync):
        (WebKit::LayerTreeHost::sizeDidChange):
        (WebKit::LayerTreeHost::pauseRendering):
        (WebKit::LayerTreeHost::resumeRendering):
        (WebKit::LayerTreeHost::graphicsLayerFactory):
        (WebKit::LayerTreeHost::contentsSizeChanged):
        (WebKit::LayerTreeHost::didChangeViewportAttributes):
        (WebKit::LayerTreeHost::didChangeViewport):
        (WebKit::LayerTreeHost::setIsDiscardable):
        (WebKit::LayerTreeHost::setNativeSurfaceHandleForCompositing):
        (WebKit::LayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::LayerTreeHost::createDisplayRefreshMonitor):
        (WebKit::LayerTreeHost::didFlushRootLayer):
        (WebKit::LayerTreeHost::commitSceneState):
        (WebKit::LayerTreeHost::frameComplete):
        (WebKit::LayerTreeHost::nativeSurfaceHandleForCompositing):
        (WebKit::LayerTreeHost::didDestroyGLContext):
        (WebKit::LayerTreeHost::willRenderFrame):
        (WebKit::LayerTreeHost::didRenderFrame):
        (WebKit::LayerTreeHost::requestDisplayRefreshMonitorUpdate):
        (WebKit::LayerTreeHost::handleDisplayRefreshMonitorUpdate):
        (WebKit::LayerTreeHost::renderNextFrame):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h: Renamed from Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        (WebKit::DrawingAreaImpl::setNeedsDisplayInRect):
        * WebProcess/WebPage/LayerTreeHost.cpp: Removed.
        * WebProcess/WebPage/LayerTreeHost.h: Removed.
        * WebPage/win/LayerTreeHost.h: Added.

2019-02-28  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Enable Web GPU only on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=195139

        Because Metal is only supported on 64 bit apps.

        Unreviewed build fix.

        * Configurations/FeatureDefines.xcconfig:

2019-02-27  Simon Fraser  <simon.fraser@apple.com>

        Roll out r242014; it caused crashes in compositing logging (webkit.org/b/195141)

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::getAssertion):

2019-02-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wformat warning

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

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

        REGRESSION: Crash beneath ResourceLoadObserver::logSubresourceLoading
        https://bugs.webkit.org/show_bug.cgi?id=195072

        Reviewed by Ryosuke Niwa.

        ResourceLoadObserver and WebProcess should exist as long as the web page (process) is running. However,
        the NetworkProcess connection can close for a variety of reasons. If the ResourceLoadObserver observes
        a load or user gesture in the WebProcess, we should attempt to reconnect to the NetworkProcess (if it
        was disconnected), just like we do for other message send cases.

        This patch switches from using the m_networkProcessConnection member (which might be null) to use the
        'ensureNetworkProcessConnection' accessor which ensures we have a valid connection for message sends.

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

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.SessionStorage
        https://bugs.webkit.org/show_bug.cgi?id=194480

        Reviewed by Brady Eidson.

        The StorageManager would only start listening for IPC on a given connection when
        StorageManager::processWillOpenConnection() is called. This gets called from
        WebsiteDataStore::webProcessWillOpenConnection() which gets called from
        WebProcessLifetimeTracker::webPageEnteringWebProcess().

        webPageEnteringWebProcess() was called in WebPageProxy::finishAttachingToWebProcess()
        after process-swapping. This means that IPC comming from the *provisional* process
        would not get processed and we would only start processing IPC on the provisional
        process's connection when it would get committed.

        To address the issue, this patch teaches WebProcessLifetimeTracker that a page can
        now have several processes. We also make sure that webPageEnteringWebProcess() gets
        called for the provisional process as soon as we create the provisional page, instead
        of waiting for it to get committed.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::connectionWillOpen):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::connectionWillOpen):
        (WebKit::WebPageProxy::webProcessWillShutDown):
        (WebKit::WebPageProxy::processDidTerminate):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::webProcessLifetimeTracker):
        * UIProcess/WebProcessLifetimeObserver.cpp:
        (WebKit::WebProcessLifetimeObserver::addWebPage):
        (WebKit::WebProcessLifetimeObserver::removeWebPage):
        * UIProcess/WebProcessLifetimeObserver.h:
        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::addObserver):
        (WebKit::WebProcessLifetimeTracker::webPageEnteringWebProcess):
        (WebKit::WebProcessLifetimeTracker::webPageLeavingWebProcess):
        (WebKit::WebProcessLifetimeTracker::pageWasInvalidated):
        (WebKit::WebProcessLifetimeTracker::processIsRunning):
        * UIProcess/WebProcessLifetimeTracker.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::SessionStorageNamespace::allowedConnections const):
        (WebKit::StorageManager::SessionStorageNamespace::addAllowedConnection):
        (WebKit::StorageManager::SessionStorageNamespace::removeAllowedConnection):
        (WebKit::StorageManager::addAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::removeAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::processWillOpenConnection):
        (WebKit::StorageManager::processDidCloseConnection):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::SessionStorageNamespace::allowedConnection const): Deleted.
        (WebKit::StorageManager::SessionStorageNamespace::setAllowedConnection): Deleted.
        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnection): Deleted.
        * UIProcess/WebStorage/StorageManager.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::webPageWillOpenConnection):
        (WebKit::WebsiteDataStore::webPageDidCloseConnection):

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

        [iOS] Web pages shouldn't be able to present a keyboard after the web view resigns first responder
        https://bugs.webkit.org/show_bug.cgi?id=195118
        <rdar://problem/43411940>

        Reviewed by Tim Horton.

        It's currently possible for websites to redirect focus into an editable element on the page by programmatically
        requesting focus within the "blur" event handler. This is because our current heuristics:

        (1) Allow programmatic focus to show the keyboard when an element is already focused; this is meant to handle
            the case where the page moves focus between different elements on the page.
        (2) And also allow programmatic focus to show the keyboard when changing activity state; this is meant to handle
            the case where a focused element should show the keyboard when first responder is restored on a web view
            (e.g. in the case where a modal view controller is dismissed, and the web view regains first responder once
            again).

        In both of these scenarios, we actually only want the keyboard to appear if the web view itself is either
        becoming the first responder, or is already the first responder. Importantly, when blurring the focused element
        by calling -[WKWebViewe resignFirstResponder] (as is the case when dismissing the keyboard by tapping 'Done' or
        focusing other platform UI), we don't want to allow the page to show the keyboard due to element focus.

        To fix this issue, we enforce that we're either becoming the first responder or already are the first responder
        before showing the keyboard due to activity state change or focused element change.

        Test: fast/events/ios/do-not-show-keyboard-when-focusing-after-blur.html

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView textInputTraits]):

        Quick drive-by tweak: rename _isBlurringFocusedNode to _isBlurringFocusedElement, to match the rest of the
        terminology used in WebKit.

        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

        Make our heuristics for determining whether to show the keyboard a tiny bit easier to follow, by moving the
        logic into a lambda function and using early returns. See above for more details.

        (-[WKContentView _elementDidBlur]):
        (-[WKContentView focusedFormControllerDidUpdateSuggestions:]):

2019-02-27  John Wilander  <wilander@apple.com>

        Adopt WebCore::RegistrableDomain in WebCore::ResourceLoadStatistics and WebKit::NetworkProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=195071
        <rdar://problem/48417690>

        Reviewed by Alex Christensen and Brent Fulgham.

        This patch adopts WebCore::RegistrableDomain in WebKit::NetworkProcessProxy
        and makes the necessary infrastructure changes to support that.

        The previous HashCountedSets in WebCore::ResourceLoadStatistics are now just
        HashSets since we never used the counts for anything. This change simplified
        the IPC::ArgumentCoder<ResourceLoadStatistics> encode and decode functions.

        The patch also makes WebCore::RegistrableDomain's String constructor private.
        A new create function WebCore::RegistrableDomain::uncheckedCreateFromString()
        is introduced to better signal to users that creating a registrable domain
        object with a string may create an object that doesn't match a registrable
        domain in a valid HTTP-family URL.

        Finally, this patch harmonizes parameter and variable naming, going from
        "origin" to "domain" and "mainFrame" to "topFrame."

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::recursivelyGetAllDomainsThatHaveRedirectedToThisDomain const):
        (WebKit::ResourceLoadStatisticsMemoryStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceLoading):
        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceRedirect):
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsSubresourceUnder const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsSubFrameUnder const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsRedirectingTo const):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubframeUnderTopFrameDomain):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubresourceUnderTopFrameDomain):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubresourceUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubresourceUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsMemoryStore::setTopFrameUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsMemoryStore::setTopFrameUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsMemoryStore::createEncoderFromData const):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasUserGrantedStorageAccessThroughPrompt):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasHadUnexpiredRecentUserInteraction const):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubframeUnderTopFrameOrigin): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubresourceUnderTopFrameOrigin): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted):
        (WebKit::WebResourceLoadStatisticsStore::setSubframeUnderTopFrameDomain):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUnderTopFrameDomain):
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
        (WebKit::WebResourceLoadStatisticsStore::setSubframeUnderTopFrameOrigin): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUnderTopFrameOrigin): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::sortedPrevalentResourceTelemetry):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setSubframeUnderTopFrameDomain):
        (WebKit::NetworkProcess::setSubresourceUnderTopFrameDomain):
        (WebKit::filterForRegistrableDomains):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::setSubframeUnderTopFrameOrigin): Deleted.
        (WebKit::NetworkProcess::setSubresourceUnderTopFrameOrigin): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
        * NetworkProcess/NetworkSession.h:
        * Platform/classifier/ResourceLoadStatisticsClassifier.cpp:
        (WebKit::ResourceLoadStatisticsClassifier::calculateResourcePrevalence):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsSubframeUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUnderTopFrameOrigin):
        * UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm:
        (WebKit::ResourceLoadStatisticsMemoryStore::registerUserDefaultsIfNeeded):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcessProxy::isPrevalentResource):
        (WebKit::NetworkProcessProxy::isVeryPrevalentResource):
        (WebKit::NetworkProcessProxy::setPrevalentResource):
        (WebKit::NetworkProcessProxy::setPrevalentResourceForDebugMode):
        (WebKit::NetworkProcessProxy::setVeryPrevalentResource):
        (WebKit::NetworkProcessProxy::setLastSeen):
        (WebKit::NetworkProcessProxy::clearPrevalentResource):
        (WebKit::NetworkProcessProxy::logUserInteraction):
        (WebKit::NetworkProcessProxy::hasHadUserInteraction):
        (WebKit::NetworkProcessProxy::clearUserInteraction):
        (WebKit::NetworkProcessProxy::setSubframeUnderTopFrameDomain):
        (WebKit::NetworkProcessProxy::isRegisteredAsRedirectingTo):
        (WebKit::NetworkProcessProxy::isRegisteredAsSubFrameUnder):
        (WebKit::NetworkProcessProxy::setSubresourceUnderTopFrameDomain):
        (WebKit::NetworkProcessProxy::isRegisteredAsSubresourceUnder):
        (WebKit::NetworkProcessProxy::setSubresourceUniqueRedirectTo):
        (WebKit::NetworkProcessProxy::setSubresourceUniqueRedirectFrom):
        (WebKit::NetworkProcessProxy::setTopFrameUniqueRedirectTo):
        (WebKit::NetworkProcessProxy::setTopFrameUniqueRedirectFrom):
        (WebKit::NetworkProcessProxy::isGrandfathered):
        (WebKit::NetworkProcessProxy::setGrandfathered):
        (WebKit::NetworkProcessProxy::hasStorageAccessForFrame):
        (WebKit::NetworkProcessProxy::hasStorageAccess):
        (WebKit::NetworkProcessProxy::requestStorageAccess):
        (WebKit::NetworkProcessProxy::requestStorageAccessConfirm):
        (WebKit::NetworkProcessProxy::grantStorageAccess):
        (WebKit::NetworkProcessProxy::setSubframeUnderTopFrameOrigin): Deleted.
        (WebKit::NetworkProcessProxy::setSubresourceUnderTopFrameOrigin): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestStorageAccessConfirm):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::isPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode):
        (WebKit::WebsiteDataStore::isVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setSubframeUnderTopFrameDomain):
        (WebKit::WebsiteDataStore::isRegisteredAsSubFrameUnder):
        (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameDomain):
        (WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::isRegisteredAsRedirectingTo):
        (WebKit::WebsiteDataStore::clearPrevalentResource):
        (WebKit::WebsiteDataStore::setLastSeen):
        (WebKit::WebsiteDataStore::hasStorageAccess):
        (WebKit::WebsiteDataStore::requestStorageAccess):
        (WebKit::WebsiteDataStore::grantStorageAccess):
        (WebKit::WebsiteDataStore::logUserInteraction):
        (WebKit::WebsiteDataStore::hasHadUserInteraction):
        (WebKit::WebsiteDataStore::clearUserInteraction):
        (WebKit::WebsiteDataStore::setGrandfathered):
        (WebKit::WebsiteDataStore::setSubframeUnderTopFrameOrigin): Deleted.
        (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameOrigin): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hasStorageAccess):
        (WebKit::WebPage::requestStorageAccess):

2019-02-27  Keith Rollin  <krollin@apple.com>

        Fix Xcode project UUIDs for TextCheckerCompletion.cpp and TextCheckerCompletion.h
        https://bugs.webkit.org/show_bug.cgi?id=195109
        <rdar://problem/48442272>

        Reviewed by Alexey Proskuryakov.

        In r144436, TextCheckerCompletion.cpp and TextCheckerCompletion.h were
        added to WebKit2.xcodeproj with invalid UUIDs (they included Q's and
        Z's in hexadecimal strings). While these UUIDs haven't caused any
        problems in practice over the last six years, they are indeed invalid,
        and were discovered via an Xcode-project processing tool that did not
        anticipate their format. Fix this by removing the files from the
        project and re-adding them.

        * WebKit.xcodeproj/project.pbxproj:

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

        Remove UserMediaProcessManager processState map
        https://bugs.webkit.org/show_bug.cgi?id=195056

        Reviewed by Eric Carlson.

        Before the patch, the WebProcessProxy->ProcessState map was storing the list of manager proxies and process state.
        To improve on this model, this patch does the following:
        - Move the process state to WebProcessProxy.
        - Remove the map and replace it by a set of all manager proxies.

        This simplifies the handling.
        On WebProcess side, instead of storing the sandbox extensions in each WebPage, we handle them in WebProcess directly.
        This mirrors what is being done in UIProcess and reduces the risk of inconsistencies between the two, the risk being that capture would fail.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::forEach):
        (WebKit::UserMediaPermissionRequestManagerProxy::UserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaPermissionRequestManagerProxy::~UserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaPermissionRequestManagerProxy::captureStateChanged):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::muteCaptureMediaStreamsExceptIn):
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        (WebKit::UserMediaProcessManager::endedCaptureSession):
        (WebKit::UserMediaProcessManager::setCaptureEnabled):
        (WebKit::UserMediaProcessManager::captureDevicesChanged):
        (WebKit::ProcessState::ProcessState): Deleted.
        (WebKit::ProcessState::hasVideoExtension const): Deleted.
        (WebKit::ProcessState::grantVideoExtension): Deleted.
        (WebKit::ProcessState::revokeVideoExtension): Deleted.
        (WebKit::ProcessState::hasAudioExtension const): Deleted.
        (WebKit::ProcessState::grantAudioExtension): Deleted.
        (WebKit::ProcessState::revokeAudioExtension): Deleted.
        (WebKit::stateMap): Deleted.
        (WebKit::processState): Deleted.
        (WebKit::ProcessState::addRequestManager): Deleted.
        (WebKit::ProcessState::removeRequestManager): Deleted.
        (WebKit::UserMediaProcessManager::addUserMediaPermissionRequestManagerProxy): Deleted.
        (WebKit::UserMediaProcessManager::removeUserMediaPermissionRequestManagerProxy): Deleted.
        (WebKit::UserMediaProcessManager::startedCaptureSession): Deleted.
        * UIProcess/UserMediaProcessManager.h:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::mediaCaptureSandboxExtensions const):
        (WebKit::WebProcessProxy::hasVideoCaptureExtension const):
        (WebKit::WebProcessProxy::grantVideoCaptureExtension):
        (WebKit::WebProcessProxy::revokeVideoCaptureExtension):
        (WebKit::WebProcessProxy::hasAudioCaptureExtension const):
        (WebKit::WebProcessProxy::grantAudioCaptureExtension):
        (WebKit::WebProcessProxy::revokeAudioCaptureExtension):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::~UserMediaPermissionRequestManager): Deleted.
        (WebKit::UserMediaPermissionRequestManager::clear): Deleted.
        (WebKit::UserMediaPermissionRequestManager::grantUserMediaDeviceSandboxExtensions): Deleted.
        (WebKit::UserMediaPermissionRequestManager::revokeUserMediaDeviceSandboxExtensions): Deleted.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::grantUserMediaDeviceSandboxExtensions): Deleted.
        (WebKit::WebPage::revokeUserMediaDeviceSandboxExtensions): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::grantUserMediaDeviceSandboxExtensions):
        (WebKit::WebProcess::revokeUserMediaDeviceSandboxExtensions):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-02-27  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Disable permissive call logging in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=194061
        <rdar://problem/47686253>

        Reviewed by Brent Fulgham.

        Strict call filtering should be reenabled.

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

2019-02-27  Chris Dumez  <cdumez@apple.com>

        [HTTPSUpgrade] Use open source database until the feature is ready
        https://bugs.webkit.org/show_bug.cgi?id=195069
        <rdar://problem/47838224>

        Reviewed by Geoffrey Garen.

        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:

2019-02-27  Antoine Quint  <graouts@apple.com>

        Support Pointer Events on macOS
        https://bugs.webkit.org/show_bug.cgi?id=195008
        <rdar://problem/47454419>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2019-02-27  Sihui Liu  <sihui_liu@apple.com>

        Network Process is put to suspended when holding locked IndexedDB files
        https://bugs.webkit.org/show_bug.cgi?id=195024
        <rdar://problem/45194169>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::idbServer):
        (WebKit::NetworkProcess::notifyHoldingLockedFiles):
        * NetworkProcess/NetworkProcess.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::setIsIDBDatabaseHoldingLockedFiles):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

2019-02-26  Simon Fraser  <simon.fraser@apple.com>

        Have a single notion of scroll position in the scrolling tree and derive layoutViewport from it
        https://bugs.webkit.org/show_bug.cgi?id=194973

        Reviewed by Antti Koivisto.

        This patch cleans up how the scrolling tree responds to scrolls.

        First, ScrollingTreeScrollingNode::m_currentScrollPosition is "truth" for scrolling thread/
        UI process scroll position.

        On macOS where handleWheelEvent on the scrolling thread changes scroll position, the
        bottleneck is ScrollingTreeScrollingNode::scrollTo() which sets the new scroll position,
        update the visual viewport (for frame scrolls) updates the scrolledContentsLayer position,
        updates related layers on this node (counter-scrolling layers etc), and then tells the
        scrolling tree, which recurses through descendant nodes so they can adjust their layer
        positions.

        On iOS, the bottleneck is ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling(),
        which does the above other than setting scrolledContentsLayer (since we're reacting to
        layer state changes, not producing them).

        updateLayersAfterAncestorChange() is renamed to relatedNodeScrollPositionDidChange(), and
        ScrollingTree does the tree walk so classes don't have to implement
        updateLayersAfterAncestorChange() just to talk children. The ScrollingTree tree walk knows
        how to get the correct layoutViewport and to stop at frame boundaries (layer updates never
        need to cross frame boundaries).

        We preserve 'cumulativeDelta'; it's necessary for things like fixed inside overflow:scroll,
        since the fixed state was computed with the "layout" scroll position, so we have to account
        for the scroll delta since the last committed position. It's possible we could improve this
        in future.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::viewportChangedViaDelegatedScrolling):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidScroll):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::currentLayoutViewport const):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateAfterChildren):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::repositionScrollingLayers):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::repositionRelatedLayers):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::scrollPosition const): Deleted.
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::setScrollPosition): Deleted.
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::setScrollLayerPosition): Deleted.
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateChildNodesAfterScroll): Deleted.
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterDelegatedScroll): Deleted.
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterViewportChange): Deleted.
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterAncestorChange): Deleted.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::repositionScrollingLayers):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterAncestorChange): Deleted.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollPosition const): Deleted.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::setScrollLayerPosition): Deleted.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterDelegatedScroll): Deleted.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::ScrollingTreeScrollingNodeDelegateIOS):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::repositionScrollingLayers):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::scrollViewDidScroll):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateLayersAfterAncestorChange): Deleted.
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::scrollPosition const): Deleted.
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::setScrollLayerPosition): Deleted.
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateChildNodesAfterScroll): Deleted.
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::scrollViewDidScroll const): Deleted.
        * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm:
        (WebKit::ScrollerPairMac::updateValues):
        (WebKit::ScrollerPairMac::valuesForOrientation):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::repositionRelatedLayers):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::setScrollLayerPosition): Deleted.
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:contentInsets:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):

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

        Silence log after r242122
        https://bugs.webkit.org/show_bug.cgi?id=195074

        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasePath const):
        m_localStorageDirectory can now be null for ephemeral sessions.
        This is not a failure to create a directory and needs no log.
        This fixes the WKWebView.InitializingWebViewWithEphemeralStorageDoesNotLog API test.

2019-02-27  Timothy Hatcher  <timothy@apple.com>

        REGRESSION: WebKit content crash in Base System (because NSAppearance is NULL).
        https://bugs.webkit.org/show_bug.cgi?id=195086
        rdar://problem/48419124

        Reviewed by Tim Horton.

        * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm:
        (-[WKScrollerImpDelegate effectiveAppearanceForScrollerImp:]): Always return a valid NSAppearance.

2019-02-26  Chris Dumez  <cdumez@apple.com>

        [PSON] Add mechanism to clear suspended pages while bypassing the WebProcess cache
        https://bugs.webkit.org/show_bug.cgi?id=195089

        Reviewed by Geoffrey Garen.

        Add a convenient mechanism to clear suspended pages while bypassing the WebProcess
        cache since we need to do this on memory pressure and when clearing website data.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::addProcessIfPossible):
        (WebKit::WebProcessCache::addProcess):
        (WebKit::WebProcessCache::takeProcess):
        (WebKit::WebProcessCache::CachedProcess::~CachedProcess):
        * UIProcess/WebProcessCache.h:
        (WebKit::WebProcessCache::setIsDisabled): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::handleMemoryPressureWarning):
        (WebKit::WebProcessPool::hasSuspendedPageFor const):
        (WebKit::WebProcessPool::clearSuspendedPages):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::maybeShutDown):
        (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::suspendedPageCount const):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):

2019-02-26  Alex Christensen  <achristensen@webkit.org>

        Move ephemeral local storage from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=195074
        <rdar://problem/47937975>

        Reviewed by Geoff Garen.

        Before PSON, a page could navigate to another domain that navigates back and still have its local storage.
        Since PSON makes it unreliable to retain the state in the WebProcess, move it to the process with the rest of the local storage.
        If it's ephemeral, we obviously can't use the SQLite on-disk storage implementation, so use the same WebCore::StorageMap we used to in the WebProcess.

        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::LocalStorageNamespace::LocalStorageNamespace):
        (WebKit::StorageManager::StorageManager):
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createTransientLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        (WebKit::StorageManager::getValues):
        (WebKit::StorageManager::setItem):
        (WebKit::StorageManager::removeItem):
        (WebKit::StorageManager::clear):
        * UIProcess/WebStorage/StorageManager.h:
        * UIProcess/WebStorage/StorageManager.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createEphemeralLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::storageArea):
        (WebKit::StorageNamespaceImpl::copy):
        (): Deleted.
        (WebKit::StorageNamespaceImpl::ephemeralLocalStorageArea): Deleted.
        * WebProcess/WebStorage/StorageNamespaceImpl.h:

2019-02-20  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

        When the WebProcess receives a notification that the process is about to become
        suspended, it tells the MemoryPressureHandler to release all critical memory. This
        has the side effect of causing AVFoundation-backed media elements to dump their
        in-memory caches and start downloading media data again. Instead, media elements
        should all stop buffering media data during suspension. Add new testing SPI to
        simulate suspension and resume messages.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processWillSuspendImminentlyForTesting]):
        (-[WKWebView _processDidResumeForTesting]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WKInkPickerView.mm:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspendAllMediaBuffering):
        (WebKit::WebPage::resumeAllMediaBuffering):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):
        (WebKit::WebProcess::suspendAllMediaBuffering):
        (WebKit::WebProcess::resumeAllMediaBuffering):
        * WebProcess/WebProcess.h:

2019-02-26  Youenn Fablet  <youenn@apple.com>

        Move service worker response validation from the service worker client to the service worker itself
        https://bugs.webkit.org/show_bug.cgi?id=194716

        Reviewed by Geoffrey Garen.

        Removed response validation as it is now done in service worker side.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):

2019-02-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] clearContentChangeObservers should be internal to ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=195066
        <rdar://problem/48411682>

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::clearContentChangeObservers): Deleted.

2019-02-26  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Sandbox should allow mach lookups related to media capturing
        https://bugs.webkit.org/show_bug.cgi?id=194951

        Reviewed by Eric Carlson.

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

2019-02-26  Brent Fulgham  <bfulgham@apple.com>

        Update NetworkSession to use Session Cleanup when available
        https://bugs.webkit.org/show_bug.cgi?id=195019
        <rdar://problem/45149868>

        Reviewed by Alex Christensen.

        If the build environment supports Session Cleanup, initialize it.

        No test changes since this doesn't do anything on the test systems at present.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

2019-02-26  Chris Dumez  <cdumez@apple.com>

        [iOS] Regression(PSON) Scroll position is no longer restored when navigating back to reddit.com
        https://bugs.webkit.org/show_bug.cgi?id=195054
        <rdar://problem/48330549>

        Reviewed by Geoff Garen.

        We attempt to restore the scroll position twice, on first layout and then on load completion.
        Before PSON, the scroll position would fail to get restored on first layout but would succeed
        on load completion because the view is tall enough by then. With PSON however, we would
        fail to restore the scroll position on load completion because the view would not be tall
        enough yet by this point. The reason is that the dynamic resources would not be in the memory cache
        and would then get reloaded abd finish loading *after* the load event.

        To address the issue, we now make sure to not purge the memory cache on process suspension on
        iOS if there is currently a SuspendedPageProxy in the UIProcess for this process.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::incrementSuspendedPageCount):
        (WebKit::WebProcessProxy::decrementSuspendedPageCount):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setHasSuspendedPageProxy):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-02-26  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] REGRESSION(r238490?): Safari sometimes shows blank page until a cross site navigation or re-opening the tab
        https://bugs.webkit.org/show_bug.cgi?id=195037
        <rdar://problem/48154508>

        Reviewed by Antti Koivisto.

        Restore the pre-r238490 behavior of WebPage::didCompletePageTransition clearing LayerTreeFreezeReason::ProcessSuspended
        as this has been an issue when I was able to reproduce the issue locally.

        Also added release logging to help diagnose the issue in the future.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):
        (WebKit::WebPage::didCompletePageTransition):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::freezeAllLayerTrees):
        (WebKit::WebProcess::unfreezeAllLayerTrees):

2019-02-26  Youenn Fablet  <youenn@apple.com>

        Create WebPageProxy::m_userMediaPermissionRequestManager only when needed
        https://bugs.webkit.org/show_bug.cgi?id=195051

        Reviewed by Eric Carlson.

        Before the patch, WebPageProxy::m_userMediaPermissionRequestManager was created
        in some methods to reset its state when main document is changing, view is becoming visible...
        This code is unnecessary if the page did not create it already using JS APIs such as getUserMedia/enumerateDevices/ondevicechange.
        This patch skips processing in the other cases if WebPageProxy::m_userMediaPermissionRequestManager is null.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): No need to nullify it since it will be done in resetState shortly after.
        (WebKit::WebPageProxy::didChangeMainDocument):
        (WebKit::WebPageProxy::viewIsBecomingVisible):
        (WebKit::WebPageProxy::clearUserMediaState):
        (WebKit::WebPageProxy::updatePlayingMediaDidChange): m_userMediaPermissionRequestManager should not be null here
        since there is or was some capturing done for the page.

2019-02-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Simplify content observation API by removing explicit DOMTimer observation.
        https://bugs.webkit.org/show_bug.cgi?id=195023
        <rdar://problem/48381885>

        Reviewed by Tim Horton.

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

2019-02-26  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Load HTTP body of 401 response when AuthenticationChange is cancelled.
        https://bugs.webkit.org/show_bug.cgi?id=191652

        Reviewed by Alex Christensen.

        Test: http/tests/security/401-logout/401-logout.php

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::tryHttpAuthentication):
        (WebKit::NetworkDataTaskCurl::tryProxyAuthentication):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:

2019-02-26  Youenn Fablet  <youenn@apple.com>

        WebPageProxy should nullify m_userMediaPermissionRequestManager after resetting the media state
        https://bugs.webkit.org/show_bug.cgi?id=195028
        <rdar://problem/48243733>

        Reviewed by Eric Carlson.

        Covered by API test.

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

2019-02-26  Philippe Normand <pnormand@igalia.com> and Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add API for webview background color configuration
        https://bugs.webkit.org/show_bug.cgi?id=192305

        Reviewed by Michael Catanzaro.

        In the case of WPE we need to send the background color to the web process to be used as the background color of
        the page. This patch adapts the GTK+ implementation to do the same, since it's a lot simpler. The patch also
        removes the SetDrawsBackground message in favor of the new SetBackgroundColor message that receives an optional
        color.

        * PlatformWPE.cmake: Add new WPE API for WebKitColor boxed type.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext): Remove background rendering and opacity handling.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::renderLayerTree): Remove drawsBakground and always clear the context with
        transparent color.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const): Replace drawsBackground with backgroundColor.
        (WebKit::WebPageCreationParameters::decode): Ditto.
        * Shared/WebPageCreationParameters.h:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitWebView.cpp:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkit_web_view_set_background_color):
        (webkit_web_view_get_background_color):
        * UIProcess/API/wpe/WebKitColor.cpp: Added.
        (webkit_color_copy):
        (webkit_color_free):
        (webkitColorToWebCoreColor):
        (webkitColorFillFromWebCoreColor):
        (webkit_color_parse):
        * UIProcess/API/wpe/WebKitColor.h: Added.
        * UIProcess/API/wpe/WebKitColorPrivate.h: Added.
        * UIProcess/API/wpe/WebKitWebView.h: Implement webkit_web_view_set_background_color API.
        * UIProcess/API/wpe/WebKitWebViewWPE.cpp: Ditto.
        (webkit_web_view_set_background_color):
        (webkit_web_view_get_background_color):
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt: Add new symbols.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setDrawsBackground): Set a transparent background color when false is passed.
        (WebKit::WebPageProxy::setBackgroundColor): Send background color to the WebProcess.
        (WebKit::WebPageProxy::creationParameters): Replace drawsBackground with backgroundColor.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::drawsBackground const):
        (WebKit::WebPageProxy::backgroundColor const):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate): Remove GTK+ code to handle background color.
        * UIProcess/gtk/AcceleratedBackingStore.cpp:
        * UIProcess/gtk/AcceleratedBackingStore.h: Make paint() pure virtual and remove the implementation.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::paint): Dot not call AcceleratedBackingStore::paint() now that is pure virtual.
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::paint): Ditto.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Use background color as provided by the
        UIProcess when creating the FrameView.
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::setIsDiscardable):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display): Remove special case for transparent background.
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setBackgroundColor): New API for background color configuration. Proxies to FrameView and DrawingArea.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::backgroundColor const): Read-only access to the current background color.
        * WebProcess/WebPage/WebPage.messages.in: Replace SetDrawsBackground message with SetBackgroundColor.

2019-02-25  Yongjun Zhang  <yongjun_zhang@apple.com>

        scalableNativeWebpageParameters() is not preserved on new page navigation.
        https://bugs.webkit.org/show_bug.cgi?id=194892
        <rdar://problem/47538280>

        If a page's current default viewport configuration is scalableNativeWebpageParameters due to
        the fact that m_canIgnoreScalingConstraints is true, loading a new page should preserve this
        configuration until we derive the right values from viewport meta-tag.

        Reviewed by Wenson Hsieh.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetViewportDefaultConfiguration): Use nativeWebpageParameters() instance method to
            get the appropriate default configuration.

2019-02-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Adjust initial scale zooming heuristics when changing view scale
        https://bugs.webkit.org/show_bug.cgi?id=194995

        Reviewed by Tim Horton.

        Currently, we only zoom to the new initial scale iff we're exactly at initial scale before changing the view
        scale. This was done so that if a user zoomed in really far and then increased the view scale, we wouldn't end
        up zooming out as a result. However, this leads to confusing behavior in the case where the user has manually
        changed the zoom scale to something close to (but not exactly) initial scale, and then attempts to zoom in
        further using view scale. In this case, we'll end up keeping page scale the same, so it looks like nothing is
        happening.

        To fix this, we tweak our heuristics for determining whether to jump to initial scale; if the view scale is
        increasing and the new initial scale is greater than the current scale, zoom to initial scale. Likewise, if the
        view scale is decreasing and the new initial scale is less than the current scale, zoom to initial scale.

        Test: fast/viewport/ios/initial-scale-after-changing-view-scale.html

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

2019-02-25  John Wilander  <wilander@apple.com>

        Introduce and adopt new class RegistrableDomain for eTLD+1
        https://bugs.webkit.org/show_bug.cgi?id=194791
        <rdar://problem/48179240>

        Reviewed by Alex Christensen, Fujii Hironori, and Brent Fulgham.

        A new API test was added. Plenty of existing layout tests under
        http/tests/resourceLoadStatistics/ and http/tests/storageAccess/ test the code.

        This patch introduces and adopts a new class called WebCore::RegistrableDomain
        which represents a domain's eTLD+1 (effective top level domain plus one) and is
        the basis for the term "site," as in same-site. Other popular names include
        high-level domain, primary domain, and top privately controlled/owned domain.
        Effective top level domains are enumerated on the Public Suffix List
        (https://publicsuffix.org).

        This class just uses the full domain for when the Public Suffix List cannot help
        finding the registrable domain and for WebKit ports that haven't enabled
        PUBLIC_SUFFIX_LIST. It also uses the string "nullOrigin" as a representation
        for the null or unique origin (this matches how these origins were handled
        before).

        The implementation is a wrapper around a String and the functions and class
        members that now make use of this new class used to handle regular String
        objects which didn't help much in terms of type safety or guarantees that the
        string had already been converted to an eTLD+1.

        We've at least two bad bugs in the Storage Access API because of confusion
        between a URL's eTLD+1 and its host. The usage of WebCore::RegistrableDomain
        will prohibit such bugs in the future.

        Partitioning in WebKit also uses eTLD+1 to a large extent. I plan to adopt
        WebCore::RegistrableDomain for partitioning in a later patch.

        This patch also enhances parameter naming by:
        - Removing parts that refer to "primary" as in primaryDomain.
        - Replacing references to "TopPrivatelyControlledDomain" with "RegistrableDomain."
        - Replacing references to "TopPrivatelyOwnedDomain" with "RegistrableDomain."
        - Using the term "domain" consistently instead of e.g. "host."

        A follow-up patch will continue backwards in call chains to create
        WebCore::RegistrableDomain objects as early as possible instead of using strings.
        I did not do that work here in the interest of patch size.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::domainsToString):
        (WebKit::pruneResources):
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::recursivelyGetAllDomainsThatHaveRedirectedToThisDomain const):
        (WebKit::ResourceLoadStatisticsMemoryStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsMemoryStore::isPrevalentDueToDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsMemoryStore::grandfatherExistingWebsiteData):
        (WebKit::ResourceLoadStatisticsMemoryStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::setPrevalentResourceForDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceLoading):
        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceRedirect):
        (WebKit::ResourceLoadStatisticsMemoryStore::logUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::setPrevalentResource):
        (WebKit::ResourceLoadStatisticsMemoryStore::isPrevalentResource const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isVeryPrevalentResource const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsSubresourceUnder const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsSubFrameUnder const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsRedirectingTo const):
        (WebKit::ResourceLoadStatisticsMemoryStore::clearPrevalentResource):
        (WebKit::ResourceLoadStatisticsMemoryStore::setGrandfathered):
        (WebKit::ResourceLoadStatisticsMemoryStore::isGrandfathered const):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubframeUnderTopFrameOrigin):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubresourceUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsMemoryStore::setSubresourceUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsMemoryStore::setTopFrameUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsMemoryStore::setTopFrameUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsMemoryStore::ensureResourceStatisticsForRegistrableDomain):
        (WebKit::ResourceLoadStatisticsMemoryStore::mergeStatistics):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasUserGrantedStorageAccessThroughPrompt):
        (WebKit::debugLogDomainsInBatches):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::clearBlockingStateForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToRemoveWebsiteDataFor):
        (WebKit::ResourceLoadStatisticsMemoryStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsMemoryStore::setLastSeen):
        (WebKit::ResourceLoadStatisticsMemoryStore::setVeryPrevalentResource):
        (WebKit::ResourceLoadStatisticsMemoryStore::ensureResourceStatisticsForPrimaryDomain): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResourceForDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccessForFrame):
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        (WebKit::WebResourceLoadStatisticsStore::logWebSocketLoading):
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceLoading):
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceRedirect):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubresourceUnder):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubFrameUnder):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsRedirectingTo):
        (WebKit::WebResourceLoadStatisticsStore::clearPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setGrandfathered):
        (WebKit::WebResourceLoadStatisticsStore::isGrandfathered):
        (WebKit::WebResourceLoadStatisticsStore::setSubframeUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectFrom):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearBlockingStateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        (WebKit::WebResourceLoadStatisticsStore::removePrevalentDomains):
        (WebKit::WebResourceLoadStatisticsStore::callRemoveDomainsHandler):
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
        (WebKit::WebResourceLoadStatisticsStore::registrableDomainsWithWebsiteData):
        (WebKit::isolatedPrimaryDomain): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::topPrivatelyControlledDomainsWithWebsiteData): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::logUserInteraction):
        (WebKit::NetworkConnectionToWebProcess::logWebSocketLoading):
        (WebKit::NetworkConnectionToWebProcess::logSubresourceLoading):
        (WebKit::NetworkConnectionToWebProcess::logSubresourceRedirect):
        (WebKit::NetworkConnectionToWebProcess::hasStorageAccess):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcess::isGrandfathered):
        (WebKit::NetworkProcess::isPrevalentResource):
        (WebKit::NetworkProcess::isVeryPrevalentResource):
        (WebKit::NetworkProcess::setGrandfathered):
        (WebKit::NetworkProcess::setPrevalentResource):
        (WebKit::NetworkProcess::setPrevalentResourceForDebugMode):
        (WebKit::NetworkProcess::setVeryPrevalentResource):
        (WebKit::NetworkProcess::clearPrevalentResource):
        (WebKit::NetworkProcess::setSubframeUnderTopFrameOrigin):
        (WebKit::NetworkProcess::isRegisteredAsRedirectingTo):
        (WebKit::NetworkProcess::isRegisteredAsSubFrameUnder):
        (WebKit::NetworkProcess::setSubresourceUnderTopFrameOrigin):
        (WebKit::NetworkProcess::setSubresourceUniqueRedirectTo):
        (WebKit::NetworkProcess::setSubresourceUniqueRedirectFrom):
        (WebKit::NetworkProcess::isRegisteredAsSubresourceUnder):
        (WebKit::NetworkProcess::setTopFrameUniqueRedirectTo):
        (WebKit::NetworkProcess::setTopFrameUniqueRedirectFrom):
        (WebKit::NetworkProcess::setLastSeen):
        (WebKit::NetworkProcess::hasStorageAccessForFrame):
        (WebKit::NetworkProcess::hasStorageAccess):
        (WebKit::NetworkProcess::requestStorageAccess):
        (WebKit::NetworkProcess::requestStorageAccessGranted):
        (WebKit::NetworkProcess::grantStorageAccess):
        (WebKit::NetworkProcess::logFrameNavigation):
        (WebKit::NetworkProcess::logUserInteraction):
        (WebKit::NetworkProcess::hadUserInteraction):
        (WebKit::NetworkProcess::clearUserInteraction):
        (WebKit::NetworkProcess::removePrevalentDomains):
        (WebKit::filterForRegistrableDomains):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::filterForTopLevelDomains): Deleted.
        (WebKit::NetworkProcess::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores): Deleted.
        (WebKit::NetworkProcess::topPrivatelyControlledDomainsWithWebsiteData): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::logCookieInformationInternal):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores):
        (WebKit::NetworkSession::registrableDomainsWithWebsiteData):
        (WebKit::NetworkSession::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores): Deleted.
        (WebKit::NetworkSession::topPrivatelyControlledDomainsWithWebsiteData): Deleted.
        * NetworkProcess/NetworkSession.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
        * UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm:
        (WebKit::ResourceLoadStatisticsMemoryStore::registerUserDefaultsIfNeeded):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcessProxy::isPrevalentResource):
        (WebKit::NetworkProcessProxy::isVeryPrevalentResource):
        (WebKit::NetworkProcessProxy::setPrevalentResource):
        (WebKit::NetworkProcessProxy::setPrevalentResourceForDebugMode):
        (WebKit::NetworkProcessProxy::setVeryPrevalentResource):
        (WebKit::NetworkProcessProxy::setLastSeen):
        (WebKit::NetworkProcessProxy::clearPrevalentResource):
        (WebKit::NetworkProcessProxy::logUserInteraction):
        (WebKit::NetworkProcessProxy::hasHadUserInteraction):
        (WebKit::NetworkProcessProxy::clearUserInteraction):
        (WebKit::NetworkProcessProxy::setSubframeUnderTopFrameOrigin):
        (WebKit::NetworkProcessProxy::isRegisteredAsRedirectingTo):
        (WebKit::NetworkProcessProxy::isRegisteredAsSubFrameUnder):
        (WebKit::NetworkProcessProxy::setSubresourceUnderTopFrameOrigin):
        (WebKit::NetworkProcessProxy::isRegisteredAsSubresourceUnder):
        (WebKit::NetworkProcessProxy::setSubresourceUniqueRedirectTo):
        (WebKit::NetworkProcessProxy::setSubresourceUniqueRedirectFrom):
        (WebKit::NetworkProcessProxy::setTopFrameUniqueRedirectTo):
        (WebKit::NetworkProcessProxy::setTopFrameUniqueRedirectFrom):
        (WebKit::NetworkProcessProxy::isGrandfathered):
        (WebKit::NetworkProcessProxy::setGrandfathered):
        (WebKit::NetworkProcessProxy::hasStorageAccessForFrame):
        (WebKit::NetworkProcessProxy::hasStorageAccess):
        (WebKit::NetworkProcessProxy::requestStorageAccess):
        (WebKit::NetworkProcessProxy::grantStorageAccess):
        (WebKit::NetworkProcessProxy::notifyWebsiteDataDeletionForRegistrableDomainsFinished):
        (WebKit::NetworkProcessProxy::notifyWebsiteDataScanForRegistrableDomainsFinished):
        (WebKit::NetworkProcessProxy::notifyWebsiteDataDeletionForTopPrivatelyOwnedDomainsFinished): Deleted.
        (WebKit::NetworkProcessProxy::notifyWebsiteDataScanForTopPrivatelyControlledDomainsFinished): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::logFrameNavigation):
        (WebKit::WebPageProxy::requestStorageAccessConfirm):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::notifyPageStatisticsAndDataRecordsProcessed):
        (WebKit::WebProcessProxy::notifyWebsiteDataScanForRegistrableDomainsFinished):
        (WebKit::WebProcessProxy::notifyWebsiteDataDeletionForRegistrableDomainsFinished):
        (WebKit::WebProcessProxy::notifyWebsiteDataScanForTopPrivatelyControlledDomainsFinished): Deleted.
        (WebKit::WebProcessProxy::notifyWebsiteDataDeletionForTopPrivatelyOwnedDomainsFinished): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::isPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode):
        (WebKit::WebsiteDataStore::isVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setSubframeUnderTopFrameOrigin):
        (WebKit::WebsiteDataStore::isRegisteredAsSubFrameUnder):
        (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::isRegisteredAsRedirectingTo):
        (WebKit::WebsiteDataStore::clearPrevalentResource):
        (WebKit::WebsiteDataStore::setLastSeen):
        (WebKit::WebsiteDataStore::hasStorageAccess):
        (WebKit::WebsiteDataStore::requestStorageAccess):
        (WebKit::WebsiteDataStore::grantStorageAccess):
        (WebKit::WebsiteDataStore::logUserInteraction):
        (WebKit::WebsiteDataStore::hasHadUserInteraction):
        (WebKit::WebsiteDataStore::clearUserInteraction):
        (WebKit::WebsiteDataStore::setGrandfathered):
        (WebKit::WebsiteDataStore::fetchDataForTopPrivatelyControlledDomains): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hasStorageAccess):
        (WebKit::WebPage::requestStorageAccess):
        * WebProcess/WebProcess.cpp:
        (WebKit::m_nonVisibleProcessCleanupTimer):
        (WebKit::WebProcess::initializeWebProcess):

2019-02-25  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump WPEBackend-fdo requirement to API version 1.0
        https://bugs.webkit.org/show_bug.cgi?id=195001

        Reviewed by Carlos Garcia Campos.

        API version 1.0 always includes the functionality previously guarded with
        WPE_BACKEND_CHECK_VERSION(): remove the guards and always use the new functions
        unconditionally.

        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::View): Remove usage of WPE_BACKEND_CHECK_VERSION().
        (WKWPE::m_backend): Ditto.
        * UIProcess/API/wpe/qt/WPEQtViewBackend.cpp:
        (WPEQtViewBackend::WPEQtViewBackend): Use libWPEBackend-fdo-1.0 as
        library name, remove call to wpe_fdo_initialize_for_egl_display().
        (WPEQtViewBackend::create): Call wpe_fdo_initialize_for_egl_display()
        here, to bail out early in case initialization fails.
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Remove usage of
        WPE_BACKEND_CHECK_VERSION().

2019-02-25  Per Arne Vollan  <pvollan@apple.com>

        A prewarmed Web process should have a process assertion.
        https://bugs.webkit.org/show_bug.cgi?id=195006

        Reviewed by Geoffrey Garen.

        To make sure the prewarm message is handled in the Web process before the process is suspended,
        the process should have a process assertion. This can be fixed by sending the prewarm message
        inside WebProcessPool::initializeNewWebProcess, since all message sent inside this method are
        guaranteed to be handled before the WebContent process is suspended.

        This patch is based on Chris Dumez' idea and obervation of the issue.

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

2019-02-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Enable PSON
        https://bugs.webkit.org/show_bug.cgi?id=194979

        Reviewed by Žan Doberšek.

        It is expected that this may introduce unexpected regressions, so it's appropriate to do
        this at the start of a new release cycle.

        * Shared/WebPreferencesDefaultValues.h:

2019-02-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Clean up handling of WEBKIT_FORCE_COMPLEX_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=194614

        Reviewed by Carlos Garcia Campos.

        This environment variable is now enabled for WPE, not just for GTK.

        It is now possible to use this environment variable to enable complex text, not just to
        disable it.

        WebProcessPool::setAlwaysUsesComplexTextCodePath is fixed to be respected even when this
        environment variable is set, although WPE and GTK will never do so.

        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitialize):
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2019-02-24  Zalan Bujtas  <zalan@apple.com>

        Introduce ContentChangeObserver class
        https://bugs.webkit.org/show_bug.cgi?id=194977
        <rdar://problem/48338115>

        Reviewed by Simon Fraser.

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

2019-02-24  Simon Fraser  <simon.fraser@apple.com>

        Migrate from "fixedPositionRect" to "layoutViewport" in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=194984

        Reviewed by Sam Weinig.

        Rename "fixedPositionRect" to "layoutViewport" in scrolling tree code.

        Remove ScrollingTree::fixedPositionRect() which was only used on iOS, to fetch the
        current layout viewport rect. Instead, set the layout viewport on the root
        node in ScrollingTree::mainFrameViewportChangedViaDelegatedScrolling().
        
        Add a WK2 Scrolling log channel.

        * Platform/Logging.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::viewportChangedViaDelegatedScrolling):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::fixedPositionRect): Deleted.
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::currentLayoutViewport const):
        (WebKit::RemoteScrollingCoordinatorProxy::customFixedPositionRect const): Deleted.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateChildNodesAfterScroll):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterViewportChange):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterAncestorChange):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterAncestorChange):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateLayersAfterAncestorChange):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateChildNodesAfterScroll):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:contentInsets:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):

2019-02-20  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::getAssertion): Use makeString, attempting to fix
        a problem where we passed an NSData * to format with a "%s"."

2019-02-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Install MemoryPressureHandler in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=194617

        Reviewed by Žan Doberšek.

        Currently only GTK and Cocoa ports run MemoryPressureHandler in the UI process. WPE should
        too.

        We need @no-unify to avoid changing the unified source bundles under API/, which are
        notoriously fragile. (WebMemoryPressureHandler.cpp sorts just above API/.)

        * SourcesWPE.txt:
        * UIProcess/WebMemoryPressureHandler.cpp:
        (WebKit::installMemoryPressureHandler):
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitialize):

2019-02-23  Chris Dumez  <cdumez@apple.com>

        Give DrawingAreas their own identifiers
        https://bugs.webkit.org/show_bug.cgi?id=194969
        <rdar://problem/48154508>

        Unreviewed, fix API test debug assertion failures after r241988.
        We do not support sending an ObjectIdentifier that is 0 via IPC so update WebPageProxy::CreateNewPage
        IPC to return an Optional<WebPageCreationParameters> instead of a WebPageCreationParameters. It returns
        nullopt when there this no UIClient or the client did not create the page, instead of returning a
        default-initialized WebPageCreationParameters.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):

2019-02-23  Simon Fraser  <simon.fraser@apple.com>

        Remove remnants of iOS WK1 scrolling tree code
        https://bugs.webkit.org/show_bug.cgi?id=194980

        Reviewed by Sam Weinig.

        Remove ScrollingTreeIOS and ScrollingCoordinatorIOS which were never instantiated.

        Merge ScrollingTreeFrameScrollingNodeIOS into ScrollingTreeFrameScrollingNodeRemoteIOS,
        removing code which never applies to iOS WK2 (e.g. the synchronous scrolling code path).

        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::ScrollingTreeFrameScrollingNodeRemoteIOS):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateAfterChildren):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::minimumScrollPosition const):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::maximumScrollPosition const):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::scrollPosition const):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::setScrollPosition):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::setScrollLayerPosition):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateChildNodesAfterScroll):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterDelegatedScroll):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterViewportChange):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterAncestorChange):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2019-02-22  Chris Dumez  <cdumez@apple.com>

        Give DrawingAreas their own identifiers
        https://bugs.webkit.org/show_bug.cgi?id=194969
        <rdar://problem/48154508>

        Reviewed by Geoffrey Garen.

        Give DrawingAreas their own identifiers instead of using the pageID. It will make the IPC more robust now that a
        WebPageProxy can have several drawing areas with PSON.

        * Shared/DrawingAreaInfo.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/AcceleratedDrawingAreaProxy.cpp:
        (WebKit::AcceleratedDrawingAreaProxy::sendUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing):
        (WebKit::AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::~DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::messageSenderConnection const):
        (WebKit::DrawingAreaProxy::sendMessage):
        (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::identifier const):
        (WebKit::DrawingAreaProxy::process const):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::update):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::initializeWebPage):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidEnd):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::adjustTransientZoom):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::commitTransientZoom):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::AcceleratedDrawingArea):
        (WebKit::AcceleratedDrawingArea::layerHostDidFlushLayers):
        (WebKit::AcceleratedDrawingArea::sendDidUpdateBackingStoreState):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::DrawingArea):
        (WebKit::DrawingArea::removeMessageReceiverIfNeeded):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::identifier const):
        (WebKit::DrawingArea::send):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::updateGeometry):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded):
        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        (WebKit::TiledCoreAnimationDrawingArea::setLayerHostingMode):

2019-02-22  Andy Estes  <aestes@apple.com>

        [Cocoa] Do not suppress deprecation warnings when calling sandbox_extension_issue_file
        https://bugs.webkit.org/show_bug.cgi?id=194971
        <rdar://problem/35786264>

        Reviewed by Tim Horton.

        sandbox_extension_issue_file is not actually deprecated.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):

2019-02-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Callout menu overlaps in-page controls when editing a comment in github.com's issue tracker
        https://bugs.webkit.org/show_bug.cgi?id=194873
        <rdar://problem/46701974>

        Reviewed by Tim Horton.

        On the topic of supporting web-based rich text editors on iOS, one problematic area has always been handling
        conflicts between platform UI (i.e., the system callout menu) and in-page text editing controls. This issue
        comes up in websites that don't use the "hidden contenteditable" approach to rich text editing, but also show
        additional controls in a toolbar or contextual menu above the selection. In these cases, what often happens is
        that system controls overlap controls in the page.

        Luckily, the iOS callout menu (i.e. the private UICalloutBar) is capable of presenting with a list of "evasion
        rects" to avoid; if the callout bar would normally intersect with one of these rects, then a different
        orientation that does not intersect with one of these rects is chosen instead. Currently, the only rect added
        here by UIKit when presenting the callout menu is the bounding rect of the on-screen keyboard, but after
        <rdar://problem/48128337>, we now have a generalized mechanism for offering additional evasion rects before
        UIKit presents the callout menu.

        This patch adopts the mechanism introduced in <rdar://problem/48128337>, and introduces a heuristic for
        determining the approximate location of controls in the page which might overlap the callout menu. This
        heuristic works by hit-testing for clickable (but non-editable) nodes above the bounds of the selection, which
        are additionally not hit-tested by advancing outwards from any of the other edges of the selection bounds.
        Additionally, any hit-tested nodes whose bounding rects are very large (relative to the content view size) are
        ignored (this deals with scenarios where the body or a large container element has a click handler). We then add
        the bounding rects of each of the nodes that fit this criteria to the list of rects for UIKit to avoid when
        presenting the system callout menu.

        The result is that WebKit will, by default, avoid overlapping anything that looks like controls in the page when
        showing a callout menu in editable content. In practice, this fixes overlapping controls on most websites that
        roll their own context menu or toolbar in their rich text editor.

        Test: editing/selection/ios/avoid-showing-callout-menu-over-controls.html

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView requestRectsToEvadeForSelectionCommandsWithCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):

        Drive-by: handle null completion handler arguments more gracefully, by raising an NSException and bailing before
        attempting to invoke a nil block.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestEvasionRectsAboveSelection):

        See above for more detail.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestEvasionRectsAboveSelection):

2019-02-22  Simon Fraser  <simon.fraser@apple.com>

        Unreviewed build fix: need a WebCore:: namespace on ScrollingEventResult.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:

2019-02-22  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Unable to preview password-protected documents on iCloud.com
        https://bugs.webkit.org/show_bug.cgi?id=194954
        <rdar://problem/48127957>

        Reviewed by Alex Christensen.

        Make sure the ProvisionalPageProxy forwards to the WebPageProxy the QuickLook-related
        IPC on iOS.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame):
        (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrameShared):

2019-02-22  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Sandbox should allow mach lookups related to media capturing
        https://bugs.webkit.org/show_bug.cgi?id=194951
        <rdar://problem/48013875>

        Reviewed by Brent Fulgham.

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

2019-02-22  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Navigation gesture improvements
        https://bugs.webkit.org/show_bug.cgi?id=194943

        Reviewed by Michael Catanzaro.

        Cancel the gesture if progress is less than 0.5 and velocity is not high enough.

        Allow to continue the gesture during animation. Introduce finished state to be used
        when showing snapshot after the animation ends.

        Fix duration calculation, also slow it down so that the initial velocity matches
        what it was during the gesture.

        * UIProcess/ViewGestureController.h: Add shouldCancel() and State::Finishing to SwipeProgressTracker.
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
        Fix velocity calculation, allow scrolling during State::Animating.
        (WebKit::ViewGestureController::SwipeProgressTracker::shouldCancel): Added.
        (WebKit::ViewGestureController::SwipeProgressTracker::startAnimation): Use shouldCancel() and fix duration calculation.
        (WebKit::ViewGestureController::SwipeProgressTracker::endAnimation): Set state to State::Finishing when the animation ends.

2019-02-22  Chris Dumez  <cdumez@apple.com>

        REGRESSION(PSON) Scroll position is sometimes not restored on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=194924
        <rdar://problem/48216125>

        Reviewed by Geoffrey Garen.

        When process-swapping, we would create a new WebPage in the new process, which would
        call restoreSessionInternal() to restore the HistoryItems based on the UIProcess's
        backforward list. The issue is that this session restoring would send HistoryItem
        updates back to the UIProcess. Without PSON, this would be unnecessary but harmless.
        With PSON though, this may end up overwriting values set by the previous process,
        such as the scroll position.

        Address the issue by temporarily disabling the HistoryItem update notifications to
        the UIProcess while restoring a session.

        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
        (-[WKBackForwardListItem _scrollPosition]):
        * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSessionInternal):

2019-02-21  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] No API documentation generated for WebKitUserContentFilterStore
        https://bugs.webkit.org/show_bug.cgi?id=194908

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add entry for webkit_user_content_filter_store_get_type().
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add entry for WebKitUserContentFilterStore.
        * UIProcess/API/wpe/docs/wpe-docs.sgml: Ditto.

2019-02-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        wpewebkit-2.23.90 Failing to build on Fedora
        https://bugs.webkit.org/show_bug.cgi?id=194922

        Unreviewed. Fix path to WebKitUserContentFilterStore.h in WPE_API_INSTALLED_HEADERS.

        * PlatformWPE.cmake:

2019-02-21  Simon Fraser  <simon.fraser@apple.com>

        Hardcode Visual Viewports on everywhere except iOS WK1
        https://bugs.webkit.org/show_bug.cgi?id=194928

        Reviewed by Zalan Bujtas.

        Remove the WK1 and WK2 preferences and MiniBrowser menu item for "visual viewports",
        change the default value of the Setting to 'true', and hardcode WebView on iOS to
        set it to false. The setting has shipped for several years and there's no need to turn
        it off now.

        Similarly, disable the "Visual Viewport API" on iOS WK1, since it makes no sense if
        Visual Viewports are not enabled.
        
        Remove the "visualViewportEnabled" flag and unused code paths from scrolling tree code
        that only runs in WK2

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _visualViewportEnabled]): Deleted.
        (-[WKPreferences _setVisualViewportEnabled:]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        (WebKit::RemoteScrollingCoordinatorProxy::visualViewportEnabled const): Deleted.
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::customFixedPositionRect const):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:contentInsets:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect const):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getFocusedElementInformation):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::updateVisibleContentRects):

2019-02-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Epiphany searching for plugins even if plugins are disabled
        https://bugs.webkit.org/show_bug.cgi?id=194352

        Reviewed by Michael Catanzaro.

        Check pluginsEnabled setting before trying to get plugins from UI process.

        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::populatePluginCache):

2019-02-21  Darin Adler  <darin@apple.com>

        Some refinements for Node and Document
        https://bugs.webkit.org/show_bug.cgi?id=194764

        Reviewed by Ryosuke Niwa.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentGtk.cpp:
        (webkit_dom_document_get_override_style): Changed to return nullptr directly instead of
        calling a bunch of WebCore code first. No real value in checking arguments or doing any work.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldAlwaysUsePluginDocument const): Deleted.
        No need to override the function inherited from the base class, nor to keep track of the
        unnecessary task of implementing this some day.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: Updated for the above.

2019-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Discard cached processes when clearing website data store
        https://bugs.webkit.org/show_bug.cgi?id=194894

        Reviewed by Chris Dumez.

        Clear the process cache when clearing the website data store so that there is no way to infer
        which site the user had visited by observing for which sites WebContent processes had been cached.

        There is one sublty in WebsiteDataStore::removeData that we have to delay the clearing of
        the web process cache until the next run loop because SuspendedPageProxy::~SuspendedPageProxy
        invokes WebProcessProxy::maybeShutDown in the next run loop. We also have to disable the process
        cache during this time as it would otherwise trigger the responsiveness check of WebContent process
        can take arbitrarily long time.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _processCacheCapacity]): Added for testing.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::addProcess): Avoid adding web processes to the cache while the suspended
        pages are being cleared.
        * UIProcess/WebProcessCache.h:
        (WebKit::WebProcessCache::disabled const): Added.
        (WebKit::WebProcessCache::setDisabled): Added.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::handleMemoryPressureWarning):
        (WebKit::WebProcessPool::clearSuspendedPages): Added.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):

2019-02-21  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" on a safe browsing warning before a WKWebView has loaded any page should request to close the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=194914
        <rdar://problem/47586889>

        Reviewed by Geoffrey Garen.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didShowSafeBrowsingWarning):
        (API::UIClient::didClickGoBackFromSafeBrowsingWarning): Deleted.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didClickGoBackFromSafeBrowsingWarning): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Turn a high-value UI-side-compositing assertion into a release assert
        https://bugs.webkit.org/show_bug.cgi?id=194887

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        There is absolutely no situation in which this assert should fire
        if WebKit is behaving correctly, and it will basically always result
        in a UI process crash (or at least confusion), so make it a release assert.
        This would have saved us a lot of stress in bug 194845.

2019-02-21  Don Olmstead  <don.olmstead@sony.com>

        [MSVC] Fix compilation errors with lambdas in ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=194913

        Reviewed by Brent Fulgham.

        MSVC has problems with the scoping of `this` within a nested lambda. To work around the
        behavior the enclosing lambda's wrapping of `this` is used within the nested lambda.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::processStatisticsAndDataRecords):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted):

2019-02-21  Chris Dumez  <cdumez@apple.com>

        Fix API test crashes after r241855.

        Reviewed by Ryosuke Niwa.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::addProcessIfPossible):

2019-02-21  Alex Christensen  <achristensen@webkit.org>

        API::HTTPCookieStore should expose setCookies()
        https://bugs.webkit.org/show_bug.cgi?id=194861

        Reviewed by Brent Fulgham.

        Pass a Vector<Cookie> instead of just one cookie at a time.
        This will add the ability to set multiple cookies without an IPC roundtrip per cookie.

        * NetworkProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::setCookie):
        * NetworkProcess/Cookies/WebCookieManager.h:
        * NetworkProcess/Cookies/WebCookieManager.messages.in:
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::setCookies):
        (API::HTTPCookieStore::setCookie): Deleted.
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
        (-[WKHTTPCookieStore setCookie:completionHandler:]):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setCookies):
        (WebKit::WebCookieManagerProxy::setCookie): Deleted.
        * UIProcess/WebCookieManagerProxy.h:

2019-02-21  Antoine Quint  <graouts@apple.com>

        Move UIWebTouchEventsGestureRecognizer.activeTouchesByIdentifier to SPI
        https://bugs.webkit.org/show_bug.cgi?id=194531
        <rdar://problem/47714562>

        Reviewed by Tim Horton.

        Follow-up commit to ensure this SPI is only called on newer versions of iOS.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cancelPointersForGestureRecognizer:]):

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Crash under RemoteLayerTreePropertyApplier::applyProperties when reattaching to old process
        https://bugs.webkit.org/show_bug.cgi?id=194845
        <rdar://problem/47944579>

        Reviewed by Antti Koivisto.

        New test: ProcessSwap.PageOverlayLayerPersistence

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::notePropertiesChanged):
        Keep track of all properties that have ever changed on a layer, so we
        can re-send them if a layer moves between contexts.

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::~DrawingArea):
        (WebKit::DrawingArea::removeMessageReceiverIfNeeded):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::layerHostDidFlushLayers):
        Make it possible to tear down DrawingArea's MessageReceiver before it is destroyed,
        so that we can keep two DrawingAreas alive in a single process for a short time.

        (WebKit::DrawingArea::adoptLayersFromDrawingArea):
        Add adoptLayersFromDrawingArea; see below for its only useful implementation.

        * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::GraphicsLayerCARemote):
        (WebKit::GraphicsLayerCARemote::~GraphicsLayerCARemote):
        (WebKit::GraphicsLayerCARemote::createPlatformCALayer):
        (WebKit::GraphicsLayerCARemote::createPlatformCALayerForEmbeddedView):
        (WebKit::GraphicsLayerCARemote::moveToContext):
        * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h:
        Make it possible to move a GraphicsLayerCARemote between RemoteLayerTreeContexts.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::create):
        (WebKit::PlatformCALayerRemote::createForEmbeddedView):
        (WebKit::PlatformCALayerRemote::~PlatformCALayerRemote):
        (WebKit::PlatformCALayerRemote::moveToContext):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::create):
        (WebKit::PlatformCALayerRemoteCustom::clone const):
        Make it possible to move a PlatformCALayerRemote between RemoteLayerTreeContexts.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::~RemoteLayerTreeContext):
        (WebKit::RemoteLayerTreeContext::adoptLayersFromContext):
        (WebKit::RemoteLayerTreeContext::layerDidEnterContext):
        (WebKit::RemoteLayerTreeContext::layerWillLeaveContext):
        (WebKit::RemoteLayerTreeContext::graphicsLayerDidEnterContext):
        (WebKit::RemoteLayerTreeContext::graphicsLayerWillLeaveContext):
        (WebKit::RemoteLayerTreeContext::layerWasCreated): Deleted.
        (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed): Deleted.
        Keep track of all GraphicsLayerCARemote instances in the context, like we
        do for PlatformCALayerRemote, so that we can update their context backpointers if needed.

        Also make it possible to move all outstanding layers to a new context.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::adoptLayersFromDrawingArea):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        When doing a DrawingArea swap, transition all layers from the old context
        to the new one. In order to do this, we temporarily keep both DrawingAreas
        alive, but make use of the new mechanism to remove the old one's MessageReceiver
        before installing the new one, so that destroying the old one later doesn't
        remove it (avoiding re-introducing bug 189481).

2019-02-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed API test fix after r241855.

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

2019-02-21  Antoine Quint  <graouts@apple.com>

        Move UIWebTouchEventsGestureRecognizer.activeTouchesByIdentifier to SPI
        https://bugs.webkit.org/show_bug.cgi?id=194531
        <rdar://problem/47714562>

        Reviewed by Dean Jackson.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cancelPointersForGestureRecognizer:]): We update the referenced Radar since we need to keep the call
        to respondsToSelector until the SPI has shipped for OpenSource builds to work.

2019-02-20  Antti Koivisto  <antti@apple.com>

        Make programmatic frame scrolling work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194886

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):

        Don't move based on the layout scroll position. This just overrides the user scroll position.
        Remove ScrolledContentsLayer checks, we only need to deal with the ScrollContainerLayer here.

        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::setScrollLayerPosition):

        Scroll the UIScrollView correctly. This is called as a result of setting the RequestedScrollPosition property.
        Remove scroll origin code, it doesn't look correct (and is untested).

2019-02-20  Chris Dumez  <cdumez@apple.com>

        [PSON] Make sure hung processes are not kept alive by suspended pages or process caching
        https://bugs.webkit.org/show_bug.cgi?id=194881
        <rdar://problem/48249014>

        Reviewed by Geoffrey Garen.

        After we construct a SuspendedPageProxy and before we send the IPC to the WebProcess to
        ask it to suspend, start a 10 seconds timer. If the process does not answer the request
        to suspend before the timer fires, we destroy the SuspendedPageProxy so that we do not
        keep a hung process around.

        For the WebProcessCache, we now call WebProcessProxy::isResponsive() on the process
        before adding it to the cache. Internally, this relies on an IPC handshake with the
        WebProcess. If the process is not responsive, we do not add it to the cache and we
        shut it down. If it is responsive then we proceed normally with adding it to the
        cache.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        (WebKit::SuspendedPageProxy::suspensionTimedOut):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::addProcessIfPossible):
        (WebKit::WebProcessCache::addProcess):
        * UIProcess/WebProcessCache.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        (WebKit::WebProcessProxy::maybeShutDown):
        (WebKit::WebProcessProxy::isResponsive):
        * UIProcess/WebProcessProxy.h:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r241823.

        * UIProcess/SuspendedPageProxy.h:

2019-02-20  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r241838.

        Broke API tests

        Reverted changeset:

        "Resolve WebsiteDataStore/HTTPCookieStore ref cycle"
        https://bugs.webkit.org/show_bug.cgi?id=194868
        https://trac.webkit.org/changeset/241838

2019-02-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION: [ iOS ] Layout Test editing/input/ios/rtl-keyboard-input-on-focus.html is a Timeout
        https://bugs.webkit.org/show_bug.cgi?id=194601
        <rdar://problem/48080316>

        Reviewed by Tim Horton.

        Following r241311, if a web view becomes first responder and is then moved offscreen (or obscured, hidden, or in
        the case of WebKitTestRunner, its UIWindow loses its status as keyWindow), we end up holding on to the input
        view update deferral token indefinitely, waiting for the current focused element to be blurred or refocused.

        This also manifests other user-facing bugs, the most common of which is the keyboard occasionally remaining
        onscreen after typing a URL in the unified field in MobileSafari and hitting Return, in the case where there is
        no autofocused element on the page.

        To fix this, when becoming the first responder, additionally install a callback to detect when the page is
        finished handling the activity state change, and invalidate the input deferral token then. This retains the
        behavior where calling -becomeFirstResponder on the web view while a different view is focused will keep the
        keyboard stable, since the focused element message from the web process should be dispatched when handling the
        activity state change within the web process.

        Of course, the web process may not be responsive at all while the web view is still in the view hierarchy, in
        which case we may still end up deferring input view updates indefinitely. In this case, we maintain a separate
        watchdog timer with a short delay, after which we unconditionally invalidate the token.

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

        Move the implementation of installActivityStateChangeCompletionHandler into cross-platform code.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _cancelPreviousResetInputViewDeferralRequest]):
        (-[WKContentView _scheduleResetInputViewDeferralAfterBecomingFirstResponder]):
        (-[WKContentView _resetInputViewDeferral]):
        (-[WKContentView becomeFirstResponderForWebView]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView _commitPotentialTapFailed]):
        (-[WKContentView _didNotHandleTapAsClick:]):
        (-[WKContentView _didCompleteSyntheticClick]):

        Funnel all existing calls that reset _inputViewDeferralToken to nullptr, such that they go through a helper
        method instead that also cancels any scheduled requests to clear the token.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::activityStateDidChange):

        Respond to all pending callbacks after handling the activity state change.

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) "Reload without content extensions" does not work when the main resource is blocked
        https://bugs.webkit.org/show_bug.cgi?id=194872
        <rdar://problem/47924500>

        Reviewed by Alex Christensen.

        [WKWebView _reloadWithoutContentBlockers] relies on a ReloadOption flag that is passed to WebCore
        instead of using WebsitePolicies.contentBlockersEnabled flag. If the reload causes a process swap
        due to PSON, then the new process does not know about this ReloadOption and fails to honor it.

        Since the modern way to do this is WebsitePolicies, and since WebsitePolicies are properly
        propagated cross-process in case of process swap, this patch updates _reloadWithoutContentBlockers
        to set a flag on the Navigation which we use to later set the WebsitePolicies.contentBlockersEnabled
        flag in WebPageProxy::receivedNavigationPolicyDecision().

        * UIProcess/API/APINavigation.h:
        (API::Navigation::setUserContentExtensionsEnabled):
        (API::Navigation::userContentExtensionsEnabled const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):

2019-02-20  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241817.

        Caused 4 API failures

        Reverted changeset:

        "[GTK] Epiphany searching for plugins even if plugins are
        disabled"
        https://bugs.webkit.org/show_bug.cgi?id=194352
        https://trac.webkit.org/changeset/241817

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * WebKit.xcodeproj/project.pbxproj:

2019-02-20  Alex Christensen  <achristensen@webkit.org>

        Resolve WebsiteDataStore/HTTPCookieStore ref cycle
        https://bugs.webkit.org/show_bug.cgi?id=194868

        Reviewed by Geoffrey Garen.

        * 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):
        (API::HTTPCookieStore::ref const):
        (API::HTTPCookieStore::deref const):
        * UIProcess/API/APIHTTPCookieStore.h:

2019-02-20  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Open sandbox for specific call.
        https://bugs.webkit.org/show_bug.cgi?id=194860
        <rdar://problem/48166729>

        Reviewed by Brent Fulgham.

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

2019-02-20  Alex Christensen  <achristensen@webkit.org>

        Move API::HTTPCookieStore ownership from API::WebsiteDataStore to WebKit::WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=194842

        Reviewed by Geoff Garen.

        We need a way to get from WebKit::WebsiteDataStore to API::HTTPCookieStore.  It can't be done before this.
        This made an existing reference cycle easier to see, and we should fix it in a followup patch.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::httpCookieStore):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::cookieStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebKit::WebPageProxy::decidePolicyForNavigationActionSync
        https://bugs.webkit.org/show_bug.cgi?id=194857
        <rdar://problem/47759323>

        Reviewed by Alex Christensen.

        The ProvisionalPageProxy was blindly forwarding the DecidePolicyForNavigationActionSync
        synchronous IPC to the WebPageProxy, without passing it the process the IPC came from.
        As a result, WebPageProxy::decidePolicyForNavigationActionSync() would try to look up
        a WebFrameProxy using the provided frameID from the wrong process and we would end up
        hitting a RELEASE_ASSERT().

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::ProvisionalPageProxy::didReceiveSyncMessage):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared):
        * UIProcess/WebPageProxy.h:

2019-02-20  Don Olmstead  <don.olmstead@sony.com>

        [MSVC] Fix compilation errors with lambdas in Service Workers
        https://bugs.webkit.org/show_bug.cgi?id=194841

        Reviewed by Alex Christensen.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveRedirectResponse):

2019-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Epiphany searching for plugins even if plugins are disabled
        https://bugs.webkit.org/show_bug.cgi?id=194352

        Reviewed by Michael Catanzaro.

        Check pluginsEnabled setting before trying to get plugins from UI process.

        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::populatePluginCache):

2019-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Send client host fd and library name as web process creation parameters
        https://bugs.webkit.org/show_bug.cgi?id=194494

        Reviewed by Žan Doberšek.

        Instead of using command line arguments. The code is simpler and we don't need wpe specific code in process
        launcher glib implementation.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/wpe/WebProcessMainWPE.cpp:

2019-02-20  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Enable support for CONTENT_EXTENSIONS
        https://bugs.webkit.org/show_bug.cgi?id=167941

        Reviewed by Carlos Garcia Campos.

        Adds new API to manage a collection of content extensions on disk (including compilation
        of new ones) using WebKitUserContentFilterStore; the associated WebKitUserContentFilter
        type (which represents a compiled content extension); and the functions needed to enable
        and disable them for a given WebKitUserContentManager.

        The WebKitUserContentFilterStore public API is expressed in abstract terms of "saving"
        filters into the store (which involves compiling the JSON source rule set); and "loading"
        them back as main operations. This way we do not disclose to users of the API any detail
        about compilation, nor how contents are laid out on disk, and the documentation explicitly
        tells about only using the provided functions to manipulate the on-disk contents. This
        way we allow ourselves some leeway if the implementation needs changing in the future.

        * PlatformGTK.cmake: Added WebKitUserContentFilterStore.h to the list of public API headers.
        * PlatformWPE.cmake: Ditto.
        * SourcesGTK.txt: Added WebKitUserContentFilterStore.cpp
        * SourcesWPE.txt: Ditto.
        * UIProcess/API/glib/WebKitError.cpp: Add definition of webkit_user_content_filter_error_quark().
        * UIProcess/API/glib/WebKitUserContent.cpp: Added WebKitUserContentFilter.
        (_WebKitUserContentFilter::_WebKitUserContentFilter):
        (webkit_user_content_filter_ref):
        (webkit_user_content_filter_unref):
        (webkit_user_content_filter_get_identifier):
        (webkitUserContentFilterCreate):
        (webkitUserContentFilterGetContentRuleList):
        * UIProcess/API/glib/WebKitUserContentFilterStore.cpp: Added.
        (toGError): Utility function to convert content extension error codes to GError.
        (webkit_user_content_filter_store_class_init):
        (webkit_user_content_filter_store_new):
        (webkit_user_content_filter_store_get_path):
        (webkitUserContentFilterStoreSaveBytes): Common function used as final step for all the
        functions which save (compile) JSON rule sets into the store, to avoid duplicating code.
        (webkit_user_content_filter_store_save):
        (webkit_user_content_filter_store_save_finish):
        (webkit_user_content_filter_store_save_from_file):
        (webkit_user_content_filter_store_save_from_file_finish):
        (webkit_user_content_filter_store_remove):
        (webkit_user_content_filter_store_remove_finish):
        (webkit_user_content_filter_store_load):
        (webkit_user_content_filter_store_lookup_finish):
        (webkit_user_content_filter_store_fetch_identifiers):
        (webkit_user_content_filter_store_fetch_identifiers_finish):
        * UIProcess/API/glib/WebKitUserContentManager.cpp: Added definitions for the new API
        functions to add and remove filters from an user content manager.
        (webkit_user_content_manager_add_filter):
        (webkit_user_content_manager_remove_filter):
        (webkit_user_content_manager_remove_all_filters):
        * UIProcess/API/glib/WebKitUserContentPrivate.h: Added declarations for
        webkitUserContentFilterCreate() and webkitUserContentFilterGetContentRuleList().
        * UIProcess/API/gtk/WebKitAutocleanups.h: Added autocleanups for WebKitUserContentFilter
        and WebKitUserContentFilterStore.
        * UIProcess/API/gtk/WebKitError.h: Added declarations for WEBKIT_USER_CONTENT_FILTER_ERROR
        plus the associated webkit_user_content_filter_error_quark() function and
        WebKitUserContentFilterErrror enum.
        * UIProcess/API/gtk/WebKitUserContent.h: Added declarations for WebKitUserContentFilter
        and its associated functions.
        * UIProcess/API/gtk/WebKitUserContentFilterStore.h: Added.
        * UIProcess/API/gtk/WebKitUserContentManager.h: Added declarations for the functions to
        add and remove filters from the user content manager.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Added new API functions and types to
        be included in the documentation.
        * UIProcess/API/gtk/webkit2.h: Added inclusion of WebKitUserContentFilterStore.h
        * UIProcess/API/wpe/WebKitError.h: Same as for the GTK port header.
        * UIProcess/API/wpe/WebKitUserContent.h: Same as for the GTK port header.
        * UIProcess/API/wpe/WebKitUserContentFilterStore.h: Added.
        * UIProcess/API/wpe/WebKitUserContentManager.h: Same as for the GTK port header.
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt: Added new API functions and types to be
        included in the documentation.
        * UIProcess/API/wpe/webkit.h: Added inclusion of WebKitUserContentFilterStore.h

2019-02-19  Antti Koivisto  <antti@apple.com>

        Pass rootContentsLayer to Mac remote layer tree
        https://bugs.webkit.org/show_bug.cgi?id=194828

        Reviewed by Simon Fraser.

        Make this code path work again.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

2019-02-19  Alex Christensen  <achristensen@webkit.org>

        Reduce use of LegacySync IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=194783

        Reviewed by Geoffrey Garen.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::handleSynchronousMessage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):
        (WebKit::WebProcessProxy::shouldTerminate):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::setException):
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::didCreatePlugin):
        (WebKit::PluginProxy::didFailToCreatePlugin):
        (WebKit::PluginProxy::proxiesForURL):
        (WebKit::PluginProxy::cookiesForURL):
        (WebKit::PluginProxy::getAuthenticationInfo):
        (WebKit::PluginProxy::getPluginElementNPObject):
        (WebKit::PluginProxy::evaluate):
        (WebKit::PluginProxy::createPluginContainer):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:

2019-02-19  Alex Christensen  <achristensen@webkit.org>

        Remove assertion introduced in r229683
        https://bugs.webkit.org/show_bug.cgi?id=194825
        <rdar://problem/47628258>

        Reviewed by Geoffrey Garen.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        If we reach this code and the form's original Document's Frame has been destroyed,
        we have already been told to submit the form so do so, just like we do if the WebPage
        has been destroyed.  This is a rare edge case having to do with the timing of Frame
        destruction and decidePolicyForNavigationAction response, which unfortunately does not
        reproduce with a test case unless the timing of IPC is just right.

2019-02-19  Antoine Quint  <graouts@apple.com>

        [iOS] "touch-action: none" should not prevent text selection or tapping on a link
        https://bugs.webkit.org/show_bug.cgi?id=194812
        <rdar://problem/47901131>

        Reviewed by Dean Jackson.

        We shouldn't prevent all gestures to be disabled when "touch-action: none" is set and instead follow the same code path we would use should
        "pan-x", "pan-y" or "pinch-zoom" be used.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleTouchActionsForTouchEvent:]):

2019-02-18  Alex Christensen  <achristensen@webkit.org>

        Revert functional part of r241451
        https://bugs.webkit.org/show_bug.cgi?id=194510

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        It caused crashes and assertions on Linux and Cocoa without safe browsing, which
        means it's fundamentally flawed in some way.  The testing piping was fine.

2019-02-18  Chris Dumez  <cdumez@apple.com>

        REGRESSION (PSON): Can't access optumbank.com from myuhc.com
        https://bugs.webkit.org/show_bug.cgi?id=194797
        <rdar://problem/48055151>

        Reviewed by Geoffrey Garen.

        The issue was caused by us mistakenly process-swapping for a same-site server side redirect.
        The reason we were getting it wrong is because the logic in
        WebProcessPool::processForNavigationInternal() was expecting page.process() to be the source
        process and page.pageLoadState().url() to be the source URL. Those assumptions are incorrect
        when a server-side redirect occurs in a provisional process. In such case, the source process
        is the ProvisionalPageProxy's process and the source URL is the provisional URL, not the
        committed one.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didPerformServerRedirect):
        (WebKit::ProvisionalPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        Make sure the provisional page forwards IPC related to server-side redirects to the page so
        that the client gets informed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirectShared):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:

2019-02-16  Darin Adler  <darin@apple.com>

        Continue reducing use of String::format, now focusing on hex: "%p", "%x", etc.
        https://bugs.webkit.org/show_bug.cgi?id=194752

        Reviewed by Daniel Bates.

        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::createServerAndClientIdentifiers): Use makeString instead of
        String::format.
        * Shared/win/WebEventFactory.cpp:
        (WebKit::keyIdentifierFromEvent): Ditto.

        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::loggingString const): Use hex instead of String::format.
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::loggingString const): Ditto.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::loggingString): Added a "0x".

        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::logHandleKeyboardEventForTesting): Use makeString and hex
        instead of String::format and "%x".
        (WebKit::InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting):
        Ditto.

2019-02-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support pasting item-provider-backed data on the pasteboard as attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=194670
        <rdar://problem/39066529>

        Reviewed by Tim Horton.

        Remove all IPC plumbing for getTypesByFidelityForItemAtIndex, now that the types in fidelity order have been
        rolled into PasteboardItemInfo.

        Additionally, remove support for subresource URL replacement. This feature was originally added with the
        intention that private clients (i.e. Mail) would intercept pasted or dropped images and replace their URLs.
        However, since <rdar://problem/43216836>, our strategy for this scenario has changed, such that WebKit now
        handles the drop/paste, and later delivers the image data to the client via NSFileWrappers in the UI process.
        At this time, there are no adopters of this SPI, and no adopters of the V2 injected bundle editing client. As
        such, we can simply revert all of this to its state prior to the introduction of the replacement URL SPI, with
        the exception to changes in WKBundlePageEditorClient.h, wherein there is a nonzero (but likely tiny) chance of
        completely breaking binary compatability with any third parties on macOS which may have tried to adopt
        subresource URL replacement.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardTypesByFidelityForItemAtIndex): Deleted.
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):

        Return YES for -paste: in the case where:
        1. The pasteboard contains items that are explicitly marked as attachments.
        2. The selection is richly contenteditable.
        3. Attachment elements are enabled.

        Among other things, this allows the callout bar on iOS to show the "Paste" action.

        * WebProcess/InjectedBundle/API/APIInjectedBundleEditorClient.h:
        (API::InjectedBundle::EditorClient::performTwoStepDrop):
        (API::InjectedBundle::EditorClient::replacementURLForResource): Deleted.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInEditingDelegate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::replacementURLForResource): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::replacementURLForResource): Deleted.
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getTypesByFidelityForItemAtIndex): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2019-02-18  Jeremy Jones  <jeremyj@apple.com>

        exitFullscreen should not instantiate a new model/interface mapping.
        https://bugs.webkit.org/show_bug.cgi?id=191988
        rdar://problem/42327939

        Reviewed by Jer Noble.

        This change is a speculative fix for a crash that cannot be reproduced.

        Somehow, exitFullscreen is being requested after didCleanupFullscreen has completed.
        This change should allow us to prevent the crash in release, and assert in debug.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::exitFullscreen):

2019-02-18  John Wilander  <wilander@apple.com>

        Check the existence of the frame in Document::hasFrameSpecificStorageAccess() and Document::setHasFrameSpecificStorageAccess()
        https://bugs.webkit.org/show_bug.cgi?id=194777
        <rdar://problem/47731945>

        Reviewed by Geoffrey Garen and Chris Dumez.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::logUserInteraction):
           Now returns early if the incoming session ID is invalid.
           Added an ASSERT to help us find other call sites passing invalid session IDs.

2019-02-18  Per Arne Vollan  <pvollan@apple.com>

        It should be possible to get the mouse event modifiers for a page overlay client.
        https://bugs.webkit.org/show_bug.cgi?id=189621
        <rdar://problem/44437279>

        Reviewed by Daniel Bates.

        When access to the WindowServer is blocked, [NSEvent modifierFlags] always returns 0.
        This can be fixed by swizzling the class method, and getting the cached modifiers from
        PlatformKeyboardEvent.
 
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::currentModifierFlags):
        (WebKit::WebProcess::platformInitializeProcess):

2019-02-18  Claudio Saavedra  <csaavedra@igalia.com>

        WebPageProxy::didFinishDocumentLoadForFrame() crashing in WPE and GTK+ ports
        https://bugs.webkit.org/show_bug.cgi?id=194774

        Reviewed by Alex Christensen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        Null check navigation before using it.
        This is a regression from r241451.

2019-02-18  Daniel Bates  <dabates@apple.com>

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        Use the same code path for key events to editable elements and non-editable elements.

        Currently we have different code paths for hardware key events depending on whether the active element
        is editable or non-editable. Historically to support dispatching DOM keyboard events for hardware key
        presses this differentiation was a necessary workaround for UIKit's event processing precedence of
        interpreting key events for system text editing commands and app commands before dispatching unhandled
        key events to WebKit. This workaround intercepted raw key UIEvents and manually reconstructed a
        WebEvent from it. However there is not enough information in an UIEvent to reconstruct a WebEvent that
        is identical to the WebEvent that UIKit would have dispatched. In particular, keyup UIEvents always have
        empty modified and unmodified input strings. The UIKit keyboard machinery maintains additional state
        that is necessary to manufacture the correct WebEvent corresponding to a UIEvent.

        As a side benefit of this change, with the exception of modifier flag changes, both hardware and software
        key events use the same code path.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shouldShowAutomaticKeyboardUI]): Extracted code from _requiresKeyboardWhenFirstResponder
        (-[WKContentView _disableAutomaticKeyboardUI]): Implement UIKit SPI to prevent showing the keyboard UI
        when there is no focused element now that we are no longer intercepting key UIEvents. Formerly the
        keyboard UI was disabled as a side effect of not becoming first responder when there was no focused
        element (by returning NO in -_requiresKeyboardWhenFirstResponder).
        (-[WKContentView _requiresKeyboardWhenFirstResponder]): Always return YES when building with USE(UIKIT_KEYBOARD_ADDITIONS)
        so that we always accept key events. Instead of selectively replying to create a keyboard as a means of
        hiding the automatic keyboard UI we now implement _disableAutomaticKeyboardUI to selectively hide the
        automatic keyboard UI.
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]): If we are not in an editable
        element then we cannot perform the replacement. This logic was necessary now that we always require a
        keyboard.
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]): If we are not in an editable
        element then return an autocorrection object that indicates that we could not compute this data. This
        logic was necessary now that we always require a keyboard.
        (-[WKContentView textInputTraits]): Do not update traits when the keyboard is going to be dismissed
        now that we require a keyboard when first responder even if the focused element is non-editable.
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]): Skip logic for re-sending UIEvents to UIKit
        as UIKit now processes the event first. This logic was necessary in order to finally allow UIKit
        its chance to interpret the UIEvent, we intercepted, for app key commands.
        (-[WKContentView _elementDidBlur]): Call [self _endEditing] so that we dismiss any open form controls
        (e.g. a <select> popover menu). Currently this happens either by -_requiresKeyboardWhenFirstResponder
        responding NO when switching to another field or pressing Tab or Shift + Tab key command, which we will
        no longer use when building with USE(UIKIT_KEYBOARD_ADDITIONS) once I land <https://bugs.webkit.org/show_bug.cgi?id=193048>.
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]): Do not assign ourself as the keyboard delegate. Otherwise,
        type ahead and tab cycling will not work. Currently type ahead and tab cycling work by using the non-
        editable code path via -_handleKeyUIEvent. Now that we no longer differentiate between key events for
        editable and non-editable elements we need to ensure that the WKContentView is the keyboard delegate
        when the popover is presented.

2019-02-18  Jiewen Tan  <jiewen_tan@apple.com>

        Tell Networking Process to not optimize load
        https://bugs.webkit.org/show_bug.cgi?id=194753
        <rdar://problem/48143603>

        Reviewed by Brent Fulgham.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

2019-02-18  Dean Jackson  <dino@apple.com>

        iOS Safari will not load USDZ in QLPreview when opening as BLOB
        https://bugs.webkit.org/show_bug.cgi?id=194766
        <rdar://problem/42769186>

        Reviewed by Wenson Hsieh.

        A download from a Blob URL can happen effectively instantly, which means
        that the loadHandler on the registerItemForTypeIdentifier method might not have
        been called yet, and we haven't been told what the completionHandler is.
        In this case, keep a record of the URL we finished with, and call the completionHandler
        right away.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm: Add a new private member variable: _downloadedURL.
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]): Call the completionHandler
        right away if we've finished.
        (-[_WKPreviewControllerDataSource finish:]): Remember that we've finished by recording the URL.

2019-02-18  Alex Christensen  <achristensen@webkit.org>

        Disable safe browsing in WKWebView and remove its WKPreferences API
        https://bugs.webkit.org/show_bug.cgi?id=194723
        <rdar://problem/48122993>

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences setSafeBrowsingEnabled:]): Deleted.
        (-[WKPreferences isSafeBrowsingEnabled]): Deleted.

2019-02-18  Chris Fleizach  <cfleizach@apple.com>

        AX: PSON: Going back from apple.com to search results, cannot interact with HTML content. Disabling Swap Processes on Cross-Site Navigation resolves the issue.
        https://bugs.webkit.org/show_bug.cgi?id=194742

        Reviewed by Chris Dumez.

        Re-initialize the accessibility web process tokens when swapping processes.
        Send page load notifications from the UIProcess instead of the WebProcess to improve reliability.

        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didFinishLoadForMainFrame):
        (WebKit::PageClientImpl::didFailLoadForMainFrame):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformReinitialize):
        (WebKit::WebPage::platformDetach): Deleted.
        (WebKit::WebPage::platformEditorState const): Deleted.
        (WebKit::WebPage::updateAccessibilityTree): Deleted.
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): Deleted.
        (WebKit::WebPage::platformCanHandleRequest): Deleted.
        (WebKit::WebPage::platformUserAgent const): Deleted.
        (WebKit::WebPage::getCenterForZoomGesture): Deleted.
        (WebKit::WebPage::setInputMethodState): Deleted.
        (WebKit::WebPage::collapseSelectionInFrame): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformReinitialize):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformReinitialize):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformReinitialize):
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:
        (WebKit::WebPage::platformReinitialize):

2019-02-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash while filling selection data during drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=194698

        Reviewed by Michael Catanzaro.

        I can't reproduce this, but it seems that m_draggingSelectionData is nullptr in fillDragData(). That can happen
        when startDrag cancels a previous DND operation, because the new m_draggingSelectionData is set before the
        current DND operation is cancelled, which sets it to nullptr.

        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::startDrag): Finish the previous operation before setting m_draggingSelectionData.

2019-02-17  Youenn Fablet  <youenn@apple.com>

        https://device.login.microsoftonline.com is hanging on STP75
        https://bugs.webkit.org/show_bug.cgi?id=194734
        <rdar://problem/47573830>

        Reviewed by Jiewen Tan.

        Make sure to only go the XPC route if SecKeyProxyStore has credentials.
        Tested manually by going to the above website with and without the patch.
        Load hangs without the patch and completes with the patch.

        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        * UIProcess/Authentication/cocoa/SecKeyProxyStore.h:
        * UIProcess/Authentication/cocoa/SecKeyProxyStore.mm:
        (WebKit::SecKeyProxyStore::initialize):

2019-02-17  David Kilzer  <ddkilzer@apple.com>

        Unreviewed, rolling out r241620.

        "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
        (Requested by ddkilzer on #webkit.)

        Reverted changeset:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241620

2019-02-15  Youenn Fablet  <youenn@apple.com>

        NetworkDataTask should check its client before calling shouldCaptureExtraNetworkLoadMetrics
        https://bugs.webkit.org/show_bug.cgi?id=194732

        Reviewed by Geoffrey Garen.

        NetworkDataTask may be kept alive if refing it after its NetworkLoad is gone.
        This might happen for instance in DownloadManager or when checking for TLS certificates.
        In that case, if the NetworkLoad gets destroyed, it clears the client of the NetworkDataTask.
        To ensure that NetworkDataTask does not try to use its client, add a null check.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::shouldCaptureExtraNetworkLoadMetrics const):

2019-02-15  Chris Dumez  <cdumez@apple.com>

        [PSON] Allow tweaking WebProcess cache parameters via user defaults
        https://bugs.webkit.org/show_bug.cgi?id=194731
        <rdar://problem/48125377>

        Reviewed by Geoffrey Garen.

        Allow tweaking WebProcess cache parameters via user defaults like so:
        $ defaults write com.apple.Safari WebProcessCacheCachedProcessLifetimeInSeconds 120
        -> Cached processes will be evicted after 2 minutes (instead of 30)

        $ defaults write com.apple.Safari WebProcessCacheClearingDelayAfterApplicationResignsActiveInSeconds 60
        -> Web process cache will be cleared if Safari is no longer active for 1 minutes (instead of 5).

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebProcessCacheCocoa.mm: Copied from Source/WebKit/UIProcess/WebProcessCache.h.
        (WebKit::WebProcessCache::platformInitialize):
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::WebProcessCache):
        (WebKit::WebProcessCache::platformInitialize):
        * UIProcess/WebProcessCache.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-02-15  Chris Dumez  <cdumez@apple.com>

        [PSON] Disable WebContent process cache on devices with less than 3GB of RAM
        https://bugs.webkit.org/show_bug.cgi?id=194726
        <rdar://problem/48126255>

        Reviewed by Geoffrey Garen.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::updateCapacity):

2019-02-15  Andy Estes  <aestes@apple.com>

        [iOS] Stop setting a background color on the PDF host view
        https://bugs.webkit.org/show_bug.cgi?id=194722
        <rdar://48124152>

        Reviewed by Wenson Hsieh.

        PDFKit already sets a background color on this view, so there’s no need (and some harm) in
        us doing it too.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):

2019-02-15  Alex Christensen  <achristensen@webkit.org>

        Update IPC code generator unit test expectations after r241611
        https://bugs.webkit.org/show_bug.cgi?id=194678

        * Scripts/webkit/LegacyMessages-expected.h:
        * Scripts/webkit/Messages-expected.h:
        * Scripts/webkit/MessagesSuperclass-expected.h:

2019-02-15  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp:
        (main):
        * Platform/unix/LoggingUnix.cpp:
        (WebKit::logLevelString):
        * Platform/win/LoggingWin.cpp:
        (WebKit::logLevelString):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::shouldCallRealDebugger):
        * Shared/Plugins/unix/PluginSearchPath.cpp:
        (WebKit::pluginsDirectories):
        * Shared/glib/ProcessExecutablePathGLib.cpp:
        (WebKit::findWebKitProcess):
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsConstructed):
        (webKitSettingsSetProperty):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (injectedBundleDirectory):
        (webkitWebContextConstructed):
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkitWebViewMaximizeWindow):
        (webkitWebViewRestoreWindow):
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend):
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::XDGDBusProxyLauncher::launch):
        (WebKit::bindDBusSession):
        (WebKit::bindX11):
        (WebKit::bindWayland):
        (WebKit::bindPulse):
        (WebKit::bindPathVar):
        (WebKit::bindGStreamerData):
        (WebKit::bubblewrapSpawn):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::systemDirectoryPath):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::memoryPressureMonitorDisabled):
        (WebKit::WebProcessPool::platformInitialize):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/gtk/HardwareAccelerationManager.cpp:
        (WebKit::HardwareAccelerationManager::HardwareAccelerationManager):
        * WebProcess/EntryPoint/unix/WebProcessMain.cpp:
        (main):
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        * WebProcess/wpe/WebProcessMainWPE.cpp:
        Utilize WTF::Environment where possible.

2019-02-15  Alex Christensen  <achristensen@webkit.org>

        Add SPI version of WKPreferences.safeBrowsingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=194718
        <rdar://problem/48122993>

        Rubber-stamped by Brady Eidson.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _isSafeBrowsingEnabled]):
        (-[WKPreferences _setSafeBrowsingEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2019-02-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView callout bar is missing Change Writing Direction item
        https://bugs.webkit.org/show_bug.cgi?id=190015
        <rdar://problem/44810366>

        Reviewed by Tim Horton.

        Support -makeTextWritingDirectionLeftToRight: and -makeTextWritingDirectionRightToLeft: in WKWebView on iOS.
        To match behavior in native UITextViews on iOS, we implement these methods by changing the *base* writing
        direction, rather than the text writing direction (this is in contrast to macOS, which has different
        NSResponder methods for changing the base writing direction as opposed to the text writing direction).

        Additionally fixes the implementation of -makeTextWritingDirectionNatural:, which currently attempts to change
        the text writing direction instead of the base writing direction.

        * Platform/spi/ios/UIKitSPI.h:

        Add a forward declaration for keyboards SPI to determine whether the user has an active RTL keyboard.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        (WebKit::operator<<):
        * Shared/EditorState.h:

        Plumb the base writing direction to the UI process through EditorState.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView makeTextWritingDirectionNaturalForWebView:]):
        (-[WKContentView makeTextWritingDirectionLeftToRightForWebView:]):
        (-[WKContentView makeTextWritingDirectionRightToLeftForWebView:]):

        Implement the new SPI (see above for more details).

        (-[WKContentView canPerformActionForWebView:withSender:]):

        Implement -canPerformAction: for LTR and RTL actions. To match existing UIWebView behavior, we only enable
        these actions if either the base writing direction is RTL, or the user has an active RTL keyboard. This means,
        for instance, that in the case where a user with only an English keyboard is editing LTR content, we would never
        show an option to convert to RTL.

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

2019-02-15  Alex Christensen  <achristensen@webkit.org>

        Make WebPaymentCoordinatorProxy more robust and modern
        https://bugs.webkit.org/show_bug.cgi?id=194678

        Reviewed by Andy Estes.

        Use WeakPtr instead of storing raw pointers in lambdas or the global activePaymentCoordinatorProxy to avoid UAF problems.
        Call CompletionHandlers in all code paths to avoid hangs.
        Use Delayed instead of LegacySync for synchronous messaging to progress towards removing LegacySync messages.

        * Scripts/webkit/messages.py:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::activePaymentCoordinatorProxy):
        (WebKit::WebPaymentCoordinatorProxy::~WebPaymentCoordinatorProxy):
        (WebKit::WebPaymentCoordinatorProxy::availablePaymentNetworks):
        (WebKit::WebPaymentCoordinatorProxy::canMakePayments):
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI):
        (WebKit::WebPaymentCoordinatorProxy::didReachFinalState):
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClientFetch closer to WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=194651

        Unreviewed, build fix for WPE.

        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:

2019-02-15  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Navigating quickly back and forth can lead to getting 'about:blank' in the backforward list
        https://bugs.webkit.org/show_bug.cgi?id=194717
        <rdar://problem/47884404>

        Reviewed by Brady Eidson.

        When the client does a history navigation, the UIProcess sends a WebPage::GoToBackForwardItem IPC to the
        WebProcess and the WebProcess sends a WebPageProxy::BackForwardGoToItem IPC back to the UIProcess to
        update the current item in the BackForwardList. This means that there is a slight delay between the
        point a client requests a history navigation and the point where the BackForwardList's current item gets
        update. This delay is pre-existing behavior and not new to PSON.

        However, with PSON enabled, if we decide to process-swap for the history navigation, we'll tell the
        previous (committed) process to ignore the load and we ask a new (provisional) process to do the history
        navigation. When the previous process receives the request to ignore the history navigation, it restores
        the History's current item to the one previous the navigation, which sends a WebPageProxy::GoToBackForwardItem
        IPC to the UIProcess to update the BackForwardList as well. In parallel, the new process starts the
        history navigation and also sends a WebPageProxy::GoToBackForwardItem to update the BackForwardList's
        current item as well. We end up with a race between the 2 GoToBackForwardItem IPC messages coming from
        the old and new process. If the old process's message loses the race, we end up with the wrong current
        history item getting set in the UIProcess. Later, when we commit the provisional load and try to suspend
        the previous page, we would save the SuspendedPage on the *wrong* BackForwardList item. If one tries to
        load this BackForwardList item later, we'll use its SuspendedPage and try to unsuspend it. However,
        because the PageCache entry is saved on another HistoryItem than the one getting loaded in the WebProcess
        side, we attempt to do a regular load instead of a PageCache restore. We end up failing the load because
        pages cannot trigger new loads while in page cache. Because the load fails, we end up loading the
        initial empty document and this is how we end up with 'about:blank' in the back forward list.

        To address the issue, update WebPageProxy::backForwardGoToItem() to ignore messages from the old/committed
        WebProcess when there is a pending provisional load. If the committed processes starts a legit new
        load, it would clear any existing pending provisional load before attempting the call backForwardGoToItem().
        As a result, ignoring such messages from the old processes when there is a pending provisional load is
        safe.

        In the future, we should probably move more of the history / backForwardList management to the UIProcess
        to avoid this sort of issues. This would be a much larger refactoring though so I am going with this
        simpler fix that is easily cherry-pickable for now.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::backForwardGoToItem):

2019-02-15  Alex Christensen  <achristensen@webkit.org>

        Update IPC code generator unit test expectations after r241595
        https://bugs.webkit.org/show_bug.cgi?id=194679

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

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClientFetch closer to WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=194651

        Reviewed by Alex Christensen.

        The goal of this refactoring is to, at some point use the regular network process load path for service worker loads.
        This should simplify things and allow less IPC exchanges, for instance in the case of fetch not handled by service worker.

        Introduce two IPC messages for supporting redirect responses and allow the didReceiveResponse/continueDidReceiveResponse
        handshake for navigation loads.

        This makes ServiceWorker having to buffer load information for this particular case.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveFetchRedirectResponse):
        (WebKit::NetworkProcess::didReceiveFetchResponse):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::continueDidReceiveFetchResponse):
        (WebKit::WebSWServerConnection::didReceiveFetchRedirectResponse):
        (WebKit::WebSWServerConnection::didReceiveFetchResponse):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::start):
        (WebKit::ServiceWorkerClientFetch::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):
        (WebKit::ServiceWorkerClientFetch::didReceiveData):
        (WebKit::ServiceWorkerClientFetch::didFinish):
        (WebKit::ServiceWorkerClientFetch::didFail):
        (WebKit::ServiceWorkerClientFetch::didNotHandle):
        (WebKit::ServiceWorkerClientFetch::cancel):
        * WebProcess/Storage/ServiceWorkerClientFetch.h:
        * WebProcess/Storage/ServiceWorkerClientFetch.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::startFetch):
        (WebKit::WebSWClientConnection::cancelFetch):
        (WebKit::WebSWClientConnection::continueDidReceiveFetchResponse):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::continueDidReceiveFetchResponse):
        (WebKit::WebSWContextManagerConnection::startFetch):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::WebServiceWorkerFetchTaskClient):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveRedirection):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveResponse):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinish):
        (WebKit::WebServiceWorkerFetchTaskClient::didFail):
        (WebKit::WebServiceWorkerFetchTaskClient::didFinish):
        (WebKit::WebServiceWorkerFetchTaskClient::continueDidReceiveResponse):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:

2019-02-15  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        * Configurations/WebKit.xcconfig:
        Conditionalize weak linking to WebInspectorUI.framework for Mac only.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * WebProcess/WebPage/mac/WebInspectorUIMac.mm:
        (WebKit::webInspectorUILocalizedStringsURL):
        Rewrite uses of the bundle to exit early if bundle couldn't be loaded.

2019-02-15  Alex Christensen  <achristensen@webkit.org>

        IPC code should support messages with both Delayed and WantsConnection attributes
        https://bugs.webkit.org/show_bug.cgi?id=194679

        Reviewed by Geoffrey Garen.

        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunctionImpl):
        (IPC::callMemberFunction):
        (IPC::handleMessageDelayedWantsConnection):
        * Scripts/webkit/messages.py:
        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::getValues):
        * UIProcess/WebStorage/StorageManager.h:
        * UIProcess/WebStorage/StorageManager.messages.in:

2019-02-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241559 and r241566.
        https://bugs.webkit.org/show_bug.cgi?id=194710

        Causes layout test crashes under GuardMalloc (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241559

        "Unreviewed build fix for WinCairo Debug after r241559."
        https://trac.webkit.org/changeset/241566

2019-02-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Defer sandboxing APIs to 2.26
        https://bugs.webkit.org/show_bug.cgi?id=194274

        Reviewed by Carlos Garcia Campos.

        The web process sandbox has not been widely-tested yet, so we should defer the new APIs to
        2.26.

        * UIProcess/API/glib/WebKitWebContext.cpp:

2019-02-10  Darin Adler  <darin@apple.com>

        Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases)
        https://bugs.webkit.org/show_bug.cgi?id=194487

        Reviewed by Daniel Bates.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::switchToNewTestingSession): Use makeString instead of String::format.
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::buildAcceptLanguages): Ditto.
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::performURLImport): Ditto.
        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::logConfirmCompositionForTesting): Ditto.
        (WebKit::InputMethodFilter::logSetPreeditForTesting): Ditto.

2019-02-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241564.

        Caused 50+ Timeouts on Mac WK2, mostly in the http/ directory

        Reverted changeset:

        "[Mac] WebInspectorUI.framework does not need to be soft-
        linked anymore"
        https://bugs.webkit.org/show_bug.cgi?id=194411
        https://trac.webkit.org/changeset/241564

2019-02-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r241556

        I guess this is due to unified builds after a new file being added in r241556.

        * UIProcess/API/C/WKAuthenticationDecisionListener.cpp:
        * UIProcess/API/C/WKPage.cpp:

2019-02-14  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r240446): Storage Access API does not handle domains consistently
        https://bugs.webkit.org/show_bug.cgi?id=194664

        Reviewed by Alex Christensen.
        
        During my refactoring of the ResourceLoadStatistics code, I introduced two bugs:
        (1) I neglected to be consistent in my use of 'primaryDomain', causing some Storage
        Access API code paths to store approves under one domain (e.g., 'www.example.com'),
        while checking status under the eTLD+1 (e.g., 'example.com'). The exact string matching
        requirement caused these to get missed.

        (2) I used a move operator before a final set of copies of domain names, leading to
        some empty strings being passed to Storage Access API calls.

        Both issues are corrected in this patch.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResourceForDebugMode): Always make the
        domain comply with our 'primaryDomain' logic.
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::logWebSocketLoading): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceLoading): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceRedirect): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::isPrevalentResource): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubresourceUnder): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubFrameUnder): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsRedirectingTo): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::clearPrevalentResource): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setGrandfathered): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::isGrandfathered): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setSubframeUnderTopFrameOrigin): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUnderTopFrameOrigin): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectTo): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectFrom): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectTo): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectFrom): Ditto.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::hasStorageAccess): Always make the
        domain comply with our 'primaryDomain' logic.
        (WebKit::WebsiteDataStore::requestStorageAccess): Ditto. Also make copy of domain
        names before moving them to the completion handler.
        (WebKit::WebsiteDataStore::grantStorageAccess): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hasStorageAccess):  Always make the domain comply with our
        'primaryDomain' logic.
        (WebKit::WebPage::requestStorageAccess): Ditto.

2019-02-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView renderedDrawing]):

2019-02-14  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: m_caches.isEmpty() || !m_pendingInitializationCallbacks.isEmpty() in WebKit::CacheStorage::Caches::clearMemoryRepresentation()
        https://bugs.webkit.org/show_bug.cgi?id=188393
        <rdar://problem/43025665>

        Reviewed by Alex Christensen.

        In case Caches::dispose is called, clearMemoryRepresentation might be called if there is no active cache.
        We also ensure to not clear the memory representation if there is any remaining removed cache.
        Update the clearMemoryRepresentation assertion to take that into account.

        In case a Caches is cleared twice, the clearMemoryRepresentation assertion will assert while it should not.
        In that case m_storage is null the second time. Update the assertion accordingly.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::hasActiveCache const):
        (WebKit::CacheStorage::Caches::dispose):
        (WebKit::CacheStorage::Caches::clearMemoryRepresentation):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:

2019-02-14  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        * Configurations/WebKit.xcconfig:
        Conditionalize weak linking to WebInspectorUI.framework for Mac only.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * WebProcess/WebPage/mac/WebInspectorUIMac.mm:
        (WebKit::webInspectorUILocalizedStringsURL):
        Rewrite uses of the bundle to exit early if bundle couldn't be loaded.

2019-02-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] WebKitGTK+ -> WebKitGTK
        https://bugs.webkit.org/show_bug.cgi?id=194658

        Reviewed by Alex Christensen.

        This renames WebKitGTK+ to WebKitGTK in a few user-visible places: the API documentation,
        the pkg-config, and an error message.

        In a couple places where it's exposed in WPE documentation, WPE is now mentioned, or the
        reference to "WebKitGTK+" is changed to just "WebKit."

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init):
        * UIProcess/API/glib/WebKitWebView.cpp:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivateGtk.h:
        * gtk/webkit2gtk-web-extension.pc.in:
        * gtk/webkit2gtk.pc.in:

2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp:
        (main):
        * Platform/unix/EnvironmentUtilities.cpp:
        (WebKit::EnvironmentUtilities::stripValuesEndingWithString):
        * Platform/unix/LoggingUnix.cpp:
        (WebKit::logLevelString):
        * Platform/win/LoggingWin.cpp:
        (WebKit::logLevelString):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::shouldCallRealDebugger):
        * Shared/Plugins/unix/PluginSearchPath.cpp:
        (WebKit::pluginsDirectories):
        * Shared/glib/ProcessExecutablePathGLib.cpp:
        (WebKit::findWebKitProcess):
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsConstructed):
        (webKitSettingsSetProperty):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (injectedBundleDirectory):
        (webkitWebContextConstructed):
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkitWebViewMaximizeWindow):
        (webkitWebViewRestoreWindow):
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend):
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::XDGDBusProxyLauncher::launch):
        (WebKit::bindDBusSession):
        (WebKit::bindX11):
        (WebKit::bindWayland):
        (WebKit::bindPulse):
        (WebKit::bindPathVar):
        (WebKit::bindGStreamerData):
        (WebKit::bubblewrapSpawn):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::systemDirectoryPath):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::memoryPressureMonitorDisabled):
        (WebKit::WebProcessPool::platformInitialize):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/gtk/HardwareAccelerationManager.cpp:
        (WebKit::HardwareAccelerationManager::HardwareAccelerationManager):
        * WebProcess/EntryPoint/unix/WebProcessMain.cpp:
        (main):
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        * WebProcess/wpe/WebProcessMainWPE.cpp:
        Utilize WTF::Environment where possible.

2019-02-14  Jiewen Tan  <jiewen_tan@apple.com>

        Handle _WKNavigationActionPolicyAllowWithoutTryingAppLink for LoadOptimizer
        https://bugs.webkit.org/show_bug.cgi?id=194640
        <rdar://problem/48064140>

        Reviewed by Brent Fulgham.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

2019-02-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Introduce a WebContent Process cache
        https://bugs.webkit.org/show_bug.cgi?id=194594
        <rdar://problem/46793397>

        Reviewed by Geoff Garen.

        Introduce a WebContent Process cache to reduce the number of process launches when
        process swap on navigation is enabled, and to reduce the power cost of the feature.

        If a WebProcess loaded pages from a single registrable domain then it is eligible
        for the cache. When process-swapping on navigation to a new registrable domain, we
        now attempt to retrieve a process from the cache for the domain in question instead
        of always launching a new one.

        The WebProcess cache currently has the following attributes:
        - It may contains 4 processes per GB of RAM the machine has, up to 30 processes.
        - WebProcesses automatically get evicted from the cache after 30 minutes.
        - If the application is no longer the active app, then the cache will get cleared
          after 5 minutes.
        - WebProcesses that are in the cache are reported as "(Cached)" in Activity Monitor.

        The WebProcess cache is currently disabled by default and can by enabled by the
        client via SPI.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::lastProcessIdentifier const):
        (WebKit::WebBackForwardListItem::setLastProcessIdentifier):
        Add new lastProcessIdentifier data member that reflects which process this item
        was last loaded in. It is normally identical to the identifier of the process
        that created the item but it gets overriden in case of cross-site client-side
        redirect, since a new process takes over the item in this case.

        * Sources.txt:
        Add new source file.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationUsesWebProcessCache):
        (WKContextConfigurationSetUsesWebProcessCache):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setUsesWebProcessCache:]):
        (-[_WKProcessPoolConfiguration usesWebProcessCache]):
        Add new SPI to enable the WebProcess cache.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _webProcessCountIgnoringPrewarmedAndCached]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        Add new SPI for testing which returns the number of WebProcesses ignoring
        both prewarmed and cached ones.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        Add application active state observers as the WebProcess cache gets cleared
        when the application resigns active state for more than 5 minutes.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::loadRequest):
        When doing a load in a new process with the BackForwardList locked (i.e. client-side
        redirect), make sure we update the last process identifier for the BackForwardListItem.
        This is important because the logic in WebProcessPool::processForNavigation() relies on
        this identifier to select which process to do the history navigation into, and we want
        to do the load in the post-redirect process, not the pre-redirect one.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        Tell the WebProcess whenever a main frame provisional load is started, providing the URL.

        * UIProcess/WebProcessCache.cpp: Added.
        (WebKit::WebProcessCache::WebProcessCache):
        (WebKit::WebProcessCache::addProcess):
        (WebKit::WebProcessCache::takeProcess):
        (WebKit::WebProcessCache::updateMaximumSize):
        (WebKit::WebProcessCache::clear):
        (WebKit::WebProcessCache::setApplicationIsActive):
        (WebKit::WebProcessCache::evictProcess):
        (WebKit::WebProcessCache::CachedProcess::CachedProcess):
        (WebKit::WebProcessCache::CachedProcess::~CachedProcess):
        (WebKit::WebProcessCache::CachedProcess::takeProcess):
        (WebKit::WebProcessCache::CachedProcess::evictionTimerFired):
        * UIProcess/WebProcessCache.h: Added.
        (WebKit::WebProcessCache::maximumSize):
        (WebKit::WebProcessCache::size const):
        (WebKit::WebProcessCache::CachedProcess::process):
        Add process cache implementation.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_webProcessCache):
        WebProcessCache is stored on the WebProcessPool via m_webProcessCache data member.

        (WebKit::WebProcessPool::~WebProcessPool):
        Clear the WebProcess cache in the destructor.

        (WebKit::WebProcessPool::setApplicationIsActive):
        Notify the WebProcessCache whenever the application's active state changes.

        (WebKit::WebProcessPool::createWebPage):
        If the state of PSON changes via the experimental features menu, dynamically
        update the WebProcessCache's size. This is needed because the cache is disabled
        when PSON is disabled.

        (WebKit::WebProcessPool::handleMemoryPressureWarning):
        Clear the WebProcess cache on memory pressure.

        (WebKit::WebProcessPool::processForNavigationInternal):
        Query the WebProcessCache before attempting to create a new WebProcess for a cross-site
        navigation.

        (WebKit::WebProcessPool::findReusableSuspendedPageProcess):
        This logic was split out of processForNavigationInternal() to reduce the size
        of the method.

        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setIsInProcessCache):
        Update the isInProcessCache flag on the WebProcessProxy and send an IPC to the WebContent
        process so that it can update its name in Activity Monitor.
        We also need to stop holding a strong reference to the WebProcessPool whenever the process
        is in the cache, similarly to what we do for pre-warmed processes, given that such processes
        should not keep the process pool alive.

        (WebKit::WebProcessProxy::addExistingWebPage):
        Assert that we never try to add a page to a cached process, it should be taken out of the
        cache before use.

        (WebKit::WebProcessProxy::hasProvisionalPageWithID const):
        (WebKit::WebProcessProxy::isAllowedToUpdateBackForwardItem const):
        (WebKit::WebProcessProxy::updateBackForwardItem):
        In case of client-side redirects, the previous process would sometimes send an IPC causing
        the UIProcess' backforward list item to get updated with the pre-redirect URL after we've
        already redirected. This previously would be unlikely to occur because we do not suspend
        client-redirect pages and their process would normally exit before getting a chance to send
        the IPC. However, with the process cache, the bug became obvious as the process would stay
        alive and send up the "bad" IPC. To address the issue, we now only let the IPC update the
        item if the item's page is (still) associated with the process. In the future, we may want
        to update the IPC so that it gets sent to the WebPageProxy instead of the WebProcessProxy.

        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        If a cached WebProcess crashes, remove it from the cache so that we do not attempt to use
        it for a load later.

        (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const):
        Only cache WebProcesses that have loaded a single registrable domain. Also prevent caching
        for service worker and inspector processes.

        (WebKit::WebProcessProxy::maybeShutDown):
        If the process is cacheable, add it to the cache instead of shutting it down right away.

        (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess):
        Make sure we do not attempt to terminate a processes that is in the cache.

        (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):
        Whenever a main frame provisional load starts, make sure we update the process's associated
        registrable domain. nullopt indicates that there is no associated domain yet. Null string
        indicates that the process is associated with several registrable domain and is therefore
        not eligible for caching.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::registrableDomain const):
        (WebKit::WebProcessProxy::isInProcessCache const):
        (WebKit::WebProcessProxy::provisionalPageCount const):
        Add convenience getters.

        * WebKit.xcodeproj/project.pbxproj:
        Add new files to project.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setIsInProcessCache):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateProcessName):
        Update the WebProcess' name in Activity Monitor whenever it goes into or out of the WebProcess
        cache.

2019-02-14  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Open sandbox for certain calls.
        https://bugs.webkit.org/show_bug.cgi?id=194626

        Reviewed by Brent Fulgham.

        Reporting shows that certain calls needs to be allowed in the sandbox.

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

2019-02-14  Chris Fleizach  <cfleizach@apple.com>

        AX: ARIA Reflection was disabled in error
        https://bugs.webkit.org/show_bug.cgi?id=194647
        <rdar://problem/48068336>

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferences.yaml:

2019-02-14  Commit Queue  <commit-queue@webkit.org>

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

        causing API failures in builds (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "[Cocoa] Media elements will restart network buffering just
        before suspending"
        https://bugs.webkit.org/show_bug.cgi?id=193691
        https://trac.webkit.org/changeset/241486

2019-02-14  Youenn Fablet  <youenn@apple.com>

        Do not add a caches to its engine if the salt cannot be initialized
        https://bugs.webkit.org/show_bug.cgi?id=194604

        Reviewed by Antti Koivisto.

        This is a follow-up to https://bugs.webkit.org/show_bug.cgi?id=194588.
        We should return early if initialize fails.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::readCachesFromDisk):

2019-02-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a scrolled window for script alerts text
        https://bugs.webkit.org/show_bug.cgi?id=184875

        Reviewed by Michael Catanzaro.

        To ensure long text doesn't make the dialog bigger.

        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
        (webkitScriptDialogImplConstructed): Use PANGO_ELLIPSIZE_END for the title and add a scrolled window for the body.
        (webkitScriptDialogImplSetText): Helper function to set the dialog body, ensuring the scrolled window fills the
        dialog available size.
        (webkitScriptDialogImplNew): It now receives the maximum size and uses webkitScriptDialogImplSetText().
        * UIProcess/API/gtk/WebKitScriptDialogImpl.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkitWebViewScriptDialog): Pass the 80% of the web view size as the maximum size of script dialogs.

2019-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WKBundleFrameGetParentFrame when called inside didRemoveFrameFromHierarchy
        https://bugs.webkit.org/show_bug.cgi?id=194641

        Reviewed by Geoffrey Garen.

        Fixed the bug by adding a null check to WebFrame::parentFrame.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::parentFrame const):

2019-02-13  Timothy Hatcher  <timothy@apple.com>

        Allow some deprecations in WKDrawingView.
        https://bugs.webkit.org/show_bug.cgi?id=194636

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView PNGRepresentation]):
        (-[WKDrawingView loadDrawingFromPNGRepresentation:]):
        (-[WKDrawingView _canvasViewWillBeginDrawing:]):
        (-[WKDrawingView didChangeInk:]):

2019-02-13  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

        When the WebProcess receives a notification that the process is about to become
        suspended, it tells the MemoryPressureHandler to release all critical memory. This
        has the side effect of causing AVFoundation-backed media elements to dump their
        in-memory caches and start downloading media data again. Instead, media elements
        should all stop buffering media data during suspension. Add new testing SPI to
        simulate suspension and resume messages.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processWillSuspendImminentlyForTesting]):
        (-[WKWebView _processDidResumeForTesting]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WKInkPickerView.mm:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspendAllMediaBuffering):
        (WebKit::WebPage::resumeAllMediaBuffering):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):
        (WebKit::WebProcess::suspendAllMediaBuffering):
        (WebKit::WebProcess::resumeAllMediaBuffering):
        * WebProcess/WebProcess.h:

2019-02-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix sandbox violation during media playback
        https://bugs.webkit.org/show_bug.cgi?id=194616
        <rdar://problem/48049264>

        Reviewed by Brent Fulgham.

        Mach lookup to "com.apple.coremedia.figcontentkeysession.xpc" should be allowed.

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

2019-02-13  Tim Horton  <timothy_horton@apple.com>

        Encrypted PDFs inside <embed> or <object> crash the Web Content process
        https://bugs.webkit.org/show_bug.cgi?id=194605
        <rdar://problem/19894818>

        Reviewed by Andy Estes.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::createPasswordEntryForm):
        Don't try to create a password form field if we can't make form fields.

        This means you will be left with a useless embedded PDF, but at least
        the Web Content process won't crash.

        We'll need to find an alternative implementation of PDF embedded form
        fields that is compatible with <embed> and <object> if we want to support
        this. Currently we piggy-back off the fact that we can just insert
        <input>s into the PluginDocument's DOM, but we can't do that if there
        is no PluginDocument, just a main document, like in the <embed> case.

2019-02-12  Jiewen Tan  <jiewen_tan@apple.com>

        Further restricting webarchive loads
        https://bugs.webkit.org/show_bug.cgi?id=194567
        <rdar://problem/47610130>

        Reviewed by Youenn Fablet.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        Set a flag to indicate a load is started from clients.

2019-02-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Merge WebProcessPoolWPE.cpp and WebProcessPoolGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=194551

        Reviewed by Carlos Garcia Campos.

        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/glib/WebProcessPoolGLib.cpp: Renamed from Source/WebKit/UIProcess/gtk/WebProcessPoolGtk.cpp.
        (WebKit::initializeRemoteInspectorServer):
        (WebKit::memoryPressureMonitorDisabled):
        (WebKit::WebProcessPool::platformInitialize):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInvalidateContext):
        (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):
        * UIProcess/wpe/WebProcessPoolWPE.cpp: Removed.

2019-02-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix -Wformat warning from r241401
        https://bugs.webkit.org/show_bug.cgi?id=194584
        <rdar://problem/47761293>

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

2019-02-13  Youenn Fablet  <youenn@apple.com>

        Make WebRTCUnifiedPlanEnabled true by default
        https://bugs.webkit.org/show_bug.cgi?id=194595

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2019-02-13  John Wilander  <wilander@apple.com>

        Store Ad Click Attribution requests in the network process
        https://bugs.webkit.org/show_bug.cgi?id=194510
        <rdar://problem/47650118>

        Reviewed by Alex Christensen and Daniel Bates.

        With this patch, WebPageProxy::didCommitLoadForFrame() now looks for
        an AdClickAttribution object in its navigation state. If there is an
        attribution, it sends it to the network process where the 
        WebKit::NetworkSession stores it in an object of a new class,
        WebKit::NetworkAdClickAttribution.

        This patch also covers test infrastructure to support two new
        TestRunner functions:
        - dumpAdClickAttribution()
        - clearAdClickAttribution()

        * NetworkProcess/Cookies/WebCookieManager.cpp:
            Added missing header include.
        * NetworkProcess/Downloads/DownloadManager.cpp:
            Added missing header include.
        * NetworkProcess/NetworkAdClickAttribution.cpp: Added.
        (WebKit::NetworkAdClickAttribution::ensureDestinationMapForSource):
        (WebKit::NetworkAdClickAttribution::store):
        (WebKit::NetworkAdClickAttribution::clear):
        (WebKit::NetworkAdClickAttribution::toString const):
        * NetworkProcess/NetworkAdClickAttribution.h: Added.
            Stores WebCore::AdClickAttribution objects in a map structure.
        * NetworkProcess/NetworkLoad.cpp:
            Added missing header includes.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::storeAdClickAttribution):
        (WebKit::NetworkProcess::dumpAdClickAttribution):
        (WebKit::NetworkProcess::clearAdClickAttribution):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::storeAdClickAttribution):
        (WebKit::NetworkSession::dumpAdClickAttribution):
        (WebKit::NetworkSession::clearAdClickAttribution):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
            Added missing header include.
        * Sources.txt:
            Added NetworkProcess/NetworkAdClickAttribution.cpp.
        * UIProcess/API/APINavigation.h:
        (API::Navigation::adClickAttribution const):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageDumpAdClickAttribution):
        (WKPageClearAdClickAttribution):
            Test infrastructure.
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::dumpAdClickAttribution):
        (WebKit::NetworkProcessProxy::clearAdClickAttribution):
            Test infrastructure.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
            This is where pending Ad Click Attributions are forwarded to the
            network process.
        (WebKit::WebPageProxy::dumpAdClickAttribution):
        (WebKit::WebPageProxy::clearAdClickAttribution):
            Test infrastructure.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::dumpAdClickAttribution):
        (WebKit::WebProcessPool::clearAdClickAttribution):
            Test infrastructure.
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
            Added missing data copying from navigationAction to navigationActionData.

2019-02-13  Antti Koivisto  <antti@apple.com>

        Crash in WebKit::CacheStorage::Engine::cachesRootPath
        https://bugs.webkit.org/show_bug.cgi?id=194588
        <rdar://problem/46363997>

        Reviewed by Youenn Fablet.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::cachesRootPath):

        Salt may have not been initialized yet when the Engine is destroyed.

2019-02-13  Alex Christensen  <achristensen@webkit.org>

        Remove legacy sync messaging in some IPC code
        https://bugs.webkit.org/show_bug.cgi?id=194561

        Reviewed by Geoffrey Garen.

        Changing some LegacySync messages to Delayed messages.  We should probably rename Delayed to Sync.
        There are too many ways to send messages.  Let's work to get rid of the old one.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setAllowsAnySSLCertificateForWebSocket):
        (WebKit::NetworkProcess::processWillSuspendImminently):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::handleWheelEvent):
        (WebKit::PluginControllerProxy::handleMouseEnterEvent):
        (WebKit::PluginControllerProxy::handleMouseLeaveEvent):
        (WebKit::PluginControllerProxy::handleKeyboardEvent):
        (WebKit::PluginControllerProxy::handleEditingCommand):
        (WebKit::PluginControllerProxy::isEditingCommandEnabled):
        (WebKit::PluginControllerProxy::handlesPageScaleFactor):
        (WebKit::PluginControllerProxy::requiresUnifiedScaleFactor):
        (WebKit::PluginControllerProxy::paintEntirePlugin):
        (WebKit::PluginControllerProxy::supportsSnapshotting):
        (WebKit::PluginControllerProxy::snapshot):
        (WebKit::PluginControllerProxy::getPluginScriptableNPObject):
        (WebKit::PluginControllerProxy::getFormValue):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::deallocate):
        (WebKit::NPObjectMessageReceiver::hasMethod):
        (WebKit::NPObjectMessageReceiver::invoke):
        (WebKit::NPObjectMessageReceiver::invokeDefault):
        (WebKit::NPObjectMessageReceiver::hasProperty):
        (WebKit::NPObjectMessageReceiver::getProperty):
        (WebKit::NPObjectMessageReceiver::setProperty):
        (WebKit::NPObjectMessageReceiver::removeProperty):
        (WebKit::NPObjectMessageReceiver::enumerate):
        (WebKit::NPObjectMessageReceiver::construct):
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::secItemRequest):
        * UIProcess/mac/SecItemShimProxy.h:
        * UIProcess/mac/SecItemShimProxy.messages.in:

2019-02-13  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241433.

        Broke internal builds.

        Reverted changeset:

        "Move
        UIWebTouchEventsGestureRecognizer.activeTouchesByIdentifier to
        SPI"
        https://bugs.webkit.org/show_bug.cgi?id=194531
        https://trac.webkit.org/changeset/241433

2019-02-12  Antoine Quint  <graouts@apple.com>

        Move UIWebTouchEventsGestureRecognizer.activeTouchesByIdentifier to SPI
        https://bugs.webkit.org/show_bug.cgi?id=194531
        <rdar://problem/47714562>

        Reviewed by Dean Jackson.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cancelPointersForGestureRecognizer:]): We update the referenced Radar since we need to keep the call
        to respondsToSelector until the SPI has shipped for OpenSource builds to work.

2019-02-13  Antoine Quint  <graouts@apple.com>

        Support simulated mouse events on iOS based on a PlatformTouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=194501
        <rdar://problem/46910790>

        Reviewed by Dean Jackson.

        Add two new internal runtime flags to control whether simulated mouse events should be dipatched along with touch events and whether
        simulated mousemove events dispatched should automatically trigger the behavior preventDefault() would also trigger. We also ensure
        that we correctly create touch tracking regions for mouse events.

        * Shared/WebPreferences.yaml:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateTouchEventTracking):

2019-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in Page::setActivityState because m_page is null
        https://bugs.webkit.org/show_bug.cgi?id=194584

        Reviewed by Antti Koivisto.

        Add a null check to avoid the crash. Also add a debug assertion to help diagnose this in the future.

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

2019-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in PolicyCheckIdentifier::isValidFor via WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=194582

        Reviewed by Antti Koivisto.

        The bug was caused by WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction invoking the callback
        with responseIdentifier even when we had failed to send the policy check IPC. Clearly, responseIdentifier
        is invalid in that case, and we should be using requestIdentifier instead.

        Unfortunately no new tests since I'm not aware of a way to make sendSync fail in this case.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2019-02-13  Benjamin Poulain  <benjamin@webkit.org>

        Responsiveness timers are too expensive for frequent events
        https://bugs.webkit.org/show_bug.cgi?id=194003

        Reviewed by Geoffrey Garen.

        With each event, we set a responsivness timer to check if the WebProcess
        is responsive, and reset the timer when the WebProcess sends an answer.

        For frequent events (e.g. wheel events, mouse force events, etc),
        we are spamming the kernel with hundreds of timers per second.
        That is a bit inefficient.

        Another source of inefficiency comes from the timer implementation
        itself. Stopping a RunLoop::Timer removes the timer from every mode
        and invalidate the timer. It becomes costly since we do it a lot.

        With this patch, I tweak ResponsivenessTimer and its use to minimize
        how often we schedule system timers.

        The first change is to not stop the timer when we get the stop()
        calls if we expect more events to come in. Instead, we keep track
        if we care about the timeout or not in the attribute "m_waitingForTimer".
        When the next event starts, we can reschedule the timer without ever
        having told the kernel about the stop.
        If there are no next events, the timeout fires but m_waitingForTimer
        is false. To avoid idle wake up, the lazy stop is only used when having
        following events is common.

        The second improvements comes from not even rescheduling the timer
        when restarted. Instead of changing the timer, we let the original timer
        fire and re-shedule a new one with the missing time.

        For more context, also see patches r240759 and r240944.

        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::ResponsivenessTimer):
        (WebKit::ResponsivenessTimer::invalidate):
        (WebKit::ResponsivenessTimer::timerFired):
        (WebKit::ResponsivenessTimer::start):
        (WebKit::ResponsivenessTimer::startWithLazyStop):
        (WebKit::ResponsivenessTimer::stop):
        (WebKit::ResponsivenessTimer::processTerminated):
        (WebKit::ResponsivenessTimer::~ResponsivenessTimer): Deleted.
        * UIProcess/ResponsivenessTimer.h:
        (WebKit::ResponsivenessTimer::hasActiveTimer const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processNextQueuedMouseEvent):
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::handleGestureEvent):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::isResponsiveWithLazyStop):
        * UIProcess/WebProcessProxy.h:

2019-02-12  Tim Horton  <timothy_horton@apple.com>

        Null deref in userInterfaceLayoutDirection under ViewGestureController::handleSwipeGesture
        https://bugs.webkit.org/show_bug.cgi?id=194569
        <rdar://problem/46711049>

        Reviewed by Wenson Hsieh.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::handleSwipeGesture):
        It is conceivable that we could get here if the client closes the page
        e.g. in the callback from willEndSwipeGesture. We already guarded against
        this ... one line too late! Rearrange the lines so we don't call into
        WebPageProxy at all if we don't have a drawing area (which is a strict subset
        of the time that isValid would return true). This is a speculative fix,
        since I can no longer reproduce the crash on demand.

2019-02-12  Youenn Fablet  <youenn@apple.com>

        WebServiceWorkerProvider::handleFetch no longer needs a CachedResource parameter
        https://bugs.webkit.org/show_bug.cgi?id=194548

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::handleFetch):
        * WebProcess/Storage/WebServiceWorkerProvider.h:

2019-02-12  Tim Horton  <timothy_horton@apple.com>

        Remove WKLegacyPDFView
        https://bugs.webkit.org/show_bug.cgi?id=194559

        Reviewed by Andy Estes.

        * Platform/spi/ios/CorePDFSPI.h: Removed.
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):
        * UIProcess/ios/WKLegacyPDFView.h: Removed.
        * UIProcess/ios/WKLegacyPDFView.mm: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2019-02-12  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) MESSAGE_CHECK() hit under WebPageProxy::didFailProvisionalLoadForFrameShared()
        https://bugs.webkit.org/show_bug.cgi?id=194568
        <rdar://problem/47944490>

        Reviewed by Ryosuke Niwa.

        When the provisional process crashes, it is unsafe to call ProvisionalPageProxy::cancel() because
        the WebProcessProxy clears its frame map as soon as the process crashes. Calling cancel() after
        that would call WebPageProxy::didFailProvisionalLoadForFrameShared(), which would try to look up
        the frame by ID and MESSAGE_CHECK() that the frame is not null. We would fail this check since
        the frame has been removed from the WebProcessProxy at this point.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _provisionalWebProcessIdentifier]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::provisionalProcessDidTerminate):

2019-02-12  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Youtube fails to play.
        https://bugs.webkit.org/show_bug.cgi?id=194565
        <rdar://problem/47974770>

        Reviewed by Geoffrey Garen.

        This is caused by sandbox violations and was introduced in r240500.

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

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        Remove firing assertion after r241317
        https://bugs.webkit.org/show_bug.cgi?id=194506

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::setDefersLoading):
        The creation of a PageGroupLoadDeferrer in Chrome.cpp tries to defer loading.
        See comments in Chrome::runJavaScriptAlert et al.
        This was necessary with WebKitLegacy, so keep it, but it doesn't need to do anything in modern WebKit.

2019-02-12  Tim Horton  <timothy_horton@apple.com>

        Find on Page shouldn't zoom in on matches
        https://bugs.webkit.org/show_bug.cgi?id=194557
        <rdar://problem/42087017>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/SmartMagnificationController.messages.in:
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::scrollToRect):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::updateFindIndicator):
        Only scroll to reveal the find result, do not zoom in.

2019-02-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow pages to trigger programmatic paste from script on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194271
        <rdar://problem/47808810>

        Reviewed by Tim Horton.

        Cancel the pending DOM paste access handler when the menu is about to hide, rather than when the hiding
        animation has completed. This ensures that if the page (on behalf of the user) requests DOM paste again during
        user interaction before the callout bar has finished fading after the previous DOM paste, we won't automatically
        cancel the incoming DOM paste access request because the callout bar animation finished.

        This scenario is exercised in the layout test editing/pasteboard/ios/dom-paste-consecutive-confirmations.html.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _willHideMenu:]):
        (-[WKContentView _didHideMenu:]):

2019-02-12  Chris Fleizach  <cfleizach@apple.com>

        AX: IsolatedTree: Implement more attributes
        https://bugs.webkit.org/show_bug.cgi?id=193911
        <rdar://problem/47599217>

        Reviewed by Daniel Bates.

        * Platform/spi/mac/AccessibilityPrivSPI.h: Added.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase clientSupportsIsolatedTree]):
        (-[WKAccessibilityWebPageObjectBase isolatedTreeRootObject]):
        (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject IGNORE_WARNINGS_END]):
        (-[WKAccessibilityWebPageObject convertScreenPointToRootView:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeSizeValue]):
        (-[WKAccessibilityWebPageObject accessibilityAttributePositionValue]):
        (-[WKAccessibilityWebPageObject accessibilityDataDetectorValue:point:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2019-02-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow pages to trigger programmatic paste from script on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194271
        <rdar://problem/47808810>

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

        Add an internal setting to enable or disable DOM paste access requests. This is on by default in iOS only
        (excluding watchOS and Apple TV), and is additionally disabled on macOS.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):

        Plumb DOM paste access requests from the web process (WebEditorClient) to the view (WKContentView). As per the
        usual, this involves WebEditorClient, WebPage, WebPageProxy, PageClient and finally WKContentView.

        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestDOMPasteAccess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView _webTouchEventsRecognized:]):

        Bail from any pending DOM paste access handler the moment we start handling touches on the web view, or if the
        web view resigns first responder, or if the web process crashes.

        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

        Reject text selection gestures while waiting for DOM paste access.

        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView canPerformActionForWebView:withSender:]):

        If we're handling a DOM paste, always return YES to allow the callout bar to show the "Paste" option.

        (-[WKContentView _didHideMenu:]):

        If the menu is programmatically hidden by the app while handling a DOM paste request, immediately reject the DOM
        paste request.

        (-[WKContentView pasteForWebView:]):

        Adjust -pasteForWebView: on WKContentView to first check whether there's an outstanding DOM paste completion
        handler to invoke, instead of telling the page to execute a paste command.

        (-[WKContentView _handleDOMPasteRequestWithResult:]):

        Add a helper to take and invoke the current DOM paste completion handler (if it exists) with the given result,
        and then dismiss the shared callout bar. Returns whether or not the paste completion handler exists. Invoked
        from various sources of user interaction or significant state changes (e.g. following a web process crash in
        -cleanupInteraction).

        (-[WKContentView _willPerformAction:sender:]):
        (-[WKContentView _didPerformAction:sender:]):

        Add hooks to detect when WKContentView is executing an editing action. This is to ensure that the page doesn't
        get stuck in a bad state in the case where WKWebView has been subclassed, overrides `-paste:`, and does not
        invoke the superclass method (which calls back into `-[WKContentView pasteForWebView:]`). There are a few
        possibilities here:
        1. WKWebView's `-paste:` action is not overridden. In this case, we will call back into `-pasteForWebView:`,
           which will notice that we have a pending paste completion handler and invoke it.
        2. WKWebView's `-paste:` action is overridden and does not call back into the content view. In this case, we
           will invoke the paste completion handler in `-_didPerformAction:sender:`.
        3. WKWebView's `-canPerformAction:withSender:` is overridden to include additional actions. In this case, we may
           get a call to invoke a different action selector while waiting for a potential paste action. If this happens,
           prevent the DOM paste in `-_willPerformAction:sender:` prior to handling the other action.

        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]):

        Dismiss DOM paste UI upon handling any key event.

        (-[WKContentView showGlobalMenuControllerInRect:]):
        (-[WKContentView hideGlobalMenuController]):

        Helper methods to present and dismiss the global UIMenuController, that accounts for available platform APIs for
        presenting or dismissing the menu controller on iOS.

        (-[WKContentView _requestDOMPasteAccessWithElementRect:completionHandler:]):

        Attempt to find a good target presentation rect when showing the callout menu. First, we will try to use the
        rect of the element the user has interacted with when triggering the paste. If such an element is too large or
        does not exist, we fall back to presenting the callout menu near the user's last touch location (with a small
        amount of margin, such that the action doesn't overlap with the user's finger, stylus, etc.).

        (-[WKContentView _resetShowingTextStyle:]): Deleted.

        Rename this to `-_didHideMenu:`.

        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/win/PageClientImpl.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestDOMPasteAccess):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestDOMPasteAccess):

        Add more plumbing and method stubs.

        (WebKit::WebPage::updateCurrentModifierState):
        (WebKit::WebPage::rectForElementAtInteractionLocation const):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rectForElementAtInteractionLocation const):
        (WebKit::WebPage::rectForElementAtInteractionLocation): Deleted.

        Mark this method as const, add a platform-agnostic stub, and adopt it for the purposes of determining where to
        position the callout bar when pasting.

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        Remove setDefersLoading infrastructure from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=194506

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::setDefersLoading): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::suspend): Deleted.
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::initialize):
        (WebKit::NetworkLoad::setDefersLoading): Deleted.
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::setDefersLoading): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::suspend): Deleted.
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::suspend): Deleted.
        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::suspend): Deleted.
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::setDefersLoading):

2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix build warnings after content extensions enablement
        https://bugs.webkit.org/show_bug.cgi?id=193622
        <rdar://problem/47982850>

        * UIProcess/API/C/WKUserContentExtensionStoreRef.cpp:
        (toResult):

2019-02-12  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=194524
        <rdar://problem/35481797>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/InputViewUpdateDeferrer.h:
        * UIProcess/ios/InputViewUpdateDeferrer.mm:
        (WebKit::InputViewUpdateDeferrer::InputViewUpdateDeferrer):
        (WebKit::InputViewUpdateDeferrer::~InputViewUpdateDeferrer):
        Make use of the per-responder and much safer input view pinning mechanism.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView becomeFirstResponderForWebView]):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _attemptClickAtLocation:modifierFlags:]):
        Always temporarily pin input views when becoming first responder; there are
        many paths (such as through the text interaction assistant) that can
        focus us on tap, trying to cover them all is a fool's errand. We'll
        just get out the big hammer and call it in becomeFirstResponder.
        This also means we can remove it from _singleTapCommitted and _attemptClick...

        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        Don't release the input view pinning until we return from _elementDidFocus;
        it does the rebuilding synchronously, so we need to have actually updated
        all of the prerequisites of -inputView before depinning.

2019-02-12  Youenn Fablet  <youenn@apple.com>

        Make use of is<SubresourceLoader>
        https://bugs.webkit.org/show_bug.cgi?id=194541

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        WebPage::close needs to remove all message receivers associated with that WebPage, not WebPage::~WebPage
        https://bugs.webkit.org/show_bug.cgi?id=194522
        <rdar://problem/47789393>

        Reviewed by Chris Dumez.

        The InjectedBundle SPI can retain the WebPage or wrapping objects (WKWebProcessPlugInBrowserContextController/WKBundlePageRef).
        This can make it so WebPage::close is called before WebPage::~WebPage, and if the SuspendedPageProxy is reused for a subsequent
        navigation to the same domain, the WebProcess is reused with a different WebPage instance with the same PageID, which causes problems
        when another WebPage registers message handlers and then the previous WebPage is destroyed, which removes both message handlers.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::close):
        (WebKit::WebPage::mainFrameDidLayout):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::eventDispatcher):

2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unsafe g_unsetenv() use in WebProcessPool::platformInitialize
        https://bugs.webkit.org/show_bug.cgi?id=194370

        Reviewed by Darin Adler.

        It is incorrect to use g_unsetenv() here because it is MT-Unsafe. We know that it is
        impossible and unreasonable to expect the application has not started other threads at this
        point, and threads will be calling getenv(). WebKit itself has probably already started
        threads of its own.

        Fortunately, the remote inspector in the web process is already prepared to deal with
        failure to connect to the inspector server, so we don't need to do anything except stop
        messing with the environment.

        Note these files are copies of each other. I'll merge them together in a follow-up patch.

        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::initializeRemoteInspectorServer):
        (WebKit::WebProcessPool::platformInitialize):
        * UIProcess/wpe/WebProcessPoolWPE.cpp:
        (WebKit::initializeRemoteInspectorServer):
        (WebKit::WebProcessPool::platformInitialize):

2019-02-08  Beth Dakin  <bdakin@apple.com>

        Ensure old binaries have old snapshotting behaviors
        https://bugs.webkit.org/show_bug.cgi?id=194449
        -and corresponding-
        rdar://problem/47931954

        Reviewed by Darin Adler.

        Make sure that a nil configuration behaves the same way that it used to on apps 
        that were linked before FirstWithSnapshotAfterScreenUpdates

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        * UIProcess/Cocoa/VersionChecks.h:

2019-02-12  Andy Estes  <aestes@apple.com>

        [iOSMac] Enable Parental Controls Content Filtering
        https://bugs.webkit.org/show_bug.cgi?id=194521
        <rdar://39732376>

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2019-02-11  Alex Christensen  <achristensen@webkit.org>

        Remove noisy and unnecessary logs added in r241223
        https://bugs.webkit.org/show_bug.cgi?id=194427

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Errors occur all the time in the XPC connection's event handler, like when a process terminates.
        We don't need to print an "error" every time any process terminates.

2019-02-11  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Automation: client callbacks are not called if delegate does not override
        https://bugs.webkit.org/show_bug.cgi?id=194519
        <rdar://problem/47981961>

        Reviewed by Joseph Pecoraro.

        Call the completion handler directly if the delegate does not implement the relevant method.

        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::requestNewPageWithOptions):
        (WebKit::AutomationSessionClient::requestSwitchToPage):
        (WebKit::AutomationSessionClient::requestHideWindowOfPage):
        (WebKit::AutomationSessionClient::requestRestoreWindowOfPage):
        (WebKit::AutomationSessionClient::requestMaximizeWindowOfPage):

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Adopt SPI to support Emacs bindings: transpose and delete to end of paragraph
        https://bugs.webkit.org/show_bug.cgi?id=194505
        <rdar://problem/47743533>

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _deleteToEndOfParagraph]): Added.
        (-[WKContentView _transpose]): Added.

2019-02-11  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Add content extensions support in WKTR and unskip layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193622

        Reviewed by Michael Catanzaro.

        * NetworkProcess/cache/NetworkCacheData.h: Define an adoptAndMapFile() implementation
        for GFileIOStream objects.
        * NetworkProcess/cache/NetworkCacheDataSoup.cpp:
        (WebKit::NetworkCache::adoptAndMapFile): Added implementation, which extracts the file
        descriptor from a GFileIOStream, as it inherits from GFileDescriptorBased, and then
        reuses the version of adoptAndMapFile() which takes a file descritor for the actual work.
        * NetworkProcess/NetworkLoadChecker.cpp:
        (Webkit::NetworkLoadChecker::checkRequest): Use "this" when referring to
        processContentExtensionRulesForLoad() in order to avoid ambiguity.
        * Sources.txt: Add WKUserContentExtensionStoreRef.cpp, all ports use it now.
        * SourcesCocoa.txt: Remove WKUserContentExtensionStoreRef.cpp, because it is not
        Cocoa-specific anymore.
        * SourcesGTK.txt: Add APIContentRuleListStoreGLib.cpp.
        * SourcesWPE.txt: Ditto.
        * UIProcess/API/C/WKUserContentExtensionStoreRef.cpp:
        (WKUserContentExtensionStoreCreate): Added.
        (toResult): Added.
        (WKUserContentExtensionStoreCompile): Added.
        (WKUserContentExtensionStoreLookup): Added.
        (WKUserContentExtensionStoreRemove): Added.
        * UIProcess/API/C/WKUserContentExtensionStoreRef.h: Add declarations for the new C API
        functions and for the WKUserContentExtensionStoreResult status enum.
        * UIProcess/API/glib/APIContentRuleListStoreGLib.cpp: Added.
        (API::ContentRuleListStore::defaultStorePath): Add a dummy implementation. The public API
        for the GLib based ports (GTK+ and WPE) will not allow using the default store and will
        always indicating a path.

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Make use of UIKit SPI to retreive the modifier flags when dispatching mouse and touch events.
        Add new WebKit SPI for iOS, -[WKNavigationAction modifierFlags], to retrieve the the modifier
        flags held when a navigation action was initiated.

        * Platform/spi/ios/UIKitSPI.h: Expose SPI.
        * Shared/NativeWebTouchEvent.h: Re-arrange macro guards so that we can expose the helper function
        WebKit::webEventModifierFlags(). This is a bit more involved that usual since this header is included
        from both C++ and Objective-C source files. It only makes sense to expose this function when
        compiling as part of an Objective-C source file.
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent): Modified to take the modifier flags held down
        when the platform touch event was received and pass them through to the base constructor.
        (WebKit::webEventModifierFlags): Added. Converts from the platform-speciifc UIKeyModifierFlags to
        OptionSet<WebKit::WebEvent::Modifier>.
        * Shared/ios/WebIOSEventFactory.h:
        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::toUIKeyModifierFlags): Added. Converts from OptionSet<WebKit::WebEvent::Modifier>
        to the platform-specific UIKeyModifierFlags.
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction modifierFlags]): Added.
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (gestureRecognizerModifierFlags): Added.

        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        (-[WKContentView _singleTapCommited:]):
        Pass modifier flags through.

        (-[WKContentView _attemptClickAtLocation:modifierFlags:]): Added.
        (-[WKContentView actionSheetAssistant:openElementAtLocation:]): This is invoked when a person opens a link
        via the action sheet. We don't have access to the modifier flags to pass. It also seems like an implementation
        detail that this action is implemented via mouse click and we should re-evaluate this decision in light of
        the fact tht the action sheet is browser UI and we tend to be very reserved on what UI actions are visible
        to the page. On Mac, opening a link via the context menu is not visible to the page, at least from a mouse
        event perspective.
        (webEventFlagsForUIKeyModifierFlags): Added.
        (-[WKContentView _hoverGestureRecognizerChanged:]): Pass modifier flags through.
        (-[WKContentView _attemptClickAtLocation:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleTwoFingerTapAtPoint):
        (WebKit::WebPageProxy::commitPotentialTap):
        (WebKit::WebPageProxy::handleTap):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver):
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::commitPotentialTap):
        Pass modifier flags through.

2019-02-11  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Notify AVSystemController of our presenting PID before registering as a Now Playing app.
        https://bugs.webkit.org/show_bug.cgi?id=194504

        Reviewed by Eric Carlson.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::requestUserMediaAccess):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::prepareToSendUserMediaPermissionRequest): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userMediaPermissionRequestManager):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::prepareToSendUserMediaPermissionRequest): Deleted.

2019-02-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241272 and r241276.
        https://bugs.webkit.org/show_bug.cgi?id=194514

        Broke the Apple Internal build and the fix requires human
        intervention :( (Requested by dydz on #webkit).

        Reverted changesets:

        "[iOS] Mouse/Touch/Pointer events are missing modifier keys"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241272

        "Fix internal iOS build after r241272"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241276

2019-02-11  Alex Christensen  <achristensen@webkit.org>

        Fix internal iOS build after r241272
        https://bugs.webkit.org/show_bug.cgi?id=191446

        * Platform/spi/ios/UIKitSPI.h:
        Declare the _modifierFlags when using the internal SDK also.

2019-02-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        fast/forms/ios/force-gregorian-calendar-for-credit-card-expiry.html does not work on iPad
        https://bugs.webkit.org/show_bug.cgi?id=194313

        Reviewed by Tim Horton.

        Make `-dateTimePickerCalendarType` work on iPad by handling the case where the date picker control is a
        WKDateTimePopover. This fixes UIScriptController::calendarType() returning null on iPad.

        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKFormInputControl dateTimePickerCalendarType]):
        (-[WKDateTimePopover calendarType]):

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Make use of UIKit SPI to retreive the modifier flags when dispatching mouse and touch events.
        Add new WebKit SPI for iOS, -[WKNavigationAction modifierFlags], to retrieve the the modifier
        flags held when a navigation action was initiated.

        * Platform/spi/ios/UIKitSPI.h: Expose SPI.
        * Shared/NativeWebTouchEvent.h: Re-arrange macro guards so that we can expose the helper function
        WebKit::webEventModifierFlags(). This is a bit more involved that usual since this header is included
        from both C++ and Objective-C source files. It only makes sense to expose this function when
        compiling as part of an Objective-C source file.
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent): Modified to take the modifier flags held down
        when the platform touch event was received and pass them through to the base constructor.
        (WebKit::webEventModifierFlags): Added. Converts from the platform-speciifc UIKeyModifierFlags to
        OptionSet<WebKit::WebEvent::Modifier>.
        * Shared/ios/WebIOSEventFactory.h:
        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::toUIKeyModifierFlags): Added. Converts from OptionSet<WebKit::WebEvent::Modifier>
        to the platform-specific UIKeyModifierFlags.
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction modifierFlags]): Added.
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (gestureRecognizerModifierFlags): Added.

        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        (-[WKContentView _singleTapCommited:]):
        Pass modifier flags through.

        (-[WKContentView _attemptClickAtLocation:modifierFlags:]): Added.
        (-[WKContentView actionSheetAssistant:openElementAtLocation:]): This is invoked when a person opens a link
        via the action sheet. We don't have access to the modifier flags to pass. It also seems like an implementation
        detail that this action is implemented via mouse click and we should re-evaluate this decision in light of
        the fact tht the action sheet is browser UI and we tend to be very reserved on what UI actions are visible
        to the page. On Mac, opening a link via the context menu is not visible to the page, at least from a mouse
        event perspective.
        (webEventFlagsForUIKeyModifierFlags): Added.
        (-[WKContentView _hoverGestureRecognizerChanged:]): Pass modifier flags through.
        (-[WKContentView _attemptClickAtLocation:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleTwoFingerTapAtPoint):
        (WebKit::WebPageProxy::commitPotentialTap):
        (WebKit::WebPageProxy::handleTap):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver):
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::commitPotentialTap):
        Pass modifier flags through.

2019-02-11  Youenn Fablet  <youenn@apple.com>

        Filter out Overconstrainederror.constraint when getUserMedia is not granted
        https://bugs.webkit.org/show_bug.cgi?id=194240

        Reviewed by Eric Carlson.

        Make sure in UIProcess to filter out constraint if either the page was not granted gum access or it has no persistent access.

        Refactor UserMediaPermissionRequestManagerProxy to make the implementation easier to understand.

        Covered by added test.

        * UIProcess/UserMediaPermissionCheckProxy.cpp:
        (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManagerProxy::grantAccess):
        (WebKit::UserMediaPermissionRequestManagerProxy::getRequestAction):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionInvalidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionValidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
        (WebKit::UserMediaPermissionRequestManagerProxy::wasGrantedVideoOrAudioAccess):
        (WebKit::UserMediaPermissionRequestManagerProxy::computeFilteredDeviceList):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::createPermissionRequest): Deleted.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::isPending const):
        (WebKit::UserMediaPermissionRequestProxy::setEligibleVideoDeviceUIDs):
        (WebKit::UserMediaPermissionRequestProxy::setEligibleAudioDeviceUIDs):
        (WebKit::UserMediaPermissionRequestProxy::hasAudioDevice const):
        (WebKit::UserMediaPermissionRequestProxy::hasVideoDevice const):
        (WebKit::UserMediaPermissionRequestProxy::hasPersistentAccess const):
        (WebKit::UserMediaPermissionRequestProxy::setHasPersistentAccess):
        (WebKit::UserMediaPermissionRequestProxy::userMediaID const):
        (WebKit::UserMediaPermissionRequestProxy::topLevelDocumentSecurityOrigin const):
        (WebKit::UserMediaPermissionRequestProxy::userMediaDocumentSecurityOrigin const):
        (WebKit::UserMediaPermissionRequestProxy::userRequest const):
        (WebKit::UserMediaPermissionRequestProxy::setDeviceIdentifierHashSalt):
        (WebKit::UserMediaPermissionRequestProxy::deviceIdentifierHashSalt const):
        (WebKit::UserMediaPermissionRequestProxy::audioDevice const):
        (WebKit::UserMediaPermissionRequestProxy::videoDevice const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        * UIProcess/WebPageProxy.h:

2019-02-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Do not try to create empty egl windows
        https://bugs.webkit.org/show_bug.cgi?id=194497

        Reviewed by Žan Doberšek.

        In AcceleratedSurfaceWPE we ensure the size we pass to wpe is at least 0x0, but wl_egl_window_create() returns
        nullptr if 0 is passed as width or height. We should use at least 1x1 instead.

        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp:
        (WebKit::AcceleratedSurfaceWPE::initialize):
        (WebKit::AcceleratedSurfaceWPE::clientResize):

2019-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Do not use a sync IPC message to send the host FD to the web process
        https://bugs.webkit.org/show_bug.cgi?id=194216

        Reviewed by Darin Adler.

        It can be sent as a web page creation parameter instead.

        * PlatformWPE.cmake:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * SourcesWPE.txt:
        * UIProcess/API/wpe/CompositingManagerProxy.cpp: Removed.
        * UIProcess/API/wpe/CompositingManagerProxy.h: Removed.
        * UIProcess/API/wpe/CompositingManagerProxy.messages.in: Removed.
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::hostFileDescriptor):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend):
        * UIProcess/API/wpe/WPEView.h:
        (WKWPE::View::create):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_hostFileDescriptor):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::releaseHostFileDescriptor):
        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp:
        (WebKit::AcceleratedSurfaceWPE::AcceleratedSurfaceWPE):
        (WebKit::AcceleratedSurfaceWPE::initialize):
        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.h:
        * WebProcess/WebPage/wpe/CompositingManager.cpp: Removed.
        * WebProcess/WebPage/wpe/CompositingManager.h: Removed.

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

        [GTK][WPE] Add enable-javascript-markup setting
        https://bugs.webkit.org/show_bug.cgi?id=193439

        Reviewed by Michael Catanzaro.

        Expose JavaScriptMarkupEnabled setting in the GLib API.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_javascript_markup):
        (webkit_settings_set_enable_javascript_markup):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitSettings.h:
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt:

2019-02-10  Darin Adler  <darin@apple.com>

        Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
        https://bugs.webkit.org/show_bug.cgi?id=194485

        Reviewed by Daniel Bates.

        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::completeDeviceIdHashSaltForOriginCall): Use
        appendUnsignedAsHex instead of appendUnsigned64AsHex.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::loggingString): Use appendUnsignedAsHex and
        reinterpret_cast<uintptr_t> instead of String::format and "%p".

2019-02-10  Commit Queue  <commit-queue@webkit.org>

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

        Broke the GTK mediastream tests (Requested by philn on
        #webkit).

        Reverted changeset:

        "Filter out Overconstrainederror.constraint when getUserMedia
        is not granted"
        https://bugs.webkit.org/show_bug.cgi?id=194240
        https://trac.webkit.org/changeset/241167

2019-02-09  Darin Adler  <darin@apple.com>

        Eliminate unnecessary String temporaries by using StringConcatenateNumbers
        https://bugs.webkit.org/show_bug.cgi?id=194021

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::escapeIDForJSON): Use an ASCIILiteral to create a String.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::makeVersionedDirectoryPath): Remove String::number and let
        makeString do the conversion without allocating/destroying a String.

        * NetworkProcess/mac/RemoteNetworkingContext.mm: Removed "using namespace WebCore".
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession): Remove String::number
        and let makeString do the conversion without allocating/destroying a String.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp: Removed "using namespace WebCore".
        (WebKit::registerMDNSNameCallback): Added explicit WebCore prefix as needed.
        (WebKit::NetworkMDNSRegister::registerMDNSName): Ditto. Also remove String::number
        and let makeString do the conversion without allocating/destroying a String.

        * UIProcess/WebPageGroup.cpp:
        (WebKit::pageGroupData): Remove String::number and let makeString do the conversion
        without allocating/destroying a String.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createInspectorTargets): Ditto.
        * UIProcess/ios/WKLegacyPDFView.mm:
        (-[WKLegacyPDFView _URLForLinkAnnotation:]): Ditto.
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::uniqueWorldName): Ditto.
        * WebProcess/WebPage/WebPageInspectorTarget.cpp:
        (WebKit::WebPageInspectorTarget::identifier const): Ditto.

2019-02-09  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Fix typo in the newly added API
        https://bugs.webkit.org/show_bug.cgi?id=194472

        Reviewed by Michael Catanzaro.

        Fix a typo: enableed -> enabled.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_set_enable_back_forward_navigation_gestures):
        * UIProcess/API/gtk/WebKitSettings.h:

2019-02-08  Alex Christensen  <achristensen@webkit.org>

        Speculative fix for Mojave API test after r241223
        https://bugs.webkit.org/show_bug.cgi?id=194427

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCInitializationHandler):
        (WebKit::XPCServiceMain):
        Set the __APPLEEVENTSSERVICENAME environment variable before handling any xpc messages like we used to.
        I'll worry about making things right in the daemon later.

2019-02-08  Chris Dumez  <cdumez@apple.com>

        [WK2][macOS] Avoid creating new CVDisplayLink objects for each WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=194463

        Reviewed by Tim Horton.

        Avoid creating new CVDisplayLink objects for each WebProcess. We really only need one per
        display, creating such object is expensive and it is even worse in a PSON world where we
        swap process on navigation.

        This patch moves the DisplayLink storing from WebProcessProxy to WebProcessPool. Also,
        a DisplayLink can now be associated to several IPC connections instead of having a 1:1
        mapping. When a DisplayLink no longer has any observers, we now merely stop it instead
        of destroying it.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::startDisplayLink):
        (WebKit::WebProcessPool::stopDisplayLink):
        (WebKit::WebProcessPool::stopDisplayLinks):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::processWillShutDown):
        (WebKit::WebProcessProxy::shutDown):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::addObserver):
        (WebKit::DisplayLink::removeObserver):
        (WebKit::DisplayLink::removeObservers):
        (WebKit::DisplayLink::hasObservers const):
        (WebKit::DisplayLink::displayLinkCallback):
        * UIProcess/mac/DisplayLink.h:
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::startDisplayLink):
        (WebKit::WebProcessProxy::stopDisplayLink):

2019-02-08  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Implement back/forward touchpad gesture
        https://bugs.webkit.org/show_bug.cgi?id=193919

        Reviewed by Michael Catanzaro.

        Move ViewSnapshotStore and ViewGestureController from Cocoa/Mac directory
        to UIProcess/, also move some parts of mac/ViewGestreControllerMac.mm to
        ViewGestureController.cpp, split up Mac- and iOS-specific parts of
        ViewSnapshotStore.cpp into mac/ViewSnapshotMac.mm, then implement 2-finger
        touchpad swipe back-forward gesture for GTK based on that.

        To avoid name conflict, rename existing ViewGestureController class inside
        UIProcess/API/gtk/WebKitWebViewBase.cpp into TouchGestureController.

        Since GTK gestures can only work with 3 or 4 fingers, treat horizontal
        scrolling events as a swipe as long as there's nowhere to scroll in that
        direction and web page doesn't handle the scrolling.

        This is only allowed for touchpads, even though it can theoretically work
        with touch mice and trackpoints.

        The gesture requires every item in back-forward list to have a snapshot.
        There's already an existing infrastructure for that, so the patch changes
        a bunch of #if PLATFORM(COCOA) statements to also check for GTK platform.
        The snapshots have to be taken in sync, so the implementation draws webview
        widget into a Cairo image surface.

        The gesture is disabled by default, and can be enabled by setting the newly
        added 'enable-back-forward-navigation-gestures' property in WebKitSettings to
        true.

        Gesture drawing is implemented via Cairo. When the gesture is active, the
        actual page is drawn into a Cairo group, which is then drawn together with
        a given snapshot, as well as dimming and a drop shadow over the "lower" layer.

        Also add a memory pressure handler that clears snapshot store when low on memory.

        * DerivedSources-input.xcfilelist:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * Shared/SessionState.h: Add snapshot to back-forward items for GTK.
        * Shared/WebBackForwardListItem.h: Add snapshot to back-forward items for GTK.
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * UIProcess/API/glib/WebKitSettings.cpp:
        Added 'enable-back-forward-navigation-gestures' property for enabling the gesture.
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_back_forward_navigation_gestures): Added, GTK only.
        (webkit_settings_set_enable_back_forward_navigation_gestures): Added, GTK only.
        * UIProcess/API/glib/WebKitWebView.cpp:
        (enableBackForwardNavigationGesturesChanged): Added, GTK only.
        (webkitWebViewUpdateSettings):
        (webkitWebViewDisconnectSettingsSignalHandlers):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setViewNeedsDisplay): Redraw the whole screen instead of a region during the gesture.
        (WebKit::PageClientImpl::takeViewSnapshot): Added.
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore): Pass unhandled events to the gesture controller.
        (WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot): Redraw the widget immediately after removing snapshot.
        (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame): Added, send a notification to the gesture controller.
        (WebKit::PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame):  Send a notification to the gesture controller.
        (WebKit::PageClientImpl::didFinishLoadForMainFrame):  Send a notification to the gesture controller.
        (WebKit::PageClientImpl::didFailLoadForMainFrame):  Added, send a notification to the gesture controller.
        (WebKit::PageClientImpl::didSameDocumentNavigationForMainFrame):  Send a notification to the gesture controller.
        (WebKit::PageClientImpl::didRestoreScrollPosition):  Added, send a notification to the gesture controller.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitSettings.h:
        Add webkit_settings_get_enable_back_forward_navigation_gestures() and webkit_settings_get_enable_back_forward_navigation_gestures()
        to public API.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDraw): Pass drawing to ViewGestureController during the gesture.
        (webkitWebViewBaseScrollEvent): Pass scroll events to ViewGestureController during the gesture.
        (webkitWebViewBaseGestureController): Renamed ViewGestureController to TouchGestureController.
        (webkitWebViewBaseViewGestureController): Added.
        (webkitWebViewBaseCreateWebPage): Create an instance of ViewGestureController.
        (webkitWebViewBaseTakeViewSnapshot): Added.
        (webkitWebViewBaseDidStartProvisionalLoadForMainFrame): Added.
        (webkitWebViewBaseDidFirstVisuallyNonEmptyLayoutForMainFrame): Added.
        (webkitWebViewBaseDidFinishLoadForMainFrame): Added.
        (webkitWebViewBaseDidFailLoadForMainFrame): Added.
        (webkitWebViewBaseDidSameDocumentNavigationForMainFrame): Added.
        (webkitWebViewBaseDidRestoreScrollPosition): Added.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Mentioned the added functions in docs.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize): Move the check from WebMemoryPressureHandlerCocoa.mm here.
        * UIProcess/PageClient.h: Add takeViewSnapshot() for GTK.
        * UIProcess/ViewGestureController.cpp: Renamed from Source/WebKit/UIProcess/Cocoa/ViewGestureController.cpp.
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::~ViewGestureController):
        (WebKit::ViewGestureController::disconnectFromProcess):
        (WebKit::ViewGestureController::connectToProcess):
        (WebKit::ViewGestureController::controllerForGesture):
        (WebKit::ViewGestureController::takeNextGestureID):
        (WebKit::ViewGestureController::willBeginGesture):
        (WebKit::ViewGestureController::didEndGesture):
        (WebKit::ViewGestureController::setAlternateBackForwardListSourcePage):
        (WebKit::ViewGestureController::canSwipeInDirection const):
        (WebKit::ViewGestureController::didStartProvisionalOrSameDocumentLoadForMainFrame):
        (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame):
        (WebKit::ViewGestureController::didFirstVisuallyNonEmptyLayoutForMainFrame):
        (WebKit::ViewGestureController::didRepaintAfterNavigation):
        (WebKit::ViewGestureController::didHitRenderTreeSizeThreshold):
        (WebKit::ViewGestureController::didRestoreScrollPosition):
        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame):
        (WebKit::ViewGestureController::checkForActiveLoads):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::SnapshotRemovalTracker):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::eventsDescription):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::log const):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::resume):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::start):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::reset):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::stopWaitingForEvent):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::eventOccurred):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::cancelOutstandingEvent):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::hasOutstandingEvent):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::fireRemovalCallbackIfPossible):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::fireRemovalCallbackImmediately):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::watchdogTimerFired):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::startWatchdog):
        (WebKit::deltaShouldCancelSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::PendingSwipeTracker):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanBecomeSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::handleEvent):
        (WebKit::ViewGestureController::PendingSwipeTracker::eventWasNotHandledByWebCore):
        (WebKit::ViewGestureController::PendingSwipeTracker::tryToStartSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::reset):
        (WebKit::ViewGestureController::startSwipeGesture):
        (WebKit::ViewGestureController::isPhysicallySwipingLeft const):
        (WebKit::ViewGestureController::shouldUseSnapshotForSize):
        (WebKit::ViewGestureController::forceRepaintIfNeeded):
        (WebKit::ViewGestureController::willEndSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::requestRenderTreeSizeNotificationIfNeeded):
        * UIProcess/ViewGestureController.h: Renamed from Source/WebKit/UIProcess/Cocoa/ViewGestureController.h.
        (WebKit::ViewGestureController::wheelEventWasNotHandledByWebCore):
        (WebKit::ViewGestureController::shouldIgnorePinnedState):
        (WebKit::ViewGestureController::setShouldIgnorePinnedState):
        (WebKit::ViewGestureController::hasActiveMagnificationGesture const):
        (WebKit::ViewGestureController::setCustomSwipeViews):
        (WebKit::ViewGestureController::setCustomSwipeViewsTopContentInset):
        (WebKit::ViewGestureController::setDidMoveSwipeSnapshotCallback):
        (WebKit::ViewGestureController::backgroundColorForCurrentSnapshot const):
        (WebKit::ViewGestureController::didFinishLoadForMainFrame):
        (WebKit::ViewGestureController::didFailLoadForMainFrame):
        (WebKit::ViewGestureController::setSwipeGestureEnabled):
        (WebKit::ViewGestureController::isSwipeGestureEnabled):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::pause):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::isPaused const):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::hasRemovalCallback const):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::renderTreeSizeThreshold const):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::setRenderTreeSizeThreshold):
        (WebKit::ViewGestureController::PendingSwipeTracker::shouldIgnorePinnedState):
        (WebKit::ViewGestureController::PendingSwipeTracker::setShouldIgnorePinnedState):
        (WebKit::ViewGestureController::SwipeProgressTracker::progress const):
        (WebKit::ViewGestureController::SwipeProgressTracker::direction const):
        * UIProcess/ViewGestureController.messages.in: Renamed from Source/WebKit/UIProcess/Cocoa/ViewGestureController.messages.in.
        * UIProcess/ViewSnapshotStore.cpp: Copied from Source/WebKit/UIProcess/mac/ViewSnapshotStore.mm.
        (WebKit::ViewSnapshotStore::ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::~ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::singleton):
        (WebKit::ViewSnapshotStore::didAddImageToSnapshot):
        (WebKit::ViewSnapshotStore::willRemoveImageFromSnapshot):
        (WebKit::ViewSnapshotStore::pruneSnapshots):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        (WebKit::ViewSnapshotStore::discardSnapshotImages):
        (WebKit::ViewSnapshot::~ViewSnapshot):
        * UIProcess/ViewSnapshotStore.h: Renamed from Source/WebKit/UIProcess/mac/ViewSnapshotStore.h.
        (WebKit::ViewSnapshot::setRenderTreeSize):
        (WebKit::ViewSnapshot::renderTreeSize const):
        (WebKit::ViewSnapshot::setBackgroundColor):
        (WebKit::ViewSnapshot::backgroundColor const):
        (WebKit::ViewSnapshot::setViewScrollPosition):
        (WebKit::ViewSnapshot::viewScrollPosition const):
        (WebKit::ViewSnapshot::setDeviceScaleFactor):
        (WebKit::ViewSnapshot::deviceScaleFactor const):
        (WebKit::ViewSnapshot::surface const):
        (WebKit::ViewSnapshot::imageSizeInBytes const):
        (WebKit::ViewSnapshot::size const):
        (WebKit::ViewSnapshotStore::setDisableSnapshotVolatilityForTesting):
        (WebKit::ViewSnapshotStore::disableSnapshotVolatilityForTesting const):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::didRemoveItem): Unset snapshot for GTK.
        * UIProcess/WebMemoryPressureHandler.cpp: Copied from Source/WebKit/UIProcess/Cocoa/WebMemoryPressureHandlerCocoa.mm.
        (WebKit::installMemoryPressureHandler):
        * UIProcess/WebMemoryPressureHandler.h: Renamed from Source/WebKit/UIProcess/Cocoa/WebMemoryPressureHandlerCocoa.h.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::recordNavigationSnapshot): Take snapshots for GTK.
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp: Added. This is a port of
        UIProcess/mac/ViewGestureControllerMac.mm. SwipeProgressTracker class is a
        re-implementation of trackSwipeEventWithOptions.
        (WebKit::isEventStop):
        (WebKit::ViewGestureController::platformTeardown):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanStartSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanEndSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas):
        (WebKit::ViewGestureController::handleScrollWheelEvent):
        (WebKit::ViewGestureController::trackSwipeGesture):
        (WebKit::ViewGestureController::SwipeProgressTracker::SwipeProgressTracker):
        (WebKit::ViewGestureController::SwipeProgressTracker::startTracking):
        (WebKit::ViewGestureController::SwipeProgressTracker::reset):
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
        (WebKit::ViewGestureController::SwipeProgressTracker::startAnimation):
        (WebKit::easeOutCubic):
        (WebKit::ViewGestureController::SwipeProgressTracker::onAnimationTick):
        (WebKit::ViewGestureController::SwipeProgressTracker::endAnimation):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::handleSwipeGesture):
        (WebKit::ViewGestureController::draw):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        (WebKit::ViewGestureController::beginSimulatedSwipeInDirectionForTesting):
        (WebKit::ViewGestureController::completeSimulatedSwipeInDirectionForTesting):
        * UIProcess/gtk/ViewSnapshotStoreGtk.cpp: Renamed from Source/WebKit/UIProcess/Cocoa/WebMemoryPressureHandlerCocoa.mm.
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::hasImage const):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::imageSizeInBytes const):
        (WebKit::ViewSnapshot::size const):
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::memoryPressureMonitorDisabled): Added.
        (WebKit::WebProcessPool::platformInitialize): Install memory pressure handler.
        (WebKit::WebProcessPool::platformInitializeWebProcess): Use memoryPressureMonitorDisabled().
        * UIProcess/mac/ViewGestureControllerMac.mm:
        Moved many functions into UIProcess/ViewGestureController.cpp
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanStartSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanEndSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas):
        (WebKit::ViewGestureController::trackSwipeGesture):
        (WebKit::scrollEventCanInfluenceSwipe): Deleted.
        (WebKit::deltaShouldCancelSwipe): Deleted.
        (WebKit::ViewGestureController::PendingSwipeTracker::PendingSwipeTracker): Deleted.
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanBecomeSwipe): Deleted.
        (WebKit::ViewGestureController::PendingSwipeTracker::handleEvent): Deleted.
        (WebKit::ViewGestureController::PendingSwipeTracker::eventWasNotHandledByWebCore): Deleted.
        (WebKit::ViewGestureController::PendingSwipeTracker::tryToStartSwipe): Deleted.
        (WebKit::ViewGestureController::PendingSwipeTracker::reset): Deleted.
        (WebKit::ViewGestureController::willEndSwipeGesture): Deleted.
        (WebKit::ViewGestureController::shouldUseSnapshotForSize): Deleted.
        (WebKit::ViewGestureController::isPhysicallySwipingLeft const): Deleted.
        (WebKit::ViewGestureController::endSwipeGesture): Deleted.
        (WebKit::ViewGestureController::forceRepaintIfNeeded): Deleted.
        (WebKit::ViewGestureController::requestRenderTreeSizeNotificationIfNeeded): Deleted.
        * UIProcess/mac/ViewSnapshotStoreMac.mm: Renamed from Source/WebKit/UIProcess/mac/ViewSnapshotStore.mm.
        (WebKit::ViewSnapshotStore::snapshottingContext):
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::setSurface):
        (WebKit::ViewSnapshot::hasImage const):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::setVolatile):
        (WebKit::ViewSnapshot::asLayerContents):
        (WebKit::ViewSnapshot::asImageForTesting):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        Make SetRenderTreeSizeNotificationThreshold() cross-platform.
        (WebKit::ViewGestureGeometryCollector::ViewGestureGeometryCollector):
        (WebKit::ViewGestureGeometryCollector::computeMinimumAndMaximumViewportScales const):
        (WebKit::ViewGestureGeometryCollector::mainFrameDidLayout):
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/ViewGestureGeometryCollector.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        Start using ViewGestureGeometryCollector for GTK.
        (WebKit::WebPage::mainFrameDidLayout):
        * WebProcess/WebPage/WebPage.h:

2019-02-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to use networking daemon instead of XPC service
        https://bugs.webkit.org/show_bug.cgi?id=194427

        Reviewed by Geoffrey Garen.

        There is still work to be done, but with the proper plist it starts and loads webpages!

        * NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm:
        (WebKit::DaemonMain):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCEventHandler):
        (WebKit::XPCInitializationHandler):
        (WebKit::XPCServiceMain):
        (WebKit::XPCServiceEventHandler): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration usesNetworkingDaemon]):
        (-[_WKProcessPoolConfiguration setUsesNetworkingDaemon:]):
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::usesNetworkingDaemon const):
        * UIProcess/WebProcessPool.h:

2019-02-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241197.

        Broke iOS Simulator Debug build and casued 1 API failure on
        High Sierra

        Reverted changeset:

        "Add SPI to use networking daemon instead of XPC service"
        https://bugs.webkit.org/show_bug.cgi?id=194427
        https://trac.webkit.org/changeset/241197

2019-02-08  Beth Dakin  <bdakin@apple.com>

        Abstract and discussion comments needed for afterScreenUpdates
        https://bugs.webkit.org/show_bug.cgi?id=194442

        Reviewed by Wenson Hsieh.

        Forgot to add these comments with https://bugs.webkit.org/show_bug.cgi?id=194362
        * UIProcess/API/Cocoa/WKSnapshotConfiguration.h:

2019-02-08  Beth Dakin  <bdakin@apple.com>

        Add afterScreenUpdates to WKSnapshotConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=194362
        -and corresponding-
        <rdar://problem/40655528> Please add an "after screen updates" property to 
        WKSnapshotConfiguration (to solve blank snapshots)

        Reviewed by Tim Horton.

        This is the WebKit equivalent of - (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates;
        This makes our snapshotting API more predictable and reliable on iOS devices, 
        which is why the new configuration property defaults to YES.

        New property that defaults to YES.
        * UIProcess/API/Cocoa/WKSnapshotConfiguration.h:
        * UIProcess/API/Cocoa/WKSnapshotConfiguration.mm:
        (-[WKSnapshotConfiguration init]):
        (-[WKSnapshotConfiguration copyWithZone:]):

        When afterScreenUpdates is set, invoke the snapshot via 
        callAfterNextPresentationUpdate.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView _callCompletionHandler:withSnapshotImage:atDeviceScale:]):

2019-02-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to use networking daemon instead of XPC service
        https://bugs.webkit.org/show_bug.cgi?id=194427

        Reviewed by Geoffrey Garen.

        There is still work to be done, but with the proper plist it starts and loads webpages!

        * NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm:
        (WebKit::DaemonMain):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCEventHandler):
        (WebKit::XPCInitializationHandler):
        (WebKit::XPCServiceMain):
        (WebKit::XPCServiceEventHandler): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration usesNetworkingDaemon]):
        (-[_WKProcessPoolConfiguration setUsesNetworkingDaemon:]):
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::usesNetworkingDaemon const):
        * UIProcess/WebProcessPool.h:

2019-02-08  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix.

        r241135 modified how entitlements were built up for the macOS. Those
        changes broke the iOSMac builds. Bring back some deletions in order to
        fix iOSMac.

        * Configurations/PluginService.64.xcconfig:
        * Configurations/PluginService.entitlements: Added.
        * WebKit.xcodeproj/project.pbxproj:

2019-02-07  Chris Dumez  <cdumez@apple.com>

        Mark more heap-allocated classes as fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=194422

        Reviewed by Ryosuke Niwa.

        * NetworkProcess/NetworkLoad.cpp:
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ImportanceAssertion.h:
        * PluginProcess/PluginCreationParameters.h:
        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/WebEvent.h:
        * UIProcess/API/APIHTTPCookieStore.cpp:
        * UIProcess/API/APINotificationProvider.h:
        * UIProcess/API/Cocoa/PageLoadStateObserver.h:
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setInputDelegate:]):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/BackingStore.h:
        * UIProcess/Cocoa/AutomationClient.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.h:
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/FindClient.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/DeviceIdHashSaltStorage.h:
        * UIProcess/Downloads/DownloadProxyMap.h:
        * UIProcess/Gamepad/UIGamepad.h:
        * UIProcess/Notifications/WebNotificationProvider.h:
        * UIProcess/ProcessAssertion.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebFormClient.h:
        * UIProcess/WebGeolocationProvider.h:
        * UIProcess/WebPageProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundleBundleClient.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundleEditorClient.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageContextMenuClient.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageResourceLoadClient.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/WebRTCResolver.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebPage/DrawingArea.h:

2019-02-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WK2] Modernize code for applying autocorrection
        https://bugs.webkit.org/show_bug.cgi?id=194397

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):

        Use BlockPtr instead of temporarily storing the completion handler.

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

        Change a LegacySync to Delayed.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applyAutocorrection):
        (WebKit::WebPage::syncApplyAutocorrection):
        (WebKit::WebPage::applyAutocorrectionInternal):

2019-02-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Clicking links in Safari using Apple Pencil is much more difficult after r238475
        https://bugs.webkit.org/show_bug.cgi?id=194415
        <rdar://problem/47550281>

        Reviewed by Tim Horton.

        Fix the bug by not firing the Apple-pencil-exclusive tap gesture recognizer in the case where editable images
        are disabled. This gesture recognizer is only used for inserting editable images, and currently conflicts with
        the synthetic click gesture recognizer used to recognize clicks from generic digitizer inputs.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _stylusSingleTapRecognized:]):

2019-02-07  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Block coreservicesd in sandbox.
        https://bugs.webkit.org/show_bug.cgi?id=192670

        Reviewed by Alexey Proskuryakov.

        We should block CoreServices in newer versions of macOS. In order to achieve this we need to avoid calling
        _RegisterApplication before entering the sandbox, since this call will open up a connection to CoreServices.
        The call to _RegisterApplication is moved to ChildProcess::updateProcessName, since it is needed to
        successfully update the process name. The call to ChildProcess::updateProcessName is made after entering
        the sandbox.

        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeProcessName):
        (WebKit::WebProcess::platformInitializeProcess):
        * WebProcess/com.apple.WebProcess.sb.in:

2019-02-07  Youenn Fablet  <youenn@apple.com>

        Filter out Overconstrainederror.constraint when getUserMedia is not granted
        https://bugs.webkit.org/show_bug.cgi?id=194240

        Reviewed by Eric Carlson.

        Make sure in UIProcess to filter out constraint if either the page was not granted gum access or it has no persistent access.

        Refactor UserMediaPermissionRequestManagerProxy to make the implementation easier to understand.

        Covered by added test.

        * UIProcess/UserMediaPermissionCheckProxy.cpp:
        (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManagerProxy::grantAccess):
        (WebKit::UserMediaPermissionRequestManagerProxy::getRequestAction):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionInvalidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionValidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
        (WebKit::UserMediaPermissionRequestManagerProxy::wasGrantedVideoOrAudioAccess):
        (WebKit::UserMediaPermissionRequestManagerProxy::computeFilteredDeviceList):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::createPermissionRequest): Deleted.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::isPending const):
        (WebKit::UserMediaPermissionRequestProxy::setEligibleVideoDeviceUIDs):
        (WebKit::UserMediaPermissionRequestProxy::setEligibleAudioDeviceUIDs):
        (WebKit::UserMediaPermissionRequestProxy::hasAudioDevice const):
        (WebKit::UserMediaPermissionRequestProxy::hasVideoDevice const):
        (WebKit::UserMediaPermissionRequestProxy::hasPersistentAccess const):
        (WebKit::UserMediaPermissionRequestProxy::setHasPersistentAccess):
        (WebKit::UserMediaPermissionRequestProxy::userMediaID const):
        (WebKit::UserMediaPermissionRequestProxy::topLevelDocumentSecurityOrigin const):
        (WebKit::UserMediaPermissionRequestProxy::userMediaDocumentSecurityOrigin const):
        (WebKit::UserMediaPermissionRequestProxy::userRequest const):
        (WebKit::UserMediaPermissionRequestProxy::setDeviceIdentifierHashSalt):
        (WebKit::UserMediaPermissionRequestProxy::deviceIdentifierHashSalt const):
        (WebKit::UserMediaPermissionRequestProxy::audioDevice const):
        (WebKit::UserMediaPermissionRequestProxy::videoDevice const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        * UIProcess/WebPageProxy.h:

2019-02-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WK2] Modernize autocorrection context code
        https://bugs.webkit.org/show_bug.cgi?id=194373

        Reviewed by Tim Horton.

        * Shared/ios/WebAutocorrectionContext.h: Added.
        (WebKit::WebAutocorrectionContext::encode const):
        (WebKit::WebAutocorrectionContext::decode):

        Introduce a WebAutocorrectionContext struct that encapsulates the individual pieces of autocorrection context.
        Change to use this instead of a long list of arguments when propagating autocorrection context information over
        IPC.

        * UIProcess/AutoCorrectionCallback.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        (+[WKAutocorrectionContext autocorrectionContextWithContext:]):
        (+[WKAutocorrectionContext autocorrectionContextWithData:markedText:selectedText:afterText:selectedRangeInMarkedText:]): Deleted.

        Change this constructor to take an entire WebAutocorrectionContext.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::autocorrectionContextCallback):
        (WebKit::WebPageProxy::requestAutocorrectionContext):
        (WebKit::WebPageProxy::autocorrectionContextSync):
        (WebKit::WebPageProxy::getAutocorrectionContext): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Use Delayed instead of LegacySync.

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

        Renamed from computeAutocorrectionContext. This is now a private method on WebPage that uses the focused or main
        frame to compute and return a WebAutocorrectionContext.

        (WebKit::WebPage::requestAutocorrectionContext):
        (WebKit::WebPage::autocorrectionContextSync):

        Renamed getAutocorrectionContext to autocorrectionContextSync.

        (WebKit::computeAutocorrectionContext): Deleted.
        (WebKit::WebPage::getAutocorrectionContext): Deleted.

2019-02-07  Youenn Fablet  <youenn@apple.com>

        Simplify applyConstraints callbacks
        https://bugs.webkit.org/show_bug.cgi?id=194297

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::applyConstraints):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::applyConstraintsSucceeded):
        (WebKit::UserMediaCaptureManager::Source::applyConstraintsFailed):
        (WebKit::UserMediaCaptureManager::applyConstraintsFailed):
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2019-02-07  Brent Fulgham  <bfulgham@apple.com>

        Permit additional IOKit Properties needed by Media PlugIns on older Mac Hardware
        https://bugs.webkit.org/show_bug.cgi?id=194412
        <rdar://problem/47820615>

        Reviewed by Per Arne Vollan.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:

2019-02-07  Brent Fulgham  <bfulgham@apple.com>

        Permit additional IOKit Properties needed by older Mac Hardware
        https://bugs.webkit.org/show_bug.cgi?id=194410
        <rdar://problem/47820620>

        Reviewed by Per Arne Vollan.

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

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

        Rename the TAKE_DOWNLOAD_ASSERTION macro.

        Rubberstamped by Andy Estes.

        * NetworkProcess/Downloads/DownloadMap.cpp:
        * NetworkProcess/Downloads/DownloadMap.h:

2019-02-07  Keith Rollin  <krollin@apple.com>

        Fix XCBuild issue related to codesigning WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=193799
        <rdar://problem/47533890>

        Reviewed by Brent Fulgham.

        Building with XCBuild enabled results in the error message "cannot
        read entitlement data" when trying to codesign the macOS XPC
        processes. The reason for this error message is that there is a build
        step that deletes any previous "stale" generated .xcent file before
        building up a new one. With XCBuild enabled, the build steps got
        re-ordered, such that the step that deletes this file could get
        executed after the steps that build up the file. The built-up set of
        entitlements is now gone, and the build process fails when `codesign`
        tries to access it.

        The apparent quick-fix to this problem -- of tweaking dependencies so
        that the build steps execute in the desired order -- wouldn't work
        with XCBuild. Establishing these dependencies would require both
        having multiple build phases produce the same .xcent file as output,
        as well as a build phase that has this file as an input and an output.
        XCBuild either forbids or frowns upon these configurations.

        Ultimately, the solution that worked was to take over complete control
        of the codesigning process. This means (a) not specifying a base
        .entitlements file that XCode uses to start with (and which was
        subsequently altered via custom build scripts), (b) not letting XCode
        automatically and silently inject a 'get-task-all' entitlement used to
        facilitate debugging (we now add that entitlement by hand), and (c)
        building up all of our entitlements by hand via a single custom
        script. Because of the addition of this custom script, many other
        scripts and entitlements files could now be removed.

        * Configurations/BaseXPCService.xcconfig:
        * Configurations/Databases-iOS.entitlements: Removed.
        * Configurations/Network-OSX-restricted.entitlements: Removed.
        * Configurations/Network-OSX-sandbox.entitlements: Removed.
        * Configurations/Network-OSX.entitlements: Removed.
        * Configurations/NetworkService.xcconfig:
        * Configurations/PluginService.64.xcconfig:
        * Configurations/PluginService.entitlements: Removed.
        * Configurations/WebContent-OSX-sandbox.entitlements: Removed.
        * Configurations/WebContent-OSX.entitlements: Removed.
        * Configurations/WebContent-or-Plugin-OSX-restricted.entitlements: Removed.
        * Configurations/WebContentService.xcconfig:
        * Scripts/copy-webcontent-resources-to-private-headers.sh:
        * Scripts/process-entitlements.sh: Added.
        * Scripts/process-network-sandbox-entitlements.sh: Removed.
        * Scripts/process-webcontent-or-plugin-entitlements.sh: Removed.
        * Scripts/process-webcontent-sandbox-entitlements.sh: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2019-02-07  Alex Christensen  <achristensen@webkit.org>

        Fix internal build after r241127
        https://bugs.webkit.org/show_bug.cgi?id=191394

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:
        Add some (un)availability macros.

2019-02-07  Youenn Fablet  <youenn@apple.com>

        Make to clear sources from UserMediaCaptureManagerProxy and UserMediaCaptureManager when no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=194312

        Reviewed by Eric Carlson.

        Sources in UserMediaCaptureManager and Proxy are never removed once added to their HashMap.
        Use the 'ended' mechanism to do the clean-up on WebProcess side.
        As part of this clean-up, send IPC to UIProcess to do clean-up on proxy side.
        On WebProcess crash case, clean-up the proxy as well.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManagerProxy::end):
        (WebKit::UserMediaCaptureManagerProxy::clear):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::sourceEnded):
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2019-02-07  Alex Christensen  <achristensen@webkit.org>

        Print backgrounds preference should be honored instead of WKWebViewConfiguration value
        https://bugs.webkit.org/show_bug.cgi?id=194364
        <rdar://problem/47627599>

        Reviewed by Tim Horton.

        Without this patch, changing the preference for printing the background has no effect.
        This patch fixes that, and I verified it manually by checking "Print backgrounds" in Safari's print menu.
        Unfortunately, the only way to test this is actually printing because only values from WebPageProxy::preferences
        or WebPageProxy::configuration's preferences are exposed to the API, but values from WebPageProxy::preferencesStore
        are used when printing.  Actually printing verifies this change fixes the bug.

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

2019-02-07  Chris Dumez  <cdumez@apple.com>

        Mark DisplayLink as fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=194400

        Reviewed by Geoffrey Garen.

        * UIProcess/mac/DisplayLink.h:

2019-02-07  Per Arne Vollan  <pvollan@apple.com>

        [macOS] API test times out after r241026
        https://bugs.webkit.org/show_bug.cgi?id=194372

        Reviewed by Alex Christensen.

        The API test TestWebKitAPI.RenderingProgress.FirstMeaningfulPaint times out after r241026.
        A new function pointer, layoutMilestones, is added to WKBundlePageLoaderClient, in order
        for clients to decide which milestones they would like to listen for.

        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (layoutMilestones):
        (setUpPageLoaderClient):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::layoutMilestones const):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:

2019-02-07  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKBundlePageSetDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=191394

        Reviewed by Dean Jackson.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetDefersLoading):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _defersLoading]):
        (-[WKWebProcessPlugInBrowserContextController _setDefersLoading:]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

2019-02-07  Alex Christensen  <achristensen@webkit.org>

        Digital crown should scroll safe browsing warning on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=194363
        <rdar://problem/47348124>

        Reviewed by Wenson Hsieh.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingWarning:completionHandler:]):
        (-[WKSafeBrowsingWarning addContent]):

2019-02-07  Alex Christensen  <achristensen@webkit.org>

        Shrink and hyphenate safe browsing warning text on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=194361
        <rdar://problem/47466549>

        Reviewed by Geoffrey Garen.

        Some internationalizations use long words that didn't fit on small watches.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (fontOfSize):
        (-[WKSafeBrowsingWarning addContent]):
        (-[WKSafeBrowsingTextView initWithAttributedString:forWarning:]):

2019-02-07  Miguel Gomez  <magomez@igalia.com>

        [WPE] Implement GStreamer based holepunch
        https://bugs.webkit.org/show_bug.cgi?id=193715

        Reviewed by Xabier Rodriguez-Calvar.

        Add a new parameter to the calls of TextureMapper::drawSolidColor().

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):

2019-02-06  Benjamin Poulain  <benjamin@webkit.org>

        Unreviewed, rolling out r240759 and r240944.

        Some timer uses are done off the main thread, WebCore::Timer
        cannot be used

        Reverted changesets:

        "<rdar://problem/47570443> Responsiveness timers are too
        expensive for frequent events"
        https://bugs.webkit.org/show_bug.cgi?id=194003
        https://trac.webkit.org/changeset/240759

        "Use deferrable timer to restart the Responsiveness Timer on
        each wheel event"
        https://bugs.webkit.org/show_bug.cgi?id=194135
        https://trac.webkit.org/changeset/240944

2019-02-06  chris fleizach  <cfleizach@apple.com>

        AX:  com.apple.WebKit.WebContent at WebKit: -[WKAccessibilityWebPageObjectBase axObjectCache]
        https://bugs.webkit.org/show_bug.cgi?id=194306
        <rdar://problem/47764549>

        Reviewed by Zalan Bujtas.

        Check the page reference is still valid.
        Modernize code in this area.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:

2019-02-06  Daniel Bates  <dabates@apple.com>

        Move toNSEventModifierFlags() and toNSButtonNumber() to WebEventFactory.mm
        https://bugs.webkit.org/show_bug.cgi?id=194321

        Reviewed by Jer Noble.

        Move some code to WebEventFactory so that it can be shared by both WKNavigationAction.mm
        and UIDelegate.mm among other benefits.

        * Shared/mac/WebEventFactory.h:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::toNSEventModifierFlags):
        (WebKit::WebEventFactory::toNSButtonNumber):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction modifierFlags]):
        (-[WKNavigationAction buttonNumber]):
        (toNSEventModifierFlags): Deleted.
        (toNSButtonNumber): Deleted.
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::mouseDidMoveOverElement):
        (WebKit::toNSEventModifierFlags): Deleted.

2019-02-06  Andy Estes  <aestes@apple.com>

        [Payment Request] It should be possible to require a phonetic name for shipping contacts
        https://bugs.webkit.org/show_bug.cgi?id=194311
        <rdar://46733045>

        Reviewed by Alex Christensen.

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::supportsVersion): Deleted.
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

2019-02-06  Keith Rollin  <krollin@apple.com>

        Really enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194357
        <rdar://problem/47861231>

        Reviewed by Chris Dumez.

        Bug 194124 was supposed to enable the automatic checking and
        regenerating of .xcfilelist files during the build. While related
        changes were included in that patch, the change to actually enable the
        operation somehow was omitted. This patch actually enables the
        operation. The check-xcfilelist.sh scripts now check
        WK_DISABLE_CHECK_XCFILELISTS, and if it's "1", opts-out the developer
        from the checking.

        * Scripts/check-xcfilelists.sh:

2019-02-06  John Wilander  <wilander@apple.com>

        Forward Ad Click Attribution data from HTMLAnchorElement::handleClick() to WebKit::NavigationActionData
        https://bugs.webkit.org/show_bug.cgi?id=194325
        <rdar://problem/47840283>

        Reviewed by Chris Dumez.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
            Now holds an optional WebCore::AdClickAttribution object.

2019-02-06  Daniel Bates  <dabates@apple.com>

        Fix the Apple Internal build. See <rdar://problem/47860943> for more details.

        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm:
        (-[WKFullscreenStackView init]):

2019-02-06  Daniel Bates  <dabates@apple.com>

        Standardize on ControlKey instead of CtrlKey
        https://bugs.webkit.org/show_bug.cgi?id=194317

        Reviewed by Tim Horton.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):
        (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        (WebKit::handleKeyPress):

2019-02-06  Per Arne Vollan  <pvollan@apple.com>

        Roll out parts of r238819 since it is a PLT performance regression.
        https://bugs.webkit.org/show_bug.cgi?id=194346

        Unreviewed performance fix.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFinishLoadForFrame):
        (globalObjectIsAvailableForFrame):
        (didRemoveFrameFromHierarchy):
        (didCommitLoadForFrame):
        (didFinishDocumentLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didFailLoadWithErrorForFrame):
        (didSameDocumentNavigationForFrame):
        (didLayoutForFrame):
        (didReachLayoutMilestone):
        (didFirstVisuallyNonEmptyLayoutForFrame):
        (didHandleOnloadEventsForFrame):
        (userAgentForURL):
        (setUpPageLoaderClient):
        (willSendRequestForFrame):
        (didInitiateLoadForResource):
        (didFinishLoadForResource):
        (didFailLoadForResource):
        (setUpResourceLoadClient):
        (-[WKWebProcessPlugInBrowserContextController setLoadDelegate:]):
        (ResourceLoadClient::ResourceLoadClient): Deleted.
        (ResourceLoadClient::loadDelegate const): Deleted.
        (ResourceLoadClient::pluginContextController const): Deleted.
        (PageLoaderClient::PageLoaderClient): Deleted.
        (PageLoaderClient::loadDelegate const): Deleted.
        (PageLoaderClient::pluginContextController const): Deleted.
        (PageLoaderClient::didStartProvisionalLoadForFrame): Deleted.
        (PageLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame): Deleted.
        (PageLoaderClient::didFinishLoadForFrame): Deleted.
        (PageLoaderClient::globalObjectIsAvailableForFrame): Deleted.
        (PageLoaderClient::didRemoveFrameFromHierarchy): Deleted.
        (PageLoaderClient::didCommitLoadForFrame): Deleted.
        (PageLoaderClient::didFinishDocumentLoadForFrame): Deleted.
        (PageLoaderClient::didFailProvisionalLoadWithErrorForFrame): Deleted.
        (PageLoaderClient::didFailLoadWithErrorForFrame): Deleted.
        (PageLoaderClient::didSameDocumentNavigationForFrame): Deleted.
        (PageLoaderClient::didLayoutForFrame): Deleted.
        (PageLoaderClient::didReachLayoutMilestone): Deleted.
        (PageLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame): Deleted.
        (PageLoaderClient::layoutMilestones const): Deleted.
        (PageLoaderClient::didHandleOnloadEventsForFrame): Deleted.
        (PageLoaderClient::userAgentForURL const): Deleted.
        (ResourceLoadClient::willSendRequestForFrame): Deleted.
        (ResourceLoadClient::didInitiateLoadForResource): Deleted.
        (ResourceLoadClient::didFinishLoadForResource): Deleted.
        (ResourceLoadClient::didFailLoadForResource): Deleted.

2019-02-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r240785): [SOUP] Broke cookie persistent storage
        https://bugs.webkit.org/show_bug.cgi?id=194209

        Reviewed by Carlos Garcia Campos.

        I missed a spot when moving the persistent storage parameters from NetworkProcess to
        NetworkSession. They have to be initialized separately for the default session.

        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2019-02-05  Alex Christensen  <achristensen@webkit.org>

        Stop using blobRegistry in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=194027

        Reviewed by Youenn Fablet.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerFileBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURLOptionallyFileBacked):
        (WebKit::NetworkBlobRegistry::registerBlobURLForSlice):
        (WebKit::NetworkBlobRegistry::unregisterBlobURL):
        (WebKit::NetworkBlobRegistry::blobSize):
        (WebKit::NetworkBlobRegistry::writeBlobsToTemporaryFiles):
        (WebKit::NetworkBlobRegistry::writeBlobToFilePath):
        (WebKit::NetworkBlobRegistry::connectionToWebProcessDidClose):
        (WebKit::NetworkBlobRegistry::filesInBlob):
        (WebKit::NetworkBlobRegistry::singleton): Deleted.
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        (WebKit::NetworkBlobRegistry::blobRegistry):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL):
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        (WebKit::NetworkConnectionToWebProcess::filesInBlob):
        (WebKit::NetworkConnectionToWebProcess::blobRegistry):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob):
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::initialize):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::removeNetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkBlobRegistry):
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/PreconnectTask.cpp:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):

2019-02-05  Daniel Bates  <dabates@apple.com>

        Fix a typo in r241006. Substitute Modifier for Modifiers.

        * Shared/mac/NativeWebGestureEventMac.mm:
        (WebKit::NativeWebGestureEvent::NativeWebGestureEvent):

2019-02-05  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build following r241000
        (https://bugs.webkit.org/show_bug.cgi?id=194241)

        Substitute OptionSet<WebEvent::Modifier> for Modifiers.

        * Shared/mac/NativeWebGestureEventMac.mm:
        (WebKit::NativeWebGestureEvent::NativeWebGestureEvent):
        * Shared/mac/WebGestureEvent.h:
        (WebKit::WebGestureEvent::WebGestureEvent):

2019-02-05  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240984.

        Revision casued two API timeouts

        Reverted changeset:

        "Stop using blobRegistry in NetworkProcess"
        https://bugs.webkit.org/show_bug.cgi?id=194027
        https://trac.webkit.org/changeset/240984

2019-02-05  Youenn Fablet  <youenn@apple.com>

        UserMediaPermissionRequestManagerProxy lambdas should check for 'this' being valid
        https://bugs.webkit.org/show_bug.cgi?id=194246

        Reviewed by Eric Carlson.

        With PSON enabled, the manager proxy can be destroyed.
        It is thus important for its callbacks to check for 'this' to be valid.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):

2019-02-05  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build following r241000
        (https://bugs.webkit.org/show_bug.cgi?id=194241)

        Substitute WebEvent::Modifier::CapsLockKey for WebEvent::CapsLockKey.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::modifiersForEvent):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::modifiersForEvent):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toNSEventModifierFlags):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::protocolModifierToWebEventModifier):
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::modifiersToEventState):
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::toNSEventModifierFlags):

2019-02-05  Daniel Bates  <dabates@apple.com>

        Make WebEvent::Modifiers an OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=194241

        Reviewed by Simon Fraser.

        Use an OptionSet to represent the bitmask of keyboard modifier flags. This improves type safety
        and makes debugging more enjoyable because our LLDB pretty-printers have built-in support for
        OptionSet.

        While I am at it, make WebEvent::Modifier an enum class. It is currently an enum. This makes
        this enum more closely match WebCore::PlatformEvent::Modifier.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::WebEvent):
        * Shared/WebEvent.h:
        (WebKit::WebEvent::shiftKey const):
        (WebKit::WebEvent::controlKey const):
        (WebKit::WebEvent::altKey const):
        (WebKit::WebEvent::metaKey const):
        (WebKit::WebEvent::capsLockKey const):
        (WebKit::WebEvent::modifiers const):
        (WebKit::WebTouchEvent::WebTouchEvent):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::WebMouseEvent):
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::WebTouchEvent):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::modifiersForEvent):
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/ios/WebIOSEventFactory.mm:
        (modifiersForEvent):
        (WebIOSEventFactory::createWebKeyboardEvent):
        (WebIOSEventFactory::createWebMouseEvent):
        * Shared/libwpe/WebEventFactory.cpp:
        (WebKit::modifiersForEventModifiers):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::modifiersForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * Shared/win/WebEventFactory.cpp:
        (WebKit::modifiersForEvent):
        (WebKit::modifiersForCurrentKeyState):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * UIProcess/API/APINavigationAction.h:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::mouseDidMoveOverElement):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toNSEventModifierFlags):
        * UIProcess/API/glib/WebKitPrivate.cpp:
        (toPlatformModifiers):
        * UIProcess/API/glib/WebKitPrivate.h:
        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewMouseTargetChanged):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::simulateMouseInteraction):
        (WebKit::protocolModifierToWebEventModifier):
        (WebKit::WebAutomationSession::performMouseInteraction):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::modifiersToEventState):
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        * UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp:
        (WebKit::modifiersToEventState):
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::toNSEventModifierFlags):
        (WebKit::UIDelegate::UIClient::mouseDidMoveOverElement):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::mouseDidMoveOverElement):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::modifiersForNavigationAction):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
        (WebKit::InjectedBundleNavigationAction::modifiers const):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::mouseDidMoveOverElement):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::showContextMenuAtPoint):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::createWebEvent const):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::simulateMouseDown):
        (WebKit::WebPage::simulateMouseUp):
        (WebKit::WebPage::simulateMouseMotion):

2019-02-05  Tim Horton  <timothy_horton@apple.com>

        Reproducible crash under WKShareSheet presentWithParameters when cancelling a share
        https://bugs.webkit.org/show_bug.cgi?id=194301
        <rdar://problem/47719379>

        Reviewed by Beth Dakin.

        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet presentWithParameters:completionHandler:]):
        NSSharingServicePicker's delegate callbacks can be called synchronously.
        We release the WKShareSheet (which holds our reference to the NSSharingServicePicker)
        under sharingServicePicker:didChooseSharingService:. On older versions of macOS,
        there was nothing keeping the NSSharingServicePicker alive inside
        showRelativeToRect:ofView:preferredEdge:, thus the whole chain of references would
        fall and result in sending a message to a released NSSharingServicePicker.
        To resolve this, keep an extra reference to the WKShareSheet until
        presentation is complete.

2019-02-05  Keith Rollin  <krollin@apple.com>

        Enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194124
        <rdar://problem/47721277>

        Reviewed by Tim Horton.

        Bug 193790 add a facility for checking -- during build time -- that
        any needed .xcfilelist files are up-to-date and for updating them if
        they are not. This facility was initially opt-in by setting
        WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
        the process seemed robust. Its now time to enable this facility and
        make it opt-out. If there is a need to disable this facility, set and
        export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
        running `make` or `build-webkit`, or before running Xcode from the
        command line.

        Additionally, remove the step that generates a list of source files
        going into the UnifiedSources build step. It's only necessarily to
        specify Sources.txt and SourcesCocoa.txt as inputs.

        * UnifiedSources-input.xcfilelist: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2019-02-05  Brady Eidson  <beidson@apple.com>

        Add a new DownloadMap type that manages taking an assertion automatically.
        https://bugs.webkit.org/show_bug.cgi?id=194294

        Reviewed by Alex Christensen.

        If we don't need the download assertion, we use a vanilla HashMap like today.
        If we need the download assertion, we use the new DownloadMap class instead.

        The new DownloadMap is a wrapper around a HashMap that also creates/destroys the assertion as needed.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::dataTaskBecameDownloadTask):
        (WebKit::DownloadManager::downloadFinished):
        * NetworkProcess/Downloads/DownloadManager.h:

        * NetworkProcess/Downloads/DownloadMap.cpp: Added.
        (WebKit::DownloadMap::get const):
        (WebKit::DownloadMap::isEmpty const):
        (WebKit::DownloadMap::size const):
        (WebKit::DownloadMap::contains const):
        (WebKit::DownloadMap::add):
        (WebKit::DownloadMap::remove):
        * NetworkProcess/Downloads/DownloadMap.h: Added.

        * Sources.txt:

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):

        * WebKit.xcodeproj/project.pbxproj:

2019-02-05  Brady Eidson  <beidson@apple.com>

        Fix iOS simulator build after r240954

        Unreviewed.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion): Implement the new constructor.

2019-02-05  Alex Christensen  <achristensen@webkit.org>

        Stop using blobRegistry in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=194027

        Reviewed by Youenn Fablet.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerFileBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURLOptionallyFileBacked):
        (WebKit::NetworkBlobRegistry::registerBlobURLForSlice):
        (WebKit::NetworkBlobRegistry::unregisterBlobURL):
        (WebKit::NetworkBlobRegistry::blobSize):
        (WebKit::NetworkBlobRegistry::writeBlobsToTemporaryFiles):
        (WebKit::NetworkBlobRegistry::writeBlobToFilePath):
        (WebKit::NetworkBlobRegistry::connectionToWebProcessDidClose):
        (WebKit::NetworkBlobRegistry::filesInBlob):
        (WebKit::NetworkBlobRegistry::singleton): Deleted.
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        (WebKit::NetworkBlobRegistry::blobRegistry):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL):
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        (WebKit::NetworkConnectionToWebProcess::filesInBlob):
        (WebKit::NetworkConnectionToWebProcess::blobRegistry):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob):
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::initialize):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::removeNetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkBlobRegistry):
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/PreconnectTask.cpp:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):

2019-02-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r240742.

        Causes crashes on iOS simulator.

        Reverted changeset:

        "[iOS] Keyups for non-modifier keys identified as "Dead" when
        not focused in a content-editable element"
        https://bugs.webkit.org/show_bug.cgi?id=192824
        https://trac.webkit.org/changeset/240742

2019-02-05  Alex Christensen  <achristensen@webkit.org>

        Protect globalWebSocketStreamMap with a Lock
        https://bugs.webkit.org/show_bug.cgi?id=194224
        <rdar://problem/47581081>

        Reviewed by Ryosuke Niwa.

        * WebProcess/Network/WebSocketStream.cpp:
        (WebKit::WebSocketStream::streamWithIdentifier):
        (WebKit::WebSocketStream::networkProcessCrashed):
        (WebKit::WebSocketStream::WebSocketStream):
        (WebKit::WebSocketStream::~WebSocketStream):

2019-02-04  Alex Christensen  <achristensen@webkit.org>

        Add Networking Daemon skeleton
        https://bugs.webkit.org/show_bug.cgi?id=194278

        Reviewed by Zalan Bujtas.

        Daemon skeletons? This is spooky stuff.

        * NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.h: Added.
        * NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm: Added.
        (WebKit::DaemonMain):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::restrictRequestReferrerToOriginIfNeeded):
        * Shared/API/Cocoa/WKMain.h:
        * Shared/API/Cocoa/WKMain.mm:
        (WKDaemonMain):
        * Shared/EntryPointUtilities/Cocoa/AuxiliaryProcessMain.cpp:
        (main):
        * SourcesCocoa.txt:
        * UnifiedSources-input.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:

2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink size of VM by lazily allocating IsoSubspaces for non-common types
        https://bugs.webkit.org/show_bug.cgi?id=193993

        Reviewed by Keith Miller.

        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        * WebProcess/Plugins/Netscape/JSNPObject.h:

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

        Move some macOS/iOS scrolling code into the scrolling/cocoa directory
        https://bugs.webkit.org/show_bug.cgi?id=194245

        Reviewed by Zalan Bujtas.

        Use PLATFORM(MAC), not !PLATFORM(IOS_FAMILY).

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

2019-02-04  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Add webkit_uri_for_display for GTK and WPE.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitURIUtilities.cpp: Added.
        (webkit_uri_for_display):
        * UIProcess/API/gtk/WebKitURIUtilities.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:
        * UIProcess/API/wpe/WebKitURIUtilities.h: Added.
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt:
        * UIProcess/API/wpe/docs/wpe-docs.sgml:
        * UIProcess/API/wpe/webkit.h:

2019-02-04  Alex Christensen  <achristensen@webkit.org>

        Move XPCService main to a shared file calling a C function
        https://bugs.webkit.org/show_bug.cgi?id=194256

        Reviewed by Brady Eidson.

        This not only reduces a few kilobytes of duplicated binary from the XPCService executables,
        It will allow me to introduce a new kind of executable which will need to parse argv and call a different C function.
        This is similar to r236075 but more general.

        * Shared/API/Cocoa/WKMain.h: Added.
        * Shared/API/Cocoa/WKMain.mm: Added.
        (WKXPCServiceMain):
        * Shared/EntryPointUtilities/Cocoa/AuxiliaryProcessMain.cpp: Added.
        (main):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (main): Deleted.
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-02-04  Alex Christensen  <achristensen@webkit.org>

        Make MessageSender functions const
        https://bugs.webkit.org/show_bug.cgi?id=194247

        Reviewed by Brady Eidson.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::messageSenderConnection const):
        (WebKit::Download::messageSenderDestinationID const):
        (WebKit::Download::messageSenderConnection): Deleted.
        (WebKit::Download::messageSenderDestinationID): Deleted.
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::messageSenderConnection const):
        (WebKit::PendingDownload::messageSenderDestinationID const):
        (WebKit::PendingDownload::messageSenderConnection): Deleted.
        (WebKit::PendingDownload::messageSenderDestinationID): Deleted.
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::messageSenderConnection const):
        (WebKit::WebIDBConnectionToClient::messageSenderConnection): Deleted.
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::messageSenderConnection const):
        (WebKit::NetworkResourceLoader::messageSenderConnection): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSocketStream.cpp:
        (WebKit::NetworkSocketStream::messageSenderConnection const):
        (WebKit::NetworkSocketStream::messageSenderDestinationID const):
        (WebKit::NetworkSocketStream::messageSenderConnection): Deleted.
        (WebKit::NetworkSocketStream::messageSenderDestinationID): Deleted.
        * NetworkProcess/NetworkSocketStream.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::messageSenderConnection const):
        (WebKit::WebSWServerToContextConnection::messageSenderDestinationID const):
        (WebKit::WebSWServerToContextConnection::messageSenderConnection): Deleted.
        (WebKit::WebSWServerToContextConnection::messageSenderDestinationID): Deleted.
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * Platform/IPC/MessageSender.h:
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::messageSenderConnection const):
        (WebKit::AuxiliaryProcess::messageSenderDestinationID const):
        (WebKit::AuxiliaryProcess::messageSenderConnection): Deleted.
        (WebKit::AuxiliaryProcess::messageSenderDestinationID): Deleted.
        * Shared/AuxiliaryProcess.h:
        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::messageSenderConnection const):
        (WebKit::WebConnectionToWebProcess::messageSenderDestinationID const):
        (WebKit::WebConnectionToWebProcess::messageSenderConnection): Deleted.
        (WebKit::WebConnectionToWebProcess::messageSenderDestinationID): Deleted.
        * UIProcess/WebConnectionToWebProcess.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::messageSenderConnection const):
        (WebKit::WebPageProxy::messageSenderDestinationID const):
        (WebKit::WebPageProxy::messageSenderConnection): Deleted.
        (WebKit::WebPageProxy::messageSenderDestinationID): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::messageSenderConnection const):
        (WebKit::WebIDBConnectionToServer::messageSenderConnection): Deleted.
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::messageSenderConnection const):
        (WebKit::WebResourceLoader::messageSenderDestinationID const):
        (WebKit::WebResourceLoader::messageSenderConnection): Deleted.
        (WebKit::WebResourceLoader::messageSenderDestinationID): Deleted.
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebSocketStream.cpp:
        (WebKit::WebSocketStream::messageSenderConnection const):
        (WebKit::WebSocketStream::messageSenderDestinationID const):
        (WebKit::WebSocketStream::messageSenderConnection): Deleted.
        (WebKit::WebSocketStream::messageSenderDestinationID): Deleted.
        * WebProcess/Network/WebSocketStream.h:
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::messageSenderConnection const):
        (WebKit::WebConnectionToUIProcess::messageSenderDestinationID const):
        (WebKit::WebConnectionToUIProcess::messageSenderConnection): Deleted.
        (WebKit::WebConnectionToUIProcess::messageSenderDestinationID): Deleted.
        * WebProcess/WebConnectionToUIProcess.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::messageSenderConnection const):
        (WebKit::WebPage::messageSenderDestinationID const):
        (WebKit::WebPage::messageSenderConnection): Deleted.
        (WebKit::WebPage::messageSenderDestinationID): Deleted.
        * WebProcess/WebPage/WebPage.h:

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

        Take additional process assertion while downloading.
        <rdar://problem/47741356> and https://bugs.webkit.org/show_bug.cgi?id=194239

        Reviewed by Chris Dumez.

        When the first download starts, grab this new assertion.
        When the last download ends, release it.

        * Configurations/Network-iOS.entitlements:

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::dataTaskBecameDownloadTask):
        (WebKit::DownloadManager::downloadFinished):
        * NetworkProcess/Downloads/DownloadManager.h:

        * Platform/spi/ios/AssertionServicesSPI.h:

        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::ProcessAssertion):
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::ProcessAssertion):

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didSetAssertionState):

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::flagsForState):
        (WebKit::reasonForState):
        (WebKit::ProcessAssertion::ProcessAssertion):

2019-02-04  Said Abou-Hallawa  <said@apple.com>

        [CG] Enable setAdditionalSupportedImageTypes for WK1
        https://bugs.webkit.org/show_bug.cgi?id=194190

        Reviewed by Tim Horton.

        Move the function webCoreStringVectorFromNSStringArray from WebKit to
        WebCore so it can be used by both WebKit and WebKitLegacy.

        * Platform/mac/StringUtilities.h:
        * Platform/mac/StringUtilities.mm:
        (WebKit::webCoreStringVectorFromNSStringArray): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):

2019-02-04  Benjamin Poulain  <benjamin@webkit.org>

        Use deferrable timer to restart the Responsiveness Timer on each wheel event
        https://bugs.webkit.org/show_bug.cgi?id=194135

        Reviewed by Simon Fraser.

        Simon Fraser suggested a neat improvement over my previous optimization
        of ResponsivenessTimer.

        Instead of reseting the deadline with every event, we can let the timer
        fire and add the missing time from the last start.

        I implemented that behavior in the new Deferrable Timer class and use
        it from ResponsivenessTimer.

        * NetworkProcess/watchos/NetworkProximityAssertion.h:
        * UIProcess/ResponsivenessTimer.h:
        * WebProcess/Plugins/PluginView.h:

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

        PageOverlayController's layers should be created lazily
        https://bugs.webkit.org/show_bug.cgi?id=194199
        rdar://problem/46571593

        Reviewed by Tim Horton.
        
        Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays()
        and use them to only parent the overlay-hosting layers when necessary.

        For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can
        simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(),
        which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer
        compositing updates that parents the layerWithDocumentOverlays().

        View overlays are added to the layer tree via the DrawingArea. When we go between having
        none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer()
        on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a
        compositing flush (this has to be done manually because view overlay layers are outside the
        subtree managed by RenderLayerCompositor).
        
        Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer;
        there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view
        overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without
        having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer().

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::attachViewOverlayGraphicsLayer):
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::attachViewOverlayGraphicsLayer):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer):
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):

2019-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, improve preprocessor guard
        https://bugs.webkit.org/show_bug.cgi?id=194166
        <rdar://problem/47694328>

        AC mode is only optional in GTK port. Requested by Zan.

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

2019-02-04  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: leak WebIDBConnectionToServer in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193688
        <rdar://problem/47353263>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        (WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):

2019-02-04  Antoine Quint  <graouts@apple.com>

        <rdar://problem/47788802>

        Unreviewed build fix.

        * Platform/spi/ios/UIKitSPI.h:

2019-02-04  Youenn Fablet  <youenn@apple.com>

        Capture state should be managed consistently when doing process swapping
        https://bugs.webkit.org/show_bug.cgi?id=194122
        <rdar://problem/47609293>

        Reviewed by Eric Carlson.

        When doing PSON, WebPageProxy::resetState is called.
        It resets the media state, but does not call the client delegates.
        Instead of directly updating the media state, call the routine used to update it so that client delegates are called.

        Covered by new API test and layout test.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mediaCaptureState]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        (WebKit::WebPageProxy::updatePlayingMediaDidChange):
        * UIProcess/WebPageProxy.h:

2019-02-04  Antoine Quint  <graouts@apple.com>

        Use a dedicated type instead of int32_t for pointer identifiers
        https://bugs.webkit.org/show_bug.cgi?id=194217

        Reviewed by Antti Koivisto.

        * Scripts/webkit/messages.py:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::cancelPointer):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::cancelPointer):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, avoid -Wswitch warnings introduced in r240880
        https://bugs.webkit.org/show_bug.cgi?id=193740
        <rdar://problem/47527267>

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

2019-02-04  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Allow pinch zoom on touchpad
        https://bugs.webkit.org/show_bug.cgi?id=194201

        Reviewed by Michael Catanzaro.

        Enable touchpad events for WebkitWebViewBase, then feed touchpad
        pinch events to GestureController.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Added GDK_TOUCHPAD_GESTURE_MASK to event mask.
        (webkitWebViewBaseEvent): Added.
        (webkit_web_view_base_class_init): Override event vfunc.

2019-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, only force settings.acceleratedCompositingEnabled() to true for Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=194166
        <rdar://problem/47694328>

        Accelerated compositing is broken for me at least. We're a long way from being able to force
        it.

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

2019-02-04  Abderrahim Kitouni  <akitouni@gnome.org>

        [GTK] Remove last python2 dependency from CMake build process
        https://bugs.webkit.org/show_bug.cgi?id=194218

        Reviewed by Michael Catanzaro.

        * InspectorGResources.cmake:

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

        Rename GraphicsLayer and PlatformCALayer type enum values to match "scroll container layer" convention
        https://bugs.webkit.org/show_bug.cgi?id=194215

        Reviewed by Frédéric Wang.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):

2019-02-03  Antti Koivisto  <antti@apple.com>

        [iOS] Tiles not created in large scrollable iframes
        https://bugs.webkit.org/show_bug.cgi?id=193665

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateBeforeChildren):

        We now use scrollContainerLayer consistently so remove the special cases.

2019-02-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] [WebKit] Assertion failures of missing networkStorageSession for storage/indexeddb tests
        https://bugs.webkit.org/show_bug.cgi?id=194141

        Reviewed by Ross Kirsling.

        Implemented WebKit::NetworkProcess::switchToNewTestingSession and
        WebKit::NetworkProcess::ensureSession for curl port.

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

2019-02-03  Simon Fraser  <simon.fraser@apple.com>

        Make setNeedsLayout on the root more explicitly about triggering its side-effects
        https://bugs.webkit.org/show_bug.cgi?id=194198

        Reviewed by Antti Koivisto.

        Call the newly named functions.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::updateScrollbars):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setHeaderBannerHeightForTesting):
        (WebKit::WebPage::setFooterBannerHeightForTesting):
        * WebProcess/WebPage/mac/PageBannerMac.mm:
        (WebKit::PageBanner::addToPage):
        (WebKit::PageBanner::detachFromPage):
        (WebKit::PageBanner::hide):

2019-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Validate navigation policy decisions to avoid crashes in continueLoadAfterNavigationPolicy
        https://bugs.webkit.org/show_bug.cgi?id=194189

        Reviewed by Geoffrey Garen.

        Pass the policy check identifier around functions and store it in PolicyDecisionSender
        so that we can send it back to WebCore with the navigation policy decision.

        We also store it in WebFrame in the case the policy decision had to be invalidated
        before the decision was received (via WebFrame::invalidatePolicyListener).

        * Scripts/webkit/messages.py:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::PolicyDecisionSender): Added PolicyCheckIdentifier as a member.
        (WebKit::WebPageProxy::PolicyDecisionSender::create):
        (WebKit::WebPageProxy::PolicyDecisionSender::send):
        (WebKit::WebPageProxy::PolicyDecisionSender::PolicyDecisionSender):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::setUpPolicyListener):
        (WebKit::WebFrame::invalidatePolicyListener):
        (WebKit::WebFrame::didReceivePolicyDecision):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceivePolicyDecision):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-02-03  Megan Gardner  <megan_gardner@apple.com>

        Turn on Smart Paste
        https://bugs.webkit.org/show_bug.cgi?id=193786

        Reviewed by Ryosuke Niwa.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::TextChecker::isSmartInsertDeleteEnabled):
        Use the flag from UIKit to determine if smart copy paste should be
        turned on.

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

        Tidy up data memebers of FrameView and related classes to shrink class sizes
        https://bugs.webkit.org/show_bug.cgi?id=194197

        Reviewed by Zalan Bujtas.

        * UIProcess/PageClient.h: Declare enum size.

2018-12-16  Darin Adler  <darin@apple.com>

        Convert additional String::format clients to alternative approaches
        https://bugs.webkit.org/show_bug.cgi?id=192746

        Reviewed by Alexey Proskuryakov.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::startWatchdog):
        Use makeString and FormattedNumber.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::getAssertion): Added a comment about an
        incorrect format specifier and left this code as is for now.

2019-02-01  David Kilzer  <ddkilzer@apple.com>

        Move soft-linking of TelephonyUtilities.framework out of TUCallSPI.h
        <https://webkit.org/b/193866>

        Reviewed by Alex Christensen.

        * Platform/mac/MenuUtilities.mm:
        - Update for rename of TUCallSPI.h to TelephonyUtilitiesSPI.h.
        - Add soft-linking code formerly in TUCallSPI.h.

2019-02-01  Alex Christensen  <achristensen@webkit.org>

        Move XPCService entry points from mac directory to new Cocoa directory
        https://bugs.webkit.org/show_bug.cgi?id=194129

        Reviewed by Chris Dumez.

        * Configurations/NetworkService.xcconfig:
        * Configurations/PluginService.64.xcconfig:
        * Configurations/WebContentService.xcconfig:
        * NetworkProcess/EntryPoint/Cocoa: Copied from Source/WebKit/NetworkProcess/EntryPoint/mac.
        * NetworkProcess/EntryPoint/mac: Removed.
        * PluginProcess/EntryPoint/Cocoa: Copied from Source/WebKit/PluginProcess/EntryPoint/mac.
        * PluginProcess/EntryPoint/mac: Removed.
        * Shared/EntryPointUtilities/Cocoa: Copied from Source/WebKit/Shared/EntryPointUtilities/mac.
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        * Shared/EntryPointUtilities/mac: Removed.
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/Cocoa: Copied from Source/WebKit/WebProcess/EntryPoint/mac.
        * WebProcess/EntryPoint/mac: Removed.

2019-02-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Consistent 1 sec hang when triggering modal alerts while handling synchronous touch events
        https://bugs.webkit.org/show_bug.cgi?id=194140
        <rdar://problem/47728098>

        Reviewed by Tim Horton.

        Currently, the UI process hangs when attempting to synchronously present modal UI from the web process while the
        UI process is waiting for sync IPC in the web process. While we have logic to generally mitigate IPC deadlock in
        this scenario by dispatching the web process' sync IPC immediately with the intention of allowing the web
        process to finish processing sync IPC (and consequently unblock the UI process), this fails in the case where
        the sync IPC message from the web process to the UI process requires main thread execution for an arbitrary
        amount of time (for instance, modal alert dialogs). In this case, we'll end up in a state where we've handled
        the web process' sync IPC in the UI process, yet we can't resume execution since the web process is still
        blocked.

        By far the most egregious scenario in which this manifests is during synchronous gesture recognizer IPC, i.e.
        grabbing position information from the UI process, and handling touch events synchronously. Luckily, these are
        also cases where (1) we know sync IPC may safely time out, and (2) the presentation of modal UI from the web
        process should cause the gesture recognizers to fail anyways. As such, we can mitigate these scenarios in the
        web process by responding to the these pending sync IPC messages *before* sending our own sync IPC to the UI
        process.

        Test: fast/events/touch/ios/show-modal-alert-during-touch-start.html

        * Shared/ios/InteractionInformationAtPosition.h:
        (WebKit::InteractionInformationAtPosition::invalidInformation):
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Add a new flag to indicate whether an interaction information response can be valid. Interaction information
        cannot be valid in the case where the interaction information request was interrupted by certain sync IPC
        messages from the web process.

        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationIgnoreSynchronousMessagingTimeoutsForTesting):
        (WKContextConfigurationSetIgnoreSynchronousMessagingTimeoutsForTesting):

        Add some testing SPI to ignore sync IPC timeouts, for the purposes of testing. Rather than use the existing
        Objective-C SPI in WKWebProcessPoolConfiguration, I decided to add C API plumbing for this flag, so that other
        non-Cocoa ports may also support the new layout test option to ignore sync IPC timeouts.

        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        (-[WKContentView _positionInformationDidChange:]):
        * 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):

        Cancel any pending sync IPC replies prior to sending sync IPC messages to the UI process which may result in
        sync IPC deadlock, by using the new helper method, sendSyncWithDelayedReply, instead of just sendSync.

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

        Add a helper to cancel pending sync messages coming in from the UI process that are being called from within
        gesture recognizer delegate hooks.

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

        Add a new helper, sendSyncWithDelayedReply, to be used when sending a sync IPC message to the UI process that
        cannot be immediately completed upon arrival. Importantly, this cancels pending sync replies, and also passes
        IPC::SendSyncOption::InformPlatformProcessWillSuspend.

        * WebProcess/WebPage/WebPage.messages.in:

        Change these from LegacySync to Delayed messages.

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

        Make this sync IPC handler (as well as WebPage::touchEventSync) store the IPC reply during the scope of the
        method, and invoke the stored reply at the end of the method if it wasn't interrupted due to something calling
        cancelGesturesBlockedOnSynchronousReplies().

        (WebKit::WebPage::positionInformation):

        Refactor getPositionInformation by pulling out the logic for building an InteractionInformationAtPosition into
        a separate helper.

        (WebKit::WebPage::requestPositionInformation):

2019-02-01  David Quesada  <david_quesada@apple.com>

        Network Process crash when resuming downloads: '-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance %p'
        https://bugs.webkit.org/show_bug.cgi?id=194144
        rdar://problem/47553456

        Reviewed by Geoffrey Garen.

        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):
            Make a mutable copy of the root object decoded from the resume data.
            It might have been originally encoded as an immutable dictionary.

2019-02-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION: Flaky ASSERTION FAILED: m_uncommittedState.state == State::Committed on http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html
        https://bugs.webkit.org/show_bug.cgi?id=193740
        <rdar://problem/47527267>

        Reviewed by Alex Christensen.

        The issue was happening when the page is triggering a cross-site navigation while in the middle of parsing. This would cause us to
        start a new provisional load in a new process before the previous process sends the DidFinishLoadForFrame() IPC to the UIProcess.
        Getting such IPC after a provisional load has started would mess up our state machine and trip assertions.

        This patch restores non-PSON behavior which is that the previous load in the old process now gets stopped so that no DidFinishLoadForFrame()
        / DidFailLoadForFrame() gets sent. To achieve this behavior, I introduced a new "StopAllLoads" PolicyAction that we now send the old
        process when the load is continuing in a new process, instead of sending it "Ignore".

        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNSURLSessionResponseDisposition):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):

2019-02-01  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; Respect the 'condition:' field in the WebPreferences.yaml when generating
        WebPreferencesStoreDefaultsMap.cpp.

        * page/SettingsBase.h:

2019-02-01  Antoine Quint  <graouts@apple.com>

        Dispatch pointercancel events when content is panned or zoomed on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193962
        <rdar://problem/47629134>

        Reviewed by Dean Jackson.

        When a user-agent-provided interaction, such as panning or zooming on iOS, uses a set of touches, we should dispatch a pointercancel
        event for the pointer ids of the touches involved. To facilitate this, we add a new method on WKContentView to cancel all the pointers
        matching active touches for a provided UIGestureRecognizer through an async IPC call into the Web process using the new method
        PointerCaptureController::cancelPointer().

        * Platform/spi/ios/UIKitSPI.h: Add the necessary forward declaration for a necessary UIKit SPI allowing us to get the set of last-seen
        UITouches by the identifier generated for the matching WebKit touch.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillBeginZooming:withView:]): Dispatch touchcancel events for all pointers involved in a pinch gesture on the
        top-level UIScrollView.
        (-[WKWebView _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]): Dispatch
        touchcancel events for all pointers involved in a pan gesture on the top-level UIScrollView. We can infer this by looking at whether the
        adjusted content offset, after accounting for the permitted touch actions, is different from the original content offset.
        * UIProcess/PageClient.h: Expose a new virtual cancelPointersForGestureRecognizer() method which will allow the iOS implementation to
        forward the call to WKContentViewInteraction.
        (WebKit::PageClient::cancelPointersForGestureRecognizer):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h: Expose the WebPageProxy such that we may access it to cancel pointers for
        a given gesture recognizer from within ScrollingTreeScrollingNodeDelegateIOS.
        (WebKit::RemoteScrollingCoordinatorProxy::webPageProxy const):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]):
        Dispatch touchcancel events for all pointers involved in a pan gesture on a nested UIScrollView. We can infer this by looking at
        whether the adjusted content offset, after accounting for the permitted touch actions, is different from the original content offset.
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillBeginZooming:withView:]): Dispatch touchcancel events for all pointers involved in a
        pinch gesture on a nested UIScrollView.
        (-[WKScrollingNodeScrollViewDelegate cancelPointersForGestureRecognizer:]):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::cancelPointersForGestureRecognizer):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::cancelPointer):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::cancelPointersForGestureRecognizer):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cancelPointersForGestureRecognizer:]): Obtain all active UITouch objects for the view and dispatch a pointercancel event,
        through the WebPageProxy, for all touches associated with the provided gesture recognizer.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::cancelPointer):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-02-01  Jer Noble  <jer.noble@apple.com>

        Make the WebKit default for media source based on the WebCore default.
        https://bugs.webkit.org/show_bug.cgi?id=194172

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setMediaSourceEnabled:]):
        (-[WKPreferences _mediaSourceEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2019-02-01  Simon Fraser  <simon.fraser@apple.com>

        Force settings.acceleratedCompositingEnabled() to true for WebKit
        https://bugs.webkit.org/show_bug.cgi?id=194166
        rdar://problem/47694328

        Reviewed by Tim Horton.

        WebKit relies on accelerated compositing for its drawing areas to function correctly,
        and sometimes clients (*cough* Safari *cough*) have bugs where they clobber the settings,
        so force this setting to be always on (and release log if this happens).

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

2019-02-01  Antti Koivisto  <antti@apple.com>

        Don't use base layer() as the scroll layer in scrolling tree.
        https://bugs.webkit.org/show_bug.cgi?id=194160

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateNode>::encode):
        (ArgumentCoder<ScrollingStateNode>::decode):
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):
        (WebKit::dump):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::commitStateBeforeChildren):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateBeforeChildren):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):

2019-02-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Improve use of SoupCookiePersistentStorageType
        https://bugs.webkit.org/show_bug.cgi?id=194103

        Reviewed by Carlos Garcia Campos.

        Turn it into an enum class, and stop casting it to and from uint32_t.

        * NetworkProcess/Cookies/WebCookieManager.h:
        * NetworkProcess/Cookies/WebCookieManager.messages.in:
        * NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * Shared/soup/SoupCookiePersistentStorageType.h:
        (): Deleted.
        * UIProcess/API/glib/WebKitCookieManager.cpp:
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/soup/WebCookieManagerProxySoup.cpp:
        (WebKit::WebCookieManagerProxy::setCookiePersistentStorage):
        (WebKit::WebCookieManagerProxy::getCookiePersistentStorage const):

2019-02-01  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Revert parts of r240811, since it causes kernel panics.
        https://bugs.webkit.org/show_bug.cgi?id=194061

        Unreviewed crash fix.

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

2019-02-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Improve use of PAL::SessionID in WebKitCookieManager
        https://bugs.webkit.org/show_bug.cgi?id=194092

        Reviewed by Carlos Garcia Campos.

        Always get it from the data store instead of assuming the default session ID, and add a
        helper function for this.

        * UIProcess/API/glib/WebKitCookieManager.cpp:
        (_WebKitCookieManagerPrivate::sessionID const):
        (_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate):
        (webkitCookieManagerCreate):
        (webkit_cookie_manager_set_persistent_storage):
        (webkit_cookie_manager_set_accept_policy):
        (webkit_cookie_manager_get_accept_policy):
        (webkit_cookie_manager_add_cookie):
        (webkit_cookie_manager_get_cookies):
        (webkit_cookie_manager_delete_cookie):

2019-01-31  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Remove unnecessary member from NetworkStorageSession.
        https://bugs.webkit.org/show_bug.cgi?id=194137

        Reviewed by Don Olmstead.

        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):

2019-01-31  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix after r240805

        This patch reverts the BlockPtr change since it breaks iOS builds.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryInterceptNavigation):

2019-01-31  Chris Dumez  <cdumez@apple.com>

        Page zoom level is lost after a process swap or a crash
        https://bugs.webkit.org/show_bug.cgi?id=194105
        <rdar://problem/47610781>

        Reviewed by Alex Christensen.

        Previously, when the client would call setPageAndTextZoomFactors() on the WebPageProxy,
        we would update the WebPageProxy's corresponding data members and send an IPC to the
        WebProcess to apply the zoom factors.

        The issue is that on process crash or process-swap, we never communicate those zoom factors
        to the new WebProcess. Even if the client were to call setPageAndTextZoomFactors() with
        the same factors again, it would be a no-op since the WebPageProxy's data members already
        reflect the expected values.

        To address the issue, pass both the page zoom and the text zoom factors to the WebProcess
        via WebPageCreationParameters. This way, there is no need to send an extra IPC and we're
        sure the WebPageProxy's factors are properly applied to the WebPage on WebContent process
        side upon creation (whether after a crash or a process swap).

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

2019-01-31  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Disable permissive call logging in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=194061

        Reviewed by Alexey Proskuryakov.

        Strict call filtering should be reenabled.

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

2019-01-31  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Crash when control-clicking or copying text rendered with a web font
        https://bugs.webkit.org/show_bug.cgi?id=193913
        <rdar://problem/47541039>

        Reviewed by Brent Fulgham.

        On older versions of macOS, allowing mach lookup to com.apple.FontObjectsServer is needed.

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

2019-01-31  Benjamin Poulain  <benjamin@webkit.org>

        Remove WKPageIsWebProcessResponsive
        https://bugs.webkit.org/show_bug.cgi?id=194096

        Reviewed by Alex Christensen.

        It is not used by any client.

        It is also bad API. It is better to let WebKit track
        responsiveness and tell the client with processDidBecomeResponsive.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageIsWebProcessResponsive): Deleted.
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isWebProcessResponsive): Deleted.
        * UIProcess/WebPageProxy.h:

2019-01-31  Alex Christensen  <achristensen@webkit.org>

        Revert r238819 which is unneeded and caused a performance regression.
        https://bugs.webkit.org/show_bug.cgi?id=192272
        <rdar://problem/46664625>

        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::didStartProvisionalLoadForFrame):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (PageLoaderClient::didStartProvisionalLoadForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didStartProvisionalLoadForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2019-01-31  Jiewen Tan  <jiewen_tan@apple.com>

        Formalize WebKitAdditions mechanism of LoadOptimizer
        https://bugs.webkit.org/show_bug.cgi?id=193886
        <rdar://problem/47696809>

        Reviewed by Brent Fulgham.

        This patch does the following few things:
        1) formalizes WebKitAdditions mechanism of LoadOptimizer;
        2) modernizes AppLinks code in tryInterceptNavigation to use BlockPtr;
        3) lets AppLinks have higher precedence than LoadOptimizer.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/LoadOptimizer.h: Removed.
        * UIProcess/Cocoa/LoadOptimizer.mm: Removed.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryOptimizingLoad):
        (WebKit::tryInterceptNavigation):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::loadOptimizer): Deleted.
        * WebKit.xcodeproj/project.pbxproj:

2019-01-31  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebProcessProxy::canTerminateChildProcess()
        https://bugs.webkit.org/show_bug.cgi?id=194094
        <rdar://problem/47580753>

        Reviewed by Ryosuke Niwa.

        If a SuspendedPageProxy gets destroyed while a WebPageProxy is waiting for its to finish to suspend,
        call the "failure to suspend" completion handler asynchronously instead of synchronouly to make sure
        the completion handler cannot try and use the suspended page proxy while it is being destroyed.

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

2019-01-31  Timothy Hatcher  <timothy@apple.com>

        Fix LSAppLink deprecation warnings.
        https://bugs.webkit.org/show_bug.cgi?id=194097

        Unreviewed build fix.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _appendOpenActionsForURL:actions:elementInfo:]):

2019-01-30  Simon Fraser  <simon.fraser@apple.com>

        [Mac] Implement basic hit testing in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=172917
        <rdar://problem/34215516>

        Reviewed by Antti Koivisto.

        Changed return types, "using namespace WebCore" in ScrollingTreeFrameScrollingNodeRemoteMac.cpp.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.h:
        * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm:
        (WebKit::ScrollerPairMac::handleWheelEvent):
        (WebKit::ScrollerPairMac::handleMouseEvent):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::handleWheelEvent):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::handleMouseEvent):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.h:

2019-01-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Move cookiePersistentStoragePath and cookiePersistentStorageType from NetworkProcess to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=194075

        Reviewed by Alex Christensen.

        Move cookiePersistentStoragePath and cookiePersistentStorageType from NetworkProcess to
        NetworkSession to reduce globals. This removes two of the six soup-specific variables in
        NetworkProcessCreationParameters

        * NetworkProcess/Cookies/WebCookieManager.h:
        * NetworkProcess/Cookies/WebCookieManager.messages.in:
        * NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitCookieManager.cpp:
        (webkit_cookie_manager_set_persistent_storage):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        (WebKit::WebsiteDataStore::platformSetParameters): Deleted.
        * UIProcess/soup/WebCookieManagerProxySoup.cpp:
        (WebKit::WebCookieManagerProxy::setCookiePersistentStorage):
        (WebKit::WebCookieManagerProxy::getCookiePersistentStorage const):
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2019-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: Crash in InteractiveUpdateHandler set by ViewGestureController::beginSwipeGesture
        https://bugs.webkit.org/show_bug.cgi?id=194083

        Reviewed by Tim Horton.

        We think this crash is a regression from r236966. Prior to r236966, we could only called
        removeSwipeSnapshot() only when m_provisionalOrSameDocumentLoadCallback was set but now
        we can call it either when m_snapshotRemovalTracker::start was called, or it had been reset.
        This can result in m_webPageProxyForBackForwardListForCurrentSwipe getting cleared before
        InteractiveUpdateHandler is called by UIGestureRecognizer, resulting in the crash.

        This patch tries to restore the behavior prior to r236966 by only invoking removeSwipeSnapshot()
        when SnapshotRemovalTracker has a valid removal callback set.

        Unfortunately no new tests since there is no reproducible test case, and neither API tests
        nor layout tests seem to have the capability to trigger swipe gestures via UIGestureRecognizer,
        which is required for this crash to occur. Notably, back-forward swipe tests I enabled in
        r240765 bypass UIKit and emulates the action instead.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        * UIProcess/Cocoa/ViewGestureController.h:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::hasRemovalCallback const):

2019-01-30  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/47570443> Responsiveness timers are too expensive for frequent events
        https://bugs.webkit.org/show_bug.cgi?id=194003

        Reviewed by Geoffrey Garen.

        The problem here is specific to wheel events.

        For every wheel event, we start a responsiveness timer and send
        a ping to the WebProcess. When the WebProcess respond, we stop the timer.

        The cost of setting up the timers adds up since we get many events.

        The first step to improve the situation was to switch ResponsivenessTimer
        to WebCore::Timer. Since WebCore::Timer reuse the same CFRunLoopTimerRef,
        we save the allocation/deallocation, insertion in the event loop, etc.

        Using WebCore::Timer saves some instructions but we were still hitting
        the kernel at 120hz to set up then kill each timer.
        The second improvement of the patch is to avoid that by not killing the timer
        when we hear back from the WebProcess.

        Instead of killing the timer, we let it run and ignore the result.
        When the next event comes, we reschedule the existing timer.
        This brings down the timers to 60Hz, the same rate as the events.

        The very last event does time out. In that case, we have a bad idle wake up:
        we wake up a sleeping CPU do do nothing.
        In the case of wheel events, this is fine since we saved a bunch of CPU already.
        For all the other cases, I kept the normal operating mode to avoid the idle wake.

        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::ResponsivenessTimer):
        (WebKit::ResponsivenessTimer::invalidate):
        (WebKit::ResponsivenessTimer::timerFired):
        (WebKit::ResponsivenessTimer::start):
        (WebKit::ResponsivenessTimer::startWithLazyStop):
        (WebKit::ResponsivenessTimer::stop):
        (WebKit::ResponsivenessTimer::processTerminated):
        (WebKit::ResponsivenessTimer::~ResponsivenessTimer): Deleted.
        * UIProcess/ResponsivenessTimer.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sendWheelEvent):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::isResponsiveWithLazyStop):
        * UIProcess/WebProcessProxy.h:

2019-01-30  Daniel Bates  <dabates@apple.com>

        [iOS] REGRESSION (r238635): Text area fails to re-focus after dismissal of keyboard on support.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=193987
        <rdar://problem/47230785>

        Reviewed by Tim Horton.

        It is unnecessary to relinquish first responder status when a user explicitly dismissing
        the keyboard. Moreover, doing so prevents key commands from being intercepted when a
        hardware keyboard is subsequently attached.
        
        Following r238635 a page becomes focused (accepting of keyboard input) and defocused
        when the WKContentView becomes first responder and resigns first responder, respectively.
        When a user explicitly dismisses the keyboard by tapping Done (iPhone) or the hide keyboard
        button (iPad) then UIKit tells WKContentView to resign its first responder status only
        to make its superview, WKWebView, first responder. When a person subsequently taps on the
        page again, the WKContentView requests to become the first responder. However changes to
        page focus are not guaranteed to be sent to the WebProcess immediately (WebPageProxy::activityStateDidChange()
        will schedule an update). In particular, they are not guaranteed to be sent before the
        WebProcess is told about a tap. Therefore, the WebProcess has out-of-date information on
        focus state of the page. Instead we should detect when WKWebView is being asked to resign
        as a result of the keyboard dismissal and refuse the request, taking care to end the current
        editing session, blur the focused element, and dismiss the on-screen keyboard.

        * Platform/spi/ios/UIKitSPI.h: Expose some SPI.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]): Register to receive notifications whenever a user
        explicitly dismisses the keyboard.
        (-[WKContentView resignFirstResponderForWebView]): If we are being asked to resign as a
        result of a user explicitly dismissing the keyboard then refuse to resign.
        (-[WKContentView _keyboardDidRequestDismissal:]): Update state, if applicable.

2019-01-30  Keith Rollin  <krollin@apple.com>

        Add default constructor for NetworkActivityTracker
        https://bugs.webkit.org/show_bug.cgi?id=194058
        <rdar://problem/47685457>

        Reviewed by Chris Dumez.

        ResourceNetworkActivityTracker has a default constructor. It also has
        a NetworkActivityTracker data member, which does not have a default
        constructor. This will cause some compilers to complain -- they can't
        default-create a ResourceNetworkActivityTracker because they can't
        default-create its data members. Address this by adding a default
        constructor for NetworkActivityTracker.

        * NetworkProcess/NetworkActivityTracker.h:

2019-01-30  Daniel Steffen  <dsteffen@apple.com>

        <rdar://problem/29471922> Safari should switch from the legacy denap SPI to handling vouchers
        https://bugs.webkit.org/show_bug.cgi?id=193992

        Reviewed by Geoffrey Garen.

        The denap SPI is deprecated.
        The new way of staying out of AppNap is through a voucher.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::readFromMachPort):
        * Platform/IPC/mac/ImportanceAssertion.h:
        (IPC::ImportanceAssertion::ImportanceAssertion):
        (IPC::ImportanceAssertion::~ImportanceAssertion):

2019-01-30  Chris Dumez  <cdumez@apple.com>

        Fix crashes when trying to ref the CallbackAggregator in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=194054

        Reviewed by Brent Fulgham.

        The callback aggregators should be ThreadSafeRefCounted since they are passed to other threads.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores):
        (WebKit::NetworkProcess::topPrivatelyControlledDomainsWithWebsiteData):

2019-01-30  Daniel Bates  <dabates@apple.com>

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        Use the same code path for key events to editable elements and non-editable elements.

        Currently we have different code paths for hardware key events depending on whether the active element
        is editable or non-editable. Historically to support dispatching DOM keyboard events for hardware key
        presses this differentiation was a necessary workaround for UIKit's event processing precedence of
        interpreting key events for system text editing commands and app commands before dispatching unhandled
        key events to WebKit. This workaround intercepted raw key UIEvents and manually reconstructed a
        WebEvent from it. However there is not enough information in an UIEvent to reconstruct a WebEvent that
        is identical to the WebEvent that UIKit would have dispatched. In particular, keyup UIEvents always have
        empty modified and unmodified input strings. The UIKit keyboard machinery maintains additional state
        that is necessary to manufacture the correct WebEvent corresponding to a UIEvent.

        As a side benefit of this change, with the exception of modifier flag changes, both hardware and software
        key events use the same code path.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shouldShowAutomaticKeyboardUI]): Extracted code from _requiresKeyboardWhenFirstResponder
        (-[WKContentView _disableAutomaticKeyboardUI]): Implement UIKit SPI to prevent showing the keyboard UI
        when there is no focused element now that we are no longer intercepting key UIEvents. Formerly the
        keyboard UI was disabled as a side effect of not becoming first responder when there was no focused
        element (by returning NO in -_requiresKeyboardWhenFirstResponder).
        (-[WKContentView _requiresKeyboardWhenFirstResponder]): Always return YES when building with USE(UIKIT_KEYBOARD_ADDITIONS)
        so that we always accept key events. Instead of selectively replying to create a keyboard as a means of
        hiding the automatic keyboard UI we now implement _disableAutomaticKeyboardUI to selectively hide the
        automatic keyboard UI.
        (-[WKContentView textInputTraits]): Do not update traits when the keyboard is going to be dismissed
        now that we require a keyboard when first responder even if the focused element is non-editable.
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]): Skip logic for re-sending UIEvents to UIKit
        as UIKit now processes the event first. This logic was necessary in order to finally allow UIKit
        its chance to interpret the UIEvent, we intercepted, for app key commands.
        (-[WKContentView _elementDidBlur]): Call [self _endEditing] so that we dismiss any open form controls
        (e.g. a <select> popover menu). Currently this happens either by -_requiresKeyboardWhenFirstResponder
        responding NO when switching to another field or pressing Tab or Shift + Tab key command, which we will
        no longer use when building with USE(UIKIT_KEYBOARD_ADDITIONS) once I land <https://bugs.webkit.org/show_bug.cgi?id=193048>.
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]): Do not assign ourself as the keyboard delegate. Otherwise,
        type ahead and tab cycling will not work. Currently type ahead and tab cycling work by using the non-
        editable code path via -_handleKeyUIEvent. Now that we no longer differentiate between key events for
        editable and non-editable elements we need to ensure that the WKContentView is the keyboard delegate
        when the popover is presented.

2019-01-30  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Sandbox fails to compile on 10.12
        https://bugs.webkit.org/show_bug.cgi?id=194035
        <rdar://problem/47651260>

        Reviewed by Brent Fulgham.

        This was caused by the commit <https://trac.webkit.org/changeset/239994>, which is only valid for
        10.14 and later.

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

2019-01-29  Conrad Shultz  <conrad_shultz@apple.com>

        Ensure image picker sourceType is set before cameraDevice
        https://bugs.webkit.org/show_bug.cgi?id=193998

        Reviewed by Beth Dakin.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]):

2019-01-30  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Load hang can occur on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=194030
        <rdar://problem/47656939>

        Reviewed by Antti Koivisto.

        We do not support having more than one WebPage in a WebProcess with the same page ID. As a result,
        if we decide to reuse an existing process on process-swap, we need to make sure that we either use
        its suspended page (when possible, meaning that it is for the right HistoryItem / page) or we need
        make sure we drop the existing suspended page for this process / pagePID combination, so that the
        WebPage on WebProcess side gets closed before we attempt to do the new load.

        We were doing this correctly in 2 places in WebProcessPool::processForNavigationInternal() but failed
        to do so in a third place, when doing back to a HistoryItem which does not have a SuspendedPage but
        whose process is still alive (presumably because it is kept alive by another suspended page). This
        patch fixes this third place to remove any suspended page in the process for the current page before
        reusing the process. An assertion was also added to the call site in
        WebPageProxy::receivedNavigationPolicyDecision() to make sure we catch this more easily in the
        future.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::WebProcessPool::removeAllSuspendedPagesForPage):
        (WebKit::WebProcessPool::hasSuspendedPageFor const):
        * UIProcess/WebProcessPool.h:

2019-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Wayland] REGRESSION(r240712): Clear the GL context if it's the current one on dispose
        https://bugs.webkit.org/show_bug.cgi?id=194024

        Reviewed by Michael Catanzaro.

        Fixes a crash in gdk_gl_context_dispose().

        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::~AcceleratedBackingStoreWayland):

2019-01-30  Antti Koivisto  <antti@apple.com>

        Crash in WebKit::RemoteLayerTreePropertyApplier::updateChildren
        https://bugs.webkit.org/show_bug.cgi?id=193897
        <rdar://problem/47427750>

        Reviewed by Simon Fraser.

        There has been some null pointer crashes where we fail to find a remote layer tree node that matches
        the transaction properties.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::updateChildren):

        Null check the nodes.

2019-01-30  Simon Fraser  <simon.fraser@apple.com>

        Add some basic geometry information to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=194002

        Reviewed by Antti Koivisto.

        Add a comment explaining why we don't need to encode/decode ParentRelativeScrollableRect.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameHostingNode>::encode):

2019-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] gdk_cairo_draw_from_gl() in AcceleratedBackingStoreWayland fails in GtkInspector's magnifier
        https://bugs.webkit.org/show_bug.cgi?id=193903

        Reviewed by Michael Catanzaro.

        The problem is that the GL context used by WaylandCompositor can't share resources with the one used by GTK+
        when painting with gdk_cairo_draw_from_gl(). Accelerated compositing in Wayland works only because
        WaylandCompositor makes the context current only once on initialization. So, when we render the first frame on
        accelerated compositing mode, GTK+ is rendering in non-GL mode, and switches to the GL mode when
        gdk_cairo_draw_from_gl() is called. Since GTK+ didn't have a GL context yet, the first frame is always rendered
        by GTK+ using the software fallback (glReadPixels). The thing is that the first time gdk_cairo_draw_from_gl() is
        called, GTK+ creates a GL context for painting that is made current, and it will remain the current one
        forever. The first frame fails to render with "GL_INVALID_OPERATION in glBindTexture(non-gen name)" because the
        texture created in WaylandCompositor GL context can't be accessed from GTK+ GL context. The following frames are
        handled with the GTK+ GL context. I would say this works by casuality and it could be the cause of other
        accelerated compositing issues in Wayland.

        We need to create our own GdkGLContext for the WebView, and use that in the WaylandCompositor. When the
        GdkGLContext is created, the GTK+ GL context for painting is used as a shared context, ensuring that resources
        created in the new context will be accessible from the painting one.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseMakeGLContextCurrent): Call AcceleratedBackingStore::makeContextCurrent().
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/AcceleratedBackingStore.h:
        (WebKit::AcceleratedBackingStore::makeContextCurrent): New virtual method only implemented by Wayland backend.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::tryEnsureGLContext): Try to create a GL context with
        gdk_window_create_gl_context(), falling back to a WebCore::GLContext if it fails or GTK+ version is not new enough.
        (WebKit::AcceleratedBackingStoreWayland::makeContextCurrent): Make the GL context current.
        (WebKit::AcceleratedBackingStoreWayland::paint): Check if we have a GdkGLContext before trying to use gdk_cairo_draw_from_gl().
        (WebKit::AcceleratedBackingStoreWayland::canGdkUseGL const): Deleted.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.h:
        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::Surface::Surface): Move the texture creation to setWebPage(), since we need the
        WebView GL context.
        (WebKit::WaylandCompositor::Surface::~Surface): Move the code to destroy GL resources to setWebPage().
        (WebKit::WaylandCompositor::Surface::setWebPage): Create the texture when a new page is set and destroy GL
        resources when unset.
        (WebKit::WaylandCompositor::Surface::prepareTextureForPainting): Make WebView GL context current.
        (WebKit::WaylandCompositor::Surface::commit): Ditto.
        (WebKit::WaylandCompositor::initializeEGL): Use a temporary GLContext.
        * UIProcess/gtk/WaylandCompositor.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::makeGLContextCurrent): Call webkitWebViewBaseMakeGLContextCurrent().

2019-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: Nullptr crash in WebPage::getPositionInformation dereferencing an input element for data list
        https://bugs.webkit.org/show_bug.cgi?id=193996

        Reviewed by Wenson Hsieh.

        Added a missing nullptr check.

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

2019-01-29  Simon Fraser  <simon.fraser@apple.com>

        Add nodes to the scrolling tree in z-index order.
        https://bugs.webkit.org/show_bug.cgi?id=192529
        <rdar://problem/47402708>

        Reviewed by Dean Jackson.

        FrameHosting nodes have layers, so need to update them.

        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

2019-01-29  Alex Christensen  <achristensen@webkit.org>

        Change NetworkConnectionToWebProcess* to NetworkConnectionToWebProcess& where possible
        https://bugs.webkit.org/show_bug.cgi?id=193974

        Reviewed by Tim Horton.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerFileBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURLOptionallyFileBacked):
        (WebKit::NetworkBlobRegistry::registerBlobURLForSlice):
        (WebKit::NetworkBlobRegistry::unregisterBlobURL):
        (WebKit::NetworkBlobRegistry::blobSize):
        (WebKit::NetworkBlobRegistry::connectionToWebProcessDidClose):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL):
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeNetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.h:

2019-01-29  Youenn Fablet  <youenn@apple.com>

        Adopt new SPI to evaluate server certificate trust
        https://bugs.webkit.org/show_bug.cgi?id=193355

        Reviewed by Alex Christensen.

        Use new SPI provided in NSURLSession to evaluate server certificates.
        If successful, let loading proceed as usual.
        Otherwise, go to the UIProcess to ask for a decision on continuing the load or not.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (canNSURLSessionTrustEvaluate):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (WebKit::NetworkSessionCocoa::continueDidReceiveChallenge):

2019-01-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * UIProcess/ios/WKDrawingCoordinator.h:
        * UIProcess/ios/WKDrawingCoordinator.mm:
        * UIProcess/ios/WKDrawingView.mm:

2019-01-29  Alex Christensen  <achristensen@webkit.org>

        Remove unused NetworkProcessProxy::writeBlobToFilePath
        https://bugs.webkit.org/show_bug.cgi?id=193990

        Reviewed by Wenson Hsieh.

        This code was only used in code that was introduced in r235202
        but that has since been refactored to not use blobs.  Its tests still pass.
        This removes the only UIProcess-controlled code that uses NetworkBlobRegistry::singleton.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::writeBlobToFilePath): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::writeToURLForFilePromiseProvider):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::writeBlobToFilePath): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::writeBlobToFilePath): Deleted.
        * UIProcess/WebPageProxy.h:

2019-01-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: expose a way of determining if a detached frontend is for a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193951
        <rdar://problem/47621366>

        Reviewed by Joseph Pecoraro.

        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::InspectionTargetType): Added.
        (WebKit::WebInspectorProxy::createFrontendWindow):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createFrontendWindow):
        (WebKit::WebInspectorProxy::platformCreateFrontendWindow):
        * UIProcess/mac/RemoteWebInspectorProxyMac.mm:
        (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow):

        * UIProcess/API/Cocoa/_WKInspectorWindow.h: Moved from UIProcess/mac/WKInspectorWindow.h.
        * UIProcess/API/Cocoa/_WKInspectorWindow.mm: Moved from UIProcess/mac/WKInspectorWindow.mm.
        (-[WKInspectorWindow isRemote]): Added.

        * Shared/API/Cocoa/_WKNSWindowExtras.mm:
        (-[NSWindow _web_isWebInspectorWindow]):

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * UnifiedSources-input.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:

2019-01-29  Alex Christensen  <achristensen@webkit.org>

        Rename ChildProcess to AuxiliaryProcess
        https://bugs.webkit.org/show_bug.cgi?id=193943

        Reviewed by Andy Estes.

        "Child" implies that there is a parent, but I'm about to introduce a type of NetworkProcess that
        doesn't always have a parent, and may have many UIProcesses that it is the auxiliary for.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/Cookies/WebCookieManager.cpp:
        * NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (WebKit::initializeAuxiliaryProcess<NetworkProcess>):
        (WebKit::initializeChildProcess<NetworkProcess>): Deleted.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::callExitSoon):
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::initializeConnection):
        (WebKit::NetworkProcess::terminate):
        (WebKit::NetworkProcess::initializeProcess):
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::NetworkProcess::initializeSandbox):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessSupplement.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::deleteOldVersions):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::initializeProcess):
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::NetworkProcess::initializeSandbox):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcess):
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::NetworkProcess::initializeSandbox):
        * NetworkProcess/soup/NetworkProcessMainSoup.cpp:
        (WebKit::initializeAuxiliaryProcess<NetworkProcess>):
        (WebKit::NetworkProcessMainUnix):
        (WebKit::initializeChildProcess<NetworkProcess>): Deleted.
        * NetworkProcess/watchos/NetworkProximityManager.h:
        * NetworkProcess/watchos/NetworkProximityManager.mm:
        (WebKit::NetworkProximityManager::NetworkProximityManager):
        * NetworkProcess/win/NetworkProcessMainWin.cpp:
        (WebKit::initializeAuxiliaryProcess<NetworkProcess>):
        (WebKit::NetworkProcessMainWin):
        (WebKit::initializeChildProcess<NetworkProcess>): Deleted.
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeProcess):
        (WebKit::PluginProcess::initializeConnection):
        (WebKit::PluginProcess::didReceiveMessage):
        (WebKit::PluginProcess::initializeProcessName):
        (WebKit::PluginProcess::initializeSandbox):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
        (WebKit::PluginProcess::initializeProcessName):
        (WebKit::PluginProcess::initializeSandbox):
        (WebKit::PluginProcess::stopRunLoop):
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix):
        * PluginProcess/unix/PluginProcessUnix.cpp:
        (WebKit::PluginProcess::platformInitializeProcess):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/AuxiliaryProcess.cpp: Copied from Source/WebKit/Shared/ChildProcess.cpp.
        (WebKit::AuxiliaryProcess::AuxiliaryProcess):
        (WebKit::AuxiliaryProcess::~AuxiliaryProcess):
        (WebKit::AuxiliaryProcess::didClose):
        (WebKit::AuxiliaryProcess::initialize):
        (WebKit::AuxiliaryProcess::setProcessSuppressionEnabled):
        (WebKit::AuxiliaryProcess::initializeProcess):
        (WebKit::AuxiliaryProcess::initializeProcessName):
        (WebKit::AuxiliaryProcess::initializeConnection):
        (WebKit::AuxiliaryProcess::addMessageReceiver):
        (WebKit::AuxiliaryProcess::removeMessageReceiver):
        (WebKit::AuxiliaryProcess::disableTermination):
        (WebKit::AuxiliaryProcess::enableTermination):
        (WebKit::AuxiliaryProcess::messageSenderConnection):
        (WebKit::AuxiliaryProcess::messageSenderDestinationID):
        (WebKit::AuxiliaryProcess::terminationTimerFired):
        (WebKit::AuxiliaryProcess::stopRunLoop):
        (WebKit::AuxiliaryProcess::platformStopRunLoop):
        (WebKit::AuxiliaryProcess::terminate):
        (WebKit::AuxiliaryProcess::shutDown):
        (WebKit::AuxiliaryProcess::registerURLSchemeServiceWorkersCanHandle const):
        (WebKit::AuxiliaryProcess::platformInitialize):
        (WebKit::AuxiliaryProcess::initializeSandbox):
        (WebKit::AuxiliaryProcess::didReceiveInvalidMessage):
        (WebKit::AuxiliaryProcess::didReceiveMemoryPressureEvent):
        (WebKit::ChildProcess::ChildProcess): Deleted.
        (WebKit::ChildProcess::~ChildProcess): Deleted.
        (WebKit::ChildProcess::didClose): Deleted.
        (WebKit::ChildProcess::initialize): Deleted.
        (WebKit::ChildProcess::setProcessSuppressionEnabled): Deleted.
        (WebKit::ChildProcess::initializeProcess): Deleted.
        (WebKit::ChildProcess::initializeProcessName): Deleted.
        (WebKit::ChildProcess::initializeConnection): Deleted.
        (WebKit::ChildProcess::addMessageReceiver): Deleted.
        (WebKit::ChildProcess::removeMessageReceiver): Deleted.
        (WebKit::ChildProcess::disableTermination): Deleted.
        (WebKit::ChildProcess::enableTermination): Deleted.
        (WebKit::ChildProcess::messageSenderConnection): Deleted.
        (WebKit::ChildProcess::messageSenderDestinationID): Deleted.
        (WebKit::ChildProcess::terminationTimerFired): Deleted.
        (WebKit::ChildProcess::stopRunLoop): Deleted.
        (WebKit::ChildProcess::platformStopRunLoop): Deleted.
        (WebKit::ChildProcess::terminate): Deleted.
        (WebKit::ChildProcess::shutDown): Deleted.
        (WebKit::ChildProcess::registerURLSchemeServiceWorkersCanHandle const): Deleted.
        (WebKit::ChildProcess::platformInitialize): Deleted.
        (WebKit::ChildProcess::initializeSandbox): Deleted.
        (WebKit::ChildProcess::didReceiveInvalidMessage): Deleted.
        (WebKit::ChildProcess::didReceiveMemoryPressureEvent): Deleted.
        * Shared/AuxiliaryProcess.h: Copied from Source/WebKit/Shared/ChildProcess.h.
        (WebKit::ChildProcess::parentProcessConnection const): Deleted.
        (WebKit::ChildProcess::messageReceiverMap): Deleted.
        (WebKit::ChildProcess::setTerminationTimeout): Deleted.
        (WebKit::ChildProcess::shouldOverrideQuarantine): Deleted.
        * Shared/AuxiliaryProcess.messages.in: Copied from Source/WebKit/Shared/ChildProcess.messages.in.
        * Shared/AuxiliaryProcessSupplement.h: Copied from Source/WebKit/Shared/ChildProcessSupplement.h.
        (WebKit::AuxiliaryProcessSupplement::~AuxiliaryProcessSupplement):
        (WebKit::ChildProcessSupplement::~ChildProcessSupplement): Deleted.
        (WebKit::ChildProcessSupplement::initializeConnection): Deleted.
        * Shared/ChildProcess.cpp: Removed.
        * Shared/ChildProcess.h: Removed.
        * Shared/ChildProcess.messages.in: Removed.
        * Shared/ChildProcessSupplement.h: Removed.
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm: Copied from Source/WebKit/Shared/Cocoa/ChildProcessCocoa.mm.
        (WebKit::AuxiliaryProcess::didReceiveInvalidMessage):
        (WebKit::ChildProcess::didReceiveInvalidMessage): Deleted.
        * Shared/Cocoa/ChildProcessCocoa.mm: Removed.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::initializeAuxiliaryProcess):
        (WebKit::XPCServiceInitializer):
        (WebKit::initializeChildProcess): Deleted.
        * Shared/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::hysteresisUpdated):
        (WebKit::m_childProcessType): Deleted.
        * Shared/WebSQLiteDatabaseTracker.h:
        * Shared/ios/AuxiliaryProcessIOS.mm: Copied from Source/WebKit/Shared/ios/ChildProcessIOS.mm.
        (WebKit::AuxiliaryProcess::platformInitialize):
        (WebKit::AuxiliaryProcess::initializeSandbox):
        (WebKit::AuxiliaryProcess::setQOS):
        (WebKit::AuxiliaryProcess::platformStopRunLoop):
        (WebKit::ChildProcess::platformInitialize): Deleted.
        (WebKit::ChildProcess::initializeSandbox): Deleted.
        (WebKit::ChildProcess::setQOS): Deleted.
        (WebKit::ChildProcess::platformStopRunLoop): Deleted.
        * Shared/ios/ChildProcessIOS.mm: Removed.
        * Shared/mac/AuxiliaryProcessMac.mm: Copied from Source/WebKit/Shared/mac/ChildProcessMac.mm.
        (WebKit::SandboxInfo::SandboxInfo):
        (WebKit::AuxiliaryProcess::launchServicesCheckIn):
        (WebKit::AuxiliaryProcess::platformInitialize):
        (WebKit::processStorageClass):
        (WebKit::sandboxDirectory):
        (WebKit::applySandbox):
        (WebKit::initializeSandboxParameters):
        (WebKit::AuxiliaryProcess::initializeSandbox):
        (WebKit::AuxiliaryProcess::stopNSAppRunLoop):
        (WebKit::AuxiliaryProcess::stopNSRunLoop):
        (WebKit::AuxiliaryProcess::platformStopRunLoop):
        (WebKit::AuxiliaryProcess::setQOS):
        (WebKit::AuxiliaryProcess::isSystemWebKit):
        (WebKit::ChildProcess::launchServicesCheckIn): Deleted.
        (WebKit::ChildProcess::platformInitialize): Deleted.
        (WebKit::ChildProcess::initializeSandbox): Deleted.
        (WebKit::ChildProcess::stopNSAppRunLoop): Deleted.
        (WebKit::ChildProcess::stopNSRunLoop): Deleted.
        (WebKit::ChildProcess::platformStopRunLoop): Deleted.
        (WebKit::ChildProcess::setQOS): Deleted.
        (WebKit::ChildProcess::isSystemWebKit): Deleted.
        * Shared/mac/ChildProcessMac.mm: Removed.
        * Shared/mac/SecItemShim.cpp:
        (WebKit::globalNetworkProcess):
        (WebKit::sendSecItemRequest):
        (WebKit::initializeSecItemShim):
        * Shared/mac/SecItemShim.h:
        * Shared/unix/AuxiliaryProcessMain.cpp: Copied from Source/WebKit/Shared/unix/ChildProcessMain.cpp.
        (WebKit::AuxiliaryProcessMainBase::parseCommandLine):
        (WebKit::ChildProcessMainBase::parseCommandLine): Deleted.
        * Shared/unix/AuxiliaryProcessMain.h: Copied from Source/WebKit/Shared/unix/ChildProcessMain.h.
        (WebKit::AuxiliaryProcessMainBase::takeInitializationParameters):
        (WebKit::initializeAuxiliaryProcess):
        (WebKit::AuxiliaryProcessMain):
        (WebKit::ChildProcessMainBase::platformInitialize): Deleted.
        (WebKit::ChildProcessMainBase::platformFinalize): Deleted.
        (WebKit::ChildProcessMainBase::takeInitializationParameters): Deleted.
        (WebKit::initializeChildProcess): Deleted.
        (WebKit::ChildProcessMain): Deleted.
        * Shared/unix/ChildProcessMain.cpp: Removed.
        * Shared/unix/ChildProcessMain.h: Removed.
        * Shared/win/AuxiliaryProcessMainWin.cpp: Copied from Source/WebKit/Shared/win/ChildProcessMainWin.cpp.
        (WebKit::AuxiliaryProcessMainBase::parseCommandLine):
        (WebKit::ChildProcessMainBase::parseCommandLine): Deleted.
        * Shared/win/ChildProcessMainWin.cpp: Removed.
        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        * UIProcess/AuxiliaryProcessProxy.cpp: Copied from Source/WebKit/UIProcess/ChildProcessProxy.cpp.
        (WebKit::AuxiliaryProcessProxy::AuxiliaryProcessProxy):
        (WebKit::AuxiliaryProcessProxy::~AuxiliaryProcessProxy):
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        (WebKit::AuxiliaryProcessProxy::connect):
        (WebKit::AuxiliaryProcessProxy::terminate):
        (WebKit::AuxiliaryProcessProxy::state const):
        (WebKit::AuxiliaryProcessProxy::sendMessage):
        (WebKit::AuxiliaryProcessProxy::addMessageReceiver):
        (WebKit::AuxiliaryProcessProxy::removeMessageReceiver):
        (WebKit::AuxiliaryProcessProxy::dispatchMessage):
        (WebKit::AuxiliaryProcessProxy::dispatchSyncMessage):
        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
        (WebKit::AuxiliaryProcessProxy::shutDownProcess):
        (WebKit::AuxiliaryProcessProxy::setProcessSuppressionEnabled):
        (WebKit::AuxiliaryProcessProxy::connectionWillOpen):
        (WebKit::ChildProcessProxy::ChildProcessProxy): Deleted.
        (WebKit::ChildProcessProxy::~ChildProcessProxy): Deleted.
        (WebKit::ChildProcessProxy::getLaunchOptions): Deleted.
        (WebKit::ChildProcessProxy::connect): Deleted.
        (WebKit::ChildProcessProxy::terminate): Deleted.
        (WebKit::ChildProcessProxy::state const): Deleted.
        (WebKit::ChildProcessProxy::sendMessage): Deleted.
        (WebKit::ChildProcessProxy::addMessageReceiver): Deleted.
        (WebKit::ChildProcessProxy::removeMessageReceiver): Deleted.
        (WebKit::ChildProcessProxy::dispatchMessage): Deleted.
        (WebKit::ChildProcessProxy::dispatchSyncMessage): Deleted.
        (WebKit::ChildProcessProxy::didFinishLaunching): Deleted.
        (WebKit::ChildProcessProxy::shutDownProcess): Deleted.
        (WebKit::ChildProcessProxy::setProcessSuppressionEnabled): Deleted.
        (WebKit::ChildProcessProxy::connectionWillOpen): Deleted.
        * UIProcess/AuxiliaryProcessProxy.h: Copied from Source/WebKit/UIProcess/ChildProcessProxy.h.
        (WebKit::AuxiliaryProcessProxy::send):
        (WebKit::AuxiliaryProcessProxy::sendSync):
        (WebKit::AuxiliaryProcessProxy::sendWithAsyncReply):
        (WebKit::ChildProcessProxy::send): Deleted.
        (WebKit::ChildProcessProxy::sendSync): Deleted.
        (WebKit::ChildProcessProxy::connection const): Deleted.
        (WebKit::ChildProcessProxy::hasConnection const): Deleted.
        (WebKit::ChildProcessProxy::processIdentifier const): Deleted.
        (WebKit::ChildProcessProxy::canSendMessage const): Deleted.
        (WebKit::ChildProcessProxy::coreProcessIdentifier const): Deleted.
        (WebKit::ChildProcessProxy::platformGetLaunchOptions): Deleted.
        (WebKit::ChildProcessProxy::sendWithAsyncReply): Deleted.
        * UIProcess/ChildProcessProxy.cpp: Removed.
        * UIProcess/ChildProcessProxy.h: Removed.
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::DownloadProxyMap):
        * UIProcess/Downloads/DownloadProxyMap.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        (WebKit::NetworkProcessProxy::createDownloadProxy):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getLaunchOptions):
        (WebKit::PluginProcessProxy::sendMemoryPressureEvent):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendMemoryPressureEvent):
        (WebKit::WebProcessPool::registerURLSchemeServiceWorkersCanHandle):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::getLaunchOptions):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::maybeShutDown):
        (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess):
        (WebKit::WebProcessProxy::shouldTerminate):
        (WebKit::WebProcessProxy::requestTermination):
        (WebKit::WebProcessProxy::canTerminateChildProcess): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UnifiedSources-input.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeProcess):
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::terminate):
        (WebKit::WebProcess::didReceiveMessage):
        (WebKit::WebProcess::initializeProcessName):
        (WebKit::WebProcess::initializeSandbox):
        (WebKit::WebProcess::platformInitializeProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcessSupplement.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeProcessName):
        (WebKit::WebProcess::platformInitializeProcess):
        (WebKit::WebProcess::stopRunLoop):
        (WebKit::WebProcess::initializeSandbox):
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainUnix):
        * WebProcess/win/WebProcessMainWin.cpp:
        (WebKit::WebProcessMainWin):
        * WebProcess/wpe/WebProcessMainWPE.cpp:
        (WebKit::WebProcessMainUnix):

2019-01-29  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION(r240553): [iOS] Crash in ScrollingTree::updateTreeFromStateNode when attempting to log in to icloud.com
        https://bugs.webkit.org/show_bug.cgi?id=193907

        Reviewed by Frédéric Wang.

        Remove encode/decode of removedNodes.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::encode const):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::dump):

2019-01-29  Brent Fulgham  <bfulgham@apple.com>

        StorageAccess API calls should be direct to the Network Process
        https://bugs.webkit.org/show_bug.cgi?id=193924
        <rdar://problem/47611249>

        Reviewed by Alex Christensen.

        Now that the ResourceLoadStatistics data lives in the Network Process, calls to Storage Access
        API should happen directly between the WebContent and Network processes.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForFrame):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage):
        (WebKit::NetworkConnectionToWebProcess::logUserInteraction):
        (WebKit::NetworkConnectionToWebProcess::logWebSocketLoading):
        (WebKit::NetworkConnectionToWebProcess::logSubresourceLoading):
        (WebKit::NetworkConnectionToWebProcess::logSubresourceRedirect):
        (WebKit::NetworkConnectionToWebProcess::requestResourceLoadStatisticsUpdate):
        (WebKit::NetworkConnectionToWebProcess::hasStorageAccess):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::requestStorageAccess):
        (WebKit::NetworkProcess::requestStorageAccessGranted):
        * NetworkProcess/NetworkProcess.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::requestStorageAccessConfirm):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestStorageAccessConfirm):
        (WebKit::WebPageProxy::hasStorageAccess): Deleted.
        (WebKit::WebPageProxy::requestStorageAccess): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hasStorageAccess):
        (WebKit::WebPage::requestStorageAccess):
        (WebKit::nextRequestStorageAccessContextId): Deleted.
        (WebKit::WebPage::storageAccessResponse): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-01-29  Chris Dumez  <cdumez@apple.com>

        Regression (r240046): [PSON] Spurious changes to [WKWebView url] and [WKWebView loading] after [WKWebView loadRequest]
        https://bugs.webkit.org/show_bug.cgi?id=193967
        <rdar://problem/47635348>

        Reviewed by Alex Christensen.

        Update WebPageProxy::receivedPolicyDecision() to no longer clear the pending URL when we send PolicyAction::Ignore to
        the old process when the load is continuing in a new process due to PSON.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        * UIProcess/WebPageProxy.h:

2019-01-29  Keith Rollin  <krollin@apple.com>

        Add .xcfilelists to Run Script build phases
        https://bugs.webkit.org/show_bug.cgi?id=193792
        <rdar://problem/47201785>

        Reviewed by Alex Christensen.

        As part of supporting XCBuild, update the necessary Run Script build
        phases in their Xcode projects to refer to their associated
        .xcfilelist files.

        Note that the addition of these files bumps the Xcode project version
        number to something that's Xcode 10 compatible. This change means that
        older versions of the Xcode IDE can't read these projects. Nor can it
        fully load workspaces that refer to these projects (the updated
        projects are shown as non-expandable placeholders). `xcodebuild` can
        still build these projects; it's just that the IDE can't open them.

        Make special accommodations for incorporating .xcfilelists from
        WebKitAdditions.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:

2019-01-29  Antti Koivisto  <antti@apple.com>

        REGRESSION (PSON): Flash on link navigation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193961
        <rdar://problem/47482507>

        Reviewed by Chris Dumez.

        The target page sends EnterAcceleratedCompositingMode message too early, before we have a valid layer tree.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::attach): Deleted.

        Not needed anymore.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::didCompletePageTransition):
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition): Deleted.

        Move message sending logic fully to TiledCoreAnimationDrawingArea.
        Unfreezing the layer tree is sufficient to trigger the message.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

        There is no need to treat process swap case differently.

        (WebKit::TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded):

        Send this after the first successful layer flush with the root layer set.

        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::attach): Deleted.

2019-01-29  Timothy Hatcher  <timothy@apple.com>

        Add back some includes that got removed at some point.
        https://bugs.webkit.org/show_bug.cgi?id=193942

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:

2019-01-29  Chris Dumez  <cdumez@apple.com>

        Make sure WTF::generateObjectIdentifier() internal counter does not get duplicated
        https://bugs.webkit.org/show_bug.cgi?id=193848

        Reviewed by Youenn Fablet.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        * UIProcess/ChildProcessProxy.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::restoreFromState):
        * UIProcess/WebProcessPool.cpp:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::addDeviceChangeObserver):

2019-01-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION (PSON): Twitter link gets stuck at t.co after navigating back in tab
        https://bugs.webkit.org/show_bug.cgi?id=193932
        <rdar://problem/47598947>

        Reviewed by Brady Eidson.

        When doing a client side redirect from origin A to origin B, we would swap process and
        create a SuspendedPageProxy and save it on the source BackForwardListItem. The issue is
        that the BackForwardList is locked for such redirect so we end up updating the current
        BackForwardListItem with origin B's URL while origin A's suspended page remained on
        the item. When going to another URL in the same origin A, we would not create a suspended
        page since no process-swap would occur. When pressing the back button, we would go back
        to the previous BackForwardListItem and use its SuspendedPageProxy, which is for the
        wrong URL (The pre-client redirect one).

        To address the issue, we no longer create a SuspendedPageProxy for cross-site client side
        redirects. There will be no way no go back to this suspended page anyway since the
        back/forward list item will be updated with the redirection URL.

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

2019-01-29  Chris Dumez  <cdumez@apple.com>

        Regression(r240046) VoiceOver is no longer working after a process swap
        https://bugs.webkit.org/show_bug.cgi?id=193953
        <rdar://problem/47612398>

        Reviewed by Alex Christensen.

        ProvisionalPageProxy used to forward the RegisterWebProcessAccessibilityToken IPC from
        the provisional WebProcess to the WebPageProxy right away. This in turn would notify
        the PageClient whose logic would rely on WebPageProxy::process(), which returns the
        committed process instead of the provisional one.

        To address the issue, the ProvisionalPageProxy now stores the token sent by the
        provisional WebProcess and we only call registerWebProcessAccessibilityToken()
        on the WebPageProxy *after* we've swapped to the provisional process.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::takeAccessibilityToken):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::commitProvisionalPage):

2019-01-28  Ryosuke Niwa  <rniwa@webkit.org>

        User agent string override for navigator.userAgent should be site specific quirks
        https://bugs.webkit.org/show_bug.cgi?id=193950

        Reviewed by Brent Fulgham.

        Renamed the various member variables, functions, properties and selectors.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setCustomJavaScriptUserAgentAsSiteSpecificQuirks:]): Renamed from setCustomJavaScriptUserAgent.
        (-[_WKWebsitePolicies customJavaScriptUserAgentAsSiteSpecificQuirks]): Renamed from customJavaScriptUserAgent.

2019-01-28  Commit Queue  <commit-queue@webkit.org>

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

        Broke Apple internal builds (Requested by rniwa on #webkit).

        Reverted changeset:

        "Add back some includes that got removed at some point."
        https://bugs.webkit.org/show_bug.cgi?id=193942
        https://trac.webkit.org/changeset/240630

2019-01-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit page WebRTC settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193863
        <rdar://problem/47572764>

        Reviewed by Joseph Pecoraro.

        * Shared/WebPreferences.yaml:
        Add page-level settings for WebRTC preferences.

2019-01-28  Ross Kirsling  <ross.kirsling@sony.com>

        Remove unnecessary `using namespace WTF`s (or at least restrict their scope).
        https://bugs.webkit.org/show_bug.cgi?id=193941

        Reviewed by Alex Christensen.

        * Shared/linux/WebMemorySamplerLinux.cpp:

2019-01-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] WebCore/platform/Process.h is conflicting with process.h
        https://bugs.webkit.org/show_bug.cgi?id=193944

        Reviewed by Ross Kirsling.

        * Shared/ChildProcess.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        * Shared/unix/ChildProcessMain.cpp:
        * UIProcess/API/APINavigation.h:
        * UIProcess/ChildProcessProxy.h:
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessProxy.h:

2019-01-28  Jon Lee  <jonlee@apple.com>

        Update Screen Capture preference
        https://bugs.webkit.org/show_bug.cgi?id=193947
        rdar://problem/47620199

        Reviewed by Youenn Fablet.

        * Shared/WebPreferences.yaml:

2019-01-28  Andy Estes  <aestes@apple.com>

        [watchOS] Enable Parental Controls content filtering
        https://bugs.webkit.org/show_bug.cgi?id=193939
        <rdar://problem/46641912>

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2019-01-28  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r236481): Move soft-linking of LocalAuthentication.framework out of LocalAuthenticationSoftLink.h
        <https://webkit.org/b/193884>

        Reviewed by Jiewen Tan.

        * SourcesCocoa.txt:
        * UnifiedSources-input.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:
        - Add LocalAuthenticationSoftLink.mm to the project.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticationSoftLink.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticationSoftLink.mm: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticationSoftLink.h.
        - Move soft-linking implementation to
          LocalAuthenticationSoftLink.mm.

2019-01-28  Timothy Hatcher  <timothy@apple.com>

        Add back some includes that got removed at some point.
        https://bugs.webkit.org/show_bug.cgi?id=193942

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:

2019-01-28  Timothy Hatcher  <timothy@apple.com>

        Make it easier for non-Apple ports to enable dark mode CSS support.
        https://bugs.webkit.org/show_bug.cgi?id=193882

        Reviewed by Megan Gardner.

        Make modern WebKit code for dark mode usable by other ports, to match
        the WebCore parts that have been cross-platform all along.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::effectiveAppearanceIsDark const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::useDarkAppearance const):
        (WebKit::WebPageProxy::effectiveAppearanceDidChange):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):
        (WebKit::WebPage::setUseDarkAppearance):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-01-28  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to _WKUserContentExtensionStore to retrieve its underlying WKContentRuleListStore
        https://bugs.webkit.org/show_bug.cgi?id=193927

        Reviewed by Tim Horton.

        This is useful for clients migrating from _WKUserContentExtensionStore to the modern
        WKContentRuleList* APIs.

        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (-[_WKUserContentExtensionStore _contentRuleListStore]):
        * UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h:

2019-01-28  David Kilzer  <ddkilzer@apple.com>

        Move soft-linking of ManagedConfiguration.framework out of ManagedConfigurationSPI.h
        <https://webkit.org/b/193868>

        Reviewed by Daniel Bates.

        * Platform/spi/ios/ManagedConfigurationSPI.h:
        - Remove soft-linking code from header.
        - Add PLATFORM(IOS_FAMILY) && !PLATFORM(IOSMAC) guard.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView _defineForWebView:]):
        - Add soft-linking code formerly in ManagedConfigurationSPI.h.
        - Change MCFeatureDefinitionLookupAllowed to use soft-link
          function getMCFeatureDefinitionLookupAllowed() to remove the
          #define.

2019-01-28  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r240348): Loading netflix home page panics device
        https://bugs.webkit.org/show_bug.cgi?id=193936

        Reviewed by Alexey Proskuryakov.

        Temporarily enable permissive call filtering.

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

2019-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Attempting to open a Keynote document to iCloud.com from iCloud Files causes crash
        https://bugs.webkit.org/show_bug.cgi?id=193456
        <rdar://problem/47275642>

        Reviewed by Brent Fulgham.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        Allow access to iconservices.

2019-01-28  Daniel Bates  <dabates@apple.com>

        [iOS] Make Window virtual key code computation match Mac
        https://bugs.webkit.org/show_bug.cgi?id=193452

        Reviewed by Ryosuke Niwa.

        Compute the Windows virtual key code from the WebEvent.

        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebKeyboardEvent):

2019-01-28  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r240498): Storage Access API prompts result is not remembered
        https://bugs.webkit.org/show_bug.cgi?id=193922
        <rdar://problem/47608767>

        Reviewed by Chris Dumez.

        The refactoring in r240498 bypassed bookkeeping in ResourceLoadStatisticsMemoryStore
        that kept track of whether a successful user prompt had been encountered. This
        patch corrects this codepath so the user is not prompted repeatedly after approving
        use of the Storage Access API.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess): Switch from Move operator to
        const reference to allow the method to be called by the NetworkProcess.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::grantStorageAccess): Request access through the WebResourceLoadStatistics
        object, rather than jumping directly to the NetworkStorageSession.

2019-01-28  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebPageProxy::didStartProgress()
        https://bugs.webkit.org/show_bug.cgi?id=193915
        <rdar://problem/47560907>

        Reviewed by Alex Christensen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        Make sure we destroy the ProvisionalPageProxy if the page gets closed as we do not want to keep receiving
        IPC after this or even worse, commit the provisional page.

        (WebKit::WebPageProxy::didStartProgress):
        Add an assertion in didStartProgress() to make sure we do not receive this IPC after the page has been
        closed.

2019-01-28  Antoine Quint  <graouts@apple.com>

        Limit user-agent interactions based on the touch-action property on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193447

        Unreviewed build fix.

        * UIProcess/API/Cocoa/WKWebView.mm:

2019-01-28  Antoine Quint  <graouts@apple.com>

        Limit user-agent interactions based on the touch-action property on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193447

        Unreviewed build fix.

        * UIProcess/ios/WKContentViewInteraction.mm:

2019-01-28  Brent Fulgham  <bfulgham@apple.com>

        Remove the UIProcess components of the ResourceLoadStatistics code
        https://bugs.webkit.org/show_bug.cgi?id=193303
        <rdar://problem/47160073>

        Reviewed by Chris Dumez.

        Now that the ResourceLoadStatistics code is running in the NetworkProcess, we can get rid
        of the UIProcess copies of these routines.

        Tested by existing ResourceLoadStatistics and StorageAccess tests.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::updateClientSideCookiesAgeCap):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        (WebKit::WebResourceLoadStatisticsStore::callRemoveDomainsHandler):
        (WebKit::WebResourceLoadStatisticsStore::logTestingEvent):
        (WebKit::WebResourceLoadStatisticsStore::notifyResourceLoadStatisticsProcessed):
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores):
        (WebKit::WebResourceLoadStatisticsStore::topPrivatelyControlledDomainsWithWebsiteData):
        (WebKit::WebResourceLoadStatisticsStore::sendDiagnosticMessageWithValue const):
        (WebKit::WebResourceLoadStatisticsStore::notifyPageStatisticsTelemetryFinished const):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores): Deleted.
        (WebKit::WebProcessProxy::topPrivatelyControlledDomainsWithWebsiteData): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataForTopPrivatelyControlledDomains):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::setMaxStatisticsEntries):
        (WebKit::WebsiteDataStore::setPruneEntriesDownTo):
        (WebKit::WebsiteDataStore::setGrandfatheringTime):
        (WebKit::WebsiteDataStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::WebsiteDataStore::dumpResourceLoadStatistics):
        (WebKit::WebsiteDataStore::isPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode):
        (WebKit::WebsiteDataStore::isVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebsiteDataStore::setSubframeUnderTopFrameOrigin):
        (WebKit::WebsiteDataStore::isRegisteredAsSubFrameUnder):
        (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::isRegisteredAsRedirectingTo):
        (WebKit::WebsiteDataStore::clearPrevalentResource):
        (WebKit::WebsiteDataStore::resetParametersToDefaultValues):
        (WebKit::WebsiteDataStore::submitTelemetry):
        (WebKit::WebsiteDataStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebsiteDataStore::scheduleCookieBlockingUpdate):
        (WebKit::WebsiteDataStore::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::WebsiteDataStore::setLastSeen):
        (WebKit::WebsiteDataStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebsiteDataStore::setNotifyPagesWhenTelemetryWasCaptured):
        (WebKit::WebsiteDataStore::hasStorageAccess):
        (WebKit::WebsiteDataStore::requestStorageAccess):
        (WebKit::WebsiteDataStore::grantStorageAccess):
        (WebKit::WebsiteDataStore::setTimeToLiveUserInteraction):
        (WebKit::WebsiteDataStore::logUserInteraction):
        (WebKit::WebsiteDataStore::hasHadUserInteraction):
        (WebKit::WebsiteDataStore::clearUserInteraction):
        (WebKit::WebsiteDataStore::setGrandfathered):
        (WebKit::WebsiteDataStore::webProcessWillOpenConnection):
        (WebKit::WebsiteDataStore::webProcessDidCloseConnection):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebsiteDataStore::didCreateNetworkProcess):
        (WebKit::WebsiteDataStore::topPrivatelyControlledDomainsWithWebsiteData): Deleted.
        (WebKit::WebsiteDataStore::removeDataForTopPrivatelyControlledDomains): Deleted.
        (WebKit::WebsiteDataStore::setCacheMaxAgeCap): Deleted.
        (WebKit::WebsiteDataStore::updatePrevalentDomainsToBlockCookiesFor): Deleted.
        (WebKit::WebsiteDataStore::setAgeCapForClientSideCookies): Deleted.
        (WebKit::WebsiteDataStore::hasStorageAccessForFrameHandler): Deleted.
        (WebKit::WebsiteDataStore::grantStorageAccessHandler): Deleted.
        (WebKit::WebsiteDataStore::removeAllStorageAccessHandler): Deleted.
        (WebKit::WebsiteDataStore::removePrevalentDomains): Deleted.
        (WebKit::WebsiteDataStore::isGrandfathered): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2019-01-28  Antoine Quint  <graouts@apple.com>

        Limit user-agent interactions based on the touch-action property on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193447
        <rdar://problem/47283874>

        Reviewed by Antti Koivisto and Simon Fraser.

        Handle the "none", "pan-x", "pan-y" and "pinch-zoom" values for the touch-action property by querying the scrolling tree whenever a touch begins
        to identify whether its point is contained within the region of an element with a non-auto touch-action property. If it is, we use the list of
        permitted touch actions such to then customize the behavior of the nearest scroll view to pan or zoom only as instructed.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TouchActionData>::encode):
        (IPC::ArgumentCoder<TouchActionData>::decode):
        (IPC::ArgumentCoder<EventTrackingRegions>::encode):
        (IPC::ArgumentCoder<EventTrackingRegions>::decode):
        (IPC::ArgumentCoder<Region>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Account for panning constraints set on the content view to prevent deceleration
        to pan the view if it ought not.
        (-[WKWebView _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]): Implement an additional
        UIScrollView delegation method to apply the panning constraints set on the content view while panning.
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::touchActionDataAtPoint const):
        (WebKit::RemoteScrollingCoordinatorProxy::touchActionDataForScrollNodeID const):
        (WebKit::RemoteScrollingCoordinatorProxy::setTouchDataForTouchIdentifier):
        (WebKit::RemoteScrollingCoordinatorProxy::clearTouchDataForTouchIdentifier):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Apply the same logic as in WKWebView.
        (-[WKScrollingNodeScrollViewDelegate _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]): Apply
        the same logic as in WKWebView.
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::touchActionData const):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isScrollingOrZooming const):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView preventsPanningInXAxis]):
        (-[WKContentView preventsPanningInYAxis]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _handleTouchActionsForTouchEvent:]): As we process touches, check whether there are touch actions set for this touch's points' locations. Based
        on those touch actions, either setDefaultPrevented on the _touchEventGestureRecognizer if the touch action is "none" or selectively disable panning and zooming.
        (-[WKContentView _resetPanningPreventionFlags]):
        (-[WKContentView _didEndScrollingOrZooming]):

2019-01-28  Antti Koivisto  <antti@apple.com>

        WebUserContentController::removeUserScriptMessageHandlerInternal may deref and delete itself
        https://bugs.webkit.org/show_bug.cgi?id=193901
        <rdar://problem/47338669>

        Reviewed by David Kilzer.

        Don't know how to repro.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeUserScriptMessageHandlerInternal):

        Calling userMessageHandlers.removeFirstMatching() may remove the last ref to this
        (because WebUserMessageHandlerDescriptorProxy refs WebUserContentController).
        Fix by protecting this over the function.

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::writeHeaders): Use makeString.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential): Use string concatentation.

        * UIProcess/WebInspectorUtilities.cpp:
        (WebKit::inspectorPageGroupIdentifierForPage): Use makeString.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching): Ditto.
        (WebKit::WebProcessPool::startMemorySampler): Ditto.

2019-01-27  Jiewen Tan  <jiewen_tan@apple.com>

        Use a load optimizer for some sites
        https://bugs.webkit.org/show_bug.cgi?id=193881
        <rdar://problem/46325455>

        Reviewed by Brent Fulgham.

        We will try to speed up some sites with a dedicated load optimizer. The load optimizer lives
        within the WebsiteDataStore as one client instance should have only one and it should live
        as long as the client lives. How does the load optimizer work? It intercepts every load in
        the navigation state. If a request meets some requirements, it will then fetch the request
        from its own cache. Once the fetch succeeds, the original load will be ignored and the
        optimizer will display the cached content.

        Covered by API tests.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/LoadOptimizer.h: Added.
        * UIProcess/Cocoa/LoadOptimizer.mm: Added.
        * UIProcess/Cocoa/MediaCaptureUtilities.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryInterceptNavigation):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::tryAppLink): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::loadOptimizer):
        * WebKit.xcodeproj/project.pbxproj:

2019-01-25  Brian Burg  <bburg@apple.com>

        Web Automation: add support for simulating single touches to Automation.performInteractionSequence
        https://bugs.webkit.org/show_bug.cgi?id=193852
        <rdar://problem/28360781>

        Reviewed by Joseph Pecoraro and Simon Fraser.

        This patch makes it possible to simulate touches via the Actions API. The approach is to
        use a stripped down version of HIDEventGenerator to send HID events to the UIWindow.
        The initial version supports a single touch point; this may be expanded if needed, but
        so far it hasn't been an impediment when running desktop-oriented WebDriver test suites.

        As part of implementing this support, I went through and added [somewhat obnoxious] ENABLE()
        guards so that we don't mistakenly compile mouse support on iOS and touch on Mac,
        and vice versa. Each of the interaction methods---touch, mouse, keyboard---can be independently
        compiled out. If none is supported (i.e., Windows), then we don't even try to compile
        platformSimulate*Interaction methods or SimulatedInputDispatcher. This allows WebAutomationSession
        to not include members and code that are never going to be used on a particular platform.

        This functionality is covered by existing WebDriver test suites that use Element Click command.
        Additional tests that explicitly include 'touch' pointerType will be submitted to WPT later.

        * UIProcess/Automation/Automation.json: Update comment.

        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        - Add appropriate guards for code specific to each interaction type.
        - Handle SimulatedInputSourceType::Touch and call out to dispatch events.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::WebAutomationSession):
        (WebKit::WebAutomationSession::terminate):
        (WebKit::WebAutomationSession::willShowJavaScriptDialog):
        (WebKit::WebAutomationSession::mouseEventsFlushedForPage):
        (WebKit::WebAutomationSession::keyboardEventsFlushedForPage):
        (WebKit::WebAutomationSession::willClosePage):
        Add appropriate guards for code specific to each interaction type.

        (WebKit::WebAutomationSession::isSimulatingUserInteraction const):
        Add new hook so that we can detect when a touch simulation is in progress.
        We don't rely on checking WebKit's event queue, so use a flag.

        (WebKit::WebAutomationSession::simulateTouchInteraction):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::cancelInteractionSequence):
        (WebKit::WebAutomationSession::performInteractionSequence):
        - Add appropriate guards for code specific to each interaction type.
        - Bail out immediately if a requested interaction type is not supported.
        - Shim Touch input type to Mouse if mouse is not supported but touches are.
        Nearly all WebDriver tests in the wild will be requesting a 'mouse' pointerType,
        so this is necessary for compatibility. It's easier to shim at this level than try
        to implement platformSimulateMouseInteraction for iOS because
        platformSimulateMouseinteraction does not use a completion handler but the iOS
        implementation would require that.

        (WebKit::WebAutomationSession::platformSimulateMouseInteraction): Deleted.
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction): Deleted.
        - Remove these stubs. Platform methods of this class are no longer being filled
        with stubs on unsupported platforms because we expect the command to fail earlier.

        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::WebAutomationSession::platformSimulateTouchInteraction):
        - Add appropriate guards for code specific to each interaction type.
        - Implement new platform method to simulate touches. This uses _WKTouchEventGenerator.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        Add appropriate guards for code specific to each interaction type.

        * UIProcess/_WKTouchEventGenerator.h: Added.
        * UIProcess/_WKTouchEventGenerator.mm: Added.
        (simpleCurveInterpolation):
        (calculateNextCurveLocation):
        (delayBetweenMove):
        (+[_WKTouchEventGenerator sharedTouchEventGenerator]):
        (+[_WKTouchEventGenerator nextEventCallbackID]):
        (-[_WKTouchEventGenerator init]):
        (-[_WKTouchEventGenerator dealloc]):
        (-[_WKTouchEventGenerator _createIOHIDEventType:]):
        (-[_WKTouchEventGenerator _sendHIDEvent:]):
        (-[_WKTouchEventGenerator _sendMarkerHIDEventWithCompletionBlock:]):
        (-[_WKTouchEventGenerator _updateTouchPoints:count:]):
        (-[_WKTouchEventGenerator touchDownAtPoints:touchCount:]):
        (-[_WKTouchEventGenerator touchDown:touchCount:]):
        (-[_WKTouchEventGenerator touchDown:]):
        (-[_WKTouchEventGenerator liftUpAtPoints:touchCount:]):
        (-[_WKTouchEventGenerator liftUp:touchCount:]):
        (-[_WKTouchEventGenerator liftUp:]):
        (-[_WKTouchEventGenerator moveToPoints:touchCount:duration:]):
        (-[_WKTouchEventGenerator touchDown:completionBlock:]):
        (-[_WKTouchEventGenerator liftUp:completionBlock:]):
        (-[_WKTouchEventGenerator moveToPoint:duration:completionBlock:]):
        (-[_WKTouchEventGenerator receivedHIDEvent:]):
        Copied and simplified from HIDEventGenerator in WebKitTestRunner.

        * WebKit.xcodeproj/project.pbxproj:
        Add _WKTouchEventGenerator.{h,mm} and make it a private header. The client needs to
        route received HID events to -receivedHIDEvent: in order to detect when the marker
        HID event has been processed (and thus the interaction is completed).

        * config.h: Add ENABLE(WEBDRIVER_*_INTERACTIONS) macros here.

2019-01-26  Simon Fraser  <simon.fraser@apple.com>

        Have composited RenderIFrame layers make FrameHosting scrolling tree nodes to parent the iframe's scrolling node
        https://bugs.webkit.org/show_bug.cgi?id=193879

        Reviewed by Antti Koivisto.

        Need a specialization of dump() for ScrollingStateFrameHostingNode to avoid infinite recursion.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::dump):

2019-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Introduce a static accessibility tree
        https://bugs.webkit.org/show_bug.cgi?id=193348
        <rdar://problem/47203295>

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]):

2019-01-26  Simon Fraser  <simon.fraser@apple.com>

        Allow scrolling tree nodes to exist in a detached state
        https://bugs.webkit.org/show_bug.cgi?id=193754

        Reviewed by Zalan Bujtas.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):

2019-01-25  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r238818): Snapshot is removed too late after swiping back on Twitter
        https://bugs.webkit.org/show_bug.cgi?id=193860
        <rdar://problem/47535022>

        Reviewed by Antti Koivisto.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didStartProvisionalOrSameDocumentLoadForMainFrame):
        (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame):
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame):
        * UIProcess/Cocoa/ViewGestureController.h:
        Treat provisional load and same document load the same: they already both
        unpause the snapshot removal tracker, request render tree size notifications,
        but same-document navigation was missing the call to dispatchAfterEnsuringDrawing
        and thus would get stuck waiting for RepaintAfterNavigation.

2019-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        Need a mechanism to override navigator.userAgent
        https://bugs.webkit.org/show_bug.cgi?id=193762
        <rdar://problem/47504939>

        Reviewed by Brent Fulgham.

        This patch adds a new _WKWebsitePolicies SPI to specify the user agent string returned by
        navigator.userAgent without affecting the user agent string used to send network requests.

        Tests: WebKit.WebsitePoliciesCustomJavaScriptUserAgent
               WebKit.WebsitePoliciesCustomUserAgents

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setCustomJavaScriptUserAgent:]):
        (-[_WKWebsitePolicies customJavaScriptUserAgent]):

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit page settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193813
        <rdar://problem/47359510>

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebPage/WebInspectorUI.h:
        (WebKit::WebInspectorUI::isRemote() const): Added.
        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        (WebKit::RemoteWebInspectorUI::isRemote() const): Added.

2019-01-25  Dean Jackson  <dino@apple.com>

        REGRESSION: Some USDz from 3rd party websites don't go directly to AR QL
        https://bugs.webkit.org/show_bug.cgi?id=193831
        <rdar://problem/47399263>

        Reviewed by Chris Dumez.

        A System Preview (<a rel="ar">) displays in a modal and doesn't trigger
        a navigation. If the link was cross origin, it was causing a process swap,
        which meant that the response defaulted back to a navigation.

        The fix is to not cause a PSON when the navigation is a system preview.

        * UIProcess/API/APINavigation.h:
        (API::Navigation::shouldForceDownload const): This is now just tracking
        the "download" attribute, and not including System Preview.
        (API::Navigation::isSystemPreview const): New method to check for a
        navigation triggered as a System Preview.
        * UIProcess/WebPageProxy.cpp: Move the code from receivedPolicyDecision to
        receivedNavigationPolicyDecision, so that downloads and System Previews are
        detected before we decide to change process.
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::receivedPolicyDecision):

2019-01-25  Tim Horton  <timothy_horton@apple.com>

        Find-in-page on nyt.com scrolls around without touching the screen when find holes are visible
        https://bugs.webkit.org/show_bug.cgi?id=193853

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::updateFindIndicator):
        There is no reason to scroll/zoom to the find indicator just because the
        holes are up, we should only do it on initial indicator presentation.
        This was a mistake in r178755 that was previously never exercised because
        isShowingOverlay was always false.

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Check .xcfilelists" build phase
        https://bugs.webkit.org/show_bug.cgi?id=193790
        <rdar://problem/47201374>

        Reviewed by Alex Christensen.

        Support for XCBuild includes specifying inputs and outputs to various
        Run Script build phases. These inputs and outputs are specified as
        .xcfilelist files. Once created, these .xcfilelist files need to be
        kept up-to-date. In order to check that they are up-to-date or not,
        add an Xcode build step that invokes an external script that performs
        the checking. If the .xcfilelists are found to be out-of-date, update
        them, halt the build, and instruct the developer to restart the build
        with up-to-date files.

        At this time, the checking and regenerating is performed only if the
        WK_ENABLE_CHECK_XCFILELISTS environment variable is set to 1. People
        who want to use this facility can set this variable and test out the
        checking/regenerating. Once it seems like there are no egregious
        issues that upset a developer's workflow, we'll unconditionally enable
        this facility.

        * Scripts/check-xcfilelists.sh: Added.
        * WebKit.xcodeproj/project.pbxproj:

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        Move logic from ChildProcess::setApplicationIsDaemon to NetworkProcess::initializeProcess
        https://bugs.webkit.org/show_bug.cgi?id=193844

        Reviewed by Andy Estes.

        This simplifies ChildProcess and removes NetworkProcess-specific code from this generic abstraction.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcess):
        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::setApplicationIsDaemon): Deleted.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setApplicationIsDaemon): Deleted.

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Apply Configuration to XCFileLists" build target
        https://bugs.webkit.org/show_bug.cgi?id=193781
        <rdar://problem/47201153>

        Reviewed by Alex Christensen.

        Part of generating the .xcfilelists used as part of adopting XCBuild
        includes running `make DerivedSources.make` from a standalone script.
        It’s important for this invocation to have the same environment as
        when the actual build invokes `make DerivedSources.make`. If the
        environments are different, then the two invocations will provide
        different results. In order to get the same environment in the
        standalone script, have the script launch xcodebuild targeting the
        "Apply Configuration to XCFileLists" build target, which will then
        re-invoke our standalone script. The script is now running again, this
        time in an environment with all workspace, project, target, xcconfig
        and other environment variables established.

        The "Apply Configuration to XCFileLists" build target accomplishes
        this task via a small embedded shell script that consists only of:

            eval "${WK_SUBLAUNCH_SCRIPT_PARAMETERS[@]}"

        The process that invokes "Apply Configuration to XCFileLists" first
        sets WK_SUBLAUNCH_SCRIPT_PARAMETERS to an array of commands to be
        evaluated and exports it into the shell environment. When xcodebuild
        is invoked, it inherits the value of this variable and can `eval` the
        contents of that variable. Our external standalone script can then set
        WK_SUBLAUNCH_SCRIPT_PARAMETERS to the path to itself, along with a set
        of command-line parameters needed to restart itself in the appropriate
        state.

        * WebKit.xcodeproj/project.pbxproj:

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform an application that "Go Back" has been clicked from a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=193802
        <rdar://problem/46010580>

        Reviewed by Andy Estes.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didClickGoBackFromSafeBrowsingWarning):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didClickGoBackFromSafeBrowsingWarning):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

2019-01-25  Daniel Bates  <dabates@apple.com>

        [iOS] Pressing Tab key doesn't move to next cell with Google Sheets
        https://bugs.webkit.org/show_bug.cgi?id=193048
        <rdar://problem/46433836>

        Reviewed by Brent Fulgham.

        WebCore knows how interpret the Tab and Shift + Tab keys. When building with UIKit keyboard additions
        we do not need to register key commands for handling them from the UIProcess code. Instead UIKit will
        sends key events for these commands to us. This will make the behavior of these key commands when executed
        in an editable field match the behavior of these command when executed in a non-editable field since
        both code paths will now go through WebCore.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView keyCommands]): Only compile when building with !USE(UIKIT_KEYBOARD_ADDITIONS).

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        Fix Linux build.

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

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update WebKitAdditions.xcconfig with correct order of variable definitions
        https://bugs.webkit.org/show_bug.cgi?id=193793
        <rdar://problem/47532439>

        Reviewed by Alex Christensen.

        XCBuild changes the way xcconfig variables are evaluated. In short,
        all config file assignments are now considered in part of the
        evaluation. When using the new build system and an .xcconfig file
        contains multiple assignments of the same build setting:

        - Later assignments using $(inherited) will inherit from earlier
          assignments in the xcconfig file.
        - Later assignments not using $(inherited) will take precedence over
          earlier assignments. An assignment to a more general setting will
          mask an earlier assignment to a less general setting. For example,
          an assignment without a condition ('FOO = bar') will completely mask
          an earlier assignment with a condition ('FOO[sdk=macos*] = quux').

        This affects some of our .xcconfig files, in that sometimes platform-
        or sdk-specific definitions appear before the general definitions.
        Under the new evaluations rules, the general definitions alway take
        effect because they always overwrite the more-specific definitions. The
        solution is to swap the order, so that the general definitions are
        established first, and then conditionally overwritten by the
        more-specific definitions.

        * Configurations/BaseTarget.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKit.xcconfig:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update existing .xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193791
        <rdar://problem/47201706>

        Reviewed by Alex Christensen.

        Many .xcfilelist files were added in r238824 in order to support
        XCBuild. Update these with recent changes to the set of build files
        and with the current generate-xcfilelist script.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * UnifiedSources-input.xcfilelist:
        * UnifiedSources-output.xcfilelist:

2019-01-25  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Deny mach lookups to services not used.
        https://bugs.webkit.org/show_bug.cgi?id=193828

        Reviewed by Brent Fulgham.

        Start denying mach lookups to iOS services, which were previously allowed with reporting.
        Living-on has indicated that these services are not used.

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

2019-01-25  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        This patch activates the ResourceLoadStatistics code in the NetworkProcess, and turns
        it off in the UIProcess. It also updates test infrastructure to work with this change
        in architecture.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceLoading): Added.
        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceRedirect): Added.
        (WebKit::ResourceLoadStatisticsMemoryStore::logWebSocketLoading): Added.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceLoading): Added.
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceRedirect): Added.
        (WebKit::WebResourceLoadStatisticsStore::logWebSocketLoading): Added.
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCapForPrevalentResources): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::logSubresourceLoading): Added.
        (WebKit::NetworkConnectionToWebProcess::logSubresourceRedirect): Added.
        (WebKit::NetworkConnectionToWebProcess::logWebSocketLoading): Added.
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
        * Webprocess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Register new ResourceLoadObserver callbacks.

2019-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: inputmode="none" disables hardware keyboard's globe key
        https://bugs.webkit.org/show_bug.cgi?id=193811
        <rdar://problem/47406553>

        Reviewed by Wenson Hsieh.

        Removed the support for inputmode="none" for now since we need a new SPI from UIKit
        to properly implement this feature some time in the future.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _zoomToRevealFocusedElement]):
        (-[WKContentView inputView]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView textInputTraits]):

2019-01-25  David Kilzer  <ddkilzer@apple.com>

        Move soft-linking of Lookup.framework out of LookupSPI.h
        <https://webkit.org/b/193815>

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKWindowVisibilityObserver dealloc]):
        (-[WKWindowVisibilityObserver startObservingLookupDismissalIfNeeded]):
        - Move soft-linking to LookupSoftLink.{h,mm}.

2019-01-25  Antti Koivisto  <antti@apple.com>

        REGRESSION (PSON): After swipe back, first few attempts to swipe forward not recognized as swipe gestures
        https://bugs.webkit.org/show_bug.cgi?id=193818
        <rdar://problem/47456584>

        Reviewed by Tim Horton.

        We don't hit the RenderTreeSizeThreshold milestone to remove the snapshot and allow interaction because we request it
        from a wrong process (the one we are leaving behind).

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame):

        Request the RenderTreeSizeThreshold notification when the load has started and we know the process to use.

        (WebKit::ViewGestureController::SnapshotRemovalTracker::hasOutstandingEvent):
        * UIProcess/Cocoa/ViewGestureController.h:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::renderTreeSizeThreshold const):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::setRenderTreeSizeThreshold):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):

        Don't request immediately, save the threshold to SnapshotRemovalTracker.

        (WebKit::ViewGestureController::requestRenderTreeSizeNotificationIfNeeded):

        Do the request to the right process.

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

        Ensure we send the notification even if we reached the threshold before it was requested.

        (WebKit::ViewGestureGeometryCollector::sendDidHitRenderTreeSizeThresholdIfNeeded):
        (WebKit::ViewGestureGeometryCollector::mainFrameDidLayout):
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        (WebKit::ViewGestureGeometryCollector::setRenderTreeSizeNotificationThreshold): Deleted.

2019-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Rename some WebKit-internal functions and variables that reference "data interaction"
        https://bugs.webkit.org/show_bug.cgi?id=193829

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::setDragCaretRect):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didHandleDragStartRequest):
        (WebKit::PageClientImpl::didConcludeEditDrag):
        (WebKit::PageClientImpl::didChangeDragCaretRect):
        (WebKit::PageClientImpl::didHandleStartDataInteractionRequest): Deleted.
        (WebKit::PageClientImpl::didConcludeEditDataInteraction): Deleted.
        (WebKit::PageClientImpl::didChangeDataInteractionCaretRect): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView setupDragAndDropInteractions]):
        (-[WKContentView teardownDragAndDropInteractions]):
        (-[WKContentView _didHandleDragStartRequest:]):
        (-[WKContentView _didConcludeEditDrag:]):
        (-[WKContentView _didChangeDragCaretRect:currentRect:]):
        (-[WKContentView _dragInteraction:prepareForSession:completion:]):
        (-[WKContentView setupDataInteractionDelegates]): Deleted.
        (-[WKContentView teardownDataInteractionDelegates]): Deleted.
        (-[WKContentView _didHandleStartDataInteractionRequest:]): Deleted.
        (-[WKContentView _didConcludeEditDataInteraction:]): Deleted.
        (-[WKContentView _didChangeDataInteractionCaretRect:currentRect:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didHandleDragStartRequest):
        (WebKit::WebPageProxy::requestDragStart):
        (WebKit::WebPageProxy::didConcludeEditDrag):
        (WebKit::WebPageProxy::didHandleStartDataInteractionRequest): Deleted.
        (WebKit::WebPageProxy::requestStartDataInteraction): Deleted.
        (WebKit::WebPageProxy::didConcludeEditDataInteraction): Deleted.
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::didConcludeEditDrag):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDragStart):
        (WebKit::WebPage::requestAdditionalItemsForDragSession):
        (WebKit::WebPage::didConcludeEditDrag):
        (WebKit::WebPage::requestStartDataInteraction): Deleted.
        (WebKit::WebPage::didConcludeEditDataInteraction): Deleted.

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        WKWebView.goBack should reload if there is a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=193805
        <rdar://problem/46908216>

        Reviewed by Geoff Garen.

        If a WKWebView is showing a safe browsing warning and the user clicks a back button
        in the app which calls WKWebView.goBack, the WKWebView is in a state where it has not navigated yet,
        so actually going back will appear to the user to go back twice.  We can't just do nothing because the
        app is in a state where it is expecting a navigation to happen.  Reloading achieves what the user expects
        and makes the app work like the app expects.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGoBack):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView goBack]):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::hasSafeBrowsingWarning const):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::hasSafeBrowsingWarning const):

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) cross-site provisional page is not canceled if a new same-site one is started
        https://bugs.webkit.org/show_bug.cgi?id=193788
        <rdar://problem/47531231>

        Reviewed by Alex Christensen.

        When the page starts a new provisional load, make sure we cancel any pending one in the provisional
        process, as it would have happened in the first provisional load happened in the same process.
        Without this, we could have 2 parallel loads happening, one in the committed process and another
        in the provisional one, leading to assertion failures in debug.

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

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Drop WebKit::WebKitPolicyAction type as it is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=193827

        Reviewed by Antti Koivisto.

        Drop WebKit::WebKitPolicyAction type as it is no longer needed. It is now identical to
        WebCore::PolicyAction.

        * Shared/WebPolicyAction.h: Removed.
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        * UIProcess/WebFramePolicyListenerProxy.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision):
        (WebKit::toPolicyAction): Deleted.
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceivePolicyDecision):
        * WebProcess/WebPage/WebPage.h:

2019-01-25  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Add logging of calls
        https://bugs.webkit.org/show_bug.cgi?id=193784

        Reviewed by Brent Fulgham.

        Add permissive logging of calls on iOS.

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

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Regression(PSON?) Crash under NavigationState::NavigationClient::decidePolicyForNavigationAction()
        https://bugs.webkit.org/show_bug.cgi?id=193779
        <rdar://problem/46170903>

        Reviewed by Antti Koivisto.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryAppLink):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        We were crashing when trying to get the URL of the main frame, which was sad because we never
        ended up using the main frame URL. Therefore, this patch drops the code in question.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync):
        Add assertion to make sure that the DecidePolicyForNavigationActionAsync IPC it is getting
        from the process is related to its main frame.

2019-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Need a way for JavaScript (or bundle) code to participate in undo
        https://bugs.webkit.org/show_bug.cgi?id=190009
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Invalidate undo steps when removing them from WebPage. Invalidation is a no-op for editing actions that come
        from the UA, but for custom undo steps backed by an UndoItem, we clear out the custom undo step's pointer to its
        UndoItem and additionally disconnect the UndoItem from its UndoManager.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addWebUndoStep):
        (WebKit::WebPage::removeWebEditCommand):
        * WebProcess/WebPage/WebUndoStep.h:
        (WebKit::WebUndoStep::invalidate):

2019-01-25  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Add API to add paths to sandbox
        https://bugs.webkit.org/show_bug.cgi?id=193571

        This allows applications to add paths to the web process
        if required by web extensions.

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_add_path_to_sandbox):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt:
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):
        * UIProcess/WebProcessPool.h:
        * UIProcess/glib/WebProcessProxyGLib.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):

2019-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: Split keyboard should not shrink visualViewport.height
        https://bugs.webkit.org/show_bug.cgi?id=193798

        Reviewed by Tim Horton.

        Treat a split keyboard like a floating keyboard and don't consider its input view bounds in computing the visible content rects.

        No new tests since while it's possible to transition between split and merged keyboard using some SPI,
        there isn't a reliable mechanism to reset the keyboard state. e.g. we need to wait for a hard-coded amount of time.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):

2019-01-24  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Silence MediaPlayer compile warnings
        https://bugs.webkit.org/show_bug.cgi?id=193780
        <rdar://problem/47518428>

        Reviewed by Jer Noble.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:

2019-01-24  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240446.

        Casued 5 API failures

        Reverted changeset:

        "Activate the WebResourceLoadStatisticsStore in the
        NetworkProcess and deactivate it in the UIProcess."
        https://bugs.webkit.org/show_bug.cgi?id=193297
        https://trac.webkit.org/changeset/240446

2019-01-24  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        This patch activates the ResourceLoadStatistics code in the NetworkProcess, and turns
        it off in the UIProcess. It also updates test infrastructure to work with this change
        in architecture.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceLoading): Added.
        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceRedirect): Added.
        (WebKit::ResourceLoadStatisticsMemoryStore::logWebSocketLoading): Added.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceLoading): Added.
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceRedirect): Added.
        (WebKit::WebResourceLoadStatisticsStore::logWebSocketLoading): Added.
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCapForPrevalentResources): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::logSubresourceLoading): Added.
        (WebKit::NetworkConnectionToWebProcess::logSubresourceRedirect): Added.
        (WebKit::NetworkConnectionToWebProcess::logWebSocketLoading): Added.
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
        * Webprocess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Register new ResourceLoadObserver callbacks.

2019-01-24  John Wilander  <wilander@apple.com>

        Add Ad Click Attribution as an internal/experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=193685
        <rdar://problem/47450399>

        Reviewed by Brent Fulgham.

        * Shared/WebPreferences.yaml:
            Added AdClickAttributionEnabled as a runtime enabled feature, off by default.

2019-01-24  Antti Koivisto  <antti@apple.com>

        [PSON] Flash on back navigation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193716
        <rdar://problem/47148458>

        Reviewed by Chris Dumez.

        We close the page immediately if we fail to suspend. Layers disappear and we get a flash.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::close):

        Track closed state so we don't send the message twice, causing unhandled message errors in web process.

        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):

        Close the suspended page if the suspension fails.
        Skip this if we are using web process side compositing on Mac.

        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):

        On Mac, close the failed SuspendedPageProxy when entering compositing mode. At this point we don't need it to keep layers alive.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::closeFailedSuspendedPagesForPage):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspendForProcessSwap):

        Don't close the page on suspension failure. This is now managed by the UI process.

2019-01-24  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Back/Forward list items' URL sometimes gets replaced with the URL of a subframe
        https://bugs.webkit.org/show_bug.cgi?id=193761
        <rdar://problem/47456405>

        Reviewed by Alex Christensen.

        When doing a history navigation cross-process, the UIProcess would first send the back/forward list items
        to the destination WebProcess via WebPage::updateBackForwardListForReattach(), then ask the process to
        navigate to the expected back/forward list item.

        WebPage::updateBackForwardListForReattach() would call restoreSessionInternal(), which would call
        toHistoryItem() on each BackForwardListItem. This may end up creating more than one HistoryItem for each
        BackForwardListItem because HistoryItems are part of a tree (each frame has its own list of history items).

        Note that BackForwardListItems and HistoryItem share a BackForwardItemIdentifier which is a
        (processIdentifier, itemIdentifier) pair. We normally generate the HistoryItem's identifier from inside
        its constructor like so:
        `{ Process::identifier(), generateObjectIdentifier<BackForwardItemIdentifier::ItemIdentifierType>() }`

        However, when calling updateBackForwardListForReattach() and constructing children HistoryItem,
        applyFrameState() would generate the identifier by itself and passing it to the HistoryItem constructor.
        Its genegates the ID the exact same way so this would in theory not be a problem. Unfortunately, both
        calls to generateObjectIdentifier() get inlined and both call sites end up with their own static counter
        to generate ids. As a result, we may end up with conflicts as HistoryItems for child frames (restored
        by restoreSessionInternal()) can end up with the same identifier as HistoryItems for top frames.

        This confusion would lead to the WebContent process sending the UIProcess bad information and the URL
        of subframes could end up as the WebBackForwardListItem's mainframe URL.

        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::applyFrameState):
        Stop calling generateObjectIdentifier() explicitly and let the HistoryItem constructor take care of it.
        Calling generateObjectIdentifier() for the same type from different places is not safe due to inlining.

2019-01-24  Ross Kirsling  <ross.kirsling@sony.com>

        Move FileSystem to WTF
        https://bugs.webkit.org/show_bug.cgi?id=193602

        Reviewed by Yusuke Suzuki.

        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp:
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        * NetworkProcess/cache/NetworkCache.cpp:
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        * NetworkProcess/cache/NetworkCacheData.cpp:
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        * Shared/PersistencyUtils.cpp:
        * Shared/Plugins/Netscape/unix/NetscapePluginModuleUnix.cpp:
        * Shared/Plugins/unix/PluginSearchPath.cpp:
        * Shared/WebMemorySampler.h:
        * Shared/glib/ProcessExecutablePathGLib.cpp:
        * Shared/ios/ChildProcessIOS.mm:
        * Shared/mac/ChildProcessMac.mm:
        * Shared/mac/SandboxExtensionMac.mm:
        * UIProcess/API/APIContentRuleListStore.cpp:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        * UIProcess/API/glib/IconDatabase.cpp:
        * UIProcess/API/glib/WebKitFaviconDatabase.cpp:
        * UIProcess/API/glib/WebKitFileChooserRequest.cpp:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp:
        * UIProcess/Automation/WebAutomationSession.cpp:
        * UIProcess/Cocoa/DownloadClient.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/DeviceIdHashSaltStorage.cpp:
        * UIProcess/Downloads/DownloadProxy.cpp:
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        * UIProcess/WebStorage/LocalStorageDatabase.cpp:
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        * UIProcess/glib/WebProcessProxyGLib.cpp:
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        * UIProcess/win/WebProcessPoolWin.cpp:
        * UIProcess/win/WebView.cpp:
        * UIProcess/wpe/WebProcessPoolWPE.cpp:
        * WebProcess/InjectedBundle/API/glib/WebKitExtensionManager.cpp:
        * WebProcess/InjectedBundle/glib/InjectedBundleGlib.cpp:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        * WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp:
        * WebProcess/WebPage/win/WebInspectorUIWin.cpp:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2019-01-23  Simon Fraser  <simon.fraser@apple.com>

        Create "frame hosting" nodes for the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=193753

        Reviewed by Antti Koivisto.

        When the scrolling tree crosses frame boundaries, mutations in the parent frame currently
        require the iframe's scrolling node to get reparented in a new ancestor, which requires
        a layer tree walk of the parent frame. This is error-prone, and not very future-proof.

        Fix this by introducing "frame hosting" scrolling tree nodes. These are mostly inert
        nodes that are owned by the RenderIFrame's layer backing in the parent frame, and exist
        to provide a consistent parent node for the subframe's scrolling node.

        This patch adds the node types, but does not instantiate them yet.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameHostingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameHostingNode>::decode):
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::dump):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

2019-01-23  Ross Kirsling  <ross.kirsling@sony.com>

        [Curl] Unreviewed build fix for r240292 and friends.

        WinCairo test stability must be restored in subsequent patch.

        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):
        (WebKit::NetworkProcess::setNetworkProxySettings):

2019-01-23  Commit Queue  <commit-queue@webkit.org>

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

        "Causes multiple crashes on macOS port (probably used wrong
        ENABLE macro)" (Requested by ddkilzer on #webkit).

        Reverted changeset:

        "[Curl] Unreviewed build fix for r240292 and friends."
        https://trac.webkit.org/changeset/240403

2019-01-23  Ross Kirsling  <ross.kirsling@sony.com>

        [Curl] Unreviewed build fix for r240292 and friends.

        WinCairo test stability must be restored in subsequent patch.

        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):
        (WebKit::NetworkProcess::setNetworkProxySettings):

2019-01-23  Alex Christensen  <achristensen@webkit.org>

        Stop using NetworkProcess::singleton
        https://bugs.webkit.org/show_bug.cgi?id=193700

        Reviewed by Don Olmstead.

        This replaces it with a NeverDestroyed<NetworkProcess> and paves the way for more interesting things.

        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (WebKit::initializeChildProcess<WebKit::NetworkProcess>):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::singleton): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/soup/NetworkProcessMainSoup.cpp:
        (WebKit::initializeChildProcess<WebKit::NetworkProcess>):
        * NetworkProcess/win/NetworkProcessMainWin.cpp:
        (WebKit::initializeChildProcess<WebKit::NetworkProcess>):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::initializeChildProcess):
        (WebKit::XPCServiceInitializer):

2019-01-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r240343.

        Caused 4 PSON API test failures.

        Reverted changeset:

        "[PSON] Flash on back navigation on Mac"
        https://bugs.webkit.org/show_bug.cgi?id=193716
        https://trac.webkit.org/changeset/240343

2019-01-23  Chris Dumez  <cdumez@apple.com>

        Deprecate API to limit the maximum number of WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=193725
        <rdar://problem/47464879>

        Reviewed by Geoff Garen.

        Deprecate API to limit the maximum number of WebProcesses and make it a no-op. It adds
        complexity and is not safe (conflicts with PSON).

        Add a new usesSingleWebProcess SPI to _WKProcessPoolConfiguration to be used by
        Minibrowser / Safari in order to disable process per tab (can be useful for debugging).
        Note that enabling the single WebProcess mode will disable PSON and process prewarming.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetMaximumNumberOfProcesses):
        (WKContextGetMaximumNumberOfProcesses):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration maximumProcessCount]):
        (-[_WKProcessPoolConfiguration setMaximumProcessCount:]):
        (-[_WKProcessPoolConfiguration usesSingleWebProcess]):
        (-[_WKProcessPoolConfiguration setUsesSingleWebProcess:]):
        (-[_WKProcessPoolConfiguration description]):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_set_process_model):
        (webkit_web_context_set_web_process_count_limit):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:

2019-01-23  Brent Fulgham  <bfulgham@apple.com>

        Switch NetworkStorageSession portions of ResourceLoadStatistics to Async message passing style
        https://bugs.webkit.org/show_bug.cgi?id=193659
        <rdar://problem/47433290>

        Reviewed by Alex Christensen.

        Change the implementations of ResourceLoadStatistics code in NetworkStorageSession to use the
        'sendWithAsyncReply' so that more of the code is autogenerated. This should make test runs more
        consistent, and should reduce the possibility of bookkeeping errors in the message handling
        implementations.

        Fix the implementation of NetworkProcessProxy::clearCallbackStates to remove the manually constructed
        (and incomplete) message callbacks. These errors are a big reason to move to the auto-generated
        'sendWithAsyncReply' implementatoin. Ditto for NetworkProcessProxy::didClose.

        This patch also moves an initializaton call (WebsiteDataStore::didCreateNetworkProcess) from
        'ensureNetworkProcess' to 'processDidFinishLaunching'. In current code, the call happens before
        a connection is established to the network process, causing initialization messages to get dropped
        leading to test system flakiness.

        Finally: The WK API test code was updated to ensure that completion handlers are always called, even
        when built without ENABLE_RESOURCE_LOAD_STATISTICS defined.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        * NetworkProcess/Classifier/ShouldGrandfatherStatistics.h: Added.
        * NetworkProcess/Classifier/StorageAccessStatus.h: Added.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcess::setAgeCapForClientSideCookies):
        (WebKit::NetworkProcess::scheduleClearInMemoryAndPersistent):
        (WebKit::NetworkProcess::hasStorageAccessForFrame):
        (WebKit::NetworkProcess::requestStorageAccess):
        (WebKit::NetworkProcess::grantStorageAccess):
        (WebKit::NetworkProcess::removeAllStorageAccess):
        (WebKit::NetworkProcess::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcess::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcess::deleteWebsiteData):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::clearCallbackStates): Remove incomplete clean-up code that
        is now autogenerated.
        (WebKit::NetworkProcessProxy::didClose): Ditto.
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcessProxy::scheduleClearInMemoryAndPersistent):
        (WebKit::NetworkProcessProxy::setAgeCapForClientSideCookies):
        (WebKit::NetworkProcessProxy::hasStorageAccessForFrame):
        (WebKit::NetworkProcessProxy::requestStorageAccess):
        (WebKit::NetworkProcessProxy::grantStorageAccess):
        (WebKit::NetworkProcessProxy::removeAllStorageAccess):
        (WebKit::NetworkProcessProxy::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcessProxy::setCacheMaxAgeCap):
        (WebKit::NetworkProcessProxy::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcessProxy::didUpdateBlockCookies): Deleted.
        (WebKit::NetworkProcessProxy::didSetAgeCapForClientSideCookies): Deleted.
        (WebKit::NetworkProcessProxy::didUpdateRuntimeSettings): Deleted.
        (WebKit::NetworkProcessProxy::storageAccessRequestResult): Deleted.
        (WebKit::NetworkProcessProxy::storageAccessOperationResult): Deleted.
        (WebKit::NetworkProcessProxy::didRemoveAllStorageAccess): Deleted.
        (WebKit::NetworkProcessProxy::didSetCacheMaxAgeCapForPrevalentResources): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess): Move WebsiteDataStore 'didCreateNetworkProcess'
        to 'processDidFinishLaunching'. Currently the call happens before a connection is established,
        causing initialization messages to get dropped.
        (WebKit::WebProcessPool::processDidFinishLaunching): Ditto.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::setMaxStatisticsEntries):
        (WebKit::WebsiteDataStore::setPruneEntriesDownTo):
        (WebKit::WebsiteDataStore::setGrandfatheringTime):
        (WebKit::WebsiteDataStore::setCacheMaxAgeCap):
        (WebKit::WebsiteDataStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::WebsiteDataStore::setPrevalentResource):
        (WebKit::WebsiteDataStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebsiteDataStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebsiteDataStore::setAgeCapForClientSideCookies):
        (WebKit::WebsiteDataStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebsiteDataStore::setNotifyPagesWhenTelemetryWasCaptured):
        (WebKit::WebsiteDataStore::setTimeToLiveUserInteraction):
        (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-01-23  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796
        <rdar://problem/46824999>

        Reviewed by Geoffrey Garen.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveAllIndexedDatabases):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2019-01-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] fast/events/touch/ios/hover-when-style-change-is-async.html times out
        https://bugs.webkit.org/show_bug.cgi?id=193182
        <rdar://problem/47452154>

        Reviewed by Tim Horton.

        Fix an existing bug where blurring an element doesn't always un-suppress text interactions.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidBlur]):

2019-01-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Minor improvements to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=193708

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::switchToNewTestingSession): Fix a spelling error.
        (WebKit::NetworkProcess::ensureSession): Add useful assertion.
        (WebKit::NetworkProcess::defaultStorageSession const): Split into platform functions.
        (WebKit::NetworkProcess::destroySession): Add useful assertion.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):

2019-01-23  Daniel Bates  <dabates@apple.com>

        Fix the Apple Internal build. See <rdar://problem/47486758>.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dropInteraction:previewForDroppingItem:withDefault:]):

2019-01-23  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Sandbox fails to compile
        https://bugs.webkit.org/show_bug.cgi?id=193727
        <rdar://problem/47476903>

        Reviewed by Brent Fulgham.

        Use '(with send-signal SIGKILL)' instead of '(with termination)'.

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

2019-01-23  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r240243): CrashTracer: WebKitTestRunnerApp at com.apple.WebKit: WebKit::WebResourceLoadStatisticsStore::sendDiagnosticMessageWithValue const + 32
        https://bugs.webkit.org/show_bug.cgi?id=193723
        <rdar://problem/47476802>

        Reviewed by David Kilzer.

        The new code added in r240243 could attempt to submit telemetry after the relevant
        WebResourceLoadStatisticsStore was destroyed. We should guard against this possibility.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::WebResourceLoadStatisticsTelemetry::calculateAndSubmit):

2019-01-23  Antti Koivisto  <antti@apple.com>

        [PSON] Flash on back navigation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193716
        <rdar://problem/47148458>

        Reviewed by Chris Dumez.

        We close the page immediately if we fail to suspend. Layers disappear and we get a flash.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):

        Remove the suspended page (so closing it on web process side) if the suspension fails.
        Skip this if we are using web process side compositing on Mac.

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

        On Mac, remove failed SuspendedPageProxy when entering compositing mode. At this point we don't need it to keep layers alive.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::removeFailedSuspendedPagesForPage):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspendForProcessSwap):

        Don't close the page on suspension failure.

2019-01-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce UndoStep::label() and adopt it in WebKitLegacy and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=193706
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::registerEditCommand):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::WebEditCommandProxy):
        * UIProcess/WebEditCommandProxy.h:

        Drive-by tweak: make WebEditCommandProxy's backpointer to its WebPageProxy a WeakPtr instead of a raw pointer.
        Additionally, call clear() instead of setting m_page to 0 upon invalidation. Also, turn the WebPageProxy*
        argument into a WebPageProxy&, since the WebPageProxy must exist when it creates a new WebEditCommandProxy.

        (WebKit::WebEditCommandProxy::create):
        (WebKit::WebEditCommandProxy::label const):
        (WebKit::WebEditCommandProxy::invalidate):
        (WebKit::WebEditCommandProxy::editAction const): Deleted.

        Adjust UI-side logic to just handle the undo/redo label, rather than map the edit action to a localized string.

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

        Tweak this to use std::exchange instead of copying all the WebEditCommandProxy RefPtrs into a separate Vector
        and then iterating over the Vector.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Adjust this so that we only send the undo/redo label over IPC, rather than the edit action type.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::registerEditCommand):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerUndoStep):

2019-01-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Remove libsoup cruft from WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=193710

        Reviewed by Carlos Garcia Campos.

        SoupNetworkSession is no longer accessible from the web process because it's owned
        (indirectly) by NetworkProcess after r240292. It doesn't make sense to have any libsoup
        code under WebProcess anymore. The current libsoup code consists of (a) unused stuff to be
        removed, (b) stuff unrelated to libsoup, which should move to a WebProcessGLib.cpp, and (c)
        WebKitSoupRequestInputStream, which is only used by NetworkProcess and should move there

        * NetworkProcess/soup/WebKitSoupRequestInputStream.cpp: Renamed from Source/WebKit/WebProcess/soup/WebKitSoupRequestInputStream.cpp.
        (AsyncReadData::AsyncReadData):
        (webkitSoupRequestInputStreamReadAsyncResultComplete):
        (webkitSoupRequestInputStreamPendingReadAsyncComplete):
        (webkitSoupRequestInputStreamHasDataToRead):
        (webkitSoupRequestInputStreamIsWaitingForData):
        (webkitSoupRequestInputStreamReadAsync):
        (webkitSoupRequestInputStreamReadFinish):
        (webkitSoupRequestInputStreamFinalize):
        (webkit_soup_request_input_stream_init):
        (webkit_soup_request_input_stream_class_init):
        (webkitSoupRequestInputStreamNew):
        (webkitSoupRequestInputStreamAddData):
        (webkitSoupRequestInputStreamDidFailWithError):
        (webkitSoupRequestInputStreamFinished):
        * NetworkProcess/soup/WebKitSoupRequestInputStream.h: Renamed from Source/WebKit/WebProcess/soup/WebKitSoupRequestInputStream.h.
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::setNetworkProxySettings): Don't send message to web processes.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/glib/WebProcessGLib.cpp: Renamed from Source/WebKit/WebProcess/soup/WebProcessSoup.cpp.
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformTerminate):

2019-01-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Clean up NetworkStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=193707

        Reviewed by Carlos Garcia Campos.

        Restore an important call to clearSoupNetworkSession that was removed in r240292. Also,
        adapt to NetworkStorageSessions API changes.

        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp:
        (WebKit::LegacyCustomProtocolManager::registerScheme):
        * NetworkProcess/soup/NetworkProcessMainSoup.cpp:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::userPreferredLanguagesChanged):
        (WebKit::NetworkProcess::setNetworkProxySettings):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::soupSession const):

2019-01-23  Philippe Normand  <pnormand@igalia.com>

        [GTK] Crash when browsing inspector:// uri without port set
        https://bugs.webkit.org/show_bug.cgi?id=193721

        Reviewed by Michael Catanzaro.

        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        (WebKit::RemoteInspectorProtocolHandler::handleRequest): Return
        back to caller after setting the error, if no port was provided
        along with the inspector URL.

2019-01-23  David Kilzer  <ddkilzer@apple.com>

        Switch remaining CoreMedia soft-linking in WebKit over to CoreMediaSoftLink.{cpp,h}
        <https://webkit.org/b/193694>
        <rdar://problem/47464025>

        Reviewed by Tim Horton.

        * Shared/ios/WebIconUtilities.mm:
        - Switch to using CoreMediaSoftLink.{h,mm} in PAL.

2019-01-22  Chris Dumez  <cdumez@apple.com>

        Regression(r240178) Some API tests are crashing
        https://bugs.webkit.org/show_bug.cgi?id=193680

        Reviewed by Alex Christensen.

        r240178 made sure that userScripts / scriptMessageHandlers / contentExtensions are always
        properly populated in the WebPageCreationParameters. This was needed in case we need to
        reconstruct the WebUserContentController on the WebProcess side. However, this caused a
        regression in the case we reuse a process where the WebUserContentController still exists
        (because it was kept alive, e.g. by the WebPageGroup). In that case, we would add duplicate
        entries to the existing WebUserContentController instance because its "add" methods did not
        have duplicate checks. To address the issue, this patch adds duplicate checks to the
        WebUserContentController "add" methods.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserScriptMessageHandlerInternal):
        (WebKit::WebUserContentController::removeUserScriptMessageHandlerInternal):
        (WebKit::WebUserContentController::addUserScriptInternal):
        (WebKit::WebUserContentController::removeUserScriptInternal):
        (WebKit::WebUserContentController::addUserStyleSheetInternal):
        (WebKit::WebUserContentController::removeUserStyleSheetInternal):
        (WebKit::WebUserContentController::forEachUserMessageHandler const):
        * WebProcess/UserContent/WebUserContentController.h:

2019-01-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed attempt to fix GTK/WPE bots
        https://bugs.webkit.org/show_bug.cgi?id=193580
        <rdar://problem/47457742>

        Doesn't make sense to clear the storage session right after creating it. This should fix
        network process crash on startup under G_DEBUG=fatal-criticals due to the storage session
        not having a cookie jar.

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

2019-01-22  Megan Gardner  <megan_gardner@apple.com>

        Cancel Web Touches Properly so that long presses on YouTube links do not incorrectly trigger a load
        https://bugs.webkit.org/show_bug.cgi?id=193687
        <rdar://problem/47056717>

        Reviewed by Tim Horton.

        Cancel web gestures when a long press is recognized.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _cancelWebGestureRecognizer]):
        (-[WKContentView _longPressRecognized:]):

2019-01-22  Alex Christensen  <achristensen@webkit.org>

        Fix an internal build failure after r240292
        https://bugs.webkit.org/show_bug.cgi?id=193580

        Rubber-stamped by Wenson Hsieh.

        * SourcesCocoa.txt:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKMenuTarget forwardContextMenuAction:]):
        * WebKit.xcodeproj/project.pbxproj:
        It was apparently unclear to the compiler sometimes which "state" selector to use, and this apparently mattered.
        Tell the compiler to use the NSMenuItem selector, but at runtime it doesn't matter.

2019-01-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wunused-but-set-variable warning
        https://bugs.webkit.org/show_bug.cgi?id=193660
        <rdar://problem/47433602>

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):

2019-01-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, further build fixes after r240292
        https://bugs.webkit.org/show_bug.cgi?id=193580
        <rdar://problem/47457742>

        Oops.

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

2019-01-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, further build fixes after r240292
        https://bugs.webkit.org/show_bug.cgi?id=193580
        <rdar://problem/47457742>

        This builds for libsoup. Doesn't work, but at least builds.

        Also, speculative fixes for curl.

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

2019-01-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, further build fixes after r240292
        https://bugs.webkit.org/show_bug.cgi?id=193580
        <rdar://problem/47457742>

        Still not working yet.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        * UIProcess/API/APIHTTPCookieStore.h:

2019-01-22  Antti Koivisto  <antti@apple.com>

        [iOS] Flash when swiping back to Google search result page
        https://bugs.webkit.org/show_bug.cgi?id=193668
        <rdar://problem/47071684>

        Reviewed by Simon Fraser.

        If the google page is scrolled, there is sometimes a short flash.

        When restoring the page state we also restore exposedContentRect which is used to determine
        which part of the page to create layers for. Scroll position is restored by the UI process
        later so we rely on this to get the right layers for the initial view update.

        A viewport configuration update may sometimes trample over the restored exposedContentRect,
        moving it to top left. In this case the initial layer tree unfreeze commit may not have
        layers to cover the actual visible view position.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):

        Set a bit to indicate we have already restored the exposedContentRect.

        (WebKit::WebPage::viewportConfigurationChanged):

        Only reset exposedContentRect if wasn't already set by restorePageState.

2019-01-22  Alex Christensen  <achristensen@webkit.org>

        Fix more builds.

        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-01-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Another build fix after r240292
        https://bugs.webkit.org/show_bug.cgi?id=193580
        <rdar://problem/47457742>

        Unreviewed, still not enough to fix soup builds, but closer.

        * UIProcess/API/APIHTTPCookieStore.h:

2019-01-22  Alex Christensen  <achristensen@webkit.org>

        Fix some builds after r240292
        https://bugs.webkit.org/show_bug.cgi?id=193580

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::switchToNewTestingSession):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):

2019-01-22  Brian Burg  <bburg@apple.com>

        Automation.computeElementLayout should return visual viewport-aware coordinates
        https://bugs.webkit.org/show_bug.cgi?id=193598
        <rdar://problem/35325644>

        Unreviewed, restore a mistakenly-deleted line whose absence causes hangs.

        * Shared/CoordinateSystem.h:

2019-01-22  Alex Christensen  <achristensen@webkit.org>

        Move NetworkStorageSession ownership to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=193580

        Reviewed by Geoff Garen.

        * NetworkProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::WebCookieManager):
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::deleteCookie):
        (WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManager::getAllCookies):
        (WebKit::WebCookieManager::getCookies):
        (WebKit::WebCookieManager::setCookie):
        (WebKit::WebCookieManager::setCookies):
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::stopObservingCookieChanges):
        * NetworkProcess/Cookies/WebCookieManager.h:
        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForFrame):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::clearCachedCredentials):
        (WebKit::NetworkProcess::switchToNewTestingSession):
        (WebKit::NetworkProcess::ensureSession):
        (WebKit::NetworkProcess::storageSession const):
        (WebKit::NetworkProcess::defaultStorageSession const):
        (WebKit::NetworkProcess::forEachNetworkStorageSession):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcess::setAgeCapForClientSideCookies):
        (WebKit::NetworkProcess::hasStorageAccessForFrame):
        (WebKit::NetworkProcess::getAllStorageAccessEntries):
        (WebKit::NetworkProcess::grantStorageAccess):
        (WebKit::NetworkProcess::removeAllStorageAccess):
        (WebKit::NetworkProcess::removePrevalentDomains):
        (WebKit::NetworkProcess::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcess::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::validateCacheEntryForMaxAgeCapValidation):
        (WebKit::NetworkResourceLoader::logCookieInformation const):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::networkStorageSession const):
        * NetworkProcess/NetworkStorageSessionProvider.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeUseDecision):
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::makeEntry):
        (WebKit::NetworkCache::Cache::makeRedirectEntry):
        (WebKit::NetworkCache::Cache::update):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformSyncAllCookies):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * SourcesCocoa.txt:
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::~HTTPCookieStore):
        (API::HTTPCookieStore::cookies):
        (API::HTTPCookieStore::setCookie):
        (API::HTTPCookieStore::deleteCookie):
        (API::HTTPCookieStore::registerObserver):
        (API::HTTPCookieStore::unregisterObserver):
        (API::HTTPCookieStore::registerForNewProcessPoolNotifications):
        (API::HTTPCookieStore::flushDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::getAllDefaultUIProcessCookieStoreCookies):
        (API::HTTPCookieStore::setCookieInDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::deleteCookieFromDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::startObservingChangesToDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::stopObservingChangesToDefaultUIProcessCookieStore):
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/Cocoa/APIHTTPCookieStoreCocoa.mm: Added.
        (API::HTTPCookieStore::flushDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::getAllDefaultUIProcessCookieStoreCookies):
        (API::HTTPCookieStore::setCookieInDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::deleteCookieFromDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::startObservingChangesToDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::stopObservingChangesToDefaultUIProcessCookieStore):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::clearCachedCredentials):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::getAuthenticationInfo):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::deleteWebsiteData):
        (WebKit::WebProcess::clearCachedCredentials): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-01-22  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Adjust logging policy in WebKit's sandbox
        https://bugs.webkit.org/show_bug.cgi?id=193454

        Reviewed by Brent Fulgham.

        Add a rule to initially deny all calls, since the default is to allow every call.
        Later rules allow syscalls that we determined are needed for proper WebKit function.
        This reduces the API surface available to attackers.

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

2019-01-22  Daniel Bates  <dabates@apple.com>

        [iOS] WebKit should handle shift state changes when using the software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=191475
        <rdar://problem/45949246>

        Reviewed by Brent Fulgham.

        Implement UIKit SPI to be notified of shift state changes to the software keyboard
        and dispatch a synthetic keydown or keyup event for either the Shift key or Caps Lock
        key.

        A side benefit of this change is that we now show and hide the caps lock indicator
        in a focused password field when caps lock is enabled or disabled using the software
        keyboard, respectively.

        * Platform/spi/ios/UIKitSPI.h: Expose more SPI.
        * SourcesCocoa.txt:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView modifierFlagsDidChangeFrom:to:]): Create a synthetic flags changed
        web event based on the state change and dispatch it.
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]): Early return if the event
        was a synethic flags change event so that we do not notify UIKit about this event
        as it does not know anything about such synthetic events.
        * UIProcess/ios/WKSyntheticFlagsChangedWebEvent.h: Added.
        * UIProcess/ios/WKSyntheticFlagsChangedWebEvent.mm: Added.
        (-[WKSyntheticFlagsChangedWebEvent initWithKeyCode:modifiers:keyDown:]):
        (-[WKSyntheticFlagsChangedWebEvent initWithCapsLockState:]):
        (-[WKSyntheticFlagsChangedWebEvent initWithShiftState:]):
        * WebKit.xcodeproj/project.pbxproj:

2019-01-22  Daniel Bates  <dabates@apple.com>

        [iOS] Interpret text key commands on keydown and app key commands on keypress
        https://bugs.webkit.org/show_bug.cgi?id=192897
        <rdar://problem/46857378>

        Reviewed by Brent Fulgham.

        Adopt SPI to interpret text key commands and app key commands independently on keydown (isCharEvent
        is false) and keypress (isCharEvent is true), respectively.

        * Platform/spi/ios/UIKitSPI.h: Add more SPI.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):

2019-01-22  David Kilzer  <ddkilzer@apple.com>

        C strings in ClientCertificateAuthenticationXPCConstants.h are duplicated
        <https://webkit.org/b/193607>
        <rdar://problem/47334613>

        Reviewed by Alex Christensen.

        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::initializeConnection):
        * UIProcess/Authentication/cocoa/AuthenticationChallengeProxyCocoa.mm:
        (WebKit::AuthenticationChallengeProxy::sendClientCertificateCredentialOverXpc):
        - Update name of constants.

        * Shared/Authentication/cocoa/ClientCertificateAuthenticationXPCConstants.cpp: Copied from Source/WebKit/Shared/Authentication/cocoa/ClientCertificateAuthenticationXPCConstants.h.
        * Shared/Authentication/cocoa/ClientCertificateAuthenticationXPCConstants.h:
        - Put constant values in a namespace, and move values to
          ClientCertificateAuthenticationXPCConstants.cpp.

        * SourcesCocoa.txt:
        * UnifiedSources-input.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:
        - Add ClientCertificateAuthenticationXPCConstants.cpp.

2019-01-22  David Kilzer  <ddkilzer@apple.com>

        Switch remaining QuickLook soft-linking in WebCore, WebKit over to QuickLookSoftLink.{cpp,h}
        <https://webkit.org/b/193654>
        <rdar://problem/47430290>

        Reviewed by Alex Christensen.

        - Moves QuickLookSoftLink.{h,mm} to PAL.
        - Adds soft-link to 3 classes to consolidate QuickLook.framework
          soft-linking.
        - Updates existing source to work with above changes.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        (WebKit::SystemPreviewController::start):
        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]):
        - Switch to using QuickLookSoftLink.{h,mm} in PAL.

2019-01-22  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        Add a CSSLogicalEnabled runtime flag.

        * Shared/WebPreferences.yaml:

2019-01-22  Frederic Wang  <fwang@igalia.com>

        Enable CSSOMViewScrollingAPI
        https://bugs.webkit.org/show_bug.cgi?id=189472

        Reviewed by Simon Fraser.

        This patch enables the CSSOMViewScrollingAPI option by default. This feature has already been
        enabled in tests since r235855. Basically, this change fixes an old compatibility issue
        regarding which scrolling element correspond to the viewport in standard mode (WebKit uses
        document.body while Gecko/Edge/Chromium use document.documentElement as described in the
        CSSOM View specification). WebKit developers writing tests can use document.scrollingElement
        for that purpose, so that they work independently of whether the option is enabled.

        [1] https://lists.webkit.org/pipermail/webkit-dev/2018-January/029857.html

        * Shared/WebPreferences.yaml: Enable by default and remove "experimental" category in
        accordance with the new policy. Instead, keep an internal flag only for developers.

2019-01-21  Antti Koivisto  <antti@apple.com>

        [iOS] Handle hit testing for subframes
        https://bugs.webkit.org/show_bug.cgi?id=192303

        Reviewed by Frédéric Wang.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):

        Only set delegatesScrolling for the main frame.

2019-01-21  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r240243
        Nhttps://bugs.webkit.org/show_bug.cgi?id=193660
        <rdar://problem/47433602>

        The new ResourceLoadStatistics section of 'removeData' was incrementing the
        pending callback count before deciding whether to send a message to delete
        data. This left the count out-of-balance leading to the operation never
        completing.

        This patch also prevents sending a second message to the NetworkProcess
        requesting data be deleted if the message was already sent in an earlier
        section of the method (e.g., as typically happens when all website data
        is being deleted).

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):

2019-01-21  Brent Fulgham  <bfulgham@apple.com>

        Implement message handlers for NetworkProcess-based ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=193556
        <rdar://problem/47368501>

        Reviewed by Alex Christensen.

        This patch adds a number of sibling methods for tracking ResourceLoadStatistics when the
        observations are being handled in the NetworkProcess, rather than the UIProcess. The
        original versions of these methods will be removed as part of Bug 193303.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::processStatisticsAndDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::grandfatherExistingWebsiteData):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        (WebKit::ResourceLoadStatisticsMemoryStore::store const):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebResourceLoadStatisticsStore::setNotifyPagesWhenTelemetryWasCaptured):
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResourceForDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubresourceUnder):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubFrameUnder):
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsRedirectingTo):
        (WebKit::WebResourceLoadStatisticsStore::clearPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setGrandfathered):
        (WebKit::WebResourceLoadStatisticsStore::isGrandfathered):
        (WebKit::WebResourceLoadStatisticsStore::setSubframeUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectFrom):
        (WebKit::WebResourceLoadStatisticsStore::setTimeToLiveUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::logTestingEvent):
        (WebKit::WebResourceLoadStatisticsStore::notifyResourceLoadStatisticsProcessed):
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores):
        (WebKit::WebResourceLoadStatisticsStore::topPrivatelyControlledDomainsWithWebsiteData):
        (WebKit::WebResourceLoadStatisticsStore::sendDiagnosticMessageWithValue const):
        (WebKit::WebResourceLoadStatisticsStore::notifyPageStatisticsTelemetryFinished const):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::submitTopList):
        (WebKit::submitTopLists):
        (WebKit::notifyPages):
        (WebKit::WebResourceLoadStatisticsTelemetry::calculateAndSubmit):
        (WebKit::nonEphemeralWebPageProxy): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::logUserInteraction):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::dumpResourceLoadStatistics):
        (WebKit::NetworkProcess::isGrandfathered):
        (WebKit::NetworkProcess::isPrevalentResource):
        (WebKit::NetworkProcess::isVeryPrevalentResource):
        (WebKit::NetworkProcess::setGrandfathered):
        (WebKit::NetworkProcess::setPrevalentResource):
        (WebKit::NetworkProcess::setPrevalentResourceForDebugMode):
        (WebKit::NetworkProcess::setVeryPrevalentResource):
        (WebKit::NetworkProcess::clearPrevalentResource):
        (WebKit::NetworkProcess::submitTelemetry):
        (WebKit::NetworkProcess::scheduleCookieBlockingUpdate):
        (WebKit::NetworkProcess::scheduleClearInMemoryAndPersistent):
        (WebKit::NetworkProcess::resetParametersToDefaultValues):
        (WebKit::NetworkProcess::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::NetworkProcess::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::NetworkProcess::setNotifyPagesWhenTelemetryWasCaptured):
        (WebKit::NetworkProcess::setSubframeUnderTopFrameOrigin):
        (WebKit::NetworkProcess::isRegisteredAsRedirectingTo):
        (WebKit::NetworkProcess::isRegisteredAsSubFrameUnder):
        (WebKit::NetworkProcess::setSubresourceUnderTopFrameOrigin):
        (WebKit::NetworkProcess::setSubresourceUniqueRedirectTo):
        (WebKit::NetworkProcess::setSubresourceUniqueRedirectFrom):
        (WebKit::NetworkProcess::isRegisteredAsSubresourceUnder):
        (WebKit::NetworkProcess::setTopFrameUniqueRedirectTo):
        (WebKit::NetworkProcess::setTopFrameUniqueRedirectFrom):
        (WebKit::NetworkProcess::setLastSeen):
        (WebKit::NetworkProcess::hasStorageAccess):
        (WebKit::NetworkProcess::requestStorageAccess):
        (WebKit::NetworkProcess::grantStorageAccess):
        (WebKit::NetworkProcess::logUserInteraction):
        (WebKit::NetworkProcess::hadUserInteraction):
        (WebKit::NetworkProcess::clearUserInteraction):
        (WebKit::NetworkProcess::setGrandfatheringTime):
        (WebKit::NetworkProcess::setMaxStatisticsEntries):
        (WebKit::NetworkProcess::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::NetworkProcess::setPruneEntriesDownTo):
        (WebKit::NetworkProcess::setTimeToLiveUserInteraction):
        (WebKit::NetworkProcess::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::NetworkProcess::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkProcess::setResourceLoadStatisticsDebugMode):
        (WebKit::NetworkProcess::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::filterForTopLevelDomains):
        (WebKit::NetworkProcess::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores):
        (WebKit::NetworkProcess::topPrivatelyControlledDomainsWithWebsiteData):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkSession::notifyResourceLoadStatisticsProcessed):
        (WebKit::NetworkSession::logDiagnosticMessageWithValue):
        (WebKit::NetworkSession::notifyPageStatisticsTelemetryFinished):
        (WebKit::NetworkSession::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores):
        (WebKit::NetworkSession::topPrivatelyControlledDomainsWithWebsiteData):
        (WebKit::NetworkSession::enableResourceLoadStatistics): Deleted.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsDebugModeWithCompletionHandler):
        (WKWebsiteDataStoreSetResourceLoadStatisticsPrevalentResourceForDebugMode):
        (WKWebsiteDataStoreSetStatisticsLastSeen):
        (WKWebsiteDataStoreSetStatisticsPrevalentResource):
        (WKWebsiteDataStoreSetStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreDumpResourceLoadStatistics):
        (WKWebsiteDataStoreIsStatisticsPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubresourceUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubFrameUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsRedirectingTo):
        (WKWebsiteDataStoreSetStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreIsStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreSetStatisticsGrandfathered):
        (WKWebsiteDataStoreIsStatisticsGrandfathered):
        (WKWebsiteDataStoreSetStatisticsSubframeUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsTimeToLiveUserInteraction):
        (WKWebsiteDataStoreStatisticsProcessStatisticsAndDataRecords):
        (WKWebsiteDataStoreStatisticsUpdateCookieBlocking):
        (WKWebsiteDataStoreStatisticsSubmitTelemetry):
        (WKWebsiteDataStoreSetStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WKWebsiteDataStoreSetStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WKWebsiteDataStoreSetStatisticsNotifyPagesWhenTelemetryWasCaptured):
        (WKWebsiteDataStoreSetStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WKWebsiteDataStoreSetStatisticsGrandfatheringTime):
        (WKWebsiteDataStoreSetStatisticsMaxStatisticsEntries):
        (WKWebsiteDataStoreSetStatisticsPruneEntriesDownTo):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setResourceLoadStatisticsTestingCallback:]):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::clearCallbackStates):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::nonEphemeralWebPageProxy):
        (WebKit::NetworkProcessProxy::logGlobalDiagnosticMessageWithValue):
        (WebKit::NetworkProcessProxy::dumpResourceLoadStatistics):
        (WebKit::NetworkProcessProxy::didDumpResourceLoadStatistics):
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcessProxy::didUpdateBlockCookies):
        (WebKit::NetworkProcessProxy::isPrevalentResource):
        (WebKit::NetworkProcessProxy::isPrevalentResourceResult):
        (WebKit::NetworkProcessProxy::isVeryPrevalentResource):
        (WebKit::NetworkProcessProxy::setPrevalentResource):
        (WebKit::NetworkProcessProxy::setPrevalentResourceForDebugMode):
        (WebKit::NetworkProcessProxy::setVeryPrevalentResource):
        (WebKit::NetworkProcessProxy::didSetResourceLoadStatisticData):
        (WebKit::NetworkProcessProxy::setLastSeen):
        (WebKit::NetworkProcessProxy::clearPrevalentResource):
        (WebKit::NetworkProcessProxy::scheduleCookieBlockingUpdate):
        (WebKit::NetworkProcessProxy::didScheduleCookieBlockingUpdate):
        (WebKit::NetworkProcessProxy::scheduleClearInMemoryAndPersistent):
        (WebKit::NetworkProcessProxy::didScheduleStatisticsProcessing):
        (WebKit::NetworkProcessProxy::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::NetworkProcessProxy::logUserInteraction):
        (WebKit::NetworkProcessProxy::hasHadUserInteraction):
        (WebKit::NetworkProcessProxy::didHaveUserInteraction):
        (WebKit::NetworkProcessProxy::clearUserInteraction):
        (WebKit::NetworkProcessProxy::setAgeCapForClientSideCookies):
        (WebKit::NetworkProcessProxy::didSetAgeCapForClientSideCookies):
        (WebKit::NetworkProcessProxy::setTimeToLiveUserInteraction):
        (WebKit::NetworkProcessProxy::didUpdateRuntimeSettings):
        (WebKit::NetworkProcessProxy::setNotifyPagesWhenTelemetryWasCaptured):
        (WebKit::NetworkProcessProxy::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::NetworkProcessProxy::setSubframeUnderTopFrameOrigin):
        (WebKit::NetworkProcessProxy::isRegisteredAsRedirectingTo):
        (WebKit::NetworkProcessProxy::didIsRegisteredAsRedirectingTo):
        (WebKit::NetworkProcessProxy::isRegisteredAsSubFrameUnder):
        (WebKit::NetworkProcessProxy::didIsRegisteredAsSubFrameUnder):
        (WebKit::NetworkProcessProxy::setSubresourceUnderTopFrameOrigin):
        (WebKit::NetworkProcessProxy::isRegisteredAsSubresourceUnder):
        (WebKit::NetworkProcessProxy::didIsRegisteredAsSubresourceUnder):
        (WebKit::NetworkProcessProxy::setSubresourceUniqueRedirectTo):
        (WebKit::NetworkProcessProxy::setSubresourceUniqueRedirectFrom):
        (WebKit::NetworkProcessProxy::setTopFrameUniqueRedirectTo):
        (WebKit::NetworkProcessProxy::setTopFrameUniqueRedirectFrom):
        (WebKit::NetworkProcessProxy::isGrandfathered):
        (WebKit::NetworkProcessProxy::didIsGrandfathered):
        (WebKit::NetworkProcessProxy::setGrandfathered):
        (WebKit::NetworkProcessProxy::hasStorageAccess):
        (WebKit::NetworkProcessProxy::requestStorageAccess):
        (WebKit::NetworkProcessProxy::grantStorageAccess):
        (WebKit::NetworkProcessProxy::storageAccessRequestResult):
        (WebKit::NetworkProcessProxy::storageAccessOperationResult):
        (WebKit::NetworkProcessProxy::didRemoveAllStorageAccess):
        (WebKit::NetworkProcessProxy::didSetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcessProxy::setCacheMaxAgeCap):
        (WebKit::NetworkProcessProxy::setGrandfatheringTime):
        (WebKit::NetworkProcessProxy::setMaxStatisticsEntries):
        (WebKit::NetworkProcessProxy::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::NetworkProcessProxy::setPruneEntriesDownTo):
        (WebKit::NetworkProcessProxy::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::NetworkProcessProxy::setResourceLoadStatisticsDebugMode):
        (WebKit::NetworkProcessProxy::resetParametersToDefaultValues):
        (WebKit::NetworkProcessProxy::submitTelemetry):
        (WebKit::NetworkProcessProxy::notifyResourceLoadStatisticsProcessed):
        (WebKit::NetworkProcessProxy::notifyWebsiteDataDeletionForTopPrivatelyOwnedDomainsFinished):
        (WebKit::NetworkProcessProxy::notifyWebsiteDataScanForTopPrivatelyControlledDomainsFinished):
        (WebKit::NetworkProcessProxy::notifyResourceLoadStatisticsTelemetryFinished):
        (WebKit::NetworkProcessProxy::didLogUserInteraction): Deleted.
        (WebKit::NetworkProcessProxy::didResetCacheMaxAgeCapForPrevalentResources): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::nonEphemeralWebPageProxy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::notifyWebsiteDataScanForTopPrivatelyControlledDomainsFinished):
        (WebKit::WebProcessProxy::notifyWebsiteDataDeletionForTopPrivatelyOwnedDomainsFinished):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::setMaxStatisticsEntries):
        (WebKit::WebsiteDataStore::setPruneEntriesDownTo):
        (WebKit::WebsiteDataStore::setGrandfatheringTime):
        (WebKit::WebsiteDataStore::setCacheMaxAgeCap):
        (WebKit::WebsiteDataStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::WebsiteDataStore::dumpResourceLoadStatistics):
        (WebKit::WebsiteDataStore::isPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode):
        (WebKit::WebsiteDataStore::isVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebsiteDataStore::setSubframeUnderTopFrameOrigin):
        (WebKit::WebsiteDataStore::isRegisteredAsSubFrameUnder):
        (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::isRegisteredAsRedirectingTo):
        (WebKit::WebsiteDataStore::clearPrevalentResource):
        (WebKit::WebsiteDataStore::resetParametersToDefaultValues):
        (WebKit::WebsiteDataStore::submitTelemetry):
        (WebKit::WebsiteDataStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebsiteDataStore::scheduleCookieBlockingUpdate):
        (WebKit::WebsiteDataStore::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::WebsiteDataStore::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::WebsiteDataStore::setAgeCapForClientSideCookies):
        (WebKit::WebsiteDataStore::setLastSeen):
        (WebKit::WebsiteDataStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebsiteDataStore::setNotifyPagesWhenTelemetryWasCaptured):
        (WebKit::WebsiteDataStore::hasStorageAccessForFrameHandler):
        (WebKit::WebsiteDataStore::getAllStorageAccessEntries):
        (WebKit::WebsiteDataStore::grantStorageAccessHandler):
        (WebKit::WebsiteDataStore::removeAllStorageAccessHandler):
        (WebKit::WebsiteDataStore::removePrevalentDomains):
        (WebKit::WebsiteDataStore::hasStorageAccess):
        (WebKit::WebsiteDataStore::requestStorageAccess):
        (WebKit::WebsiteDataStore::grantStorageAccess):
        (WebKit::WebsiteDataStore::setTimeToLiveUserInteraction):
        (WebKit::WebsiteDataStore::logUserInteraction):
        (WebKit::WebsiteDataStore::hasHadUserInteraction):
        (WebKit::WebsiteDataStore::clearUserInteraction):
        (WebKit::WebsiteDataStore::isGrandfathered):
        (WebKit::WebsiteDataStore::setGrandfathered):
        (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::webPageWasAdded):
        (WebKit::WebsiteDataStore::webPageWasInvalidated):
        (WebKit::WebsiteDataStore::webProcessWillOpenConnection):
        (WebKit::WebsiteDataStore::webPageWillOpenConnection):
        (WebKit::WebsiteDataStore::webPageDidCloseConnection):
        (WebKit::WebsiteDataStore::webProcessDidCloseConnection):
        (WebKit::WebsiteDataStore::isAssociatedProcessPool const):
        (WebKit::WebsiteDataStore::processPools const):
        (WebKit::WebsiteDataStore::resourceLoadStatisticsEnabled const):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
        (WebKit::WebsiteDataStore::logTestingEvent):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::setStatisticsTestingCallback):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2019-01-15  Darin Adler  <darin@apple.com>

        Use references rather than pointers for register/unregister functions, and more
        https://bugs.webkit.org/show_bug.cgi?id=175028

        Reviewed by Daniel Bates.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::willEnterFullScreen): Update for change to the
        functions in Document; pass a reference.
        (WebKit::WebFullScreenManager::didEnterFullScreen): Ditto, don't pass the element.
        (WebKit::WebFullScreenManager::willExitFullScreen): Ditto.
        (WebKit::WebFullScreenManager::didExitFullScreen): Ditto.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest): Pass a reference.
        (WebKit::UserMediaPermissionRequestManager::mediaCanStart): Ditto.
        (WebKit::UserMediaPermissionRequestManager::removeMediaRequestFromMaps): Ditto.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::~PluginView): Ditto.
        (WebKit::PluginView::initializePlugin): Ditto.

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wreturn-type warning
        https://bugs.webkit.org/show_bug.cgi?id=193333
        <rdar://problem/45649489>

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

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView accessibilityAttributeValue:forParameter:]):
        (-[WKWebView IGNORE_WARNINGS_END]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView accessibilityAttributeValue:forParameter:]):
        (-[WKView IGNORE_WARNINGS_END]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::accessibilityAttributeValue):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView accessibilityConvertRelativeFrameFromPage:]):

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r240209.

        Broke GTK/WPE injected bundle

        Reverted changeset:

        "AX: Support returning relative frames for accessibility"
        https://bugs.webkit.org/show_bug.cgi?id=193414
        https://trac.webkit.org/changeset/240209

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * Configurations/BaseTarget.xcconfig: Removed -iframework options from OTHER_CFLAGS and
          OTHER_CPLUSPLUSFLAGS.
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm: Import Carbon.h instead of an
          HIToolbox header.
        * UIProcess/Cocoa/WebViewImpl.mm: Ditto.
        * UIProcess/mac/WKPrintingView.mm: Import Quartz.h instead of a PDFKit header.
        * UIProcess/mac/WKTextInputWindowController.mm: Import Carbon.h instead of an HIToolbox
          header.
        * WebProcess/Plugins/PDF/PDFAnnotationTextWidgetDetails.h: Import Quartz.h instead of a
          PDFKit header.
        * WebProcess/Plugins/PDF/PDFLayerControllerSPI.h: Ditto.
        * WebProcess/Plugins/PDF/PDFPlugin.mm: Ditto.
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm: Ditto.
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm: Ditto.
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.mm: Ditto.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm: Ditto.
        * WebProcess/WebPage/mac/WebPageMac.mm: Ditto.

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView accessibilityAttributeValue:forParameter:]):
        (-[WKWebView IGNORE_WARNINGS_END]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView accessibilityAttributeValue:forParameter:]):
        (-[WKView IGNORE_WARNINGS_END]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::accessibilityAttributeValue):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView accessibilityConvertRelativeFrameFromPage:]):

2019-01-20  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577
        <rdar://problem/47408511>

        Unreviewed. Also enable Pointer Events for iosmac.

        * Configurations/FeatureDefines.xcconfig:

2019-01-19  David Kilzer  <ddkilzer@apple.com>

        Follow-up: iOS: Updating input mode should update the software keyboard
        <https://bugs.webkit.org/show_bug.cgi?id=193565>
        <rdar://problem/47376334>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::focusedElementDidChangeInputMode): Fix iOS
        Debug builds after r240199 by downcasting `element` to
        `HTMLElement` before calling canonicalInputMode().

2019-01-19  David Kilzer  <ddkilzer@apple.com>

        Sort WebKit Xcode project file

        * WebKit.xcodeproj/project.pbxproj:

2019-01-19  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2019-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: Updating input mode should update the software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=193565
        <rdar://problem/47376334>

        Reviewed by Wenson Hsieh.

        Update the software keyboard when the inputmode content attribute on the focused element had been mutated.

        * Scripts/webkit/messages.py:
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::focusedElementDidChangeInputMode):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didUpdateInputMode:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::focusedElementDidChangeInputMode):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedElementDidChangeInputMode):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::focusedElementDidChangeInputMode):
        * WebProcess/WebPage/WebPage.h:

2019-01-18  Tim Horton  <timothy_horton@apple.com>

        Adjust WKDrawingView protocol method name
        https://bugs.webkit.org/show_bug.cgi?id=193604

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView canvasViewDrawingDidChange:]):
        (-[WKDrawingView drawingDidChange:]): Deleted.

2019-01-18  David Kilzer  <ddkilzer@apple.com>

        [WebKit] Change Xcode folders to map to folders on disk

        * WebKit.xcodeproj/project.pbxproj: Update these folders:
        - Shared/Authentication
        - Shared/Authentication/cocoa

2019-01-18  Brian Burg  <bburg@apple.com>

        Automation.computeElementLayout should return visual viewport-aware coordinates
        https://bugs.webkit.org/show_bug.cgi?id=193598
        <rdar://problem/35325644>

        Reviewed by Simon Fraser.

        Previously I added CoordinateSystem::VisualViewport to stub out this for iOS.
        But I think that it's a mistake for safaridriver to care about VisualViewport
        being enabled or not, because it is a runtime-switchable setting.

        This patch removes CoordinateSystem::VisualViewport. Make the existing
        CoordinateSystem::LayoutViewport use visual viewport semantics if needed.

        This is tested by WebDriver element clicking tests. There should not be any
        difference in behavior until it is possible to zoom with gestures via WebDriver.

        * Shared/CoordinateSystem.h:
        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::protocolStringToCoordinateSystem):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout):

2019-01-18  Daniel Bates  <dabates@apple.com>

        Fix some build issues.

        Include missing header WKDrawingCoordinator.

        * UIProcess/ios/WKInkPickerView.mm:

2019-01-18  Tim Horton  <timothy_horton@apple.com>

        Get rid of ADVANCED_SPELL_CHECKING
        https://bugs.webkit.org/show_bug.cgi?id=193592

        Reviewed by Wenson Hsieh.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::requestCandidatesForSelectionIfNeeded):
        (WebKit::WebViewImpl::insertText):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):

2019-01-18  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Content blockers are sometimes lost on back navigation cross-site
        https://bugs.webkit.org/show_bug.cgi?id=193588
        <rdar://problem/47131566>

        Reviewed by Alex Christensen.

        When the WebPageProxy needs to create initialization parameters for its WebPage in the
        WebContent process, it calls WebProcessProxy::addWebUserContentControllerProxy()
        which calls WebUserContentControllerProxy::addProcess(). This last call is supposed to
        register the WebProcessProxy with the WebUserContentControllerProxy and adding the
        contentRuleLists to the WebPageCreationParameters. The issue is that if the
        WebUserContentControllerProxy already knows about this WebProcessProxy, it would return
        early and not populate the WebPageCreationParameters.

        In PSON world, when navigating back to a page that failed to enter page cache, we reuse
        the process where we previously loaded the page but re-create a new WebPage on the
        WebContent process site. When this happens, WebUserContentControllerProxy would not
        add the contentRuleLists to the WebPageCreationParameters and the new WebPage in the
        previously-suspended process would be missing them.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/BaseTarget.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-18  Antti Koivisto  <antti@apple.com>

        Implement asynchronous frame scrolling for iOS
        https://bugs.webkit.org/show_bug.cgi?id=193539
        <rdar://problem/47379873>

        Reviewed by Simon Fraser.

        Add a scrolling node type that can handle UIScrollView backed frames.
        It basically just instantiates and forwards to the existing ScrollingTreeScrollingNodeDelegateIOS.

        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h: Added.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm: Added.
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::create):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::ScrollingTreeFrameScrollingNodeRemoteIOS):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::~ScrollingTreeFrameScrollingNodeRemoteIOS):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateAfterChildren):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterAncestorChange):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::scrollPosition const):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::setScrollLayerPosition):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterDelegatedScroll):
        * WebKit.xcodeproj/project.pbxproj:

2019-01-18  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Scroll position is not always restored properly when navigating back
        https://bugs.webkit.org/show_bug.cgi?id=193578
        <rdar://problem/47386331>

        Reviewed by Tim Horton.

        Fix issues causing the scroll position to not be restored at all (or incorrectly) when
        navigating back cross-site with PSON enabled. Also make sure that the swipe gesture
        snapshot really stays up until we've restored the scroll position.

        Note that even after those changes, I can still sometimes reproduce a white flash when
        swiping back to Google search results (scroll position being correct now). This is
        tracked by <rdar://problem/47071684> and happens even if I disable PSON entirely.

        * Shared/SessionState.cpp:
        (WebKit::FrameState::encode const):
        (WebKit::FrameState::decode):
        * Shared/SessionState.h:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFrameState):
        (WebKit::applyFrameState):
        obscuredInsets is present on the HistoryItem in the WebProcess but was never passed to
        or stored by the UIProcess on the WebBackForwardListItem. obscuredInsets is needed to
        properly restore the scrollPosition (position was 70px off on my iPad without this).
        With PSON enabled, if you swipe back cross-process and the previous page was not put
        into PageCache, then the HistoryItem is gone on the WebProcess side. What happens is
        that the UIProcess sends its WebBackForwardListItem to the WebProcess, which restores
        the HistoryItem there, and then asks it to load it. The obscuredInsets was getting lost
        in the process since the UIProcess never knew about it.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        Drop logic that was causing the ViewGestureController to not wait for the scroll position
        to be restored before taking down the snapshot, when UI-side compositing is enabled.
        If you look at the comment above the code, you'll see that the code in question was meant
        to impact only the non-UI side compositing code path. As a matter of fact, when the code
        was reviewed at https://bugs.webkit.org/show_bug.cgi?id=151224, it was protected by a
        #if PLATFORM(MAC), before getting modified the wrong way before landing. In practice, we
        would have often restored the scroll position by the time the load is finished so it would
        not cause a flash in most cases. However, with PSON enabled and the layer tree freezing we
        do on process-swap, the first post-scroll restoration layer tree commit may now occur a
        little bit later and we would lose the race more often.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateBackForwardItem):
        * UIProcess/WebProcessProxy.h:
        When adding PageCache support to PSON, we used to navigate the "suspended" page to
        about:blank. This would lead to unwanted WebProcessProxy::updateBackForwardItem()
        calls from the WebProcess which we wanted to ignore. We thus added logic to ignore
        updateBackForwardItem() IPC from the old WebProcess after a swap. The issue with this
        is that we sometimes miss/ignore legit updates to the HistoryItem from the old process,
        in particular with regards to the scroll position and the pageScaleFactor. So if you
        swiped and then quickly enough did a cross-site navigation, the UIProcess'
        WebBackForwardList would not get updated with the latest scroll position and we would
        thus fail to restore it later on. To address the issue, we now stop ignoring updates
        from the old WebProcess after a swap. This logic is no longer needed since we no longer
        navigate the old page to about:blank after a swap, we merely suspend it "in place".

2019-01-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove some last vestiges of assisted node terminology in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=193572

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKFocusedElementInfo.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView _showKeyboard]):
        (-[WKContentView _hideKeyboard]):

        Add a FIXME about invoking `-reloadInputViews` on watchOS when the focused element is blurred.

        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _elementDidBlur]):
        (-[WKContentView updateCurrentFocusedElementInformation:]):
        (-[WKContentView _startAssistingKeyboard]): Deleted.
        (-[WKContentView _stopAssistingKeyboard]): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getFocusedElementInformation):

2019-01-18  Youenn Fablet  <youenn@apple.com>

        Add a new SPI to request for cache storage quota increase
        https://bugs.webkit.org/show_bug.cgi?id=193323

        Reviewed by Alex Christensen.

        Add a delegate on the WebSiteDataStore for WebKit to ask for quota update.
        The current SPI is currently CacheStorage specific but future work should
        make it so that other storage like IDB use the same mechanism.
        By default, quota remains unchanged if delegate is not implemented.

        * NetworkProcess/NetworkProcess.cpp:
        * UIProcess/API/Cocoa/WKStorageQuotaDelegatePrivate.h: Added.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (WebsiteDataStoreQuotaManager::WebsiteDataStoreQuotaManager):
        (-[WKWebsiteDataStore _quotaDelegate]):
        (-[WKWebsiteDataStore set_quotaDelegate:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStoreInternal.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::requestCacheStorageSpace):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::quotaManager):
        (WebKit::WebsiteDataStore::setQuotaManager):
        * UIProcess/WebsiteData/WebsiteDataStoreQuotaManager.h: Added.
        (WebKit::WebsiteDataStoreQuotaManager::~WebsiteDataStoreQuotaManager):
        (WebKit::WebsiteDataStoreQuotaManager::requestCacheStorageSpace):
        * WebKit.xcodeproj/project.pbxproj:

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [WPE] Add Qt extension
        https://bugs.webkit.org/show_bug.cgi?id=191464

        Reviewed by Carlos Garcia Campos.

        This new extension is a QML plugin embedding a WPE ViewBackend
        implementation. It provides a public API very similar to Qt's
        WebView module. It comes with a simple mini-browser implemented in
        QML.

        QtWPE is known to work with the Wayland-EGL (in GNOME and Weston
        compositors) and EGLFS QPAs.

        * PlatformWPE.cmake:
        * UIProcess/API/wpe/qt/WPEQmlExtensionPlugin.cpp: Added.
        (WPEQmlExtensionPlugin::registerTypes):
        * UIProcess/API/wpe/qt/WPEQmlExtensionPlugin.h: Added.
        * UIProcess/API/wpe/qt/WPEQtView.cpp: Added.
        (WPEQtView::WPEQtView):
        (WPEQtView::~WPEQtView):
        (WPEQtView::geometryChanged):
        (WPEQtView::configureWindow):
        (WPEQtView::createOffscreen):
        (WPEQtView::backendCreated):
        (WPEQtView::notifyUrlChangedCallback):
        (WPEQtView::notifyTitleChangedCallback):
        (WPEQtView::notifyLoadProgressCallback):
        (WPEQtView::notifyLoadChangedCallback):
        (WPEQtView::notifyLoadFailedCallback):
        (WPEQtView::updatePaintNode):
        (WPEQtView::url const):
        (WPEQtView::setUrl):
        (WPEQtView::loadProgress const):
        (WPEQtView::title const):
        (WPEQtView::canGoBack const):
        (WPEQtView::isLoading const):
        (WPEQtView::canGoForward const):
        (WPEQtView::goBack):
        (WPEQtView::goForward):
        (WPEQtView::reload):
        (WPEQtView::stop):
        (WPEQtView::loadHtml):
        (WPEQtView::jsAsyncReadyCallback):
        (WPEQtView::handleJsResult):
        (WPEQtView::runJavaScript):
        (WPEQtView::mousePressEvent):
        (WPEQtView::mouseReleaseEvent):
        (WPEQtView::hoverEnterEvent):
        (WPEQtView::hoverLeaveEvent):
        (WPEQtView::hoverMoveEvent):
        (WPEQtView::wheelEvent):
        (WPEQtView::keyPressEvent):
        (WPEQtView::keyReleaseEvent):
        (WPEQtView::touchEvent):
        * UIProcess/API/wpe/qt/WPEQtView.h: Added.
        * UIProcess/API/wpe/qt/WPEQtViewBackend.cpp: Added.
        (configureCallback):
        (WPEQtViewBackend::WPEQtViewBackend):
        (WPEQtViewBackend::~WPEQtViewBackend):
        (WPEQtViewBackend::configureGlibEglDisplay):
        (WPEQtViewBackend::configureEglDisplay):
        (WPEQtViewBackend::initialize):
        (WPEQtViewBackend::backend const):
        (WPEQtViewBackend::resize):
        (WPEQtViewBackend::getTexture):
        (WPEQtViewBackend::initSurface):
        (WPEQtViewBackend::displayImage):
        (WPEQtViewBackend::modifiers const):
        (WPEQtViewBackend::dispatchHoverEnterEvent):
        (WPEQtViewBackend::dispatchHoverLeaveEvent):
        (WPEQtViewBackend::dispatchHoverMoveEvent):
        (WPEQtViewBackend::dispatchMousePressEvent):
        (WPEQtViewBackend::dispatchMouseReleaseEvent):
        (WPEQtViewBackend::dispatchWheelEvent):
        (WPEQtViewBackend::dispatchKeyEvent):
        (WPEQtViewBackend::dispatchTouchEvent):
        * UIProcess/API/wpe/qt/WPEQtViewBackend.h: Added.
        * UIProcess/API/wpe/qt/WPEQtViewLoadRequest.cpp: Added.
        (WPEQtViewLoadRequest::WPEQtViewLoadRequest):
        (WPEQtViewLoadRequest::~WPEQtViewLoadRequest):
        (WPEQtViewLoadRequest::url const):
        (WPEQtViewLoadRequest::status const):
        (WPEQtViewLoadRequest::errorString const):
        * UIProcess/API/wpe/qt/WPEQtViewLoadRequest.h: Added.
        * UIProcess/API/wpe/qt/WPEQtViewLoadRequestPrivate.h: Added.
        (WPEQtViewLoadRequestPrivate::WPEQtViewLoadRequestPrivate):
        (WPEQtViewLoadRequestPrivate::~WPEQtViewLoadRequestPrivate):
        * UIProcess/API/wpe/qt/qmldir: Added.

2019-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Content offset jumps erratically when autoscrolling near scroll view content inset areas
        https://bugs.webkit.org/show_bug.cgi?id=193494
        <rdar://problem/46859627>

        Reviewed by Simon Fraser and Tim Horton.

        Adds `contentInsets` to `VisibleContentRectUpdateInfo`. This keeps track of the visible content insets
        surrounding the unobscured content rect. See WebCore ChangeLog for more details.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode const):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::contentInsets const):
        (WebKit::operator==):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _computedObscuredInset]):
        (-[WKWebView _computedContentInset]):
        (-[WKWebView _computedUnobscuredSafeAreaInset]):

        We don't care about source compatibility with iOS 10 and below anymore, so we should change these >= iOS 11
        target checks to simply `PLATFORM(IOS)`.

        (-[WKWebView _updateVisibleContentRects]):

        Compute the visible content insets on all sides of the unobscured content rect. These insets are scaled to
        content coordinates.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (floatBoxExtent):

        Add a helper to convert `UIEdgeInsets` to `WebCore::FloatBoxExtent`, and use it in a few places below.

        (-[WKContentView didUpdateVisibleRect:unobscuredRect:contentInsets:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

        Update the Page's content insets.

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  John Wilander  <wilander@apple.com>

        Add infrastructure to enable/disable ITP Debug Mode through Preferences
        https://bugs.webkit.org/show_bug.cgi?id=193510
        <rdar://problem/47330969>

        Reviewed by Dean Jackson.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::setResourceLoadStatisticsDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::setPrevalentResourceForDebugMode):
            These functions are now suited for runtime switching of ITP Debug Mode.
        * Shared/WebPreferences.yaml:
            Changed name from ResourceLoadStatisticsDebugMode to ItpDebugModeEnabled.
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setItpDebugModeEnabled:]):
        (-[WKPreferences _itpDebugModeEnabled]):
            New private preferences functions.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm:
        (WebKit::ResourceLoadStatisticsMemoryStore::registerUserDefaultsIfNeeded):
            Removed support for old experimental user default. Added a new one that's
            not connected to any UI, i.e. merely for command line debugging where
            ITP Debug Mode needs to be on all the time.

2019-01-17  Tim Horton  <timothy_horton@apple.com>

        Adopt NSTextCheckingSuppressInitialCapitalizationKey
        https://bugs.webkit.org/show_bug.cgi?id=193545

        Reviewed by Dean Jackson.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/BaseTarget.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-16  Dean Jackson  <dino@apple.com>

        (iPad) Link tapping is sluggish on many sites
        https://bugs.webkit.org/show_bug.cgi?id=193522
        <rdar://problem/47102987>

        Reviewed by Wenson Hsieh.

        Some WKWebView clients might set the initial zoom scale of the page to
        something other than 1, which disables the "fast tap" behaviour.
        The fix is very simple -- just check against the initial scale rather
        than 1.

        The most likely regression from this would be pages designed for desktop,
        but provide a viewport tag saying width=device-width and initial-scale.
        They might stop allowing double-tap-to-zoom.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _allowsDoubleTapGestures]): Check against initial page scale.

2019-01-17  Alex Christensen  <achristensen@webkit.org>

        Stop using NetworkStorageSession::storageSession in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=193529

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::createSocketStream):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkSocketStream.cpp:
        (WebKit::NetworkSocketStream::create):
        (WebKit::NetworkSocketStream::NetworkSocketStream):
        * NetworkProcess/NetworkSocketStream.h:
        * NetworkProcess/NetworkStorageSessionProvider.h: Added.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createSocketStreamHandle):
        * WebProcess/Network/WebSocketProvider.h:
        * WebProcess/WebPage/WebCookieJar.cpp:
        (WebKit::WebCookieJar::WebCookieJar):
        * WebProcess/WebPage/WebCookieJar.h:

2019-01-16  Youenn Fablet  <youenn@apple.com>

        Add a new SPI for controlling getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=192793

        Reviewed by Eric Carlson.

        Some weaknesses of the current getUserMedia/enumerateDevices SPI were found.
        In particular:
        - The hash salt should be handled by WebKit not by apps using WebKit.
        - No need to expose the frame URL, only the top level origin is needed.
        - The names of the callback are changed to improve the intent of these callbacks.
        Addressed these by creating a new SPI which will replace the current one.
        The current SPI will be removed later on.

        Did some refactoring by making the callbacks not return false.
        Instead, implement the default behavior inside the request objects as deny methods.
        Some further refactoring will be done as a follow-up to better align the C API with the Cocoa API.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::decidePolicyForUserMediaPermissionRequest):
        (API::UIClient::checkUserMediaPermissionForOrigin):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mediaCaptureState]):
        (-[WKWebView _setMediaCaptureMuted:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/Cocoa/MediaCaptureUtilities.h: Added.
        * UIProcess/Cocoa/MediaCaptureUtilities.mm: Added.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::requestUserMediaAuthorizationForFrame):
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin):
        (WebKit::UIDelegate::UIClient::mediaCaptureStateDidChange):
        * UIProcess/UserMediaPermissionCheckProxy.h:
        (WebKit::UserMediaPermissionCheckProxy::deny):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
        * UIProcess/UserMediaPermissionRequestProxy.h:

2019-01-16  Youenn Fablet  <youenn@apple.com>

        Pipe cache quota request from Network Process to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=193296

        Reviewed by Alex Christensen.

        When cache storage hits quota for a given origin, pipe the request back to NetworkProcess.
        No record will be put until the quota request is answered.
        The request is sent from CacheStorage::Caches to CacheStorage::Engine and to NetworkProcess.
        NetworkProcess then sends it to NetworkProcessProxy.
        Currently NetworkProcessProxy just answers by keeping the quota as it is.
        In the future, NetworkProcessProxy should make a delegate call to let the app using WebKit
        make a decision on the quota. This will allow prompting user to bump it as done for other data.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::requestCacheStorageSpace):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::~Engine):
        (WebKit::CacheStorage::Engine::from):
        (WebKit::CacheStorage::Engine::Engine):
        (WebKit::CacheStorage::Engine::requestSpace):
        (WebKit::CacheStorage::Engine::requestSpaceCompleted):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::put):
        (WebKit::CacheStorage::Cache::retryPuttingPendingRecords):
        * NetworkProcess/cache/CacheStorageEngineCache.h:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::requestSpace):
        (WebKit::CacheStorage::Caches::notifyCachesOfRequestSpaceEnd):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:
        (WebKit::CacheStorage::Caches::isRequestingSpace const):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::requestCacheStorageSpace):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

2019-01-16  Alex Christensen  <achristensen@webkit.org>

        sendBeacon to previously-unvisited https domain always fails
        https://bugs.webkit.org/show_bug.cgi?id=193508

        Reviewed by Geoffrey Garen.

        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::didReceiveChallenge):
        If a ping load is doing a TLS handshake, continue if the server has good certificates.

2019-01-16  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: m_networkLoadInformationByID.contains(identifier) in WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationMetrics
        https://bugs.webkit.org/show_bug.cgi?id=189097
        <rdar://problem/43856423>

        Reviewed by Alex Christensen.

        In case where the inspector is launched, it will instruct the NetworkConnectionToWebProcess to start capturing network metrics.
        If this happens in the middle of a load, addNetworkLoadInformationMetrics might fail since addNetworkLoadInformation will not be called.
        To fix this issue, store whether to capture metrics at NetworkResourceLoader level.

        To ensure that the case of switching back and forth capture of metrics, disable loader capture of metrics whenver NetworkConnectionToWebProcess is asked to.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::setCaptureExtraNetworkLoadMetricsEnabled):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationMetrics):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        (WebKit::NetworkResourceLoader::shouldCaptureExtraNetworkLoadMetrics const):
        * NetworkProcess/NetworkResourceLoader.h:

2019-01-16  Alex Christensen  <achristensen@webkit.org>

        Revert r239938
        https://bugs.webkit.org/show_bug.cgi?id=193267
        <rdar://problem/47297304>

        * Configurations/WebContent-iOS.entitlements:

2019-01-16  Chris Dumez  <cdumez@apple.com>

        Regression(r240046) Several API tests are crashing
        https://bugs.webkit.org/show_bug.cgi?id=193509

        Reviewed by Geoffrey Garen.

        The crashes would happen because loadRequestShared() would take a WebProcessProxy& in parameter but
        then call reattachToWebProcess() if the page is not valid, which would replace m_process and invalidate
        our process reference.

        To address the issue, move the reattachToWebProcess() call to loadRequest(), before calling
        loadRequestShared(). Also, update *Shared() methods to take a Ref<WebProcessProxy>&& instead
        of a WebProcessProxy& in parameter. Since we call client delegates, we need to make sure
        our process stays alive.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::didCreateMainFrame):
        (WebKit::ProvisionalPageProxy::didPerformClientRedirect):
        (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData):
        (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        (WebKit::ProvisionalPageProxy::startURLSchemeTask):
        (WebKit::ProvisionalPageProxy::backForwardGoToItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        (WebKit::WebPageProxy::didCancelClientRedirectForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didNavigateWithNavigationDataShared):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformClientRedirectShared):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::runOpenPanel):
        (WebKit::WebPageProxy::printFrame):
        (WebKit::WebPageProxy::backForwardGoToItem):
        (WebKit::WebPageProxy::backForwardGoToItemShared):
        (WebKit::WebPageProxy::learnWord):
        (WebKit::WebPageProxy::ignoreWord):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::editingRangeCallback):
        (WebKit::WebPageProxy::rectForCharacterRangeCallback):
        (WebKit::WebPageProxy::focusedFrameChanged):
        (WebKit::WebPageProxy::frameSetLargestFrameChanged):
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        (WebKit::WebPageProxy::enumerateMediaDevicesForFrame):
        (WebKit::WebPageProxy::startURLSchemeTask):
        (WebKit::WebPageProxy::startURLSchemeTaskShared):
        (WebKit::WebPageProxy::stopURLSchemeTask):
        (WebKit::WebPageProxy::loadSynchronousURLSchemeTask):
        * UIProcess/WebPageProxy.h:

2019-01-16  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoffrey Garen.

        The issue tracked by rdar://problem/47099573 is that a provisional load may get
        canceled (or converted into a download) *after* we've decided to process-swap.
        In such cases, the view should keep displaying the current site and it should
        still be interactive. However, with the previous PSON model, the view (pageProxy)
        would have already swapped to the new process and would end up displaying the
        initially empty document.

        To address the issue, this patch introduces the concept of a provisional load
        in the UIProcess, handled by a ProvisionalPageProxy which has its own privisional
        process. The WebPageProxy owns the ProvisionalPageProxy but we do not commit the
        provisional page until after the load was committed in the new process. This means
        that the view / WebPageProxy keeps using the old process and displays the current
        content until a load has committed in the provisional page. If no load commits
        in the provisional process (e.g. because the load is cancelled or converted into
        a download), then we merely destroy the ProvisionalPageProxy and terminate its
        process, without impacting the WebPageProxy.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Rename isSwapFromSuspended to isProcessSwap for clarity as we always want to
        delay attaching the drawing area in case of a process-swap, no matter what
        now that the previous process is kept alive until the provisional load is
        committed in the new process.

        * Shared/WebPolicyAction.h:
        Drop Suspend policy action. At decidePolicyForNavigationAction time, in case of
        process-swap, we now tell the previous process to simply ignore the load, while
        we create a ProvisionalPageProxy to do the new load in a new process.
        Suspension of the previous page in the old process, happens later, when a load
        is actually committed in the new process.

        * Sources.txt:
        Add new ProvisionalPageProxy file.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _killWebContentProcessAndResetState]):
        When calling _killWebContentProcessAndResetState on a WKWebView, kill both the current
        process and the provisional one, to maintain previous behavior in our API tests.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/AcceleratedDrawingAreaProxy.cpp:
        (WebKit::AcceleratedDrawingAreaProxy::AcceleratedDrawingAreaProxy):
        (WebKit::AcceleratedDrawingAreaProxy::didUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingAreaProxy::sendUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing):
        (WebKit::AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing):
        * UIProcess/AcceleratedDrawingAreaProxy.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::createDrawingAreaProxy):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::~DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::process):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::update):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidEnd):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _createDrawingAreaProxy:]):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::adjustTransientZoom):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::commitTransientZoom):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/mac/WebPageProxyMac.mm:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/win/PageClientImpl.h:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/win/PageClientImpl.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        Pass the drawing area's associated process when constructing it and store it as a member
        in addition to the page. This is necessary now that a page can be associated with 2
        WebProcesses at a time, each having its own drawing area.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded):
        Pass the process.

        * UIProcess/ProvisionalPageProxy.cpp: Added.
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::processDidTerminate):
        (WebKit::ProvisionalPageProxy::takeDrawingArea):
        (WebKit::ProvisionalPageProxy::cancel):
        (WebKit::ProvisionalPageProxy::processDidFinishLaunching):
        (WebKit::ProvisionalPageProxy::finishInitializingWebPageAfterProcessLaunch):
        (WebKit::ProvisionalPageProxy::initializeWebPage):
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        (WebKit::ProvisionalPageProxy::didCreateMainFrame):
        (WebKit::ProvisionalPageProxy::didPerformClientRedirect):
        (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData):
        (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        (WebKit::ProvisionalPageProxy::startURLSchemeTask):
        (WebKit::ProvisionalPageProxy::backForwardGoToItem):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        (WebKit::ProvisionalPageProxy::didReceiveSyncMessage):
        * UIProcess/ProvisionalPageProxy.h: Added.
        (WebKit::ProvisionalPageProxy::page):
        (WebKit::ProvisionalPageProxy::mainFrame const):
        (WebKit::ProvisionalPageProxy::process):
        (WebKit::ProvisionalPageProxy::processSwapRequestedByClient const):
        (WebKit::ProvisionalPageProxy::navigationID const):
        (WebKit::ProvisionalPageProxy::drawingArea const):
        New WebPageProxy-like class which is owned by the WebPageProxy and proxies IPC from
        the provisional process.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::unsuspend):
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        Unregister the SuspendedPageProxy as an IPC message receiver a little bit earlier
        when we're going to unsuspend it. This avoids conflicting with the ProvisionalPageProxy
        which tries to register itself as an IPC message receiver for the same pageID when
        a process-swap occurs and we're switching to a suspended page.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::isMainFrame const):
        WebFrameProxy::isMainFrame() relies on checking that the frame is the WebPageProxy's m_mainFrame.
        Now that the WebPageProxy can have a ProvisionalPageProxy, also check if it is the ProvisionalPageProxy's
        m_mainFrame to maintain previous behavior.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::provisionalDrawingArea const):
        Add getter for the provisional drawing area. We normally only deal with the page's current drawing area, but
        the ViewGestureController needs access to the provisional once to display the swipe gesture snapshot.

        (WebKit::WebPageProxy::swapToWebProcess):
        swapToWebProcess() no longer takes care of unsuspending the SuspendedPage because we now call swapToWebProcess()
        later, when a load is actually committed in the provisional page / process. swapToWebProcess() now also needs
        to initialize some data members such as the drawing area and the main frame as it is transferring them over from
        the ProvisionalPageProxy which started the provisional load.

        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been
        committed in the provisional process.

        (WebKit::WebPageProxy::setDrawingArea):
        (WebKit::WebPageProxy::initializeWebPage):
        - We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been
          committed in the provisional process.
        - Factor some code out to WebPageProxy::setDrawingArea() so that it can be shared with swapToWebProcess().

        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        Only call setPendingAPIRequestURL() in loadRequestWithNavigation() only if ShouldTreatAsContinuingLoad is not
        Yes. This avoids hitting some assertions as this was already called during the first API call if needed.

        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        In case of process swap, tell the previous process to ignore the load instead of suspending it right away.
        Suspension now happens later, only if we end up committing the provisional load in the new process.
        Also discard the SuspendedPage if it failed to suspend (we only reuse its process in this case). This used
        to happen a bit later but it is clearer if we do this as early as possible I think.

        (WebKit::WebPageProxy::commitProvisionalPage):
        When the load is committed in the new process, we call WebPageProxy::commitProvisionalPage(). It takes care of:
        - Actually swapping the WebPageProxy to the new process by calling processDidTerminate() / swapToWebProcess().
        - Suspending the current page.
        - Letting the client know the load is comitted
        - Destroy the ProvisionalPageProxy.
        This work used to happen earlier in continueNavigationInNewProcess().

        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        Moved some of the logic to commitProvisionalPage(). We now merely start the load in a new ProvisionalPageProxy,
        without actually having the WebPageProxy switch to the new process yet.

        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::didCreateWindow):
        Drop some code that is no longer needed, now that the ProvisionalPageProxy takes care of this.

        (WebKit::WebPageProxy::didDestroyNavigation):
        On process-swap, when telling the previous process to ignore the load and starting the new load in a new
        ProvisionalPageProxy, the previous WebPage attempts to destroy the navigation. In this case, we ignore
        the call since the navigation is merely taken over by the ProvisionalPageProxy.

        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        Moved some PSON logic to the ProvisionalPageProxy instead.

        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        (WebKit::WebPageProxy::didCancelClientRedirectForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared):

        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        When didFailProvisionalLoadForFrame() is called for a ProvisionalPageProxy, destroy it.

        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didNavigateWithNavigationDataShared):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformClientRedirectShared):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::runOpenPanel):
        (WebKit::WebPageProxy::printFrame):
        (WebKit::WebPageProxy::backForwardGoToItem):
        (WebKit::WebPageProxy::backForwardGoToItemShared):
        (WebKit::WebPageProxy::learnWord):
        (WebKit::WebPageProxy::ignoreWord):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::editingRangeCallback):
        (WebKit::WebPageProxy::rectForCharacterRangeCallback):
        (WebKit::WebPageProxy::focusedFrameChanged):
        (WebKit::WebPageProxy::frameSetLargestFrameChanged):

        (WebKit::WebPageProxy::provisionalProcessDidTerminate):
        Cancel the provisiona load and destroy the ProvisionalPageProxy if
        the provisional process crashes.

        (WebKit::WebPageProxy::resetState):
        Drop some code that is no longer needed.

        (WebKit::WebPageProxy::creationParameters):
        - Move the hasRegisteredServiceWorkers flag initialization from the call site to here now that we have
        more than one call site. This was just some bad factoring.
        - Take the process in parameter now that we page can be associated with several processes at a time.

        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        (WebKit::WebPageProxy::enumerateMediaDevicesForFrame):
        (WebKit::WebPageProxy::startURLSchemeTask):
        (WebKit::WebPageProxy::startURLSchemeTaskShared):
        (WebKit::WebPageProxy::stopURLSchemeTask):
        (WebKit::WebPageProxy::loadSynchronousURLSchemeTask):
        (WebKit::WebPageProxy::checkURLReceivedFromCurrentOrPreviousWebProcess):
        (WebKit::WebPageProxy::willAcquireUniversalFileReadSandboxExtension):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::visitedLinkStore):
        (WebKit::WebPageProxy::provisionalPageProxy const):

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::hasProvisionalPageWithID const):
        (WebKit::WebProcessProxy::updateBackForwardItem):
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::canTerminateChildProcess):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::addProvisionalPageProxy):
        (WebKit::WebProcessProxy::removeProvisionalPageProxy):
        Before updating a BackForwardListItem, we normally make sure the process has a WebPageProxy with the
        item's pageID. We have to tweak the logic because there may now be no WebPageProxy with this pageID
        associated with this process yet, because it is still a ProvisionalPageProxy.        

        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::startTask):
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::create):
        (WebKit::WebURLSchemeTask::WebURLSchemeTask):
        (WebKit::WebURLSchemeTask::didPerformRedirection):
        (WebKit::WebURLSchemeTask::didReceiveResponse):
        (WebKit::WebURLSchemeTask::didReceiveData):
        (WebKit::WebURLSchemeTask::didComplete):
        (WebKit::WebURLSchemeTask::pageDestroyed):
        * UIProcess/WebURLSchemeTask.h:
        Pass the process when constructing a WebURLSchemeTask and store it as a data member in addition to
        the page. This is necessary now that a WebPageProxy can be associated with several WebProcesses.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        Use the provisional drawing area to display the swipe snapshot as it may differ from the one currently
        associated with the page in case of process swap.

        * WebKit.xcodeproj/project.pbxproj:
        Add ProvisionalPageProxy class.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::toPolicyAction):
        (WebKit::WebFrame::didReceivePolicyDecision):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::didReceivePolicyDecision):
        Stop dealing with WebPolicyAction::Suspend as it no longer exists.

        (WebKit::WebPage::didCompletePageTransition):

        (WebKit::WebPage::setIsSuspended):
        Suspend the Page when setIsSuspended(true) is called, now that there is no longer a WebPolicyAction::Suspend.
        setIsSuspended(true) IPC is sent when we actually commit the provisional page.

        * WebProcess/WebPage/WebPage.h:

2019-01-16  Tim Horton  <timothy_horton@apple.com>

        Frequent null-deref under TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=193468
        <rdar://problem/38645869>

        Reviewed by Zalan Bujtas.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):
        Adjust the null-check a bit; Zalan pointed out that the layout could
        be responsible for the Frame/RenderView going away, so we should bail
        *after* layout, not before.

2019-01-15  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed WinCairo build fix.

        * WebProcess/WebPage/WebPageInspectorTargetController.cpp:
        (WebKit::WebPageInspectorTargetController::connectInspector): Use 'auto' instead of unprefixed InspectorTarget.
        (WebKit::WebPageInspectorTargetController::disconnectInspector): Ditto.
        (WebKit::WebPageInspectorTargetController::sendMessageToTargetBackend): Ditto.

2019-01-15  Alex Christensen  <achristensen@webkit.org>

        Reduce use of NetworkStorageSession::defaultStorageSession in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=193368

        Reviewed by Geoff Garen.

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

2019-01-15  Alex Christensen  <achristensen@webkit.org>

        Remove more NetworkProcess::singleton use
        https://bugs.webkit.org/show_bug.cgi?id=193484

        Reviewed by Geoffrey Garen.

        This removes the use of NetworkProcess::singleton in the LegacyCustomProtocolManager.
        This is the kind of awful duct tape code that keeps me awake at night, but it's necessary
        because we can't quite remove LegacyCustomProtocolManager yet but we need to allow more than
        one NetworkProcess object.  To make it work well enough until we remove LegacyCustomProtocolManager,
        use the last NetworkProcess object that has been created.

        * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm:
        (newestNetworkProcess):
        (LegacyCustomProtocolManager::networkProcessCreated):
        (+[WKCustomProtocol canInitWithRequest:]):
        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]):
        (-[WKCustomProtocol startLoading]):
        (-[WKCustomProtocol stopLoading]):
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.cpp:
        (WebKit::LegacyCustomProtocolManager::LegacyCustomProtocolManager):
        (WebKit::LegacyCustomProtocolManager::startLoading):
        (WebKit::LegacyCustomProtocolManager::stopLoading):
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):

2019-01-15  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r240014
        https://bugs.webkit.org/show_bug.cgi?id=161106

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:

2019-01-15  Ryosuke Niwa  <rniwa@webkit.org>

        VisualViewport API should be updated upon opening of keyboard
        https://bugs.webkit.org/show_bug.cgi?id=193475

        Reviewed by Simon Fraser.

        The bug was caused by the changes to unobscuredContentRectRespectingInputViewBounds not updating the visual viewport
        unless it caused a layout to happen. Added a code to update the visual viewport in WebPage::updateVisibleContentRects.

        Also fixed the bug that VisibleContentRectUpdateInfo::operator== was not checking differences in
        unobscuredContentRectRespectingInputViewBounds which resulted in the visual viewport override not getting updated
        while the keyboard is getting brought up.

        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::operator==):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2019-01-15  Megan Gardner  <megan_gardner@apple.com>

        Add Reveal support in iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=193408
        <rdar://problem/47300699>

        Reviewed by Tim Horton.

        Add calls to DictionaryLookup from the appropriate places.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):

2019-01-15  Claudio Saavedra  <csaavedra@igalia.com>

        [SOUP] Remove usage of NetworkProcess::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=193444

        Reviewed by Michael Catanzaro.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::download):
        (WebKit::NetworkDataTaskSoup::didWriteDownload):
        (WebKit::NetworkDataTaskSoup::didFinishDownload):
        (WebKit::NetworkDataTaskSoup::didFailDownload):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):

2019-01-15  Eric Carlson  <eric.carlson@apple.com>

        Fix incorrect ASSERT added in r239840
        https://bugs.webkit.org/show_bug.cgi?id=193466
        <rdar://problem/47095142>

        Reviewed by Youenn Fablet.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::Source):

2019-01-15  Tim Horton  <timothy_horton@apple.com>

        Frequent null-deref under TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=193468
        <rdar://problem/38645869>

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):
        I'm not sure why this got *worse*, but we should null-check RenderView.
        It's OK to bail from scaleViewToFitDocumentIfNeeded, we'll re-do it
        the next time we paint (which will surely happen if we gain a RenderView).

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r239993, r239995, r239997, and
        r239999.

        Caused assertions under
        ViewGestureController::disconnectFromProcess()

        Reverted changesets:

        "Regression(PSON) View becomes blank after click a cross-site
        download link"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239993

        "Unreviewed iOS build fix after r239993."
        https://trac.webkit.org/changeset/239995

        "Fix iOS build after r239993"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239997

        "Unreviewed, revert part of r239997 as it is not needed to fix
        the build."
        https://trac.webkit.org/changeset/239999

2019-01-15  Alex Christensen  <achristensen@webkit.org>

        Stop using CookiesStrategy
        https://bugs.webkit.org/show_bug.cgi?id=161106

        Reviewed by Don Olmstead and Antti Koivisto.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createCookiesStrategy): Deleted.
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        * Scripts/webkit/messages.py:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
        (WebKit::WebAutomationSessionProxy::deleteCookie):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::cookiesForURL):
        (WebKit::PluginView::setCookiesForURL):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createCookiesStrategy): Deleted.
        (WebKit::WebPlatformStrategies::cookiesForDOM): Deleted.
        (WebKit::WebPlatformStrategies::setCookiesFromDOM): Deleted.
        (WebKit::WebPlatformStrategies::cookiesEnabled): Deleted.
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue): Deleted.
        (WebKit::WebPlatformStrategies::getRawCookies): Deleted.
        (WebKit::WebPlatformStrategies::deleteCookie): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebPage/WebCookieJar.cpp: Added.
        (WebKit::WebCookieJar::cookies const):
        (WebKit::WebCookieJar::setCookies):
        (WebKit::WebCookieJar::cookiesEnabled const):
        (WebKit::WebCookieJar::cookieRequestHeaderFieldValue const):
        (WebKit::WebCookieJar::getRawCookies const):
        (WebKit::WebCookieJar::deleteCookie):
        * WebProcess/WebPage/WebCookieJar.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):

2019-01-15  Per Arne Vollan  <pvollan@apple.com>

        Remove reporting for iOS mach lookups confirmed in-use
        https://bugs.webkit.org/show_bug.cgi?id=193455
        <rdar://problem/47259551>

        Reviewed by Brent Fulgham.

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

2019-01-15  Tim Horton  <timothy_horton@apple.com>

        Cannot tab out of WKWebView on macOS
        https://bugs.webkit.org/show_bug.cgi?id=161448
        <rdar://problem/28100085>

        Reviewed by Dean Jackson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::takeFocus):
        If the UIDelegate doesn't implement takeFocus, provide a simple default
        implementation that just uses AppKit's key view loop to move the focus.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::takeFocus):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::takeFocus):
        Make API::UIClient's takeFocus return a bool indicating whether the
        client implements it or not.

        * UIProcess/PageClient.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::takeFocus):
        Plumb takeFocus to WebViewImpl.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::takeFocus):
        Borrow the relevant portion of WebKitLegacy's implementation of takeFocus,
        shifting focus to the next/previous key view in the window.

2019-01-15  Youenn Fablet  <youenn@apple.com>

        Remove the specific handling of ephemeral sessions from CacheStorage::Engine::from
        https://bugs.webkit.org/show_bug.cgi?id=193400

        Reviewed by Alex Christensen.

        It is no longer needed as we correctly handle ephemeral sessions removal.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::from):

2019-01-15  Alex Christensen  <achristensen@webkit.org>

        Fix iOS build after r239993
        https://bugs.webkit.org/show_bug.cgi?id=193361

        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/SuspendedPageProxy.h:

2019-01-15  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Adjust logging policy in WebKit's sandbox
        https://bugs.webkit.org/show_bug.cgi?id=193454
        <rdar://problem/47256325>

        Reviewed by Brent Fulgham.

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

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r239993.

        * UIProcess/SuspendedPageProxy.h:

2019-01-15  Per Arne Vollan  <pvollan@apple.com>

        Add allow directive for MTLCompilerService.xpc to PluginProcess and WebContent
        https://bugs.webkit.org/show_bug.cgi?id=193453
        <rdar://problem/47268166>

        Reviewed by Brent Fulgham.

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

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoff Garen.

        The issue tracked by rdar://problem/47099573 is that a provisional load may get
        canceled (or converted into a download) *after* we've decided to process-swap.
        In such cases, the view should keep displaying the current site and it should
        still be interactive. However, with the previous PSON model, the view (pageProxy)
        would have already swapped to the new process and would end up displaying the
        initially empty document.

        To address the issue, this patch introduces the concept of a provisional load
        in the UIProcess, handled by a ProvisionalPageProxy which has its own privisional
        process. The WebPageProxy owns the ProvisionalPageProxy but we do not commit the
        provisional page until after the load was committed in the new process. This means
        that the view / WebPageProxy keeps using the old process and displays the current
        content until a load has committed in the provisional page. If no load commits
        in the provisional process (e.g. because the load is cancelled or converted into
        a download), then we merely destroy the ProvisionalPageProxy and terminate its
        process, without impacting the WebPageProxy.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Rename isSwapFromSuspended to isProcessSwap for clarity as we always want to
        delay attaching the drawing area in case of a process-swap, no matter what
        now that the previous process is kept alive until the provisional load is
        committed in the new process.

        * Shared/WebPolicyAction.h:
        Drop Suspend policy action. At decidePolicyForNavigationAction time, in case of
        process-swap, we now tell the previous process to simply ignore the load, while
        we create a ProvisionalPageProxy to do the new load in a new process.
        Suspension of the previous page in the old process, happens later, when a load
        is actually committed in the new process.

        * Sources.txt:
        Add new ProvisionalPageProxy file.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _killWebContentProcessAndResetState]):
        When calling _killWebContentProcessAndResetState on a WKWebView, kill both the current
        process and the provisional one, to maintain previous behavior in our API tests.

        * UIProcess/PageClient.h:
        Tiny build fix.

        * UIProcess/ProvisionalPageProxy.cpp: Added.
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::takeDrawingArea):
        (WebKit::ProvisionalPageProxy::cancel):
        (WebKit::ProvisionalPageProxy::initializeWebPage):
        (WebKit::ProvisionalPageProxy::loadDataWithNavigation):
        (WebKit::ProvisionalPageProxy::loadRequestWithNavigation):
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        (WebKit::ProvisionalPageProxy::didCreateMainFrame):
        (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        (WebKit::ProvisionalPageProxy::didReceiveSyncMessage):
        * UIProcess/ProvisionalPageProxy.h: Added.
        (WebKit::ProvisionalPageProxy::page):
        (WebKit::ProvisionalPageProxy::mainFrame const):
        (WebKit::ProvisionalPageProxy::process):
        (WebKit::ProvisionalPageProxy::processSwapRequestedByClient const):
        (WebKit::ProvisionalPageProxy::navigationID const):
        Add new ProvisionalPageProxy class to wrap the provisional load in the new process
        after a swap. The provisional page is owned by the WebPageProxy and we only commit
        the provisional page when the load is committed. Until then, the WebPageProxy keeps
        using the old process and displaying the current content.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::unsuspend):
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        Unregister the SuspendedPageProxy as an IPC message receiver a little bit earlier
        when we're going to unsuspend it. This avoids conflicting with the ProvisionalPageProxy
        which tries to register itself as an IPC message receiver for the same pageID when
        a process-swap occurs and we're switching to a suspended page.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::isMainFrame const):
        WebFrameProxy::isMainFrame() relies on checking that the frame is the WebPageProxy's m_mainFrame.
        Now that the WebPageProxy can have a ProvisionalPageProxy, also check if it is the ProvisionalPageProxy's
        m_mainFrame to maintain previous behavior.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToWebProcess):
        swapToWebProcess() no longer takes care of unsuspending the SuspendedPage because we now call swapToWebProcess()
        later, when a load is actually committed in the provisional page / process. swapToWebProcess() now also needs
        to initialize some data members such as the drawing area and the main frame as it is transferring them over from
        the ProvisionalPageProxy which started the provisional load.

        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been
        committed in the provisional process.

        (WebKit::WebPageProxy::initializeWebPage):
        - We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been
          committed in the provisional process.
        - Factor some code out to WebPageProxy::setDrawingArea() so that it can be shared with swapToWebProcess().

        (WebKit::WebPageProxy::loadRequestWithNavigation):
        Only call setPendingAPIRequestURL() in loadRequestWithNavigation() only if ShouldTreatAsContinuingLoad is not
        Yes. This avoids hitting some assertions as this was already called during the first API call if needed.

        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        In case of process swap, tell the previous process to ignore the load instead of suspending it right away.
        Suspension now happens later, only if we end up committing the provisional load in the new process.
        Also discard the SuspendedPage if it failed to suspend (we only reuse its process in this case). This used
        to happen a bit later but it is clearer if we do this as early as possible I think.

        (WebKit::WebPageProxy::commitProvisionalPage):
        When the load is committed in the new process, we call WebPageProxy::commitProvisionalPage(). It takes care of:
        - Actually swapping the WebPageProxy to the new process by calling processDidTerminate() / swapToWebProcess().
        - Suspending the current page.
        - Letting the client know the load is comitted
        - Destroy the ProvisionalPageProxy.
        This work used to happen earlier in continueNavigationInNewProcess().

        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        Moved some of the logic to commitProvisionalPage(). We now merely start the load in a new ProvisionalPageProxy,
        without actually having the WebPageProxy switch to the new process yet.

        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateWindow):
        Drop some code that is no longer needed, now that the ProvisionalPageProxy takes care of this.

        (WebKit::WebPageProxy::didDestroyNavigation):
        On process-swap, when telling the previous process to ignore the load and starting the new load in a new
        ProvisionalPageProxy, the previous WebPage attempts to destroy the navigation. In this case, we ignore
        the call since the navigation is merely taken over by the ProvisionalPageProxy.

        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        Moved some PSON logic to the ProvisionalPageProxy instead.

        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        When didFailProvisionalLoadForFrame() is called for a ProvisionalPageProxy, destroy it.

        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        Capture the process in the lambda, to make sure we send the policy decision to the same process that
        asked for it, so as to not get confused by process swaps.

        (WebKit::WebPageProxy::resetState):
        Drop some code that is no longer needed.

        (WebKit::WebPageProxy::creationParameters):
        Move the hasRegisteredServiceWorkers flag initialization from the call site to here now that we have
        more than one call site. This was just some bad factoring.

        (WebKit::WebPageProxy::PageProcessOverride::PageProcessOverride):
        (WebKit::WebPageProxy::PageProcessOverride::~PageProcessOverride):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::temporarilyOverrideProcess):
        Add utility class to temporarily override the WebPageProxy's m_process with the provisional one when
        the ProvisionalPageProxy interacts with the WebPageProxy.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::hasProvisionalPageWithID const):
        (WebKit::WebProcessProxy::updateBackForwardItem):
        Before updating a BackForwardListItem, we normally make sure the process has a WebPageProxy with the
        item's pageID. We have to tweak the logic because there may now be no WebPageProxy with this pageID
        associated with this process yet, because it is still a ProvisionalPageProxy.

        (WebKit::WebProcessProxy::canTerminateChildProcess):
        Do not terminate the WebProcess if there are ProvisionalPageProxy objects using it.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::addProvisionalPageProxy):
        (WebKit::WebProcessProxy::removeProvisionalPageProxy):

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::toPolicyAction):
        (WebKit::WebFrame::didReceivePolicyDecision):
        Stop dealing with WebPolicyAction::Suspend as it no longer exists.

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

        (WebKit::WebPage::setIsSuspended):
        Suspend the Page when setIsSuspended(true) is called, now that there is no longer a WebPolicyAction::Suspend.
        setIsSuspended(true) IPC is sent when we actually commit the provisional page.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

2019-01-15  Brian Burg  <bburg@apple.com>

        WebDriver: update Create Window implementation to support newest specification
        https://bugs.webkit.org/show_bug.cgi?id=193333
        <rdar://problem/45649489>

        Reviewed by Carlos Garcia Campos.

        Spec link: https://w3c.github.io/webdriver/#create-window

        The command as specified returns a value indicating whether the new browsing context
        was presented as a new tab or new window. Add a new delegate method to query the current
        'presentation' of the browsing context. The presentation can change over time due to
        things such as screen orientation, so the value that is returned by the command only
        reflects how the browsing context was initially presented to the user.

        This is covered by existing WPT and internal tests. More will be added when Selenium
        exposes this command in its various bindings.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        Add new SPI delegate method to query the 'presentation' (tab or window) for an automated WKWebView.

        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::currentPresentationOfPage):
        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::toImpl):
        (WebKit::AutomationSessionClient::currentPresentationOfPage):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::toProtocol):
        (WebKit::WebAutomationSession::createBrowsingContext):
        Add plumbing between ObjC delegate and C++.

        * UIProcess/Automation/Automation.json:
        Include the initial presentation in the createBrowsingContext command result.

2019-01-14  Alex Christensen  <achristensen@webkit.org>

        Split headerValueForVary into specialized functions for NetworkProcess and WebProcess/WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=193429

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeUseDecision):
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::makeEntry):
        (WebKit::NetworkCache::Cache::makeRedirectEntry):
        (WebKit::NetworkCache::Cache::update):

2019-01-14  Tim Horton  <timothy_horton@apple.com>

        Fix a style mistake in PageClientImplMac

        * UIProcess/mac/PageClientImplMac.h:
        Somehow these methods ended up above the members.

2019-01-14  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Remove reporting for mach lookups confirmed in-use
        https://bugs.webkit.org/show_bug.cgi?id=193415
        <rdar://problem/47266542>

        Reviewed by Brent Fulgham.

        Also, start denying the services which have not been confirmed to be in use.

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

2019-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239901, r239909, r239910, r239912,
        r239913, and r239914.
        https://bugs.webkit.org/show_bug.cgi?id=193407

        These revisions caused an internal failure (Requested by
        Truitt on #webkit).

        Reverted changesets:

        "[Cocoa] Avoid importing directly from subumbrella frameworks"
        https://bugs.webkit.org/show_bug.cgi?id=186016
        https://trac.webkit.org/changeset/239901

        "Tried to fix USE(APPLE_INTERNAL_SDK) builds after r239901."
        https://trac.webkit.org/changeset/239909

        "Tried to fix the build."
        https://trac.webkit.org/changeset/239910

        "Fixed iOS builds after r239910."
        https://trac.webkit.org/changeset/239912

        "More build fixing."
        https://trac.webkit.org/changeset/239913

        "Tried to fix USE(APPLE_INTERNAL_SDK) 32-bit builds."
        https://trac.webkit.org/changeset/239914

2019-01-14  Mark Lam  <mark.lam@apple.com>

        Re-enable ability to build --cloop builds.
        https://bugs.webkit.org/show_bug.cgi?id=192955
        <rdar://problem/46882363>

        Reviewed by Saam barati and Keith Miller.

        * Configurations/FeatureDefines.xcconfig:

2019-01-14  Alex Christensen  <achristensen@webkit.org>

        Remove unused networking entitlement from iOS WebProcess entitlements
        https://bugs.webkit.org/show_bug.cgi?id=193267

        Reviewed by Dean Jackson.

        * Configurations/WebContent-iOS.entitlements:
        This gave access to VPN stuff.  It's not needed any more.

2019-01-14  Youenn Fablet  <youenn@apple.com>

        Enable MDNS ICE candidate support by default
        https://bugs.webkit.org/show_bug.cgi?id=193358

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferences.yaml:

2019-01-11  Matt Rajca  <mrajca@apple.com>

        Expose preference for site-specific quirks on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193353

        Reviewed by Dean Jackson.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setNeedsSiteSpecificQuirks:]):
        (-[WKPreferences _needsSiteSpecificQuirks]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2019-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Expose SPI to access the current sentence boundary and selection state
        https://bugs.webkit.org/show_bug.cgi?id=193398
        <rdar://problem/45893108>

        Reviewed by Dean Jackson.

        Expose SPI on WKWebView for internal clients to grab information about attributes at the current selection; so
        far, this only includes whether the selection is a caret or a range, and whether or not the start of the
        selection is at the start of a new sentence.

        Test: EditorStateTests.ObserveSelectionAttributeChanges

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:

        Add a new bit in EditorState on iOS to compute whether or not the start of the selection is at the start of a
        new sentence. This is computed and set when sending post-layout data in `WebPageIOS.mm`.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (selectionAttributes):
        (-[WKWebView _didChangeEditorState]):
        (-[WKWebView _selectionAttributes]):

        Make the new SPI property support KVO by invoking `-willChangeValueForKey:` and `-didChangeValueForKey:`
        whenever the selection attributes change.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):

2019-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.23.3 release

        * gtk/NEWS: Add release notes for 2.23.3.

2019-01-13  Dan Bernstein  <mitz@apple.com>

        Fixed iOS builds after r239910.

        * Platform/spi/ios/PDFKitSPI.h:

2019-01-13  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build.

        * Platform/spi/ios/PDFKitSPI.h:

2019-01-13  Dan Bernstein  <mitz@apple.com>

        Tried to fix USE(APPLE_INTERNAL_SDK) builds after r239901.

        Patch by Keith Rollin.

        * Platform/IPC/mac/ConnectionMac.mm:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::launchServicesCheckIn):

2019-01-12  Timothy Hatcher  <timothy@apple.com>

        Have prefers-color-scheme: light always match on macOS versions before Mojave.
        https://bugs.webkit.org/show_bug.cgi?id=191655
        rdar://problem/46074680

        Reviewed by Megan Gardner.

        * Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::effectiveAppearanceIsDark):
        * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm:

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * Configurations/BaseTarget.xcconfig: Removed -iframework options from OTHER_CFLAGS and
          OTHER_CPLUSPLUSFLAGS.
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm: Import Carbon.h instead of an
          HIToolbox header.
        * UIProcess/Cocoa/WebViewImpl.mm: Ditto.
        * UIProcess/mac/WKPrintingView.mm: Import Quartz.h instead of a PDFKit header.
        * UIProcess/mac/WKTextInputWindowController.mm: Import Carbon.h instead of an HIToolbox
          header.
        * WebProcess/Plugins/PDF/PDFAnnotationTextWidgetDetails.h: Import Quartz.h instead of a
          PDFKit header.
        * WebProcess/Plugins/PDF/PDFLayerControllerSPI.h: Ditto.
        * WebProcess/Plugins/PDF/PDFPlugin.mm: Ditto.
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm: Ditto.
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm: Ditto.
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.mm: Ditto.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm: Ditto.
        * WebProcess/WebPage/mac/WebPageMac.mm: Ditto.

2019-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        Enable visual viewport API by default
        https://bugs.webkit.org/show_bug.cgi?id=193376

        Reviewed by Simon Fraser.

        Enable this feature by default since the remaining issue on iOS is mostly about test failures,
        not an issue with the core functionality of the API.

        * Shared/WebPreferences.yaml:

2019-01-11  Brent Fulgham  <bfulgham@apple.com>

        Allow WebContent process access to some drawing-related IOKit properties
        https://bugs.webkit.org/show_bug.cgi?id=193086
        <rdar://problem/46568088>

        Reviewed by Eric Carlson.

        Add one missing IOKit property, and revise the regexp used for another.

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

2019-01-11  John Wilander  <wilander@apple.com>

        Compile out Web API Statistics Collection
        https://bugs.webkit.org/show_bug.cgi?id=193370
        <rdar://problem/45388584>

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:
            Defined ENABLE_WEB_API_STATISTICS, off by default.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
            Skipped encoding of web API statistics.
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
            Skipped decoding of web API statistics.

2019-01-11  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: leak WebIDBConnectionToClient for retain cycle
        https://bugs.webkit.org/show_bug.cgi?id=193097
        <rdar://problem/46899601>

        Reviewed by Brady Eidson.

        Let WebIDBConnectionToClient hold reference to IPC::Connection instead of NetworkConnectionToWebProcess to break
        the cycle.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::create):
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::messageSenderConnection):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):

2019-01-11  Sihui Liu  <sihui_liu@apple.com>

        Make "Disable Web SQL" on by default
        https://bugs.webkit.org/show_bug.cgi?id=193354
        <rdar://problem/46524584>

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferences.yaml:

2019-01-11  Devin Rousso  <drousso@apple.com>

        Fix style CFNetworkSPI style checker warnings from r239698
        https://bugs.webkit.org/show_bug.cgi?id=193369

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):

2019-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Precision drop state thrashes when dragging near the top edge of an editable element
        https://bugs.webkit.org/show_bug.cgi?id=193364
        <rdar://problem/47214117>

        Reviewed by Tim Horton.

        On iOS, marking a UIDropProposal as precise offsets the hit-testing location of the drop by a small distance
        either upwards or downwards from the actual location of the user's finger. When dragging over an editable
        element, WebKit currently marks the drop proposal as precise; however, when dragging over the top edge of an
        editable element, what happens is that the hit-testing location is offset to a location outside of the editable
        element, which causes us to turn off precision drop mode; subsequently, turning off precision drop mode removes
        the offset, which causes us to hit-test within the editable element once again and re-enable precision mode, and
        the cycle continues.

        In order to mitigate this, bail out of precision drop mode when dragging near the top or bottom edges of the
        highest editable root that contains the current drop caret position (or, if the drop caret is inside of a text
        form control, use the form control as the editable element instead).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::currentDragCaretEditableElementRect const):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dropInteraction:sessionDidUpdate:]):

        Avoid precise mode when we're less than 25pt away from the top and bottom edge of the editable element rect.
        Since the drag location offset amount is a fixed offset in window coordinates, we first convert this minimum
        distance to the content view's coordinate space by dividing by the content scale factor.

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

2019-01-11  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (PSON): Firefox app lacks Open in New Tab in menu
        https://bugs.webkit.org/show_bug.cgi?id=193366
        <rdar://problem/46097212>

        Reviewed by Simon Fraser.

        A pair of unrelated changes broke Firefox's use of WKWebView internals
        to override the long-press menu. Maintain binary compatibility by
        introducing linked-on-or-after checks.

        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):
        Disable PSON in Firefox when linked against an SDK where PSON wasn't enabled by default.
        Because gestures are very stateful, we always swap them out when swapping
        processes (changing that behavior is fairly risky). Also, we don't always
        inform the client when we swap processes (only when the process actually crashes),
        so they currently don't re-adjust the gesture recognizers when a PSON swap occurs.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        Synchronously install gesture recognizers under -init when linked against
        an SDK before the version that introduces lazy gesture recognizer installation.
        r237331 is an optimization that made us lazily install gestures when the
        view is parented, but Firefox (and potentially other clients) depend
        on them being installed synchronously in order to find and override them.

2019-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce IDL files for runtime-enabled UndoManager and UndoItem JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=193109
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Add a new SPI configuration flag to enable the UndoManager API. This is off by default.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setUndoManagerAPIEnabled:]):
        (-[WKWebViewConfiguration _undoManagerAPIEnabled]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2019-01-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Change the nonce in the CTAP kInit command to weak random values
        https://bugs.webkit.org/show_bug.cgi?id=192061
        <rdar://problem/46471091>

        Reviewed by Chris Dumez.

        Change the nonce in the CTAP kInit command to weak random values as the nonce is mainly
        for being a probabilistically unique global identifier for hand shakes, instead of
        preventing replay attacks. Otherwise, it might exhaust system entropy unnecessarily.

        The patch also removes all logging when debugging the test case flakiness.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        (WebKit::AuthenticatorManager::timeOutTimerFired):
        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        (WebKit::HidService::deviceAdded):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::respondReceivedInternal):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::send):
        * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp:
        (WebKit::CtapHidAuthenticator::makeCredential):
        (WebKit::CtapHidAuthenticator::getAssertion):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp:
        (WebKit::CtapHidDriver::Worker::write):
        (WebKit::CtapHidDriver::Worker::read):
        (WebKit::CtapHidDriver::Worker::returnMessage):
        (WebKit::CtapHidDriver::transact):
        (WebKit::CtapHidDriver::continueAfterChannelAllocated):
        (WebKit::CtapHidDriver::continueAfterResponseReceived):

2019-01-10  Timothy Hatcher  <timothy@apple.com>

        Add WKBundlePage SPI to temporarily force light or dark appearance on a page.
        https://bugs.webkit.org/show_bug.cgi?id=193327
        rdar://problem/47093222

        Reviewed by Tim Horton.

        Tests: WebKit.ForceLightAppearanceInBundle API Test

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetUseDarkAppearance): Added.
        (WKBundlePageIsUsingDarkAppearance): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2019-01-10  Eric Carlson  <eric.carlson@apple.com>

        DeviceID hash salt manager can be NULL
        https://bugs.webkit.org/show_bug.cgi?id=193334
        <rdar://problem/47179650>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): No need to
        NULL-check websiteDataStore.deviceIdHashSaltStorage, it is a Ref.
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Ditto.
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): Ditto.
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Ditto.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore): m_deviceIdHashSaltStorage is a Ref.
        (WebKit::WebsiteDataStore::fetchDataAndApply): Ditto.
        (WebKit::WebsiteDataStore::removeData): Ditto.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::deviceIdHashSaltStorage): Ditto.

2019-01-10  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Add name of IORegistry key in sandbox.
        https://bugs.webkit.org/show_bug.cgi?id=193335
        <rdar://problem/47184951>

        Reviewed by Alexey Proskuryakov.

        The property IOGVAHEVCDecodeCapabilities was added in https://bugs.webkit.org/show_bug.cgi?id=193324.
        Also, the property IOGVAHEVCEncodeCapabilities needs to be added.

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

2019-01-10  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r237658): Tap highlight limits cause the highlight to no longer show with legitimate button sizes
        https://bugs.webkit.org/show_bug.cgi?id=193294
        <rdar://problem/46006678>

        Reviewed by Simon Fraser.

        Input type elements should always paint tap highlight (ignore size heuristic). 

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didGetTapHighlightGeometries):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showTapHighlight]):
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:nodeHasBuiltInClickHandling:]):
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didGetTapHighlightGeometries):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary):

2019-01-10  Alexey Proskuryakov  <ap@apple.com>

        Remove unneeded XPCService variant for plugin service
        https://bugs.webkit.org/show_bug.cgi?id=193326

        Reviewed by Tim Horton.

        * Configurations/PluginService.32.xcconfig: Removed.
        * Configurations/PluginService.64.xcconfig:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist: Removed.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64.Info.plist: Copied from Source/WebKit/PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist.
        * WebKit.xcodeproj/project.pbxproj:

2019-01-10  Eric Carlson  <eric.carlson@apple.com>

        Define page media state flags for display capture.
        https://bugs.webkit.org/show_bug.cgi?id=193230
        <rdar://problem/47095142>

        Reviewed by Youenn Fablet.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetMediaState):
        * UIProcess/API/C/WKPagePrivate.h:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::Source):
        (WebKit::UserMediaCaptureManager::createCaptureSource):

2019-01-10  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r239815) http/tests/workers/service/serviceworker-private-browsing.https.html test times out
        https://bugs.webkit.org/show_bug.cgi?id=193325

        Reviewed by Joseph Pecoraro.

        InjectedBundle::setPrivateBrowsingEnabled effectively didn't do anything when enabled was false.
        I made it destroy the legacy private browsing session in the NetworkProcess, which caused a test to time out.
        This functionality is only used for testing, so it's no big deal to revert that part of the patch.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::destroyLegacyPrivateBrowsingSession): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::destroyLegacyPrivateBrowsingSessionInNetworkProcess): Deleted.
        * WebProcess/WebProcess.h:

2019-01-10  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Add name of IORegistry key in sandbox.
        https://bugs.webkit.org/show_bug.cgi?id=193324

        Reviewed by Brent Fulgham.

        IOGVAVTCapabilities key has been changed to IOGVAHEVCDecodeCapabilities.

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

2019-01-10  John Wilander  <wilander@apple.com>

        Override the session configuration for cookieAcceptPolicy
        https://bugs.webkit.org/show_bug.cgi?id=190925
        <rdar://problem/45497382>

        Reviewed by Alexey Proskuryakov and Alex Christensen.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
            Now sets cookieStorage._overrideSessionCookieAcceptPolicy to YES.

2019-01-09  Matt Rajca  <mrajca@apple.com>

        Put per-document autoplay behavior behind runtime website policies quirk instead of a compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=193301

        Reviewed by Jer Noble.

        Register a new quirk that can be configured per-load for per-document media
        autoplay behaviors.

        * Shared/WebsiteAutoplayQuirk.h:
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesSetAllowedAutoplayQuirks):
        (WKWebsitePoliciesGetAllowedAutoplayQuirks):
        * UIProcess/API/C/WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setAllowedAutoplayQuirks:]):
        (-[_WKWebsitePolicies allowedAutoplayQuirks]):

2019-01-10  Tim Horton  <timothy_horton@apple.com>

        Rename some entitlements files to be more clear about their target platform
        https://bugs.webkit.org/show_bug.cgi?id=193311

        Reviewed by Alexey Proskuryakov.

        * Configurations/Network-iOSMac.entitlements: Renamed from Source/WebKit/Configurations/Network-iOS-minimalsimulator.entitlements.
        * Configurations/NetworkService.xcconfig:
        * Configurations/WebContent-iOSMac.entitlements: Renamed from Source/WebKit/Configurations/WebContent-iOS-minimalsimulator.entitlements.
        * Configurations/WebContentService.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:

2019-01-09  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r239816.

        Although EWS had no problem with the patch, I'm seeing build errors on the actual bots.
        This patch corrects the problem.

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

2019-01-09  Brent Fulgham  <bfulgham@apple.com>

        Create a WebResourceLoadStatisticsStore attached to the NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=193261
        <rdar://problem/47158616>

        Reviewed by Alex Christensen.

        This patch modifies NetworkSession so that it owns a WebResourceLoadStatisticsStore
        object. This object is only created if the ResourceLoadStatistics feature is turned on.

        The patch also modifies WebResourceLoadStatisticsStore so that it can be constructed
        with an owning NetworkSession as an alternative to the current practice of using a
        WebsiteDataStore object.

        Two initial messages from the WebContent process are added (logFrameNavigation and
        logUserNavigation) that notify the network process of these actions. Currently they
        are called in addition the calls to the WebsiteDataStore object. These redundant calls
        will be removed in a future patch.

        This patch forces the ResourceLoadStatistics code in the NetworkSession to be off by
        default, so there should be no change in behavior with this patch.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::updateClientSideCookiesAgeCap):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccessForFrame):
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
        (WebKit::WebResourceLoadStatisticsStore::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        (WebKit::WebResourceLoadStatisticsStore::removePrevalentDomains):
        (WebKit::WebResourceLoadStatisticsStore::callRemoveDomainsHandler):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::logFrameNavigation):
        (WebKit::NetworkProcess::logUserInteraction):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::enableResourceLoadStatistics):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::resourceLoadStatistics const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didLogUserInteraction):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebsiteDataStore::parameters):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::logFrameNavigation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):

2019-01-09  Alex Christensen  <achristensen@webkit.org>

        Replace SessionTracker with HashMap member of NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=193266

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::startPreflight):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::destroyLegacyPrivateBrowsingSession):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::clearCachedCredentials):
        (WebKit::NetworkProcess::networkSession):
        (WebKit::NetworkProcess::setSession):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::preconnectTo):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        (WebKit::NetworkResourceLoader::shouldLogCookieInformation):
        (WebKit::NetworkResourceLoader::logCookieInformation const):
        (WebKit::logBlockedCookieInformation):
        (WebKit::logCookieInformationInternal):
        (WebKit::NetworkResourceLoader::logCookieInformation):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::loadRequest):
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::PreconnectTask):
        * NetworkProcess/PreconnectTask.h:
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * Shared/SessionTracker.cpp: Removed.
        * Shared/SessionTracker.h: Removed.
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::destroyLegacyPrivateBrowsingSessionInNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2019-01-09  Alex Christensen  <achristensen@webkit.org>

        Expand use of sourceApplicationAuditData
        https://bugs.webkit.org/show_bug.cgi?id=192995
        <rdar://problem/46627875>

        Reviewed by Brady Eidson.

        sourceApplicationAuditData has been used for a long time on iOS, but it's needed on more platforms.
        I also made it return an Optional instead of a bool and returning by reference. Ahhh. So much nicer.
        The NetworkProcess needed an additional entitlement on Mac to continue to load anything, which is desirable.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::sourceApplicationAuditData const):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::getAuditToken):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::sourceApplicationAuditData const):

2019-01-09  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Update sandbox profile to use iconservices instead of lsdiconservice
        https://bugs.webkit.org/show_bug.cgi?id=193115
        <rdar://problem/44867379>

        Reviewed by Eric Carlson.

        Add access to the 'com.apple.iconservices' endpoint. We will remove access to
        the older name ('com.apple.lsdiconservices') once existing clients have completed
        the switch.

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

2019-01-09  Antti Koivisto  <antti@apple.com>

        [PSON] Flash of blank content while transitioning from page A to page B.
        https://bugs.webkit.org/show_bug.cgi?id=193283

        Reviewed by Chris Dumez.

        Layer tree is not frozen during WebPage construction. If the flush timer (started for the initial
        empty document) manages to run before the actual page load starts, we'll get a flash.

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

        Rename shouldDelayAttachingDrawingArea bit to isSwapFromSuspended and make it available on all platforms.

        * UIProcess/RemoteLayerTree/mac/ScrollerMac.h: Removed.
        * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm: Removed.
        * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.h: Removed.
        * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm: Removed.
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp: Removed.
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):

        Freeze the layer tree in WebPage constructor if this is a swap from a suspended process.

        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::didCompletePageTransition):

        Unfreeze on first non-initial empty document page transition.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

2019-01-09  Chris Dumez  <cdumez@apple.com>

        WebKit Networking process crashes if the HTTPSUpgradeList is not found in the bundle
        https://bugs.webkit.org/show_bug.cgi?id=193285
        <rdar://problem/47147610>

        Reviewed by Geoffrey Garen.

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

2019-01-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add missing autocleanups
        https://bugs.webkit.org/show_bug.cgi?id=193068

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitAutocleanups.h:

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Fix CompletionHandler assertions introduced today.
        https://bugs.webkit.org/show_bug.cgi?id=193237

        This reverts part of r239710 and all of r239725, r239738, and r239748 which unsuccessfully tried to fix all the assertions.
        This code is a mess that will have to be cleaned up later.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::from):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::remove):
        (WebKit::NetworkCache::Cache::traverse):
        (WebKit::NetworkCache::Cache::clear):
        (WebKit::NetworkCache::Cache::retrieveData):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::WriteOperation::~WriteOperation): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::store):

2019-01-08  Jiewen Tan  <jiewen_tan@apple.com>

        [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky
        https://bugs.webkit.org/show_bug.cgi?id=192061

        Reviewed by Dewei Zhu.

        Part 6.

        Add some additional temporary logging info to determine if data is actually sent.
        Once the bug is determined and fixed, we should remove all logging added in this patch.

        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::send):

2019-01-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support U2F HID Authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=191535
        <rdar://problem/47102027>

        Reviewed by Brent Fulgham.

        This patch implements the support for U2F authenticators, and enables it for hid devices.
        It follows the CTAP spec to map WebAuthN requests to U2F commands and return the responses:
        https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-client-to-authenticator-protocol-v2.0-id-20180227.html#u2f-interoperability
        Most of the parts are done before this patch, this patch focues on: 7.2.2 and 7.3.2.

        Besides implementing the U2fHidAuthenticator, this patch also adds support in the mocking
        environment for U2F authenticators. It is done by extending the stages in MockHidConnection
        from 4 to indefinite as multi-round communications are expected to map WebAuthN requests
        to U2F requests.

        * Sources.txt:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        (WebKit::HidService::continueAddDeviceAfterGetInfo):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp:
        (WebKit::CtapHidDriver::continueAfterChannelAllocated):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.h:
        (WebKit::CtapHidDriver::setProtocol):
        * UIProcess/WebAuthentication/fido/U2fHidAuthenticator.cpp: Added.
        (WebKit::U2fHidAuthenticator::U2fHidAuthenticator):
        (WebKit::U2fHidAuthenticator::makeCredential):
        (WebKit::U2fHidAuthenticator::checkExcludeList):
        (WebKit::U2fHidAuthenticator::issueRegisterCommand):
        (WebKit::U2fHidAuthenticator::getAssertion):
        (WebKit::U2fHidAuthenticator::issueSignCommand):
        (WebKit::U2fHidAuthenticator::issueNewCommand):
        (WebKit::U2fHidAuthenticator::issueCommand):
        (WebKit::U2fHidAuthenticator::responseReceived):
        (WebKit::U2fHidAuthenticator::continueRegisterCommandAfterResponseReceived):
        (WebKit::U2fHidAuthenticator::continueCheckOnlyCommandAfterResponseReceived):
        (WebKit::U2fHidAuthenticator::continueBogusCommandAfterResponseReceived):
        (WebKit::U2fHidAuthenticator::continueSignCommandAfterResponseReceived):
        * UIProcess/WebAuthentication/fido/U2fHidAuthenticator.h: Added.
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::parseRequest):
        (WebKit::MockHidConnection::feedReports):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.h:
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-01-08  Youenn Fablet  <youenn@apple.com>

        service worker fetch handler results in bad referrer
        https://bugs.webkit.org/show_bug.cgi?id=188248
        <rdar://problem/47050478>

        Reviewed by Alex Christensen.

        NetworkDataTaskCocoa is sometimes updating the referrer on its own.
        Instead of updating the referrer when sending the request to WebProcess for evaluation,
        Update the referrer once the web process decides to follow the redirection.
        This ensures that any referrer that the WebProcess will set will be updated by NetworkDataTaskCocoa.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::restrictRequestReferrerToOriginIfNeeded):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Fix more assertions after r239710
        https://bugs.webkit.org/show_bug.cgi?id=193237

        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::store):
        Make default parameter an empty lambda instead of a null CompletionHandler.
        This way it can be called once instead of thinking it has already been called.

2019-01-08  Brent Fulgham  <bfulgham@apple.com>

        Move ResourceLoadStatistics files from UIProcess to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=193252
        <rdar://problem/47125401>

        Reviewed by Alex Christensen.

        This patch is the first part of a refactoring to move the ResourceLoadStatistics logic from the UIProcess to the NetworkProcess.

        This patch moves code into different folders and adjusts necessary build files, but does not change where the code executes. These
        changes have no impact on behavior or test results.

        I also modified a few files to add missing include files uncovered by the unified build system.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp: Renamed from Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h: Renamed from Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h.
        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp: Renamed from Source/WebKit/UIProcess/ResourceLoadStatisticsPersistentStorage.cpp.
        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h: Renamed from Source/WebKit/UIProcess/ResourceLoadStatisticsPersistentStorage.h.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp: Renamed from Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h: Renamed from Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp: Renamed from Source/WebKit/UIProcess/WebResourceLoadStatisticsTelemetry.cpp.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.h: Renamed from Source/WebKit/UIProcess/WebResourceLoadStatisticsTelemetry.h.
        * NetworkProcess/Downloads/PendingDownload.cpp:
        * NetworkProcess/Downloads/PendingDownload.h:
        * CMakeLists.txt:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * Shared/PersistencyUtils.cpp: Renamed from Source/WebKit/UIProcess/PersistencyUtils.cpp.
        * Shared/PersistencyUtils.h: Renamed from Source/WebKit/UIProcess/PersistencyUtils.h.
        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration): Add missing WebKit:: scope.
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: Add missing include.
        * UIProcess/WebDataListSuggestionsDropdown.cpp: Ditto.
        * UIProcess/mac/DisplayLink.cpp:
        * UnifiedSources-input.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:

2019-01-08  Chris Dumez  <cdumez@apple.com>

        Mark SuspendedPageProxy as fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=193248

        Reviewed by Alex Christensen.

        * UIProcess/SuspendedPageProxy.h:

2019-01-08  Chris Dumez  <cdumez@apple.com>

        Prevent cross-site top-level navigations from third-party iframes
        https://bugs.webkit.org/show_bug.cgi?id=193076
        <rdar://problem/36074736>

        Reviewed by Alex Christensen.

        Add experimental feature flag, on by default.

        * Shared/WebPreferences.yaml:

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Remove more use of NetworkProcess::singleton
        https://bugs.webkit.org/show_bug.cgi?id=193244

        Reviewed by Brent Fulgham.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::NetworkCORSPreflightChecker):
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        * NetworkProcess/NetworkContentRuleListManager.cpp:
        (WebKit::NetworkContentRuleListManager::NetworkContentRuleListManager):
        (WebKit::NetworkContentRuleListManager::contentExtensionsBackend):
        * NetworkProcess/NetworkContentRuleListManager.h:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded const):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkContentRuleListManager):
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::connectionMayNoLongerBeNeeded):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Stop using NetworkProcess::singleton in NetworkCache code
        https://bugs.webkit.org/show_bug.cgi?id=193243

        Reviewed by Brent Fulgham.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::open):
        (WebKit::NetworkCache::Cache::Cache):
        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::Cache::networkProcess):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::logSpeculativeLoadingDiagnosticMessage):
        (WebKit::NetworkCache::SpeculativeLoadManager::canRetrieve const):
        (WebKit::NetworkCache::SpeculativeLoadManager::addPreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateSubresource):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::recordRetrievalRequest):
        (WebKit::NetworkCache::Statistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCache::Statistics::recordRetrievalFailure):
        (WebKit::NetworkCache::Statistics::recordRetrievedCachedEntry):
        (WebKit::NetworkCache::Statistics::recordRevalidationSuccess):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::retrieveFromMemory):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Call CompletionHandler when destroying a NetworkCache::Storage::WriteOperation
        https://bugs.webkit.org/show_bug.cgi?id=193251

        Reviewed by Chris Dumez.

        This fixes another assertion introduced in r239710.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::WriteOperation::~WriteOperation):

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Stop using NetworkStorageSession in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=193236

        Reviewed by Don Olmstead.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession): Deleted.
        (WebKit::WebFrameNetworkingContext::storageSession const): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSessionID):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::fetchWebsiteData):
        (WebKit::WebProcess::addWebsiteDataStore): Deleted.
        (WebKit::WebProcess::destroySession): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-01-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence -Wformat warnings

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

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r239727.

        Broke API tests

        Reverted changeset:

        "Stop using NetworkStorageSession in WebProcess"
        https://bugs.webkit.org/show_bug.cgi?id=193236
        https://trac.webkit.org/changeset/239727

2019-01-08  Brian Burg  <bburg@apple.com>

        Remove WKPageRef-based SPI in _WKAutomationSessionDelegate
        https://bugs.webkit.org/show_bug.cgi?id=193202
        <rdar://problem/37408718>

        Reviewed by Alex Christensen.

        This code is no longer used, it should be deleted.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::AutomationSessionClient::requestNewPageWithOptions):
        (WebKit::AutomationSessionClient::requestSwitchToPage):
        (WebKit::AutomationSessionClient::requestHideWindowOfPage):
        (WebKit::AutomationSessionClient::requestRestoreWindowOfPage):
        (WebKit::AutomationSessionClient::requestMaximizeWindowOfPage):
        (WebKit::AutomationSessionClient::isShowingJavaScriptDialogOnPage):
        (WebKit::AutomationSessionClient::dismissCurrentJavaScriptDialogOnPage):
        (WebKit::AutomationSessionClient::acceptCurrentJavaScriptDialogOnPage):
        (WebKit::AutomationSessionClient::messageOfCurrentJavaScriptDialogOnPage):
        (WebKit::AutomationSessionClient::setUserInputForCurrentJavaScriptPromptOnPage):
        (WebKit::AutomationSessionClient::typeOfCurrentJavaScriptDialogOnPage):
        Clean up the delegate bridging methods now that only one delegate implementation is possible.

2019-01-08  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Remove DConf permissions from sandbox
        https://bugs.webkit.org/show_bug.cgi?id=193021

        Reviewed by Michael Catanzaro.

        The latest development releases of xdg-desktop-portal and gtk3 use a
        new portal for settings on Wayland org.freedesktop.portal.Settings.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Stop using NetworkStorageSession in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=193236

        Reviewed by Don Olmstead.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession): Deleted.
        (WebKit::WebFrameNetworkingContext::storageSession const): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSessionID):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::fetchWebsiteData):
        (WebKit::WebProcess::addWebsiteDataStore): Deleted.
        (WebKit::WebProcess::destroySession): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-01-08  Alex Christensen  <achristensen@webkit.org>

        Always call CompletionHandler in Cache::store
        https://bugs.webkit.org/show_bug.cgi?id=193237

        Reviewed by Chris Dumez.

        No change in behavior. This just fixes an assertion introduced in r239710 when the speculative loader finishes.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):

2019-01-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.23.2 release

        * gtk/NEWS: Add release notes for 2.23.2.

2019-01-07  Chris Dumez  <cdumez@apple.com>

        Cannot scoll for 5 seconds after swiping back on quoteunquoteapps.com
        https://bugs.webkit.org/show_bug.cgi?id=193215
        <rdar://problem/45108222>

        Reviewed by Tim Horton.

        When doing the history navigation, if the source and destination history
        items are clones then we will not trigger a main frame load. We may
        however trigger loads in subframes if needed. This was an issue for the
        ViewGestureController because it was expecting a main frame load after
        calling WebPageProxy::goToBackForwardItem() in order to determine when
        taking down the view snapshot is appropriate.

        To address the problem, the ViewGestureController now takes the snapshot
        down as soon as the swipe gesture ends when the source and destination
        items are clones.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::childItemWithTarget):
        (WebKit::WebBackForwardListItem::itemIsInSameDocument const):
        (WebKit::hasSameFrames):
        (WebKit::WebBackForwardListItem::itemIsClone):
        * Shared/WebBackForwardListItem.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        Leak of ScrollCompletionCallbackData (16 bytes) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193222>
        <rdar://problem/46862309>

        Reviewed by Joseph Pecoraro.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageRegisterScrollOperationCompletionCallback): Change
        to return true if callback will be called, else false.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        (WKBundlePageRegisterScrollOperationCompletionCallback): Change
        to return `bool` value to denote whether callback will be called
        (true) or not called (false).

2019-01-07  Alex Christensen  <achristensen@webkit.org>

        Remove use of NetworkProcess::singleton from CacheStorage::Engine::from
        https://bugs.webkit.org/show_bug.cgi?id=193220

        Reviewed by Andy Estes.

        This required passing the NetworkProcess& in from all its callers.
        While I was at it, I made them use CompletionHandlers where appropriate.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::findCacheEngine):
        (WebKit::NetworkProcess::ensureCacheEngine):
        (WebKit::NetworkProcess::removeCacheEngine):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::from):
        (WebKit::CacheStorage::Engine::destroyEngine):
        (WebKit::CacheStorage::Engine::fetchEntries):
        (WebKit::CacheStorage::Engine::open):
        (WebKit::CacheStorage::Engine::remove):
        (WebKit::CacheStorage::Engine::retrieveCaches):
        (WebKit::CacheStorage::Engine::retrieveRecords):
        (WebKit::CacheStorage::Engine::putRecords):
        (WebKit::CacheStorage::Engine::deleteMatchingRecords):
        (WebKit::CacheStorage::Engine::lock):
        (WebKit::CacheStorage::Engine::unlock):
        (WebKit::CacheStorage::Engine::clearMemoryRepresentation):
        (WebKit::CacheStorage::Engine::representation):
        (WebKit::CacheStorage::Engine::clearAllCaches):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):
        (WebKit::CacheStorage::globalEngineMap): Deleted.
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::~CacheStorageEngineConnection):
        (WebKit::CacheStorageEngineConnection::open):
        (WebKit::CacheStorageEngineConnection::remove):
        (WebKit::CacheStorageEngineConnection::caches):
        (WebKit::CacheStorageEngineConnection::retrieveRecords):
        (WebKit::CacheStorageEngineConnection::deleteMatchingRecords):
        (WebKit::CacheStorageEngineConnection::putRecords):
        (WebKit::CacheStorageEngineConnection::reference):
        (WebKit::CacheStorageEngineConnection::dereference):
        (WebKit::CacheStorageEngineConnection::clearMemoryRepresentation):
        (WebKit::CacheStorageEngineConnection::engineRepresentation):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::remove):
        (WebKit::NetworkCache::Cache::traverse):
        (WebKit::NetworkCache::Cache::clear):
        (WebKit::NetworkCache::Cache::retrieveData):
        * NetworkProcess/cache/NetworkCache.h:

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        Prefer RetainPtr<NSObject> to RetainPtr<NSObject *>
        <https://webkit.org/b/193056>

        Reviewed by Alex Christensen.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createEmbeddedView):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::clone const):
        - Remove '*' from RetainPtr<> type.

2019-01-07  Dean Jackson  <dino@apple.com>

        Turn on Pointer Events by default for iOS
        https://bugs.webkit.org/show_bug.cgi?id=193214
        <rdar://problem/46974878>

        Reviewed by Wenson Hsieh.

        Turn on Pointer Events.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h: Make a new #define for iOS.

2019-01-07  Alex Christensen  <achristensen@webkit.org>

        Remove use of NetworkProcess::singleton in ServiceWorker code
        https://bugs.webkit.org/show_bug.cgi?id=193209

        Reviewed by Megan Gardner.

        Use a member Ref<NetworkProcess> instead to avoid global singleton use.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::WebSWServerConnection):
        (WebKit::WebSWServerConnection::~WebSWServerConnection):
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:

2019-01-07  Alex Christensen  <achristensen@webkit.org>

        Remove use of NetworkProcess::singleton in NetworkLoad/NetworkDataTask code
        https://bugs.webkit.org/show_bug.cgi?id=193212

        Reviewed by Andy Estes.

        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::download):
        (WebKit::NetworkDataTaskBlob::writeDownload):
        (WebKit::NetworkDataTaskBlob::didFailDownload):
        (WebKit::NetworkDataTaskBlob::didFinishDownload):
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveResponse):
        * NetworkProcess/NetworkLoad.h:

2019-01-07  Alex Christensen  <achristensen@webkit.org>

        Remove use of NetworkProcess::singleton for downloads
        https://bugs.webkit.org/show_bug.cgi?id=193207

        Reviewed by Brady Eidson.

        No change in behavior.  The DownloadManager is now a member of the NetworkProcess instead of a static singleton.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::didReceiveChallenge):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertNetworkLoadToDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::client):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload):
        (WebKit::PendingDownload::messageSenderConnection):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkLoadChecker.cpp:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::downloadManager):
        * NetworkProcess/NetworkProcess.h:

2019-01-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: show secure connection details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191539
        <rdar://problem/45979891>

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (stringForSSLProtocol): Added.
        (stringForSSLCipher): Added.
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):

2019-01-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remote inspector can crash if attempting to navigate inspector page
        https://bugs.webkit.org/show_bug.cgi?id=193204
        <rdar://problem/45550428>

        Reviewed by Devin Rousso.

        * UIProcess/mac/RemoteWebInspectorProxyMac.mm:
        (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow):
        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController webView:decidePolicyForNavigationAction:decisionHandler:]):

2019-01-07  Eric Carlson  <eric.carlson@apple.com>

        Deactivate audio session whenever possible
        https://bugs.webkit.org/show_bug.cgi?id=193188
        <rdar://problem/42678977>

        Reviewed by Jer Noble.

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

2019-01-07  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] Add SPI to check if a WKWebView has an inspector frontend
        https://bugs.webkit.org/show_bug.cgi?id=193162
        <rdar://problem/24267143>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _hasInspectorFrontend]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::hasInspectorFrontend const):

2019-01-07  Antti Koivisto  <antti@apple.com>

        UI process side scrollbars for UI side compositing on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193106

        Reviewed by Tim Horton.

        This patch implements Mac scrollbars on UI process side using the low level NSScrollerImp/NSScrollerPairImp
        SPIs. With this patch scrollbars mostly work for the main frame and also render (but can't be interacted with)
        for the subframes.

        This is based on the similar code for web process side scrollbars in ScrollAnimatorMac. There is quite a bit of
        copy code as there is no way to share nicely. One of these will eventually go away anyway.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        (WebKit::RemoteScrollingCoordinatorProxy::handleMouseEvent):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        (WebKit::RemoteScrollingTree::handleMouseEvent):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * UIProcess/RemoteLayerTree/mac: Added.
        * UIProcess/RemoteLayerTree/mac/ScrollerMac.h: Added.

        Wraps NSScrollerImp for vertical or horizontal scrollbar.

        (WebKit::ScrollerMac::pair):
        (WebKit::ScrollerMac::orientation const):
        (WebKit::ScrollerMac::hostLayer const):
        (WebKit::ScrollerMac::scrollerImp):
        * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm: Added.
        (-[WKScrollbarPartAnimation initWithScroller:featureToAnimate:animateFrom:animateTo:duration:]):
        (-[WKScrollbarPartAnimation startAnimation]):
        (-[WKScrollbarPartAnimation setStartValue:]):
        (-[WKScrollbarPartAnimation setEndValue:]):
        (-[WKScrollbarPartAnimation setCurrentProgress:]):
        (-[WKScrollbarPartAnimation invalidate]):
        (-[WKScrollerImpDelegate initWithScroller:]):
        (-[WKScrollerImpDelegate cancelAnimations]):
        (-[WKScrollerImpDelegate scrollerPair]):
        (-[WKScrollerImpDelegate convertRectToBacking:]):
        (-[WKScrollerImpDelegate convertRectFromBacking:]):
        (-[WKScrollerImpDelegate layer]):
        (-[WKScrollerImpDelegate mouseLocationInScrollerForScrollerImp:]):
        (-[WKScrollerImpDelegate convertRectToLayer:]):
        (-[WKScrollerImpDelegate shouldUseLayerPerPartForScrollerImp:]):
        (-[WKScrollerImpDelegate effectiveAppearanceForScrollerImp:]):
        (-[WKScrollerImpDelegate setUpAlphaAnimation:scrollerPainter:part:animateAlphaTo:duration:]):
        (-[WKScrollerImpDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[WKScrollerImpDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[WKScrollerImpDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        (-[WKScrollerImpDelegate scrollerImp:animateExpansionTransitionWithDuration:]):
        (-[WKScrollerImpDelegate scrollerImp:overlayScrollerStateChangedTo:]):
        (-[WKScrollerImpDelegate invalidate]):
        (WebKit::ScrollerMac::ScrollerMac):
        (WebKit::ScrollerMac::~ScrollerMac):
        (WebKit::ScrollerMac::attach):
        (WebKit::ScrollerMac::setHostLayer):
        (WebKit::ScrollerMac::updatePosition):
        (WebKit::ScrollerMac::convertFromContent const):
        * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.h: Added.
        (WebKit::ScrollerPairMac::verticalScroller):
        (WebKit::ScrollerPairMac::horizontalScroller):
        (WebKit::ScrollerPairMac::scrollerImpPair):
        (WebKit::ScrollerPairMac::lastKnownMousePosition const):
        * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm: Added.

        Wraps NSScrollerPairImp and owns the vertical and horizontal scrollers.

        (-[WKScrollerImpPairDelegate initWithScrollerPair:]):
        (-[WKScrollerImpPairDelegate invalidate]):
        (-[WKScrollerImpPairDelegate contentAreaRectForScrollerImpPair:]):
        (-[WKScrollerImpPairDelegate inLiveResizeForScrollerImpPair:]):
        (-[WKScrollerImpPairDelegate mouseLocationInContentAreaForScrollerImpPair:]):
        (-[WKScrollerImpPairDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        (-[WKScrollerImpPairDelegate scrollerImpPair:setContentAreaNeedsDisplayInRect:]):
        (-[WKScrollerImpPairDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (WebKit::ScrollerPairMac::ScrollerPairMac):
        (WebKit::ScrollerPairMac::~ScrollerPairMac):
        (WebKit::ScrollerPairMac::handleWheelEvent):
        (WebKit::ScrollerPairMac::handleMouseEvent):
        (WebKit::ScrollerPairMac::updatePositions):
        (WebKit::ScrollerPairMac::contentsSize const):
        (WebKit::ScrollerPairMac::visibleContentsRect const):
        (WebKit::ScrollerPairMac::useDarkAppearance const):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp: Added.

        Special node for UI side Mac scrolling. Owns ScrollerPairMac instance.

        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::ScrollingTreeFrameScrollingNodeRemoteMac):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::~ScrollingTreeFrameScrollingNodeRemoteMac):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::create):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::commitStateBeforeChildren):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::setScrollLayerPosition):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::handleWheelEvent):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::handleMouseEvent):
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::scrollingTree const):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMouseEvent):
        * WebKit.xcodeproj/project.pbxproj:

2019-01-07  Brian Burg  <bburg@apple.com>

        Unwanted page navigation after showing & dismissing contextual menu with control-click
        https://bugs.webkit.org/show_bug.cgi?id=192912
        <rdar://problem/46318508>

        Reviewed by Timothy Hatcher.

        After the conversion to use a mouse event queue, this behavior was observed rarely, especially
        when CPU is under load and lots of things are going on in the page. In other words, it's racy.

        Based on NSEvent logging, it seems that when the system is under load, we simply take too long
        to enter the nested runloop that AppKit uses to handle events when the context menu is present.
        AppKit doesn't care whether or not the MouseDown triggered a nested runloop; on my machine it delivers
        the MouseUp event about 130ms after the MouseDown event. If we haven't show the context menu in
        that time, then the MouseUp is enqueued as a normal mouse event. If the Ctrl-click is on a link,
        then the MouseUp will be interpreted by EventHandler as a click event, which in the simplest case
        will initiate a main frame navigation. When the context menu is dismissed and the nested runloop
        is torn down, the navigation IPC message is handled in UIProcess and the page navigates away.

        We can't do much to change AppKit's inherently racy behavior, but we can avoid processing
        mouse events that are delivered whilst we are processing the context menu-initiating event.
        From the WebProcess point of view, there is no race anymore because it does not receive the
        MouseUp event.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        If new events come in, drop them on the floor. Based on testing, the nested runloop will discard
        the unpaired MouseUp event anyway, so this does not cause a change in behavior.

2019-01-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Native caret shows up alongside the page's caret when requesting desktop site on jsfiddle.net
        https://bugs.webkit.org/show_bug.cgi?id=193180
        <rdar://problem/45971041>

        Reviewed by Tim Horton.

        JSFiddle uses CodeMirror; CodeMirror's editor works by capturing keystrokes and input in a hidden textarea
        element, and then drawing its own selection caret using web content. This textarea is hidden by being placed
        underneath an empty div with `overflow: hidden;`.

        When requesting desktop site on iOS, both CodeMirror's caret and the native iOS caret are shown because iOS
        selection UI consists of native views overlaid on the page, whereas on macOS, the entire textarea (along with
        the caret) are occluded by the hidden overflow container. Additionally, various iOS behaviors related to
        selection and editing, such as zooming to reveal the focused element and showing the platform callout bar, are
        active when focusing this hidden editable area; these don't work as intended, and just interfere with the page's
        custom editing UI.

        To fix this, we augment the text interaction suppression mechanism added in r238146 to detect when the focused
        element is in an empty `overflow: hidden` container, and bail out of native text editing behaviors.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:

        Rename elementIsTransparent to elementIsTransparentOrFullyClipped.

        * Shared/FocusedElementInformation.cpp:
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        * Shared/FocusedElementInformation.h:
        * UIProcess/ios/WKContentViewInteraction.h:

        Rename FocusedElementIsTransparent to FocusedElementIsTransparentOrFullyClipped.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _zoomToRevealFocusedElement]):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _elementDidBlur]):

        Make an additional tweak here to only stop suppressing text interaction assistant in `-_elementDidBlur` if we're
        not also in the middle of changing the focused element. Without this, focusing a hidden editable element while
        another hidden editable element is currently focused causes us to zoom to reveal the newly focused hidden
        editable element, when we should be avoiding this behavior.

        (-[WKContentView _updateChangedSelection:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::getFocusedElementInformation):

2019-01-07  Alex Christensen  <achristensen@webkit.org>

        Move identifierBase from SessionTracker to NetworkProcess/WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=193201

        Reviewed by Tim Horton.

        No change in behavior.  This just reduces process-global state.

        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::uiProcessBundleIdentifier const):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * Shared/SessionTracker.cpp:
        (WebKit::identifierBase): Deleted.
        (WebKit::SessionTracker::getIdentifierBase): Deleted.
        (WebKit::SessionTracker::setIdentifierBase): Deleted.
        * Shared/SessionTracker.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
        (WebKit::WebFrameNetworkingContext::sourceApplicationIdentifier const):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::uiProcessBundleIdentifier const):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2019-01-07  Alex Christensen  <achristensen@webkit.org>

        Reduce use of NetworkProcess::singleton
        https://bugs.webkit.org/show_bug.cgi?id=193197

        Reviewed by Brady Eidson.

        Pass it around as a Ref<NetworkProcess> as a step towards reducing global state.
        Soup's WebFrameNetworkingContext no longer makes a NetworkSession like all other ports
        because networking is no longer done in the WebProcess.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::create):
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess):
        (WebKit::WebIDBConnectionToClient::deleteDatabase):
        (WebKit::WebIDBConnectionToClient::openDatabase):
        (WebKit::WebIDBConnectionToClient::abortTransaction):
        (WebKit::WebIDBConnectionToClient::commitTransaction):
        (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToClient::createObjectStore):
        (WebKit::WebIDBConnectionToClient::deleteObjectStore):
        (WebKit::WebIDBConnectionToClient::renameObjectStore):
        (WebKit::WebIDBConnectionToClient::clearObjectStore):
        (WebKit::WebIDBConnectionToClient::createIndex):
        (WebKit::WebIDBConnectionToClient::deleteIndex):
        (WebKit::WebIDBConnectionToClient::renameIndex):
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        (WebKit::WebIDBConnectionToClient::getRecord):
        (WebKit::WebIDBConnectionToClient::getAllRecords):
        (WebKit::WebIDBConnectionToClient::getCount):
        (WebKit::WebIDBConnectionToClient::deleteRecord):
        (WebKit::WebIDBConnectionToClient::openCursor):
        (WebKit::WebIDBConnectionToClient::iterateCursor):
        (WebKit::WebIDBConnectionToClient::establishTransaction):
        (WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose):
        (WebKit::WebIDBConnectionToClient::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent):
        (WebKit::WebIDBConnectionToClient::openDBRequestCancelled):
        (WebKit::WebIDBConnectionToClient::confirmDidCloseFromServer):
        (WebKit::WebIDBConnectionToClient::getAllDatabaseNames):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::create):
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::createSocketStream):
        (WebKit::NetworkConnectionToWebProcess::prefetchDNS):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        (WebKit::NetworkConnectionToWebProcess::ensureLegacyPrivateBrowsingSession):
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::networkProcess):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::singleton):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::fetchDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::clearDiskCacheEntries):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::getNetworkProcessStatistics):
        (WebKit::NetworkProcess::idbServer):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::convertToDownload):
        (WebKit::NetworkResourceLoader::isAlwaysOnLoggingAllowed const):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::create):
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::networkProcess):
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::isAlwaysOnLoggingAllowed const):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        (WebKit::NetworkSessionCocoa::create):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        (WebKit::NetworkSessionCurl::NetworkSessionCurl):
        * NetworkProcess/curl/NetworkSessionCurl.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
        * NetworkProcess/soup/NetworkSessionSoup.h:

2019-01-07  Alex Christensen  <achristensen@webkit.org>

        Modernize CacheModel and disk cache fetching and clearing
        https://bugs.webkit.org/show_bug.cgi?id=193164

        Reviewed by Joseph Pecoraro.

        fetchDiskCacheEntries and clearDiskCacheEntries now use an early-return model.
        CacheModel is now an enum class.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::fetchDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::clearDiskCacheEntries):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord const):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache):
        * Shared/CacheModel.cpp:
        (WebKit::calculateMemoryCacheSizes):
        (WebKit::calculateURLCacheSizes):
        * Shared/CacheModel.h:
        (): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toCacheModel):
        (WebKit::toAPI):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration pageCacheEnabled]):
        (-[_WKProcessPoolConfiguration setPageCacheEnabled:]):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setCacheModel):
        (WebKit::WebProcess::clearResourceCaches):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-01-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import U2F command/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=193150
        <rdar://problem/47054028>

        Reviewed by Brent Fulgham.

        Moves helper functions to WebAuthenticationUtils.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticatorInternal::produceHashSet):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (): Deleted.
        (WebKit::LocalAuthenticatorInternal::buildAuthData): Deleted.
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::feedReports):

2019-01-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Use save sheet instead of dialog where possible
        https://bugs.webkit.org/show_bug.cgi?id=193160
        <rdar://problem/37399759>

        Reviewed by Devin Rousso.

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

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

        [WebKitLegacy] Media playback pauses on scroll
        https://bugs.webkit.org/show_bug.cgi?id=192829

        Reviewed by Eric Carlson.

        Add a new WebPage, WebPageProxy, & WKWebView SPI to stop, suspend, and resume all
        existing media playback in the page.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _stopAllMediaPlayback]):
        (-[WKWebView _suspendAllMediaPlayback]):
        (-[WKWebView _resumeAllMediaPlayback]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::stopAllMediaPlayback):
        (WebKit::WebPageProxy::suspendAllMediaPlayback):
        (WebKit::WebPageProxy::resumeAllMediaPlayback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _showPhishingAlert]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::stopAllMediaPlayback):
        (WebKit::WebPage::suspendAllMediaPlayback):
        (WebKit::WebPage::resumeAllMediaPlayback):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Add support for toggling device orientation API support per site
        https://bugs.webkit.org/show_bug.cgi?id=193143
        <rdar://problem/46605724>

        Reviewed by Alex Christensen.

        Add support for toggling device orientation API support per site via _WKWebsitePolicies.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _simulateDeviceOrientationChangeWithAlpha:beta:gamma:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setDeviceOrientationEventEnabled:]):
        (-[_WKWebsitePolicies deviceOrientationEventEnabled]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::simulateDeviceOrientationChange):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::simulateDeviceOrientationChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Crash under WebPageProxy::continueNavigationInNewProcess()
        https://bugs.webkit.org/show_bug.cgi?id=193113
        <rdar://problem/46938686>

        Reviewed by Brady Eidson.

        The crash was happening in continueNavigationInNewProcess() when dereferencing
        the Optional<> value returned by API::Navigation::backForwardFrameLoadType(), after verifying
        that API::Navigation::targetItem() is not null.

        When constructing an API::Navigation object with a targetItem, you HAVE to pass
        in a backForwardFrameLoadType as well so this normally is not possible. However,
        it can happen because API::Navigation::setTargetItem() can get called later on and
        set a target item on a Navigation object which potentially does not have a
        backForwardFrameLoadType. This setter was only called in one place in
        decidePolicyForNavigationAction() to update an existing Navigation object using
        the targetItem provided by a NavigationAction. This logic was added with PSON
        support.

        Because I was unable to write a test case reproducing this and because I do not know
        how it can happen in practice that we'd have a NavigationAction with a targetItem
        even though the Navigation object itself is not for a back/forward navigation, I have
        chosen to drop the unsafe API::Navigation::setTargetItem() setter and the call site.
        When the call site was added, with ProcessSwap.NavigateToDataURLThenBack API test,
        the intention was to create a back/forward navigation object instead of a standard load
        navigation one if there is currently no existing Navigation object in the UIProcess.
        This can happen when the back/forward navigation is triggered by the WebProcess via
        JS (e.g. history.back()) and this is what the API test covers. The part of the logic
        that updates an existing Navigation object with a targetItem coming from the
        NavigationAction is untested and I have no evidence it does anything useful. However,
        we DO have evidence that it can cause crashes.

        * UIProcess/API/APINavigation.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

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

        Remove some nonexistent files from the WebKit Xcode project

        * WebKit.xcodeproj/project.pbxproj:
        r238468 and r237205 forgot to remove some files from the project.

2019-01-04  Youenn Fablet  <youenn@apple.com>

        CSP violation reports should bypass CSP checks
        https://bugs.webkit.org/show_bug.cgi?id=192857
        <rdar://problem/46887236>

        Reviewed by Chris Dumez.

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

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Use WebsiteDataStoreParameters instead of NetworkProcessCreationParameters for IndexedDB directories
        https://bugs.webkit.org/show_bug.cgi?id=193114

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKContextCreate
        https://bugs.webkit.org/show_bug.cgi?id=193118

        Reviewed by Brady Eidson.

        It has only one use that is being removed in rdar://problem/47030792
        This is a step towards removing ProcessPoolConfiguration::createWithLegacyOptions.
        Also make WKContextCreateWithConfiguration accept a null configuration to make it easier to use.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreateWithConfiguration):
        * UIProcess/API/C/WKContext.h:

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

        Fix the build

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):

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

        Share ink choice and ruler between all editable images
        https://bugs.webkit.org/show_bug.cgi?id=193130
        <rdar://problem/46826491>

        Reviewed by Wenson Hsieh.

        * SourcesCocoa.txt:
        Add WKDrawingCoordinator, which maintains WKWebView-wide drawing state,
        and manages a single shared ink picker.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::createDrawingView):
        * UIProcess/ios/EditableImageController.mm:
        (WebKit::EditableImageController::ensureEditableImage):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createDrawingView):
        Plumb WKDrawingView creation through PageClient, so that it can be instantiated
        with knowledge of its owning WKContentView.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _elementDidBlur]):
        (-[WKContentView _drawingCoordinator]):
        (-[WKContentView _installInkPickerForDrawingViewWithID:]): Deleted.
        (-[WKContentView _uninstallInkPicker]): Deleted.
        Move ink picker management into WKDrawingCoordinator.

        * UIProcess/ios/WKDrawingView.h:
        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView initWithEmbeddedViewID:contentView:]):
        (-[WKDrawingView _canvasViewWillBeginDrawing:]):
        (-[WKDrawingView invalidateAttachment]):
        (-[WKDrawingView didChangeRulerState:]):
        (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]): Deleted.
        (-[WKDrawingView canvasView]): Deleted.
        Use a shared ruler, owned by WKDrawingCoordinator.
        Update the editable image's ink when drawing begins. This way, we don't have
        to push ink changes to all drawings as they happen.

        * UIProcess/ios/WKInkPickerView.h:
        * UIProcess/ios/WKInkPickerView.mm:
        (-[WKInkPickerView initWithContentView:]):
        (-[WKInkPickerView inlineInkPickerDidToggleRuler:]):
        (-[WKInkPickerView viewControllerForPopoverPresentationFromInlineInkPicker:]):
        (-[WKInkPickerView setInk:]):
        (-[WKInkPickerView ink]):
        (-[WKInkPickerView initWithDrawingView:]): Deleted.
        (-[WKInkPickerView didPickInk]): Deleted.
        (-[WKInkPickerView inlineInkPicker:didSelectTool:]): Deleted.
        (-[WKInkPickerView inlineInkPicker:didSelectColor:]): Deleted.
        * WebKit.xcodeproj/project.pbxproj:

2019-01-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Merge WebEditCommandProxy::nameForEditAction and undoNameForEditAction into a single function
        https://bugs.webkit.org/show_bug.cgi?id=193129

        Reviewed by Tim Horton.

        Remove WebEditCommandProxy::nameForEditAction and use WebCore::nameForUndoRedo instead.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::registerEditCommand):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::WebEditCommandProxy):
        (WebKit::WebEditCommandProxy::~WebEditCommandProxy):
        (WebKit::WebEditCommandProxy::nameForEditAction): Deleted.
        * UIProcess/WebEditCommandProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::addEditCommand):
        (WebKit::WebPageProxy::removeEditCommand):
        (WebKit::WebPageProxy::isValidEditCommand): Deleted.

        Bit of drive-by refactoring: remove an unused function, and make addEditCommand and removeEditCommand take
        references instead of pointers, since these are assumed to be nonnull.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::registerEditCommand):

2019-01-03  Matt Rajca  <mrajca@apple.com>

        Make DidPlayMediaPreventedFromPlaying autoplay event more generic.
        https://bugs.webkit.org/show_bug.cgi?id=193128
        rdar://34554231

        Reviewed by Jer Noble.

        Today, the "DidPlayMediaPreventedFromPlaying" autoplay event is only sent for
        media prevented from autoplaying. It could be generalized to a "DidPlayMediaWithUserGesture"
        event along with a flag that indicates whether or not autoplay was actually prevented.

        Tests: existing API tests were updated to reflect the new names. New API tests
        were added for the new case in which the "DidPlayMediaWithUserGesture" event is sent.

        * Shared/WebCoreArgumentCoders.h: Take into account new flags.
        * UIProcess/API/C/WKPage.cpp: Ditto.
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h: Ditto.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Ditto.
        * UIProcess/Cocoa/UIDelegate.mm: Ditto.
        (WebKit::toWKAutoplayEventFlags):
        (WebKit::toWKAutoplayEvent):

2019-01-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] Move cookiePersistentStorageFile from NetworkProcessCreationParameters to NetworkSessionCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=192970

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const): Removed code for cookiePersistentStorageFile.
        (WebKit::NetworkProcessCreationParameters::decode): Ditto.
        * NetworkProcess/NetworkProcessCreationParameters.h: Ditto.
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Ditto.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters): Added code for cookiePersistentStorageFile.
        (WebKit::NetworkSessionCreationParameters::encode const): Ditto.
        (WebKit::NetworkSessionCreationParameters::decode): Ditto.
        * NetworkProcess/NetworkSessionCreationParameters.h: Ditto.
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        (WebKit::NetworkSessionCurl::NetworkSessionCurl): Ditto.

        * NetworkProcess/Cookies/WebCookieManager.h: Removed setCookiePersistentStorage method of curl port extension.
        * NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage): Deleted.

2019-01-04  Chris Dumez  <cdumez@apple.com>

        [PSON] Calling history.back() from inside the load event handler prevents process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=193120

        Reviewed by Alex Christensen.

        A HistoryItem is created only *after* we've fired the load event. As a result, if you call
        history.back() in JS from inside the load event handler, the current HistoryItem and and
        the target HistoryItem will be the same. This is normally not an issue. However, there was
        logic inside of WebProcessPool::processForNavigationInternal() which would compare the
        processID of the source and destination BackForwardListItems and which would force a process
        reuse if both BackForwardListItems came from the same WebContent process. So even though
        we swapped when doing a standard load from site A to site B, we would fail to swap if site
        B called history.back() from inside its load event handler.

        To address the issue, stop relying on the source backforward item's processID. Instead, just
        use the WebContent process matching the destination backforward item's processID if it still
        exists.

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

2019-01-04  Keith Rollin  <krollin@apple.com>

        Bring back parent processID for logging
        https://bugs.webkit.org/show_bug.cgi?id=193121
        <rdar://problem/47031634>

        Reviewed by Alex Christensen.

        Bug 192961 removes presentingApplicationPID from
        NetworkProcessCreationParameters because it was (a) stored in some
        global state, the use of which is being minimized, and (b) it was
        largely unused. However, it was actually still being used in some
        useful logging in order to tie together child processes with their
        parent process. Re-introduce this value in NetworkLoadParameters so
        that we can log it.

        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        (WebKit::WebLoaderStrategy::preconnectTo):

2019-01-04  Youenn Fablet  <youenn@apple.com>

        Make RestrictedHTTPResponseAccess an internal flag
        https://bugs.webkit.org/show_bug.cgi?id=193145

        Reviewed by Chris Dumez.

        * Shared/WebPreferences.yaml: This will ease debugging.

2019-01-04  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Enable logging for services in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=192705

        Reviewed by Brent Fulgham.

        When running layout tests, we didn’t see 107 services being looked up through launchd. We should
        add logging to these services to determine which services we actually need in the sandbox.

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

2019-01-04  Commit Queue  <commit-queue@webkit.org>

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

        Breaks shipping tests (Requested by bfulgha__ on #webkit).

        Reverted changeset:

        "[iOS] Update sandbox profile to use iconservices instead of
        lsdiconservice"
        https://bugs.webkit.org/show_bug.cgi?id=193115
        https://trac.webkit.org/changeset/239603

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessPool::addSuspendedPage()
        https://bugs.webkit.org/show_bug.cgi?id=193110

        Reviewed by Youenn Fablet.

        When PageCache is disabled, WebProcessPool::m_maxSuspendedPageCount is 0 and WebProcessPool::addSuspendedPage()
        would call m_suspendedPages.removeFirst() even though m_suspendedPages is empty, causing a crash.
        Do an early return when m_maxSuspendedPageCount is 0 since we do not want to add any suspended page in this
        case.

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

2019-01-03  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Silently deny access to mail settings triggered by MessageUI framework
        https://bugs.webkit.org/show_bug.cgi?id=193123
        <rdar://problem/42485581>

        Reviewed by Alexey Proskuryakov.

        Remove unhelpful logging generated when we block access to non-WebKit preferences. These
        invalid checks are done by an system framework that we cannot modify.

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

2019-01-03  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Update sandbox profile to use iconservices instead of lsdiconservice
        https://bugs.webkit.org/show_bug.cgi?id=193115
        <rdar://problem/44867379>

        Reviewed by Eric Carlson.

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

2019-01-03  Brent Fulgham  <bfulgham@apple.com>

        Remove logic handling DNT header during redirects
        https://bugs.webkit.org/show_bug.cgi?id=193082
        <rdar://problem/45555965>

        Reviewed by Chris Dumez.

        Test: http/wpt/fetch/dnt-header-after-redirection.html.

        Don't bother looking for (or passing along) DNT headers during redirects.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::check):
        (WebKit::NetworkLoadChecker::prepareRedirectedRequest): Deleted.
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::restartNetworkLoad):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::willPerformHTTPRedirection):

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

        Add release logging to help debug HTTPS upgrade issues
        https://bugs.webkit.org/show_bug.cgi?id=193075

        Reviewed by Alex Christensen.

        Add release logging to help debug HTTPS upgrade issues like Bug 193026.

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

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

        NetworkProcess should initialize its default NetworkSession with parameters from the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=192967

        Reviewed by Brent Fulgham.

        I moved 3 of the NetworkProcessCreationParameters to use corresponding values of a WebsiteDataStoreParameters.
        More will be moved in the near future, like indexedDatabaseDirectory.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

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

        [iOS] REGRESSION (r239441): Tab cycling to offscreen <select> may not scroll it into view
        https://bugs.webkit.org/show_bug.cgi?id=193084
        <rdar://problem/47006882>

        Reviewed by Simon Fraser.

        In `WKWebView.mm`, `-_zoomToFocusRect:` will ignore the given selection rect if it is of size `{ 0, 0 }` and at
        the origin. Prior to r239441, when using the tab key to move focus between non-editable form controls (or any
        other method that doesn't involve tapping on the focused select element, with the exception of the next and
        previous buttons in the input accessory view), we would compute a selection rect of `{{ 0, 0 }, { 0, 0 }}`, and
        subsequently try to scroll the focused element to the center of the visible area, without taking the selection
        rect into account.

        However, after r239441, the web process sends the element interaction location to the UI process, which then
        computes the selection rect by taking this location and adding a size of `{ 1, 1 }` (before r239441, this was
        done in `WebPage::getAssistedNodeInformation`). However, our new implementation doesn't take into account the
        case where the element interaction rect is null, which happens when the last interaction location is outside of
        the bounding rect of the element. In this case, we set the element interaction location to { 0, 0 } and end up
        computing a selection rect of `{{ 0, 0 }, { 1, 1 }}` instead of `{{ 0, 0 }, { 0, 0 }}` as we would have
        previously done. This causes us to scroll up to the origin, instead of revealing the focused element.

        To fix this, we restore the pre-r239441 behavior. See additional comments below for details.

        Test: fast/forms/ios/scroll-to-reveal-focused-select.html

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

        Rename `elementInteractionLocation` to `lastInteractionLocation`. This was previously
        `elementInteractionLocation` due to existing logic that tries to move the interaction location into the bounding
        rect of the element in the case where visual viewports are disabled; however, since this feature has long been
        enabled by default for all modern WebKit clients (internal and external), it's simpler to just use always send
        the last interaction location over to the UI process, and have the UI process use `{{ 0, 0 }, { 0, 0 }}` if
        the interaction location is outside of the element rect.

        In the very unlikely event that any modern WebKit client disables visual viewports, this will still behave
        reasonably, since we'll just use `{{ 0, 0 }, { 0, 0 }}` as the target rect and scroll to reveal the entire
        element rather than the top left corner of the element.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (rectToRevealWhenZoomingToFocusedElement):
        * WebProcess/WebPage/ios/WebPageIOS.mm:

        Move the check for whether the interaction location is inside the element's bounding rect from the web process
        to the UI process. This relocates the logic to determine whether the selection rect should be a 1 by 1 fallback
        interaction rect or the zero rect (`{{ 0, 0 }, { 0, 0 }}`) closer to the code that actually uses this rect.

        (WebKit::WebPage::getFocusedElementInformation):

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

        WebUndoStep's monotonically increasing identifier should be a WebUndoStepID instead of uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=193100

        Reviewed by Simon Fraser.

        Add a type alias, WebUndoStepID, to represent the monotonically increasing undo step ID for each undoable
        editing command, and use this type alias in lieu of `uint64_t`. No change in behavior.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::WebEditCommandProxy):
        * UIProcess/WebEditCommandProxy.h:
        (WebKit::WebEditCommandProxy::create):
        (WebKit::WebEditCommandProxy::commandID const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::registerEditCommandForUndo):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerUndoStep):

        Store the step ID in a temporary variable, since `webUndoStep` is now moved when calling `addWebUndoStep`.

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

        Make this take a `Ref<WebUndoStep>&&` instead of a `WebUndoStep*`, and use move semantics to transfer the
        given `Ref` to the table.

        (WebKit::WebPage::removeWebEditCommand):
        (WebKit::WebPage::unapplyEditCommand):
        (WebKit::WebPage::reapplyEditCommand):

        Use `auto*` in a couple of places.

        (WebKit::WebPage::didRemoveEditCommand):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebUndoStep.cpp:
        (WebKit::generateUndoStep):
        * WebProcess/WebPage/WebUndoStep.h:
        (WebKit::WebUndoStep::stepID const):
        (WebKit::WebUndoStep::WebUndoStep):
        * WebProcess/WebPage/WebUndoStepID.h: Copied from Source/WebKit/WebProcess/WebPage/WebUndoStep.cpp.

2019-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for using the current text selection as the find string on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193034
        <rdar://problem/45138739>

        Reviewed by Tim Horton.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeFindStringFromSelection:]):

        Provides a way to set the find string on iOS and macOS (an aside: takeFindStringFromSelection: already exists on
        macOS, but there is no equivalent protocol method on iOS, so this new SPI acts as a cross-platform way for
        WebKit clients to take the find string from the selection across all Cocoa platforms).

        (+[WKWebView _stringForFind]):
        (+[WKWebView _setStringForFind:]):

        Call into find-in-page helper functions.

        (-[WKWebView _findString:options:maxCount:]):

        On iOS, additionally update the find-in-page string when exercising the _findString:options:maxCount: SPI. This
        mirrors macOS behavior of updating the find pasteboard every time the find string changes; however, on macOS,
        this is implemented by the platform (in AppKit), whereas there's no platform find pasteboard on iOS, let alone
        logic to update it in UIKit. As such, we directly drive updates to the find string within WebKit.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Add some new cross-platform find-in-page SPI. See above for more details.

        * UIProcess/Cocoa/GlobalFindInPageState.h: Added.
        * UIProcess/Cocoa/GlobalFindInPageState.mm: Added.
        (WebKit::findPasteboard):
        (WebKit::globalStringForFind):

        Fetch the string to use when finding text in the page. On macOS, this accesses the AppKit find pasteboard; on
        iOS, this instead returns the current global find string.

        (WebKit::updateStringForFind):

        Sets the global find string. Uses the find pasteboard on macOS, and sets the global find string on iOS.

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

        Add plumbing to allow WebEditorClient to deliver the update the global find string in the UI process.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateStringForFind):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::updateStringForFind):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateStringForFind):

2019-01-02  Brent Fulgham  <bfulgham@apple.com>

        Allow WebContent process access to some drawing-related IOKit properties
        https://bugs.webkit.org/show_bug.cgi?id=193086
        <rdar://problem/46568088>

        Reviewed by Eric Carlson.

        Update the iOS WebContent process sandbox to allow access to some IOKit properties
        that are needed for drawing and media playback operations.

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

2019-01-02  Brent Fulgham  <bfulgham@apple.com>

        Remove unused logging service 
        https://bugs.webkit.org/show_bug.cgi?id=193081
        <rdar://problem/40414815>

        Reviewed by Alexey Proskuryakov.

        We don't use this logging service, so don't open an exception for it.

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

2019-01-02  Brent Fulgham  <bfulgham@apple.com>

        Remove temporary workaround for CVMS code signing objects
        https://bugs.webkit.org/show_bug.cgi?id=193079
        <rdar://problem/40139202>

        Reviewed by Alexey Proskuryakov.

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

2019-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r239441): [iOS] Selection UI sometimes doesn't change after tapping "select all" in the callout bar
        https://bugs.webkit.org/show_bug.cgi?id=193070
        <rdar://problem/46921508>

        Reviewed by Tim Horton.

        r239441 added logic to include an EditorState in the next layer tree commit when refocusing an element; this was
        done to ensure that after tapping an element that has already been programmatically focused, we still send up-
        to-date editor information to the UI process for the purposes of zooming to the selection rect, even if the
        selection in the DOM is unchanged, since other aspects of the editor state may have changed since the element
        was initially focused.

        We currently try to flag the next layer tree commit by setting `m_hasPendingEditorStateUpdate` to `true`.
        However, this is problematic since we aren't guaranteed in all cases that a compositing flush has been
        scheduled. In the case where it hasn't, we'll end up in a state where the editor state update flag has been set,
        yet the update will not make it over to the UI process until something happens that forces a layer tree commit
        (e.g. scrolling, pinch zooming). Worse still, if the selection is then programmatically changed from the web
        process, we will bail from sending a subsequent editor state update to the UI process because `WebPage` thinks
        that a pending editor state has already been scheduled. This manifests in selection UI not updating after
        tapping "Select All" in the callout bar, if the callout bar was brought up by tapping near the selection (since
        this refocuses the element).

        To fix this, we adjust this logic in `WebPage::elementDidRefocus` so that it sets the flag and then schedules a
        compositing flush, but only if the user is actually interacting with the focused element (i.e., if the page
        calls `focus` repeatedly, we won't continue to schedule compositing flushes).

        Test: editing/selection/ios/change-selection-after-tapping-focused-element.html

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::elementDidRefocus):
        (WebKit::WebPage::sendEditorStateUpdate):
        (WebKit::WebPage::scheduleFullEditorStateUpdate):

        Add a private helper method to schedule an editor state update by setting `m_hasPendingEditorStateUpdate` to
        `true` and then scheduling a compositing layer flush. Also, add a FIXME aluding to the fact that scheduling an
        entire compositing layer flush to send an editor state update is somewhat wasteful, and should be replaced by
        just scheduling this work to be done before the next frame (see: <rdar://problem/36523583> for more detail).

        We also use this helper method in a few places where we currently turn on the editor state flag and schedule a
        subsequent compositing flush.

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

2019-01-02  Commit Queue  <commit-queue@webkit.org>

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

        basic browsing seems not to work (Requested by thorton on
        #webkit).

        Reverted changeset:

        "Expand use of sourceApplicationAuditData"
        https://bugs.webkit.org/show_bug.cgi?id=192995
        https://trac.webkit.org/changeset/239524

2019-01-01  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2019
        https://bugs.webkit.org/show_bug.cgi?id=192811

        Reviewed by Mark Lam.

        * Info.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-iOS.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist:

2018-12-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move WKEditCommandObjC and WKEditorUndoTargetObjC into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=193049

        Reviewed by Sam Weinig.

        Pull common code (WKEditCommandObjC and WKEditorUndoTargetObjC) on iOS and macOS out into a separate file. No
        change in behavior.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WKEditCommand.h: Added.
        * UIProcess/Cocoa/WKEditCommand.mm: Added.

        Rename WKEditCommandObjC to WKEditCommand, and WKEditorUndoTargetObjC to WKEditorUndoTarget. The ObjC suffix in
        the name seems to diverge from the common naming scheme in other parts of WebKit, where most WK- and _WK-
        prefixed names already refer to Objective-C objects. Additionally, mark -[WKEditCommand init] as unavailable.

        (-[WKEditCommand initWithWebEditCommandProxy:]):

        Make the return type instancetype instead of id, and also make this take a Ref<WebEditCommandProxy>&& instead
        of a RefPtr.

        (-[WKEditCommand command]):

        Make this return a reference to the WebEditCommandProxy, rather than a pointer, since the WebEditCommandProxy
        should always be non-null.

        (-[WKEditorUndoTarget undoEditing:]):
        (-[WKEditorUndoTarget redoEditing:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::registerEditCommand):

        Use WTFMove instead of copying the Ref when creating a WKEditCommand.

        (-[WKEditCommandObjC initWithWebEditCommandProxy:]): Deleted.
        (-[WKEditCommandObjC command]): Deleted.
        (-[WKEditorUndoTargetObjC undoEditing:]): Deleted.
        (-[WKEditorUndoTargetObjC redoEditing:]): Deleted.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::registerEditCommand):

        Use WTFMove instead of creating a new RefPtr when creating a WKEditCommand.

        (-[WKEditCommandObjC initWithWebEditCommandProxy:]): Deleted.
        (-[WKEditCommandObjC command]): Deleted.
        (-[WKEditorUndoTargetObjC undoEditing:]): Deleted.
        (-[WKEditorUndoTargetObjC redoEditing:]): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-12-27  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=192658

        Reviewed by Yusuke Suzuki.

        * PlatformMac.cmake:

2018-12-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MSVC] error C2381: 'WebKit::NetworkHTTPSUpgradeChecker::~NetworkHTTPSUpgradeChecker': redefinition; '__declspec(noreturn)' or '[[noreturn]]' differs
        https://bugs.webkit.org/show_bug.cgi?id=193030

        Reviewed by Ross Kirsling.

        Windows Debug builds are failing to compile due to
        NO_RETURN_DUE_TO_ASSERT inconsistency of
        NetworkHTTPSUpgradeChecker destructor's definition and
        declaration.

        * NetworkProcess/NetworkHTTPSUpgradeChecker.h: Added
        NO_RETURN_DUE_TO_ASSERT to NetworkHTTPSUpgradeChecker destructor
        declaration.
        * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp: Removed
        NO_RETURN_DUE_TO_ASSERT from the definition.

2018-12-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WebKit][Win] Remove using namespace in the global scope
        https://bugs.webkit.org/show_bug.cgi?id=192968

        Reviewed by Alex Christensen.

        Moved using namespace statements in the global scope to inside
        namespaces.
        <https://webkit.org/code-style-guidelines/#using-position>

        * NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp:
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        * NetworkProcess/curl/RemoteNetworkingContextCurl.cpp:
        * Shared/Plugins/Netscape/NetscapePluginModuleNone.cpp:
        * Shared/WebWheelEvent.cpp:
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        * Shared/win/NativeWebKeyboardEventWin.cpp:
        * Shared/win/WebEventFactory.cpp:
        * UIProcess/Automation/WebAutomationSession.cpp:

2018-12-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove "using namespace std;"
        https://bugs.webkit.org/show_bug.cgi?id=192973

        Reviewed by Alex Christensen.

        * Platform/IPC/win/ConnectionWin.cpp:

2018-12-24  Simon Fraser  <simon.fraser@apple.com>

        Change ScrollingNodeType to an enum class
        https://bugs.webkit.org/show_bug.cgi?id=193009

        Reviewed by Zalan Bujtas.

        Change the ScrollingNodeType enum to an enum class.
        
        No behavior change.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::dump):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateChildNodesAfterScroll):

2018-12-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Remove some unnecessary editing SPI after <rdar://problem/46047546>
        https://bugs.webkit.org/show_bug.cgi?id=193019

        Reviewed by Dan Bernstein.

        Remove these SPI method declarations, as well as method forwarding in WKContentView. Mail was the only adoptee
        of these methods; after <rdar://problem/46047546>, they have moved to the underscore-prefixed versions, so we
        we have no need for these erroneously-named SPI methods anymore. There is no change in behavior; verified this
        through existing API tests (WKWebViewEditActions), as well as building iOS Mail against WebKit with these
        changes to WKWebViewPrivate.h.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView canPerformAction:withSender:]):
        (-[WKWebView targetForAction:withSender:]):
        (-[WKWebView _setFont:sender:]):
        (-[WKWebView _setFontSize:sender:]):
        (-[WKWebView _setTextColor:sender:]):
        (-[WKWebView setFont:sender:]): Deleted.
        (-[WKWebView setTextColor:sender:]): Deleted.
        (-[WKWebView setFontSize:sender:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView setFontForWebView:sender:]): Deleted.
        (-[WKContentView setFontSizeForWebView:sender:]): Deleted.
        (-[WKContentView setTextColorForWebView:sender:]): Deleted.

2018-12-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix fast/ruby/ruby-base-merge-block-children-crash-2.html after r239543
        https://bugs.webkit.org/show_bug.cgi?id=193015
        <rdar://problem/46583527>

        Reviewed by Tim Horton.

        Fix the crash by gracefully handling integer overflow when computing the area of a very large editable element.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _updateChangedSelection:]):

2018-12-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Suppress native selection behaviors when focusing a very small editable element
        https://bugs.webkit.org/show_bug.cgi?id=193005
        <rdar://problem/46583527>

        Reviewed by Tim Horton.

        In r238146, I added a mechanism to detect when the selection is hidden within transparent editable elements, and
        used this to suppress native selection on iOS (such as selection handles, highlight, callout bar, etc.) to avoid
        conflicts between the page's editing UI and the platform.

        However, one additional technique observed on some websites involves hiding the selection by moving it into a
        tiny (1x1) editable element. Here, we currently still present a callout bar with editing actions, as well as
        show a selection caret or handles on iOS. To fix this, we extend the mechanism added in r238146 by also
        suppressing the selection assistant in the case where the editable element's area is beneath a tiny minimum
        threshold.

        Test: editing/selection/ios/hide-selection-in-tiny-contenteditable.html

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        (WebKit::operator<<):
        * Shared/EditorState.h:

        Rename selectionClipRect to focusedElementRect. We currently propagate the bounds of the focused element to the
        UI process through EditorState updates, but only for the purpose of returning it in the computed selection clip
        rect; instead, rename this member to something more general-purpose, so we can also use it when determining
        whether to suppress the selection assistant.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _candidateRect]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleRequestedCandidates):
        * UIProcess/ios/WKContentViewInteraction.h:

        Add a new SuppressSelectionAssistantReason that corresponds to focusing tiny editable elements.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _zoomToRevealFocusedElement]):
        (-[WKContentView _selectionClipRect]):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _updateChangedSelection:]):

        Check the size of the focused element, and begin or stop suppressing the selection assistant accordingly.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformEditorState const):

2018-12-20  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Use Ref<> as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=192808

        Reviewed by Alex Christensen.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::create):
        * PluginProcess/WebProcessConnection.h:
        * UIProcess/API/Cocoa/WKConnection.mm:
        (-[WKConnection sendMessageWithName:body:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * UIProcess/API/glib/WebKitGeolocationProvider.cpp:
        (WebKit::WebKitGeolocationProvider::notifyPositionChanged):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_allow_tls_certificate_for_host):
        * UIProcess/Automation/cairo/WebAutomationSessionCairo.cpp:
        (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData):
        * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData):
        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::createErrorWithRecoveryAttempter):
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::create):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::create):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::takeViewSnapshot):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::show):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCreateSubframe):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getStatistics):
        (WebKit::WebProcessPool::requestWebContentStatistics):
        (WebKit::WebProcessPool::requestNetworkingStatistics):
        * UIProcess/WebProcessPool.h:
        * UIProcess/gstreamer/WebPageProxyGStreamer.cpp:
        (WebKit::WebPageProxy::requestInstallMissingMediaPlugins):
        * UIProcess/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateFrontendPage):
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::setPromisedDataForImage):
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformCreateFrontendPage):
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange initWithDocument:]):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::getPasteboardDataForRange):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::mouseDidMoveOverElement):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::addArchiveResource):
        (WebKit::PDFPlugin::snapshot):
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::snapshot):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performURLRequest):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPathnamesForType):
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::webArchiveData):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::replaceDictatedText):
        (WebKit::WebPage::getPositionInformation):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
        (WebKit::StorageNamespaceImpl::createEphemeralLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::storageArea):
        (WebKit::StorageNamespaceImpl::ephemeralLocalStorageArea):
        (WebKit::StorageNamespaceImpl::copy):
        * WebProcess/WebStorage/StorageNamespaceImpl.h:
        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::getOrCreate):
        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createEphemeralLocalStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
        * WebProcess/WebStorage/WebStorageNamespaceProvider.h:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionManager::createModelAndInterface):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::createModelAndInterface):

2018-12-21  Chris Dumez  <cdumez@apple.com>

        navigator.userAgent in service workers does not reflect customUserAgent set by client
        https://bugs.webkit.org/show_bug.cgi?id=192951

        Reviewed by Youenn Fablet.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::registerServiceWorkerClient):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::installServiceWorkerContext):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::registerServiceWorkerClient):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2018-12-21  Alex Christensen  <achristensen@webkit.org>

        Expand use of sourceApplicationAuditData
        https://bugs.webkit.org/show_bug.cgi?id=192995
        <rdar://problem/46627875>

        Reviewed by Brady Eidson.

        sourceApplicationAuditData has been used for a long time on iOS, but it's needed on more platforms.
        I also made it return an Optional instead of a bool and returning by reference. Ahhh. So much nicer.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::sourceApplicationAuditData const):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::getAuditToken):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::sourceApplicationAuditData const):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky
        https://bugs.webkit.org/show_bug.cgi?id=192061

        Reviewed by Dewei Zhu.

        Part 5.

        Add some additional temporary logging info to determine if the time out value passed to the timer is respected.
        Once the bug is determined and fixed, we should remove all logging added in this patch.

        Reviewed by Dewei Zhu.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        (WebKit::AuthenticatorManager::timeOutTimerFired):

2018-12-21  Keith Rollin  <krollin@apple.com>

        Crash in com.apple.WebKit: WebKit::WebResourceLoader::willSendRequest + 223
        https://bugs.webkit.org/show_bug.cgi?id=192989

        Reviewed by Chris Dumez.

        willSendRequest is calling maybeLoadFallbackForRedirect, which can
        delete “this”. After that, some new logging code tries to access
        “this” and causes the crash. Fix this by adjusting the scope of a
        "protectedThis".

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):

2018-12-21  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Add DeviceIdHashSaltStorage disk persistence
        https://bugs.webkit.org/show_bug.cgi?id=190466

        Reviewed by Youenn Fablet.

        Added persistency to the DeviceIdHashSaltStorage. Implemented a
        decoder and an encoder for the HashSaltForOrigin struct to store
        it in a file, this allows us to save the lastTimeUsed, the origin
        and the hash salt. It uses a new directory where it creates a file
        per hash salt, the name of the file is the hash salt to avoid
        leaking information in the system. The last time used and the
        origin are stored inside the file, it also adds a version
        directory used to change the structure of the file in the future,
        if we need to do it. In the DeviceIdHashSaltStorage class the disk
        operations happen in a WorkQueue, but all interactions go in the
        main thread. We added code to handle the operations when the load
        still did not finish.

        * Platform/Logging.h:
        Added channel DiskPersistency..
        * Sources.txt: Added new files.
        * UIProcess/API/APIProcessPoolConfiguration.cpp: Added code to set
        the directory for the deviceIdHashSalts. That way we can use the
        configuration when creating the DeviceIdHashSaltStorage.
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::legacyDefaultDataStoreConfiguration):
        Added code to set the directory in the disk used to store the
        information.
        * UIProcess/API/APIWebsiteDataStore.h: Ditto.
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm: Added dummy
        implementation to get the directory in cocoa.
        (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory):
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp: Defined the
        default directories used to store the information in the disk.
        (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetDataStore): Added the directory used
        to store the information.
        (webkit_website_data_manager_remove): Modified the way we use to
        make sure when we remove the cookies we also remove the hash salts.
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp: Added dummy
        implementations to get the directory in windows platform.
        (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory):
        * UIProcess/API/C/WKBackForwardListItemRef.cpp: Add namespace, it
        seems some unified build compilation issue.
        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::create): Added a create method
        used to pass the directory and the persistency status of the websitedatastore.
        (WebKit::DeviceIdHashSaltStorage::completeHandler): Added to share
        the code copying the origins to complete the get handler.
        (WebKit::DeviceIdHashSaltStorage::completeDeviceIdHashSaltForOriginCall):
        Added to share the code when completing the task of getting a new
        hash salt.
        (WebKit::DeviceIdHashSaltStorage::DeviceIdHashSaltStorage): Added
        a new constructor for the create method.
        (WebKit::getSecurityOriginData): Added to get the
        SecurityOriginData from a field in the decoder and do all the
        checks.
        (WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk): Open the
        directory and restore all the hash salts from disk to the memory
        structure.
        (WebKit::DeviceIdHashSaltStorage::createEncoderFromData const):
        Creates the decoder to store the HashSaltForOrigin structure.
        (WebKit::DeviceIdHashSaltStorage::storeHashSaltToDisk): Write to
        disk a decoder object created from a HashSaltForOrigin
        structure. It uses the writeEncoderToDisk function.
        (WebKit::DeviceIdHashSaltStorage::deviceIdHashSaltForOrigin): Make
        sure we store in disk a new hash salt when it is generated and the
        WebsiteDataStore is persistent. Add a completionHandler to return
        the value found or generated, this way we can control if the
        HashMap is already loaded from disk.
        (WebKit::DeviceIdHashSaltStorage::getDeviceIdHashSaltOrigins):
        Make sure we run the get in a queue now that we store information
        in disk.
        (WebKit::DeviceIdHashSaltStorage::deleteHashSaltFromDiskIfNeeded):
        Added code to make sure we remove the files in disk.
        (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltForOrigins):
        Added code to use the deleteHashSaltFromDiskIfNeeded and remove the files in disk.
        (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltOriginsModifiedSince):
        Added code to use the deleteHashSaltFromDiskIfNeeded and remove the files in disk.
        * UIProcess/DeviceIdHashSaltStorage.h: Ditto.
        * UIProcess/PersistencyUtils.cpp: Added file to share the
        persistency code with the ResourceLoadStatisticsPersistentStorage class.
        (WebKit::createDecoderForFile): Ditto.
        (WebKit::writeEncoderToDisk): Ditto.
        * UIProcess/PersistencyUtils.h: Ditto.
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp: Use the
        new PersistencyUtils functions shared with the
        DeviceIdHashSaltStorage class.
        (WebKit::ResourceLoadStatisticsPersistentStorage::refreshMemoryStoreFromDisk):
        (WebKit::ResourceLoadStatisticsPersistentStorage::populateMemoryStoreFromDisk):
        (WebKit::ResourceLoadStatisticsPersistentStorage::writeMemoryStoreToDisk):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: After
        changing the API of the deviceIdHashSaltForOrigin we now use a
        completionHandler because it could happen the HashMap is not still
        loaded and we would have to wait for it. We refactored the calls
        to the method to use this new completionHandler.
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore): Create the
        DeviceIdHashSaltStorage class with the persistency information.
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary): Make
        sure we have the directory to store the information.
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h: Add get
        and set functions for the deviceHashSaltStorageDirectory.
        * WebKit.xcodeproj/project.pbxproj: Added PersistencyUtils file to
        the xcode compilation.

2018-12-20  Alex Christensen  <achristensen@webkit.org>

        Remove unused NetworkProcessCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=192961

        Reviewed by Andy Estes.

        loadThrottleLatency isn't used since I replaced it with NetworkSessionCreationParameters.loadThrottleLatency in r238654
        presentingApplicationPID has no effect because that value is only used in the WebProcess in NetworkExtensionContentFilter::initialize

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::hasValue() instead of Optional::has_value()
        https://bugs.webkit.org/show_bug.cgi?id=192948

        Reviewed by Tim Horton.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::AutomationCommandError::toProtocolString):
        (WebKit::WebAutomationSession::willClosePage):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout):

2018-12-20  Jeremy Jones  <jeremyj@apple.com>

        Flicker when exiting element fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=192774
        rdar://problem/33088878

        Reviewed by Jer Noble.

        Fixes an issue where the web page would flicker upon exiting element fullscreen.

        Replace WebView with a snapshot while the WebView is restyled and resized for inline.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Move HTTPS_UPGRADE code behind a runtime flag, off by default
        https://bugs.webkit.org/show_bug.cgi?id=192937

        Reviewed by Youenn Fablet.

        Move HTTPS_UPGRADE code behind a runtime flag, off by default and drop the build time flag.

        * Configurations/WebKit.xcconfig:
        * DerivedSources.make:
        * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp:
        * NetworkProcess/NetworkHTTPSUpgradeChecker.h:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded const):
        (WebKit::NetworkLoadChecker::checkRequest):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkHTTPSUpgradeChecker):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        * Shared/WebPreferences.yaml:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * config.h:

2018-12-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a runtime flag for local authenticator
        https://bugs.webkit.org/show_bug.cgi?id=192792
        <rdar://problem/46798738>

        Reviewed by Brent Fulgham.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebAuthenticationLocalAuthenticatorEnabled):
        (WKPreferencesGetWebAuthenticationLocalAuthenticatorEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
        (WebKit::LocalService::isAvailable):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::valueOr() instead of Optional::value_or()
        https://bugs.webkit.org/show_bug.cgi?id=192933

        Reviewed by Geoffrey Garen.

        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginGetPort):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/WKSecurityOrigin.mm:
        (-[WKSecurityOrigin port]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _cpuLimit]):
        * UIProcess/API/glib/WebKitSecurityOrigin.cpp:
        (webkit_security_origin_get_port):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseHandleWheelEvent):
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputKeyFrame::maximumDuration const):
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext):
        (WebKit::WebAutomationSession::performInteractionSequence):
        * UIProcess/Automation/WebAutomationSessionMacros.h:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::start):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::deviceScaleFactor const):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::viewportSizeForCSSViewportUnits const):
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::activateItem):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeFormDataElement):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::convertFromPDFViewToRootView const):
        (WebKit::PDFPlugin::boundsOnScreen const):
        (WebKit::PDFPlugin::geometryDidChange):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFormData):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/wpe/CompositingManager.cpp:
        (WebKit::CompositingManager::releaseConnectionFd):

2018-12-20  Keith Rollin  <krollin@apple.com>

        Improve release-level page-load logging
        https://bugs.webkit.org/show_bug.cgi?id=192872
        <rdar://problem/46850309>

        Reviewed by Chris Dumez.

        There are a number of reported bugs that are difficult or impossible
        to track down with our current level of logging. Additionally, some
        software groups lower in the page-loading stack have requested logging
        sufficient for tracking a user-visible error message down to the
        requested resource that caused the message. Add more-comprehensive
        logging to address these issues/requests.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_editableImageController):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigation):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigation):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::tryRestoreScrollPosition):
        (WebKit::WebPageProxy::updateThrottleState):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        (WebKit::WebPageProxy::didCancelClientRedirectForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        (WebKit::WebPageProxy::processDidTerminate):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):
        (WebKit::WebPageProxy::tryReloadAfterProcessTermination):
        (WebKit::WebPageProxy::didExceedInactiveMemoryLimitWhileActive):
        (WebKit::WebPageProxy::didExceedBackgroundCPULimitWhileInForeground):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):

2018-12-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Replace "node assistance" terminology in WebKit with "focused element"
        https://bugs.webkit.org/show_bug.cgi?id=192936

        Reviewed by Tim Horton.

        Renames a few methods and data structures in WebKit, to refer to "focused elements" rather than "assisted nodes";
        see below for more details. No new tests, because there should be no change in behavior.

        * Shared/FocusedElementInformation.cpp: Renamed from Source/WebKit/Shared/AssistedNodeInformation.cpp.
        (WebKit::OptionItem::encode const):
        (WebKit::OptionItem::decode):
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        * Shared/FocusedElementInformation.h: Renamed from Source/WebKit/Shared/AssistedNodeInformation.h.

        Rename AssistedNodeInformation to FocusedElementInformation. Additionally, introduce a named type for the
        focusedElementIdentifier (which is currently just a `uint64_t`).

        (WebKit::OptionItem::OptionItem):
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _shouldUpdateKeyboardWithInfo:]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:

        Rename NodeAssistanceArguments to ElementDidFocusArguments (and also add a FIXME for removing this mechanism
        eventually).

        (WebKit::WebPageProxy::focusNextFocusedElement):
        (WebKit::WebPageProxy::focusNextAssistedNode): Deleted.
        * UIProcess/WebPageProxy.messages.in:

        Rename StartAssistingNode to ElementDidFocus, and StopAssistingNode to ElementDidBlur.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::elementDidFocus):
        (WebKit::PageClientImpl::isFocusingElement):
        (WebKit::PageClientImpl::elementDidBlur):
        (WebKit::PageClientImpl::startAssistingNode): Deleted.
        (WebKit::PageClientImpl::isAssistingNode): Deleted.
        (WebKit::PageClientImpl::stopAssistingNode): Deleted.
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView isFocusingElement]):
        (-[WKContentView _didCommitLoadForMainFrame]):
        (-[WKContentView isAssistingNode]): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFocusedElementInfo initWithFocusedElementInformation:isUserInitiated:userObject:]):
        (hasFocusedElement):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView shouldHideSelectionWhenScrolling]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]):
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView _zoomToRevealFocusedElement]):
        (-[WKContentView inputView]):
        (-[WKContentView _selectionClipRect]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView clearSelection]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView _isInteractingWithFocusedElement]):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]):
        (-[WKContentView selectPositionAtPoint:completionHandler:]):
        (-[WKContentView selectPositionAtBoundary:inDirection:fromPoint:completionHandler:]):
        (-[WKContentView selectTextWithGranularity:atPoint:completionHandler:]):
        (-[WKContentView updateSelectionWithExtentPoint:completionHandler:]):
        (-[WKContentView updateSelectionWithExtentPoint:withBoundary:completionHandler:]):
        (-[WKContentView accessoryTab:]):
        (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKContentView accessoryClear]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView insertTextSuggestion:]):
        (-[WKContentView setSelectedTextRange:]):
        (-[WKContentView textInputTraits]):
        (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]):
        (-[WKContentView focusedElementInformation]):
        (-[WKContentView focusedSelectElementOptions]):
        (rectToRevealWhenZoomingToFocusedElement):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _elementDidBlur]):
        (-[WKContentView _didReceiveEditorStateUpdateAfterFocus]):
        (-[WKContentView updateCurrentFocusedElementInformation:]):
        (-[WKContentView presentViewControllerForCurrentFocusedElement]):
        (-[WKContentView focusedFormControlViewDidSubmit:]):
        (-[WKContentView focusedFormControlViewDidCancel:]):
        (-[WKContentView focusedFormControlViewDidBeginEditing:]):
        (-[WKContentView rectForFocusedFormControlView:]):
        (-[WKContentView nextRectForFocusedFormControlView:]):
        (-[WKContentView previousRectForFocusedFormControlView:]):
        (-[WKContentView actionNameForFocusedFormControlView:]):
        (-[WKContentView focusedFormControlViewDidRequestNextNode:]):
        (-[WKContentView focusedFormControlViewDidRequestPreviousNode:]):
        (-[WKContentView hasNextNodeForFocusedFormControlView:]):
        (-[WKContentView hasPreviousNodeForFocusedFormControlView:]):
        (-[WKContentView selectMenu:didSelectItemAtIndex:]):
        (-[WKContentView numberOfItemsInSelectMenu:]):
        (-[WKContentView selectMenu:displayTextForItemAtIndex:]):
        (-[WKContentView selectMenu:didCheckItemAtIndex:checked:]):
        (-[WKContentView selectMenuUsesMultipleSelection:]):
        (-[WKContentView selectMenu:hasSelectedOptionAtIndex:]):
        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView _autofillContext]):
        (-[WKContentView dismissQuickboardViewControllerAndRevealFocusedFormOverlayIfNecessary:]):
        (-[WKContentView allowsLanguageSelectionMenuForListViewController:]):
        (-[WKContentView inputLabelTextForViewController:]):
        (-[WKContentView initialValueForViewController:]):
        (-[WKContentView shouldDisplayInputContextViewForListViewController:]):
        (-[WKContentView numericInputModeForListViewController:]):
        (-[WKContentView textContentTypeForListViewController:]):
        (-[WKContentView allowsDictationInputForListViewController:]):
        (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]): Deleted.
        (hasAssistedNode): Deleted.

        Replaced with hasFocusedElement.

        (-[WKContentView _isInteractingWithAssistedNode]): Deleted.
        (-[WKContentView assistedNodeInformation]): Deleted.
        (-[WKContentView assistedNodeSelectOptions]): Deleted.
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): Deleted.
        (-[WKContentView _stopAssistingNode]): Deleted.
        (-[WKContentView updateCurrentAssistedNodeInformation:]): Deleted.
        (-[WKContentView presentViewControllerForCurrentAssistedNode]): Deleted.
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsControl textAlignment]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::focusedElementInformationCallback):
        (WebKit::WebPageProxy::requestFocusedElementInformation):
        (WebKit::WebPageProxy::computeCustomFixedPositionRect const):
        (WebKit::WebPageProxy::didCommitLayerTree):
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::selectTextWithGranularityAtPoint):
        (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::selectPositionAtPoint):
        (WebKit::WebPageProxy::updateSelectionWithExtentPoint):
        (WebKit::WebPageProxy::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPageProxy::blurFocusedElement):
        (WebKit::WebPageProxy::elementDidFocus):
        (WebKit::WebPageProxy::elementDidBlur):
        (WebKit::WebPageProxy::focusNextFocusedElement):
        (WebKit::WebPageProxy::setFocusedElementValue):
        (WebKit::WebPageProxy::setFocusedElementValueAsNumber):
        (WebKit::WebPageProxy::setFocusedElementSelectedIndex):
        (WebKit::WebPageProxy::assistedNodeInformationCallback): Deleted.
        (WebKit::WebPageProxy::requestAssistedNodeInformation): Deleted.
        (WebKit::WebPageProxy::blurAssistedNode): Deleted.
        (WebKit::WebPageProxy::startAssistingNode): Deleted.
        (WebKit::WebPageProxy::stopAssistingNode): Deleted.
        (WebKit::WebPageProxy::focusNextAssistedNode): Deleted.
        (WebKit::WebPageProxy::setAssistedNodeValue): Deleted.
        (WebKit::WebPageProxy::setAssistedNodeValueAsNumber): Deleted.
        (WebKit::WebPageProxy::setAssistedNodeSelectedIndex): Deleted.
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        (-[WKColorPicker initWithView:]):
        (-[WKColorPicker setControlValueFromUIColor:]):
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKDateTimePicker initWithView:datePickerMode:]):
        (-[WKDateTimePicker shouldPresentGregorianCalendar:]):
        (-[WKDateTimePicker _dateChangedSetAsNumber]):
        (-[WKDateTimePicker _dateChangedSetAsString]):
        (-[WKDateTimePicker controlBeginEditing]):
        (-[WKFormInputControl initWithView:]):
        (-[WKDateTimePopover clear:]):
        (-[WKDateTimePopover initWithView:datePickerMode:]):
        * UIProcess/ios/forms/WKFormPopover.mm:
        (-[WKRotatingPopover presentPopoverAnimated:]):
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl initWithView:]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker initWithView:]):
        (-[WKMultipleSelectPicker pickerView:viewForRow:forComponent:reusingView:]):
        (-[WKMultipleSelectPicker pickerView:numberOfRowsInComponent:]):
        (-[WKMultipleSelectPicker findItemIndexAt:]):
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):
        (-[WKSelectSinglePicker initWithView:]):
        (-[WKSelectSinglePicker controlEndEditing]):
        (-[WKSelectSinglePicker pickerView:numberOfRowsInComponent:]):
        (-[WKSelectSinglePicker pickerView:attributedTitleForRow:forComponent:]):
        (-[WKSelectSinglePicker pickerView:didSelectRow:inComponent:]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController initWithView:hasGroups:]):
        (-[WKSelectTableViewController tableView:numberOfRowsInSection:]):
        (-[WKSelectTableViewController tableView:titleForHeaderInSection:]):
        (-[WKSelectTableViewController findItemIndexAt:]):
        (-[WKSelectTableViewController findItemAt:]):
        (-[WKSelectTableViewController tableView:cellForRowAtIndexPath:]):
        (-[WKSelectTableViewController tableView:didSelectRowAtIndexPath:]):
        (-[WKSelectPopover initWithView:hasGroups:]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::elementDidFocus):
        (WebKit::WebChromeClient::elementDidRefocus):
        (WebKit::WebChromeClient::elementDidBlur):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartPageTransition):
        (WebKit::WebPage::setTextAsync):
        (WebKit::WebPage::resetFocusedElementForFrame):
        (WebKit::WebPage::elementDidRefocus):
        (WebKit::WebPage::elementDidFocus):
        (WebKit::WebPage::elementDidBlur):
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::resetAssistedNodeForFrame): Deleted.
        * WebProcess/WebPage/WebPage.h:

        Refactor elementDid{Refocus|Focus|Blur} to take `Element&` rather than `Node*`.

        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:

        Replace m_assistedNode (a `RefPtr<Node>`) with m_focusedElement (a `RefPtr<Element>`).

        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::requestFocusedElementInformation):
        (WebKit::WebPage::blurFocusedElement):
        (WebKit::WebPage::setFocusedElementValue):
        (WebKit::WebPage::setFocusedElementValueAsNumber):
        (WebKit::WebPage::setFocusedElementSelectedIndex):
        (WebKit::innerFrameQuad):
        (WebKit::constrainPoint):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::startAutoscrollAtPosition):
        (WebKit::WebPage::visiblePositionInFocusedNodeForPoint):
        (WebKit::WebPage::selectPositionAtPoint):
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPage::rangeForGranularityAtPoint):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPage::updateSelectionWithExtentPoint):
        (WebKit::WebPage::getPositionInformation):
        (WebKit::WebPage::focusNextFocusedElement):
        (WebKit::WebPage::getFocusedElementInformation):
        (WebKit::WebPage::autofillLoginCredentials):
        (WebKit::WebPage::requestAssistedNodeInformation): Deleted.
        (WebKit::WebPage::blurAssistedNode): Deleted.
        (WebKit::WebPage::setAssistedNodeValue): Deleted.
        (WebKit::WebPage::setAssistedNodeValueAsNumber): Deleted.
        (WebKit::WebPage::setAssistedNodeSelectedIndex): Deleted.
        (WebKit::WebPage::focusNextAssistedNode): Deleted.
        (WebKit::WebPage::getAssistedNodeInformation): Deleted.

2018-12-20  Brent Fulgham  <bfulgham@apple.com>

        WKWebView default UA doesn't freeze the build number
        https://bugs.webkit.org/show_bug.cgi?id=192809
        <rdar://problem/44687185>

        Reviewed by Andy Estes.

        Always reports the frozen build number.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (defaultApplicationNameForUserAgent): Do not expose the actual build number through this API.

2018-12-20  Jer Noble  <jer.noble@apple.com>

        Enable MediaCapabilities by default.
        https://bugs.webkit.org/show_bug.cgi?id=192340
        <rdar://problem/46435149>

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2018-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver: tests in imported/w3c/webdriver/tests/element_clear/user_prompts.py are failing
        https://bugs.webkit.org/show_bug.cgi?id=192927

        Reviewed by Michael Catanzaro.

        Give the focus back to the web view when a dialog is dismissed.

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

2018-12-20  Tim Horton  <timothy_horton@apple.com>

        Unparented WKWebView can't retrieve main resource data for a main frame plugin
        https://bugs.webkit.org/show_bug.cgi?id=192923
        <rdar://problem/46859068>

        Reviewed by Wenson Hsieh.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::liveResourceData const):
        If the WKWebView is unparented, we may not immediately initialize the plugin.
        In that case, PluginView holds on to the backing data until the plugin
        is initialized. If a WKWebView API client asks for the backing data
        for the plugin during this time, we should return it, instead of bailing.

2018-12-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Focusing an editable element should scroll to reveal the selection
        https://bugs.webkit.org/show_bug.cgi?id=192802
        <rdar://problem/46781759>

        Reviewed by Tim Horton.

        Currently, when tapping on an editable element, logic in -[WKWebView _zoomToFocusRect:…:] attempts to adjust the
        visible viewport such that the rect containing the selection is visible. However, AssistedNodeInformation's
        selectionRect is used here, which (as the FIXME in WebPage::getAssistedNodeInformation notes) is either the last
        touch location, or the top left of the element if the touch location is outside of the element's bounding rect.
        This leads to confusing and undesirable behavior when tapping near the bottom of a large contenteditable element
        to focus it, since the actual selection will end up near the top of the element, yet we'll try to scroll to
        reveal the bottom of the element, which causes the visible selection to scroll offscreen. Notably, this affects
        scenarios involving editable web views embedded in apps, such as Mail compose.

        Right now, we use the last touch location as an approximation for the selection rect because the selection may
        have not yet been updated at the moment when focus moves into an editable element. To fix this, we defer the
        process of zooming to the focused element rect until after the selection changes and the UI process is updated
        with information about the new selection rects.

        Test: editing/selection/ios/selection-is-visible-after-focusing-editable-area.html

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

        Rename selectionRect to elementInteractionLocation, to more accurately reflect its value and purpose. This isn't
        strictly always the last touch location, since we may default to the focused element location instead if the
        last touch location is outside of the element rect.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):

        Tweak a constant that determines the minimum amount of margin to leave between the selection rect and the edge
        of the window when scrolling to reveal the focused element. Previously, this was larger than necessary to
        accomodate for the fact that the "selection rect" used when zooming to the focused element did not take the
        actual selection into account at all, and was simply a 1 by 1 rect; this meant that the margin needed to be
        large enough to exceed the usual height of a text caret in editable content. Since we now use the real selection
        rect, we can be much less generous with this margin.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView observeValueForKeyPath:ofObject:change:context:]):

        Don't additionally update the selection in the middle of triggering zooming to the focused element; on
        particular versions of iOS, this now attempts to scroll the selection rect on-screen, which then conflicts with
        zooming to reveal the focused element.

        (-[WKContentView _zoomToRevealFocusedElement]):

        Renamed from _displayFormNodeInputView to _zoomToRevealFocusedElement, to make the purpose of this function more
        clear. Additionally, pull logic to update the accessory view out of this method, so that it's strictly concerned
        with zooming to the focused element.

        (-[WKContentView inputView]):

        Add a FIXME describing the implications of zooming to the focused element in the implementation of -inputView.
        See also: <https://bugs.webkit.org/show_bug.cgi?id=192878>.

        (-[WKContentView accessoryTab:]):

        Fix a subtle issue when keeping track of _didAccessoryTabInitiateFocus. Currently, this is set to YES in
        -accessoryTab: and unset in _displayFormNodeInputView, but since _displayFormNodeInputView may be invoked
        multiple times for the same focused element (see: -inputView), we might end up zooming to the focused element
        with _didAccessoryTabInitiateFocus set to NO, even though we initiated focus with the previous/next buttons.

        Instead, temporarily set a different ivar, _isChangingFocusUsingAccessoryTab, to YES in -accessoryTab:, and
        unset it in the completion handler after the focused element has changed. Then, when we _startAssistingNode:,
        set _didAccessoryTabInitiateFocus to _isChangingFocusUsingAccessoryTab. This ensures that the correctness of
        _didAccessoryTabInitiateFocus isn't tied to the number of times -[WKContentView inputView] is invoked when
        focusing an element.

        (shouldZoomToRevealSelectionRect):
        (rectToRevealWhenZoomingToFocusedElement):

        Add a helper method to determine the selection rect to use when zooming to reveal the focused element. ASSERTs
        that we have post-layout data in the EditorState.

        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

        When "assisting" a focused element, immediately zoom to it if we don't need selection information to compute the
        rect to zoom to; otherwise, defer zooming until we receive the first editor state update in the UI process that
        contains information about our selection rects.

        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView _didReceiveEditorStateUpdateAfterFocus]):

        If necessary, reveal the focused element by zooming.

        (-[WKContentView _updateInitialWritingDirectionIfNecessary]):

        Pull this initial writing direction update logic out into a separate helper method.

        (-[WKContentView _displayFormNodeInputView]): Deleted.

        Replaced by _zoomToRevealFocusedElement.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::elementDidRefocus):

        This currently calls WebChromeClient::elementDidFocus; instead, call the new WebPage::elementDidRefocus;
        additionally, make this available on all PLATFORM(COCOA), rather than just IOS_FAMILY.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::elementDidRefocus): Deleted.

        Replaced by the PLATFORM(COCOA) version.

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

        When refocusing an element, ensure that post-layout editor state data is sent to the UI process by including a
        full EditorState in the next layer tree transaction.

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

        Call elementDidRefocus instead of elementDidFocus, in the case where the existing focused element is clicked.

        (WebKit::WebPage::getAssistedNodeInformation):

        Adjust for the change from selectionRect to elementInteractionLocation.

2018-12-20  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Grant the sandbox read access to XDG_DATA_HOME/prgname
        https://bugs.webkit.org/show_bug.cgi?id=192929

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        [PSON] SuspendedPageProxy fails to release its process assertion if the WebPage fails to enter PageCache
        https://bugs.webkit.org/show_bug.cgi?id=192873

        Reviewed by Antti Koivisto.

        SuspendedPageProxy fails to release its process assertion if the WebPage fails to enter PageCache, preventing
        the process from suspending on iOS.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        (WebKit::SuspendedPageProxy::didReceiveMessage):
        (WebKit::SuspendedPageProxy::didSuspend): Deleted.
        (WebKit::SuspendedPageProxy::didFailToSuspend): Deleted.
        * UIProcess/SuspendedPageProxy.h:

2018-12-19  Chris Dumez  <cdumez@apple.com>

        wtf/Optional.h: move-constructor and move-assignment operator should disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=192728
        <rdar://problem/46746779>

        Reviewed by Geoff Garen.

        * NetworkProcess/*:
        * Platform/*:
        * Scripts/*:
        * Shared/*:
        * UIProcess/*:
        * WebProcess/*:

2018-12-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence -Wpragmas warning

        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:

2018-12-19  Vivek Seth  <v_seth@apple.com>

        HTTPS Upgrade: Use full sqlite upgrade list
        https://bugs.webkit.org/show_bug.cgi?id=192736
        <rdar://problem/45851427>

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp: Added.
        (WebKit::NetworkHTTPSUpgradeCheckerDatabasePath):
        (WebKit::NetworkHTTPSUpgradeChecker::NetworkHTTPSUpgradeChecker):
        (WebKit::NetworkHTTPSUpgradeChecker::~NetworkHTTPSUpgradeChecker):
        (WebKit::NetworkHTTPSUpgradeChecker::query):
        (WebKit::NetworkHTTPSUpgradeChecker::isAlwaysOnLoggingAllowed const):
        * NetworkProcess/NetworkHTTPSUpgradeChecker.h: Added.
        (WebKit::NetworkHTTPSUpgradeChecker::didSetupCompleteSuccessfully const):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded const):
        (WebKit::NetworkLoadChecker::checkRequest):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkHTTPSUpgradeChecker):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2018-12-19  Tim Horton  <timothy_horton@apple.com>

        Use delegate instead of drawingDelegate in WKDrawingView
        https://bugs.webkit.org/show_bug.cgi?id=192899
        <rdar://problem/46733339>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]):
        Do the dance.

2018-12-19  Alex Christensen  <achristensen@webkit.org>

        Navigations away from the SafeBrowsing interstitial show a flash of old content
        https://bugs.webkit.org/show_bug.cgi?id=192676

        Reviewed by Chris Dumez.

        When a user clicks through a safe browsing warning, do not remove the warning until content is drawn for the destination.
        Otherwise, the user will confusingly see the page before the warning while the navigation happens.
        We can only do this for warnings caused by main frame navigations, though.  Other warnings (such as those caused by iframes)
        need to be cleared immediately, and we still need to clear the warning immediately if the user has said to go back.

        This change is reflected in an updated API test.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarning:completionHandler:]):
        * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm:
        (WebKit::SafeBrowsingWarning::SafeBrowsingWarning):
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning forMainFrameNavigation]):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showSafeBrowsingWarning):
        (WebKit::WebViewImpl::clearSafeBrowsingWarningIfForMainFrameNavigation):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::clearSafeBrowsingWarningIfForMainFrameNavigation):
        * UIProcess/SafeBrowsingWarning.h:
        (WebKit::SafeBrowsingWarning::create):
        (WebKit::SafeBrowsingWarning::forMainFrameNavigation const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReachLayoutMilestone):
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::clearSafeBrowsingWarningIfForMainFrameNavigation):

2018-12-19  Tim Horton  <timothy_horton@apple.com>

        UI process crash when focusing an editable image
        https://bugs.webkit.org/show_bug.cgi?id=192839
        <rdar://problem/46786670>

        Reviewed by Wenson Hsieh.

        * SourcesCocoa.txt:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView inputView]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView _installInkPickerForDrawingViewWithID:]):
        (-[WKContentView _uninstallInkPicker]):
        * UIProcess/ios/WKInkPickerView.h: Renamed from Source/WebKit/UIProcess/ios/WKInkPickerControl.h.
        * UIProcess/ios/WKInkPickerView.mm: Renamed from Source/WebKit/UIProcess/ios/WKInkPickerControl.mm.
        (-[WKInkPickerView initWithDrawingView:]):
        (-[WKInkPickerView didPickInk]):
        (-[WKInkPickerView inlineInkPickerDidToggleRuler:]):
        (-[WKInkPickerView inlineInkPicker:didSelectTool:]):
        (-[WKInkPickerView inlineInkPicker:didSelectColor:]):
        (-[WKInkPickerView inkPickerSize]):
        (-[WKInkPickerView layoutSubviews]):
        (-[WKInkPickerView sizeThatFits:]):
        (-[WKInkPickerView viewControllerForPopoverPresentationFromInlineInkPicker:]):
        * WebKit.xcodeproj/project.pbxproj:
        Make WKInkPickerView a WKWebView subview instead of an inputView.
        Also, don't force the keyboard to be visible when an editable image is focused.

2018-12-19  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Force system camera/microphone TCC prompt if necessary
        https://bugs.webkit.org/show_bug.cgi?id=192820
        <rdar://problem/42680098>

        Reviewed by Jer Noble.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest): Enable TCC check 
        and prompt on Mojave.

2018-12-19  Megan Gardner  <megan_gardner@apple.com>

        Allow clients to set the navigator platform
        https://bugs.webkit.org/show_bug.cgi?id=192735

        Reviewed by Tim Horton.

        Add private API to allow clients to override the default navigator
        platform. Some websites check for the platform, which 
        interfears with our request desktop site feature. This should
        help more sites function as expected.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setCustomNavigatorPlatform:]):
        (-[_WKWebsitePolicies customNavigatorPlatform]):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

2018-12-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r239358.

        Revision caused imported/w3c/web-platform-tests/IndexedDB/ to
        crash on Debug bots

        Reverted changeset:

        "Clean up IndexedDB files between tests"
        https://bugs.webkit.org/show_bug.cgi?id=192796
        https://trac.webkit.org/changeset/239358

2018-12-18  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r239134) iOS safe browsing warning unable to show details
        https://bugs.webkit.org/show_bug.cgi?id=192837

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning addContent]):
        I had a fragile design that relied on the internal view heirarchy structure of UIScrollView,
        which I changed in r239134 by introducing a layout which changed where its scrollbars were in the view heirarchy.
        I now have a more robust design that saves a WeakObjCPtr to the view I need to traverse to.
        Testing is problematic because this had to do with scrollbars and UIScrollView internals which seem to behave
        differently in TestWebKitAPI, but I verified manually that this fixes the issue.

2018-12-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix compilation warnings under Source/WebKit directory
        https://bugs.webkit.org/show_bug.cgi?id=192695

        Reviewed by Alex Christensen.

        * NetworkProcess/cache/NetworkCacheData.cpp:
        (makeSalt): Enclosed by #if !OS(WINDOWS).
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::directoryEntryType): Ditto.
        * Platform/win/ModuleWin.cpp:
        (WebKit::Module::platformFunctionPointer const): Cast a function pointer with reinterpret_cast<void*>().
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::DrawingMonitor):
        Moved the initializer of m_webPage in order to be encluded by #if PLATFORM(GTK).
        * UIProcess/DrawingAreaProxyImpl.h: Ditto.
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::processName): Removed the duplicated 'const' type qualifier.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformAttach): Removed an unused variable.
        (WebKit::WebInspectorProxy::platformDetach): Ditto.
        * UIProcess/win/WebPopupMenuProxyWin.cpp: Ditto.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint): Ditto.
        (WebKit::WebPopupMenu::setUpPlatformData): Ditto.
        * UIProcess/win/WebPopupMenuProxyWin.h: Marked override methods with 'override'.
        * WebProcess/WebCoreSupport/curl/WebFrameNetworkingContext.h: Ditto.
        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp: Removed an unused variable.

2018-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] fast/forms/datalist/datalist-textinput-suggestions-order.html sometimes crashes after r239337
        https://bugs.webkit.org/show_bug.cgi?id=192836
        <rdar://problem/45321184>

        Reviewed by Tim Horton.

        r239337 exposed a subtle issue in the implementation of `-[WKDataListSuggestionsView updateWithInformation:]`,
        wherein we might end up recomputing information for table view cells at rows that no longer exist. This currently
        happens because we first set the datalist's `_suggestions`, then change the table view's frame, and then finally
        reload the table view; however, in the case where the number of suggestions decreased and the frame changed
        (which prompts AppKit to ask us again for table cell views), we'll attempt to access an out-of-bounds index in
        the `_suggestions` vector.

        To address this, we change our suggestions and immediately reload the table view before updating `NSTableView`'s
        frame, so that we only provide table view cells for rows that actually correspond to items in `_suggestions`.

        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (-[WKDataListSuggestionsView updateWithInformation:]):

2018-12-18  Jiewen Tan  <jiewen_tan@apple.com>

        [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky
        https://bugs.webkit.org/show_bug.cgi?id=192061

        Reviewed by Dewei Zhu.

        Part 4.

        Add some additional temporary logging info to determine if the time out value passed to the timer is right.
        Once the bug is determined and fixed, we should remove all logging added in this patch.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::initTimeOutTimer):

2018-12-18  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796

        Reviewed by Geoffrey Garen.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveAllIndexedDatabasesSync):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2018-12-18  Vivek Seth  <v_seth@apple.com>

        HTTPS Upgrade: Scripts / preprocessing necessary to create new database in future
        https://bugs.webkit.org/show_bug.cgi?id=192612
        <rdar://problem/46651207>

        Reviewed by Andy Estes.

        * Configurations/WebKit.xcconfig:
        * DerivedSources.make:
        * Scripts/generate-https-upgrade-database.sh: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the 32-bit watchOS build after r239314

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):

2018-12-18  Alex Christensen  <achristensen@webkit.org>

        WKWebView has old URL while displaying SafeBrowsing interstitial, for link-click navigations
        https://bugs.webkit.org/show_bug.cgi?id=192675

        Reviewed by Geoffrey Garen.

        When a safe browsing warning is being shown, WKWebView.URL should be the unsafe website, not the safe website before it.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm:
        (WebKit::SafeBrowsingWarning::SafeBrowsingWarning):
        * UIProcess/SafeBrowsingWarning.h:
        (WebKit::SafeBrowsingWarning::create):
        (WebKit::SafeBrowsingWarning::url const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

2018-12-18  Chris Dumez  <cdumez@apple.com>

        Regression(r239182) SuspendedPage's process reuse for link navigation optimization sometimes broken
        https://bugs.webkit.org/show_bug.cgi?id=192772

        Reviewed by Antti Koivisto.

        With r239182, if the page in the previous process would fail to enter PageCache, we would destroy
        the corresponding SuspendedPageProxy, which would potentially terminate the process. This would
        regress performance when trying to navigate back in history to that page. This would also regress
        performance when link-navigating to the same domain as we would have previously reused the suspended
        page's process for such navigation.

        Address the issue by keeping the SuspendedPageProxy alive even if the WebPage fails to suspend.
        When trying to reuse a SuspendedPageProxy, if the page failed to suspend, reuse its process but
        not the suspended page itself.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::waitUntilReadyToUnsuspend):
        (WebKit::SuspendedPageProxy::unsuspend):
        (WebKit::SuspendedPageProxy::didSuspend):
        (WebKit::SuspendedPageProxy::didFailToSuspend):
        (WebKit::SuspendedPageProxy::loggingString const):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToWebProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):

2018-12-17  Jiewen Tan  <jiewen_tan@apple.com>

        [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky
        https://bugs.webkit.org/show_bug.cgi?id=192061

        Reviewed by Dewei Zhu.

        Part 3.

        Add some additional temporary logging info to determine if the timer is working as expected.
        Once the bug is determined and fixed, we should remove all logging added in this patch.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        (WebKit::AuthenticatorManager::timeOutTimerFired):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::respondReceivedInternal):

2018-12-17  Saam barati  <sbarati@apple.com>

        Enable HTTP and HTTPS proxies on iOS and make it a property of the NSURLSession
        https://bugs.webkit.org/show_bug.cgi?id=192374
        <rdar://problem/46506286>

        Reviewed by Alex Christensen.

        This patch makes it so that we can use HTTP/HTTPS proxies on iOS as well.
        To enable on iOS, you can do something like:
        $ defaults write -g WebKit2HTTPProxy -string "http://localhost:8080"
        $ defaults write -g WebKit2HTTPSProxy -string "http://localhost:8080"
        
        This patch also changes the Proxy to be enabled on a per NSURLSession
        basis instead of a per process basis.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::proxyDictionary):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        (WebKit::overrideSystemProxies): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration httpProxy]):
        (-[_WKWebsiteDataStoreConfiguration setHTTPProxy:]):
        (-[_WKWebsiteDataStoreConfiguration httpsProxy]):
        (-[_WKWebsiteDataStoreConfiguration setHTTPSProxy:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::httpProxy const):
        (WebKit::WebsiteDataStoreConfiguration::setHTTPProxy):
        (WebKit::WebsiteDataStoreConfiguration::httpsProxy const):
        (WebKit::WebsiteDataStoreConfiguration::setHTTPSProxy):

2018-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Tap highlights should not be shown on iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=192797
        <rdar://problem/46793995>

        Reviewed by Tim Horton.

        WKWebViews in iOSMac should avoid painting tap highlights, since tap highlights are not present in the rest of
        the macOS platform. Simply disable this functionality by bailing in `-[WKContentView _showTapHighlight]`.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showTapHighlight]):

2018-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the iOSMac engineering build again

        After r239311, `WebProcessProxy::fullKeyboardAccessEnabled` in `WebProcessProxyIOS.mm` attempts to use
        `WKFullKeyboardAccessWatcher`, which is guarded by `ENABLE(FULL_KEYBOARD_ACCESS)`. However, on iOSMac,
        `ENABLE(FULL_KEYBOARD_ACCESS)` is 0. Fix the build by putting access to `WKFullKeyboardAccessWatcher` behind
        `ENABLE(FULL_KEYBOARD_ACCESS)`.

        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::fullKeyboardAccessEnabled):

2018-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the iOSMac engineering build

        `generateRequestID()` is only invoked from code under `ENABLE(MEDIA_STREAM)`; move it under this guard to avoid
        an unused function warning.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:

2018-12-17  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary object copy in CPUMonitor::setCPULimit()
        <https://webkit.org/b/192707>
        <rdar://problem/46734926>

        Reviewed by Daniel Bates.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateCPUMonitorState):
        - Pass m_cpuLimit directly since getting its value causes an
          identical std::optional<double> to be created unnecessarily.

2018-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Focusing a large editable element always scrolls to the top of the element
        https://bugs.webkit.org/show_bug.cgi?id=192745
        <rdar://problem/46758445>

        Reviewed by Tim Horton.

        Currently, when focusing form controls or editable elements, we try to scroll such that the focused element rect
        is centered within the visible area. In the case of very large focusable elements whose dimensions exceed the
        width or height of the visible area, we instead scroll such that the top left point of the element is at the top
        left corner of the visible area.

        However, this results in unnecessary scrolling if the top of the element is already near the top of the visible
        area. For WebKit2-based rich text editors that have an editable body element with a top content inset that
        contains additional content, this means we will always scroll the additional content away when focusing the
        editable body.

        To avoid this behavior, adjust focused element zooming logic for editable elements that are too large to be
        centered in the visible area, such that we only scroll the top left position of the focused element to the top
        half or top right of the visible area, respectively. This reduces the amount of scrolling when focusing large
        editable elements, while still making it clear which element is being focused.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):

        Make some small adjustments to improve the readability of this method by using `clampTo` instead of clamping
        values by comparing and setting values.

        Also, fix an existing bug wherein focusable elements that are meant to be centered within the visible area are
        currently offset by half the difference between the bottom inset amount and the top inset amount, in the case
        where the `_obscuredInsets` SPI is used to specify content insets for the web view (i.e., MobileSafari).

        * UIProcess/API/Cocoa/WKWebViewInternal.h:

        Make a couple of arguments `const FloatRect&` instead of just `FloatRect`.

2018-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        offsetLeft and offsetParent should adjust across shadow boundaries
        https://bugs.webkit.org/show_bug.cgi?id=157437
        <rdar://problem/26154021>

        Reviewed by Simon Fraser.

        Use *forBindings variants of offsetLeft, offsetTop, and offsetParent.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementGtk.cpp:
        (webkit_dom_element_get_offset_left):
        (webkit_dom_element_get_offset_top):
        (webkit_dom_element_get_offset_parent):

2018-12-17  Chris Fleizach  <cfleizach@apple.com>

        Some builds are broken after r239262
        https://bugs.webkit.org/show_bug.cgi?id=192777

        Reviewed by Simon Fraser.

        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.h:
        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm:
        (platformIsFullKeyboardAccessEnabled):
        (-[WKFullKeyboardAccessWatcher init]):
        Fix the build by being more clear about when it's OK to use AccessibilitySupport.

2018-12-17  Chris Dumez  <cdumez@apple.com>

        Allow passing nil as session state to [WKWebView _restoreSessionState:]
        https://bugs.webkit.org/show_bug.cgi?id=192789
        <rdar://problem/46755277>

        Reviewed by Alex Christensen.

        Allow passing nil as session state to [WKWebView _restoreSessionState:] instead of crashing.

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

2018-12-17  Alex Christensen  <achristensen@webkit.org>

        Fix occasional null-dereference crash in WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame
        https://bugs.webkit.org/show_bug.cgi?id=192744
        <rdar://problem/45842668>

        Reviewed by Chris Dumez.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        Things happen.  Navigations can be null.  If they are, we shouldn't dereference pointers to them.

2018-12-17  Chris Dumez  <cdumez@apple.com>

        Unreviewed, revert recent CrashReporterClient build fixes as they are no longer needed.

        * Platform/cocoa/WKCrashReporter.mm:

2018-12-17  Suresh Koppisetty  <skoppisettyt@apple.com>

        Rollout r235411
        https://bugs.webkit.org/show_bug.cgi?id=192778
        <rdar://46789485>

        Disabling access to CoreServices is causing a performance
        regression in process launch time.  See <rdar://46141878>

        Reviewed by Alex Christensen.

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

2018-12-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix after r239277.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextClearCurrentModifierStateForTesting):
        Use the WebKit:: namespace specifier as it is used across this file.

2018-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239265 and r239274.
        https://bugs.webkit.org/show_bug.cgi?id=192765

        unorm_normalize is deprecated, and broke an internal build
        (Requested by Truitt on #webkit).

        Reverted changesets:

        "[GTK][WPE] Need a function to convert internal URI to display
        ("pretty") URI"
        https://bugs.webkit.org/show_bug.cgi?id=174816
        https://trac.webkit.org/changeset/239265

        "Fix the Apple Internal Mac build with a newer SDK"
        https://trac.webkit.org/changeset/239274

2018-12-17  Daniel Bates  <dabates@apple.com>

        Implement UIScriptController::toggleCapsLock() for iOS
        https://bugs.webkit.org/show_bug.cgi?id=191815

        Reviewed by Andy Estes.

        Add test infrastructure to clear the current modifier state. We will use this to ensure that
        the caps lock state does not persist between tests.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextClearCurrentModifierStateForTesting): Added.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::clearCurrentModifierStateForTesting): Added.
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearCurrentModifierStateForTesting): Added.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-12-17  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r239262): Fix broken builds prior to Mojave
        <https://bugs.webkit.org/show_bug.cgi?id=192373>
        <rdar://problem/46462670>

        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm:
        Wrap header in ENABLE(ACCESSIBILITY_EVENTS) to fix the build.

2018-12-17  Daniel Bates  <dabates@apple.com>

        [iOS] Remove -[WebEvent initWithKeyEventType:...:characterSet:]
        https://bugs.webkit.org/show_bug.cgi?id=192633

        Reviewed by Wenson Hsieh.

        Update code to use the modern initializer.

        * UIProcess/ios/WKWebEvent.mm:
        (-[WKWebEvent initWithEvent:]):

2018-12-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r239254.

        This broke the Windows 10 Debug build

        Reverted changeset:

        "Replace many uses of String::format with more type-safe
        alternatives"
        https://bugs.webkit.org/show_bug.cgi?id=192742
        https://trac.webkit.org/changeset/239254

2018-12-17  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: loop variable is copied but only used as const reference in WebCore, WebKit, Tools
        <https://webkit.org/b/192751>
        <rdar://problem/46771623>

        Reviewed by Daniel Bates.

        Change loop variables to const references to avoid unnecessary
        copies.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::~WebSWServerConnection):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode const):
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toNSErrors):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::setFilesToSelectForFileUpload):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::performInteractionSequence):
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcess):
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveDataRecords const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::serializedAttachmentDataForIdentifiers):
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::deleteAllDatabases):
        (WebKit::LocalStorageDatabaseTracker::origins const):
        (WebKit::LocalStorageDatabaseTracker::originDetails):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::didUpdateActivityStateTimerFired):

2018-12-17  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Add webkit_uri_for_display for GTK and WPE.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitURIUtilities.cpp: Added.
        (webkit_uri_for_display):
        * UIProcess/API/gtk/WebKitURIUtilities.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:
        * UIProcess/API/wpe/WebKitURIUtilities.h: Added.
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt:
        * UIProcess/API/wpe/docs/wpe-docs.sgml:
        * UIProcess/API/wpe/webkit.h:

2018-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add API to notify about frame displayed view backend callback
        https://bugs.webkit.org/show_bug.cgi?id=192224

        Reviewed by Michael Catanzaro.

        Add API to add a callback to the view to be called when the view backend notifies that a frame has been
        displayed.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (FrameDisplayedCallback::FrameDisplayedCallback):
        (FrameDisplayedCallback::~FrameDisplayedCallback):
        (webkit_web_view_add_frame_displayed_callback):
        (webkit_web_view_remove_frame_displayed_callback):
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt:

2018-12-16  Chris Fleizach  <cfleizach@apple.com>

        AX: Support keyboard access preference for iOS in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=192373
        <rdar://problem/46462670>

        Reviewed by Tim Horton.

        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.h: Added.
        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm: Added.
        (platformIsFullKeyboardAccessEnabled):
        (-[WKFullKeyboardAccessWatcher notifyAllProcessPools]):
        (-[WKFullKeyboardAccessWatcher retrieveKeyboardUIModeFromPreferences:]):
        (-[WKFullKeyboardAccessWatcher init]):
        (+[WKFullKeyboardAccessWatcher fullKeyboardAccessEnabled]):
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::fullKeyboardAccessEnabled):
        * UIProcess/mac/WKFullKeyboardAccessWatcher.h: Removed.
        * UIProcess/mac/WKFullKeyboardAccessWatcher.mm: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2018-12-16  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed follow up after r239260
        https://bugs.webkit.org/show_bug.cgi?id=192714
        <rdar://problem/46762407>

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::allocate): Use PAGE_READWRITE directly instead
        of going through the protectAttribute() function, which is removed
        because it is now unused.

2018-12-16  Adrian Perez de Castro  <aperez@igalia.com>

        Unify SharedMemory factory functions
        https://bugs.webkit.org/show_bug.cgi?id=192714

        Reviewed by Darin Adler.

        This unifies SharedMemory so in the following way, across platforms:

        - SharedMemory::create() is removed, to avoid ambiguity.
        - SharedMemory::allocate() always allocates a new block of shared memory.
        - SharedMemory::wrapMap() always creates a SharedMemory object which refers to an
          existing region of memory resulting from memory-mapping a file.

        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::tryCreateSharedMemory const): Use SharedMemory::wrapMap().
        * Platform/SharedMemory.h: Remove the definition of SharedMemory::create(), and make
        SharedMemory::wrapMap() available on OS(DARWIN) as well.
        * Platform/cocoa/SharedMemoryCocoa.cpp:
        (WebKit::SharedMemory::wrapMap): Renamed from ::create().
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::allocate): Renamed from ::create().
        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::allocate): Renamed from ::create()
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::createExtension): Use NetworkCache::Data::tryCreateSharedMemory() instead of
        SharedMemory::create().

2018-12-15  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449
        <rdar://problem/46595508>

        Reviewed by Darin Adler.

        Part 7: Files in UIProcess/API

        * UIProcess/API/APIContentRuleListStore.cpp:
        * UIProcess/API/APIHitTestResult.cpp:
        * UIProcess/API/APINavigation.cpp:
        * UIProcess/API/APIOpenPanelParameters.cpp:
        * UIProcess/API/APIPageConfiguration.cpp:
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetTypeID):
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        (WKApplicationCacheManagerDeleteAllEntries):
        * UIProcess/API/C/WKAuthenticationDecisionListener.cpp:
        (WKAuthenticationDecisionListenerGetTypeID):
        (WKAuthenticationDecisionListenerUseCredential):
        (WKAuthenticationDecisionListenerCancel):
        (WKAuthenticationDecisionListenerRejectProtectionSpaceAndContinue):
        * UIProcess/API/C/WKBackForwardListItemRef.cpp:
        (WKBackForwardListItemGetTypeID):
        (WKBackForwardListItemCopyURL):
        (WKBackForwardListItemCopyTitle):
        (WKBackForwardListItemCopyOriginalURL):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetTypeID):
        (WKContextCreate):
        (WKContextCreateWithInjectedBundlePath):
        (WKContextCreateWithConfiguration):
        (WKContextSetClient):
        (WKContextSetInjectedBundleClient):
        (WKContextSetHistoryClient):
        (WKContextSetDownloadClient):
        (WKContextSetConnectionClient):
        (WKContextDownloadURLRequest):
        (WKContextResumeDownload):
        (WKContextSetInitializationUserDataForInjectedBundle):
        (WKContextPostMessageToInjectedBundle):
        (WKContextGetGlobalStatistics):
        (WKContextAddVisitedLink):
        (WKContextClearVisitedLinks):
        (WKContextSetCacheModel):
        (WKContextGetCacheModel):
        (WKContextSetMaximumNumberOfProcesses):
        (WKContextGetMaximumNumberOfProcesses):
        (WKContextSetAlwaysUsesComplexTextCodePath):
        (WKContextSetShouldUseFontSmoothing):
        (WKContextSetAdditionalPluginsDirectory):
        (WKContextRefreshPlugIns):
        (WKContextRegisterURLSchemeAsEmptyDocument):
        (WKContextRegisterURLSchemeAsSecure):
        (WKContextRegisterURLSchemeAsBypassingContentSecurityPolicy):
        (WKContextRegisterURLSchemeAsCachePartitioned):
        (WKContextRegisterURLSchemeAsCanDisplayOnlyIfCanRequest):
        (WKContextSetDomainRelaxationForbiddenForURLScheme):
        (WKContextSetCanHandleHTTPSServerTrustEvaluation):
        (WKContextSetPrewarmsProcessesAutomatically):
        (WKContextSetCustomWebContentServiceBundleIdentifier):
        (WKContextSetDiskCacheSpeculativeValidationEnabled):
        (WKContextPreconnectToServer):
        (WKContextGetCookieManager):
        (WKContextGetWebsiteDataStore):
        (WKContextGetGeolocationManager):
        (WKContextGetMediaSessionFocusManager):
        (WKContextGetNotificationManager):
        (WKContextStartMemorySampler):
        (WKContextStopMemorySampler):
        (WKContextAllowSpecificHTTPSCertificateForHost):
        (WKContextDisableProcessTermination):
        (WKContextEnableProcessTermination):
        (WKContextSetHTTPPipeliningEnabled):
        (WKContextWarmInitialProcess):
        (WKContextGetStatistics):
        (WKContextGetStatisticsWithOptions):
        (WKContextJavaScriptConfigurationFileEnabled):
        (WKContextSetJavaScriptConfigurationFileEnabled):
        (WKContextGarbageCollectJavaScriptObjects):
        (WKContextSetJavaScriptGarbageCollectorTimerEnabled):
        (WKContextUseTestingNetworkSession):
        (WKContextSetAllowsAnySSLCertificateForWebSocketTesting):
        (WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting):
        (WKContextClearCachedCredentials):
        (WKContextCopyPlugInAutoStartOriginHashes):
        (WKContextSetPlugInAutoStartOriginHashes):
        (WKContextSetPlugInAutoStartOriginsFilteringOutEntriesAddedAfterTime):
        (WKContextSetPlugInAutoStartOrigins):
        (WKContextSetInvalidMessageFunction):
        (WKContextSetMemoryCacheDisabled):
        (WKContextSetFontWhitelist):
        (WKContextTerminateNetworkProcess):
        (WKContextTerminateServiceWorkerProcess):
        (WKContextGetNetworkProcessIdentifier):
        (WKContextAddSupportedPlugin):
        (WKContextClearSupportedPlugins):
        (WKContextSetIDBPerOriginQuota):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURLWithShouldOpenExternalURLsPolicy):
        (WKPageLoadURLWithUserData):
        (WKPageLoadURLRequestWithUserData):
        (WKPageSetPaginationMode):
        (WKPageGetPaginationMode):
        (WKPageSetPageLoaderClient):
        (WKPageSetPagePolicyClient):
        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:

2018-12-15  Darin Adler  <darin@apple.com>

        Use warning-ignoring macros more consistently and simply
        https://bugs.webkit.org/show_bug.cgi?id=192743

        Reviewed by Mark Lam.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]):
        Use ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END.
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _EVOrganizationName]): Ditto.

        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h: Use
        IGNORE_WARNINGS_BEGIN/END instead of IGNORE_CLANG_WARNINGS_BEGIN/END
        because there is no need to accomodate non-clang compilers here.
        Also use #pragma once, add a missing "explicit", and fix conditionals.

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::writeHeaders): Use makeString.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential): Use string concatentation.

        * UIProcess/WebInspectorUtilities.cpp:
        (WebKit::inspectorPageGroupIdentifierForPage): Use makeString.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching): Ditto.
        (WebKit::WebProcessPool::startMemorySampler): Ditto.

2018-12-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix the build with recent SDKs.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]):

2018-12-14  Jiewen Tan  <jiewen_tan@apple.com>

        [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky
        https://bugs.webkit.org/show_bug.cgi?id=192061

        Reviewed by Dewei Zhu.

        Part 2.

        Add some additional temporary logging info. Since the failure cannot be reproduced easily by human, we have to
        rely on the test infrastructure to reporoduce it. Once the bug is determined and fixed, we should remove all
        logging added in this patch.

        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        (WebKit::HidService::deviceAdded):
        * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp:
        (WebKit::CtapHidAuthenticator::makeCredential):
        (WebKit::CtapHidAuthenticator::getAssertion):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp:
        (WebKit::CtapHidDriver::Worker::write):
        (WebKit::CtapHidDriver::Worker::read):
        (WebKit::CtapHidDriver::Worker::returnMessage):
        (WebKit::CtapHidDriver::transact):
        (WebKit::CtapHidDriver::continueAfterChannelAllocated):
        (WebKit::CtapHidDriver::continueAfterResponseReceived):

2018-12-14  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Unreviewed build fix.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: Add missing WebPolicyAction.h include.

2018-12-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix assertion failure in API test after r239210.

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

2018-12-14  Adrian Perez de Castro  <aperez@igalia.com>

        [SOUP] Unreviewed build fix after r239219

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse): Remove
        handling of PolicyAction::Suspend, which is no longer available.

2018-12-14  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed, apply post-landing review comments after r239221.

        * UIProcess/WebPageDebuggable.cpp:
        (WebKit::WebPageDebuggable::url const):
        Switch to WTF::blankURL() instead of using "about:blank" directly.

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls
        https://bugs.webkit.org/show_bug.cgi?id=192704

        Reviewed by Geoffrey Garen.

        Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls. This
        is because we were failing to pass the ShouldTreatAsContinuingLoad flag to the WebContent process when
        doing a LoadData.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigation):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadAlternateHTML):
        * WebProcess/WebPage/WebPage.h:

2018-12-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Prefer "about:blank" instead of an empty string for WebPageDebuggable url
        https://bugs.webkit.org/show_bug.cgi?id=192691
        <rdar://problem/46719798>

        Reviewed by Darin Adler.

        * UIProcess/WebPageDebuggable.cpp:
        (WebKit::WebPageDebuggable::url const):
        Instead of an empty string, return "about:blank" in bail cases.
        When inspecting the page that matches the contents.

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Stop exposing PolicyAction::Suspend to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=192701

        Reviewed by Brady Eidson.

        Introduce a new WebPolicyAction enum that is used at WebKit2 layer and augments
        WebCore::PolicyAction with a "Suspend" value.

        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNSURLSessionResponseDisposition):
        * Shared/WebPolicyAction.h: Added.
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        * UIProcess/WebFramePolicyListenerProxy.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::toPolicyAction):
        (WebKit::WebFrame::didReceivePolicyDecision):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceivePolicyDecision):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-12-14  David Quesada  <david_quesada@apple.com>

        Remove a global 'using namespace WebKit' in WebViewImpl.mm
        https://bugs.webkit.org/show_bug.cgi?id=192690

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKTextListTouchBarViewController initWithWebViewImpl:]):
        (-[WKTextListTouchBarViewController _selectList:]):
        (-[WKTextListTouchBarViewController setCurrentListType:]):
        (-[WKTextTouchBarItemController initWithWebViewImpl:]):

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] WebsitePolicies are lost on process-swap
        https://bugs.webkit.org/show_bug.cgi?id=192694
        <rdar://problem/46715748>

        Reviewed by Brady Eidson.

        In case of process-swap on navigation, instead of sending the websitePolicies to the old
        process, send them to the new process as we trigger the navigation. We tell the new process
        that it is continuing a load and it will therefore not re-trigger a decidePolicyForNavigationAction.

        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::loadRequestWithNavigation):
        (WebKit::WebPageProxy::loadDataWithNavigation):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadAlternateHTML):
        (WebKit::WebPage::goToBackForwardItem):
        (WebKit::WebPage::createDocumentLoader):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-12-14  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Fix forwarding webkit socket to flatpak sandbox
        https://bugs.webkit.org/show_bug.cgi?id=192622

        Reviewed by Michael Catanzaro.

        This fixes running with the sandbox enabled in Flatpak.

        * UIProcess/Launcher/glib/FlatpakLauncher.cpp:
        (WebKit::flatpakSpawn):
        * UIProcess/Launcher/glib/FlatpakLauncher.h:
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2018-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Use new view state API from libwpe
        https://bugs.webkit.org/show_bug.cgi?id=191906

        Reviewed by Žan Doberšek.

        Remove WKViewSetViewState from the C API.

        * UIProcess/API/C/wpe/WKAPICastWPE.h:
        * UIProcess/API/C/wpe/WKView.cpp:
        * UIProcess/API/C/wpe/WKView.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::View): Add implementation for activity_state_changed vfunc of the view backend client.):
        (WKWPE::View::setViewState): Remove the default flags.
        * UIProcess/API/wpe/WPEView.h:
        (WKWPE::View::setViewState const): Make it private.

2018-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Web Inspector: Occasional UIProcess crashes under WebPageProxy::showInspectorIndication
        https://bugs.webkit.org/show_bug.cgi?id=192689
        <rdar://problem/46323610>

        Reviewed by Simon Fraser.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        * UIProcess/WebPageProxy.h:
        Don't wait until ~WebPageProxy to destroy the WebPageProxyDebuggable
        which broadcasts it as a remote inspector target. Terminate this
        as soon as the WebPageProxy closes and becomes invalid.

2018-12-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix for tvOS.

        * Platform/cocoa/WKCrashReporter.mm:

2018-12-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix for tvOS.

        * Platform/cocoa/WKCrashReporter.mm:

2018-12-13  Chris Dumez  <cdumez@apple.com>

        [PSON] We should not need to navigate to 'about:blank' to suspend pages
        https://bugs.webkit.org/show_bug.cgi?id=192668
        <rdar://problem/46701466>

        Reviewed by Alex Christensen.

        To support PageCache when process-swap on cross-site navigation is enabled,
        we've been navigating the previous process to 'about:blank' when swapping.
        This would trigger PageCaching of the page in the old process. While
        convenient, this design has led to a lot of bugs because we did not really
        want a navigation to happen in the old process.

        To address the issue, when a WebPage is asked to suspend (for process-swap),
        we now attempt to add it to PageCache and save it on the current HistoryItem,
        *without* triggering any navigation. Any pending navigation gets cancelled
        and we just suspend in place.

        Later on, when we want to go back to this HistoryItem, we simply leverage the
        existing WebPage::goToBackForwardItem() code path. The only subtlety is that
        we're actually asking the WebPage to load a HistoryItem that is the current
        one in the History. I had to tweak a some logic / assertions to support this
        as this is not something we usually do. However, it actually works with very
        little changes and successfully restores the PageCache entry on the current
        HistoryItem.

        There is no expected overall behavior change and ProcessSwap API tests (which
        cover PageCache) still pass. This is merely a simpler design because it avoids
        navigating to about:blank.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::didSuspend):
        (WebKit::SuspendedPageProxy::didReceiveMessage):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didSuspendAfterProcessSwap):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebPage/WebDocumentLoader.cpp:
        (WebKit::WebDocumentLoader::setNavigationID):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspendForProcessSwap):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::origin):

2018-12-13  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Remove with-report from 3 services that are currently needed on macOS
        https://bugs.webkit.org/show_bug.cgi?id=192593
        <rdar://problem/46604752>

        Reviewed by Brent Fulgham.

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

2018-12-13  Youenn Fablet  <youenn@apple.com>

        On page close, WebPage::m_userMediaPermissionRequestManager is nullified too early
        https://bugs.webkit.org/show_bug.cgi?id=192657

        Reviewed by Eric Carlson.

        Instead of nullifying the manager, make it a UniqueRef and clear it on closing the page.
        This ensures we revoke the sandbox extensions as early as possible and keep the manager lifetime simple.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::~UserMediaPermissionRequestManager):
        (WebKit::UserMediaPermissionRequestManager::clear):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userMediaPermissionRequestManager):

2018-12-13  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449
        <rdar://problem/46595508>

        Reviewed by Darin Adler.

        Part 6: Files in plugin process and UI process.

        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/WebProcessConnection.cpp:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        * UIProcess/WebStorage/LocalStorageDatabase.cpp:
        * UIProcess/mac/WebPageProxyMac.mm:

2018-12-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Calculate width or height when constraints contain only the other
        https://bugs.webkit.org/show_bug.cgi?id=192632
        <rdar://problem/46665734>

        Reviewed by Youenn Fablet.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::remoteVideoSampleAvailable): Deleted,
        replaced with videoSampleAvailable.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::remoteVideoSampleAvailable): Use original frame
        size if necessary when calculating new frame size.

2018-12-12  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449
        <rdar://problem/46595508>

        Reviewed by Darin Adler.

        Part 5: Files in WebProcess folder.

        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (mediaTimeToCurrentTime):
        (-[WKAnimationDelegate initWithLayerID:layerTreeHost:]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2018-12-12  Ross Kirsling  <ross.kirsling@sony.com>

        [MSVC] Unreviewed build fix for r239080.

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

2018-12-12  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449
        <rdar://problem/46595508>

        Reviewed by Darin Adler.

        Part 4: Handling NetworkProcess folder.

        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:

2018-12-12  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449
        <rdar://problem/46595508>

        Reviewed by Tim Horton.

        Fix iosmac build.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _hoverGestureRecognizerChanged:]):

2018-12-12  Alex Christensen  <achristensen@webkit.org>

        Implement safe browsing in WebKit on WatchOS
        https://bugs.webkit.org/show_bug.cgi?id=192641
        <rdar://problem/46376188>

        Reviewed by Geoff Garen.

        WatchOS has a few special requirements:
        1. The margin size needs to be smaller and the title font smaller to fit on the screen.
        2. The exclamation point cannot be beside the title or it won't fit on the screen.  I put it above the title.
        3. The application must be told when the safe browsing warning has been shown.  I added a new delegate callback.
        4. The UIScrollView's contentSize must be set even before the details are shown to be able to scroll down to the buttons.
           This was already an issue on small WKWebViews on iOS, so this fixes both operating systems.

        * Configurations/WebKit.xcconfig:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didShowSafeBrowsingWarning):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didShowSafeBrowsingWarning):
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (fontOfSize):
        (buttonSize):
        (-[WKSafeBrowsingWarning addContent]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):
        (-[WKSafeBrowsingWarning updateContentSize]):
        (buttonWidth): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

2018-12-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239129 and r239131.
        https://bugs.webkit.org/show_bug.cgi?id=192646

        Casued macOS and iOS Debug testing to fail early (Requested by
        Truitt on #webkit).

        Reverted changesets:

        "Unreviewed build fix for WinCairo Debug after r239080(?)."
        https://trac.webkit.org/changeset/239129

        "Unreviewed fix for Cocoa Debug test instability following
        r239129."
        https://trac.webkit.org/changeset/239131

2018-12-12  Vivek Seth  <v_seth@apple.com>

        HTTPS Upgrade: Figure out if/how to tell clients that the HTTPS upgrade happened
        https://bugs.webkit.org/show_bug.cgi?id=192375
        <rdar://problem/45851159>

        Reviewed by Chris Dumez.

        Use simulated redirect to tell clients that HTTPS Upgrade happened.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::accessControlErrorForValidationHandler):
        (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded const):
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::continueCheckingRequestOrDoSyntheticRedirect):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded): Deleted.
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        * NetworkProcess/PingLoad.cpp:

2018-12-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for Cocoa Debug test instability following r239129.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap):
        Move the whole assertion to the declaration site.

2018-12-12  Chris Dumez  <cdumez@apple.com>

        Add a preference to enable / disable devicemotion and deviceorientation events
        https://bugs.webkit.org/show_bug.cgi?id=192631
        <rdar://problem/46646244>

        Reviewed by Geoffrey Garen.

        Add setting to toggle support for the deviceorientation / devicemotion events:
        - https://w3c.github.io/deviceorientation/

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setDeviceOrientationEventEnabled:]):
        (-[WKPreferences _deviceOrientationEventEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-12-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed build fix for WinCairo Debug after r239080(?).

        MSVC gives a redefinition error if noreturn is specified on the definition instead of the declaration.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap):
        * UIProcess/WebPageProxy.h:
        Move NO_RETURN_DUE_TO_ASSERT to the declaration site.

2018-12-12  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449
        <rdar://problem/46595508>

        Reviewed by Darin Adler.

        Part 2: UIProcess/Cocoa and UIProcess/ios folders.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        (-[WKContentView dealloc]):
        (-[WKContentView page]):
        (-[WKContentView updateFixedClippingView:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView _updateForScreen:]):
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        (-[WKContentView _createDrawingAreaProxy]):
        (-[WKContentView _didCommitLayerTree:]):
        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]):
        (hasAssistedNode):
        (-[WKContentView setupInteraction]):
        (-[WKContentView positionInformation]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (inflateQuad):
        (-[WKContentView _updateTapHighlight]):
        (-[WKContentView _showTapHighlight]):
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView inputView]):
        (-[WKContentView _actionForLongPressFromPositionInformation:]):
        (-[WKContentView currentPositionInformation]):
        (-[WKContentView doAfterPositionInformationUpdate:forRequest:]):
        (-[WKContentView _currentPositionInformationIsValidForRequest:]):
        (-[WKContentView _hasValidOutstandingPositionInformationRequest:]):
        (-[WKContentView _currentPositionInformationIsApproximatelyValidForRequest:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsNearMarkedText:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView webSelectionRectsForSelectionRects:]):
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        (-[WKContentView _stylusSingleTapRecognized:]):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _attemptClickAtLocation:]):
        (-[WKContentView _positionInformationDidChange:]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView supportedPasteboardTypesForCurrentSelection]):
        (-[WKContentView _lookupForWebView:]):
        (-[WKContentView _shareForWebView:]):
        (-[WKContentView textStylingAtPosition:inDirection:]):
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView selectForWebView:]):
        (-[WKContentView _accessibilityRetrieveRectsEnclosingSelectionOffset:withGranularity:]):
        (-[WKContentView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]):
        (toGestureType):
        (toUIWKGestureType):
        (toSelectionTouch):
        (toUIWKSelectionTouch):
        (toGestureRecognizerState):
        (toUIGestureRecognizerState):
        (toUIWKSelectionFlags):
        (toWKTextGranularity):
        (toWKSelectionDirection):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]):
        (-[WKContentView autocorrectionData]):
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView selectedTextRange]):
        (-[WKContentView setMarkedText:selectedRange:]):
        (coreWritingDirection):
        (-[WKContentView closestPositionToPoint:]):
        (-[WKContentView insertText:]):
        (-[WKContentView textInputTraits]):
        (-[WKContentView handleKeyWebEvent:]):
        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]):
        (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]):
        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]):
        (-[WKContentView assistedNodeInformation]):
        (-[WKContentView assistedNodeSelectOptions]):
        (isAssistableInputType):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView updateCurrentAssistedNodeInformation:]):
        (-[WKContentView presentViewControllerForCurrentAssistedNode]):
        (-[WKContentView actionNameForFocusedFormControlView:]):
        (-[WKContentView selectWordForReplacement]):
        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView _beginSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _stopSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]):
        (-[WKContentView _showRunOpenPanel:resultListener:]):
        (-[WKContentView _showShareSheet:completionHandler:]):
        (-[WKContentView positionInformationForActionSheetAssistant:]):
        (-[WKContentView updatePositionInformationForActionSheetAssistant:]):
        (-[WKContentView _startDrag:item:]):
        (-[WKContentView _didHandleAdditionalDragItemsRequest:]):
        (-[WKContentView _didHandleStartDataInteractionRequest:]):
        (dropOperationForWebCoreDragOperation):
        (-[WKContentView dragDataForDropSession:dragDestinationAction:]):
        (-[WKContentView _didConcludeEditDataInteraction:]):
        (-[WKContentView _didPerformDragOperation:]):
        (-[WKContentView _prepareToDragPromisedAttachment:]):
        (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]):
        (-[WKContentView _autofillContext]):
        (-[WKContentView _dragInteraction:itemsForAddingToSession:withTouchAtPoint:completion:]):
        (-[WKContentView _dragInteraction:prepareForSession:completion:]):
        (-[WKContentView dragInteraction:itemsForBeginningSession:]):
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):
        (-[WKContentView dragInteraction:session:didEndWithOperation:]):
        (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]):
        (-[WKContentView dropInteraction:performDrop:]):
        (-[WKContentView dropInteraction:sessionDidEnd:]):
        (-[WKContentView allowsLanguageSelectionMenuForListViewController:]):
        (-[WKContentView shouldDisplayInputContextViewForListViewController:]):
        (-[WKContentView numericInputModeForListViewController:]):
        (-[WKContentView textContentTypeForListViewController:]):
        (-[WKContentView allowsDictationInputForListViewController:]):
        (-[WKContentView _simulateLongPressActionAtLocation:]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _presentationRectsForPreviewItemController:]):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::interface const):
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController _manager]):
        (-[WKFullScreenViewController _togglePiPAction:]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullscreenAnimationController configureInitialAndFinalStatesForTransition:]):
        (-[WKFullScreenWindowController isFullScreen]):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        (-[WKFullScreenWindowController webViewDidRemoveFromSuperviewWhileInFullscreen]):
        (-[WKFullScreenWindowController _exitFullscreenImmediately]):
        (-[WKFullScreenWindowController _manager]):

2018-12-12  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449
        <rdar://problem/46595508>

        Reviewed by Darin Adler.

        Part 1: Files in Shared folder.

        * Shared/API/c/WKRenderLayer.cpp:
        (WKRenderLayerGetFrameContentsLayer):
        * Shared/API/c/cf/WKErrorCF.cpp:
        (WKErrorCreateWithCFError):
        (WKErrorCopyCFError):
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateCGImage):
        (WKImageCreateFromCGImage):
        * Shared/API/c/mac/WKWebArchive.cpp:
        (WKWebArchiveGetTypeID):
        (WKWebArchiveCreate):
        (WKWebArchiveCreateWithData):
        (WKWebArchiveCreateFromRange):
        (WKWebArchiveCopyMainResource):
        (WKWebArchiveCopySubresources):
        (WKWebArchiveCopySubframeArchives):
        (WKWebArchiveCopyData):
        * Shared/API/c/mac/WKWebArchiveResource.cpp:
        (WKWebArchiveResourceGetTypeID):
        (WKWebArchiveResourceCreate):
        (WKWebArchiveResourceCopyData):
        (WKWebArchiveResourceCopyURL):
        (WKWebArchiveResourceCopyMIMEType):
        (WKWebArchiveResourceCopyTextEncoding):
        * Shared/ChildProcess.cpp:
        * Shared/ContextMenuContextData.cpp:
        * Shared/EditorState.cpp:
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        * Shared/SessionState.cpp:
        * Shared/SessionTracker.cpp:
        * Shared/ShareableBitmap.cpp:
        * Shared/ShareableResource.cpp:
        * Shared/VisibleContentRectUpdateInfo.cpp:
        * Shared/WebBackForwardListItem.cpp:
        * Shared/WebContextMenuItemData.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebHitTestResultData.cpp:
        * Shared/WebImage.cpp:
        * Shared/WebMediaSessionMetadata.cpp:
        * Shared/WebMemorySampler.cpp:
        * Shared/WebMouseEvent.cpp:
        * Shared/WebRenderObject.cpp:
        * Shared/WebSQLiteDatabaseTracker.cpp:
        * Shared/WebWheelEvent.cpp:
        * Shared/cf/ArgumentCodersCF.cpp:
        * Shared/ios/WebPlatformTouchPointIOS.cpp:

2018-12-12  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449
        <rdar://problem/46595508>

        Reviewed by Darin Adler.

        Part 1: Files in NetworkProcess.

        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:

2018-12-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed build with with recent macOS SDKs.

        * Platform/cocoa/WKCrashReporter.mm:

2018-12-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix GTK build after r239104.

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

2018-12-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix build with older SDKs after r239110.

        * Platform/cocoa/WKCrashReporter.mm:

2018-12-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix build with recent SDKs.

        * Platform/cocoa/WKCrashReporter.mm:

2018-12-09  Darin Adler  <darin@apple.com>

        [iOS] Zero memory containing the password for PDF documents when a WKPDFView is deallocated
        https://bugs.webkit.org/show_bug.cgi?id=192536
        rdar://problem/41174451

        Reviewed by Tim Horton.

        * UIProcess/ios/WKPDFView.mm: Took out PLATFORM(IOSMAC) since
        this class is not compiled on that platform at this time. Can always
        add it back later.
        (-[WKPDFView dealloc]): Zero out characters of _passwordForPrinting.
        (-[WKPDFView pdfHostViewController:documentDidUnlockWithPassword:]):
        Initialize _passwordForPrinting; use a CString instead of retaining
        an NSString since we can zero that out easily.
        (-[WKPDFView _ensureDocumentForPrinting]): Use _passwordForPrinting.

2018-12-12  Commit Queue  <commit-queue@webkit.org>

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

        It broke the built because it depends on another patch that
        didn't land yet (Requested by KaL on #webkit).

        Reverted changeset:

        "[WPE] Add API to notify about frame displayed view backend
        callback"
        https://bugs.webkit.org/show_bug.cgi?id=192224
        https://trac.webkit.org/changeset/239103

2018-12-12  Chris Dumez  <cdumez@apple.com>

        Restore MESSAGE_CHECK_URL() security check on sourceURL in didPerformClientRedirect()
        https://bugs.webkit.org/show_bug.cgi?id=191982
        <rdar://problem/46258054>

        Reviewed by Alex Christensen.

        Have the WebPageProxy remember the local paths it previously visited so that the
        MESSAGE_CHECK_URL() checks still work when process-swap on navigation is enabled.

        Add back MESSAGE_CHECK_URL() on sourceURL in didPerformClientRedirect().

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded):
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::createFrontendPageAndWindow):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createFrontendPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigation):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadDataWithNavigation):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::backForwardGoToItem):
        (WebKit::WebPageProxy::checkURLReceivedFromCurrentOrPreviousWebProcess):
        (WebKit::WebPageProxy::addPreviouslyVisitedPath):
        (WebKit::WebPageProxy::willAcquireUniversalFileReadSandboxExtension):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::assumeReadAccessToBaseURL):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:

2018-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add API to notify about frame displayed view backend callback
        https://bugs.webkit.org/show_bug.cgi?id=192224

        Reviewed by Michael Catanzaro.

        Add API to add a callback to the view to be called when the view backend notifies that a frame has been
        displayed.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (FrameDisplayedCallback::FrameDisplayedCallback):
        (FrameDisplayedCallback::~FrameDisplayedCallback):
        (webkit_web_view_add_frame_displayed_callback):
        (webkit_web_view_remove_frame_displayed_callback):
        * UIProcess/API/wpe/WebKitWebView.h:

2018-12-11  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag for CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=192610

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-12-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix warning -Wmissing-field-initializers
        https://bugs.webkit.org/show_bug.cgi?id=192584

        Reviewed by Yusuke Suzuki.

        Initialize a struct with '{ }' instead of '= {0}'.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::showPopupMenu):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::initializeToolTipWindow):
        (WebKit::WebView::setToolTip):

2018-12-11  Chris Dumez  <cdumez@apple.com>

        PSON logic gets confused by concurrent decidePolicyForNavigationAction requests
        https://bugs.webkit.org/show_bug.cgi?id=192482
        <rdar://problem/46470145>

        Reviewed by Antti Koivisto.

        It is possible to get 2 parallel decidePolicyForNavigationAction() requests from the
        WebProcess when a new load is started before responding to the existing policy
        decision. This would lead to several issues with regards to PSON:
        - We would decide to swap for the first policy decision and tell the WebProcess to
          suspend. However, because the WebProcess issued a new decidePolicyForNavigationAction
          since for the same frame, the previous one is invalidated and the WebProcess would
          ignore our request to suspend.
        - We would hit assertions later on because the navigation has been destroyed and yet
          we're getting a didStartProvisionalLoad for it.
        - swapToWebProcess() was asynchronous so that it would wait for the destination
          SuspendedPage to finish suspending before asking it to unsuspend. This led to various
          problems because anything can happen in the UIProcess while we're waiting for the
          suspension (e.g. another load). Also, we may create the SuspendedPageProxy for
          the current page too late and start getting IPC from the previous process about
          the suspension load to about:blank.

        To address these issues, the following design is now implemented:
        - swapToWebProcess() is no longer asynchronous
        - instead, WebProcessPool::processForNavigation() is now asynchronous. This is better
          because at this point we have not yet told the WebProcess about the policy decision.
          We already properly deal with the policy decision being made asynchronously. This
          also allows us to choose another process if the SuspendedPage we'd like to use
          failed to suspend.
        - If the WebProcess receives a PolicyAction::Suspend but ignores it, have it send an
          IPC to the UIProcess so that the SuspendedPageProxy knows about it. We then destroy
          the SuspendedPageProxy and make sure it is not used.
        - After the asynchronous process selection, if the navigation has been destroy, abort
          the process-swap to avoid hitting assertions later on due to doing a load for a
          destroyed navigation.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        Make sure m_whenReadyToConsume completion handler gets called if necessary if the
        SuspendedPageProxy gets destroyed. We pass null so that the SuspendedPage is not
        used.

        (WebKit::SuspendedPageProxy::whenReadyToConsume):
        Add whenReadyToConsume() utility method to get a completion handler called when
        the SuspendedPageProxy is ready to be used. This basically means we have to wait
        for the page to finish its about:blank suspension load. If the suspension fails
        then we call the completion handler with null to indicate that the suspended
        page is not usable.

        (WebKit::SuspendedPageProxy::unsuspendAndConsume):
        Rename unsuspend() to unsuspendAndConsume() and make it synchronous. This only gets
        called after whenReadyToConsume()'s completion handler has been called and if we
        do decide to use the SuspendedPageProxy. It tells the WebProcess to unsuspend and
        removes the SuspendedPageProxy from the WebProcessPool.

        (WebKit::SuspendedPageProxy::didFinishLoad):
        rename m_finishedSuspendingHandler to m_whenReadyToConsume.

        (WebKit::SuspendedPageProxy::didFailToSuspend):
        Add new didFailToSuspend() that gets called when the WebProcess sends us an IPC telling
        us it ignored our request to suspend. We then call m_whenReadyToConsume completion
        handler with null and destroy the SuspendedPageProxy.

        (WebKit::SuspendedPageProxy::didReceiveMessage):
        * UIProcess/SuspendedPageProxy.h:

        * UIProcess/WebNavigationState.h:
        (WebKit::WebNavigationState::hasNavigation const):
        Add utility function to query if a navigation is still valid.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToWebProcess):
        Update method so that it is no longer asynchronous. Some of its code was also moved to
        continueNavigationInNewProcess() for clarity.

        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        Deal with WebProcessPool::processForNavigation() now being asynchronous.

        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        Update code now that swapToWebProcess() is no longer asynchronous. Some of the swapToWebProcess()
        code was also moved here for clarity.

        (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap):

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Add new DidFailToSuspendAfterProcessSwap IPC message.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:
        Make asynchronous. If we decide to use a SuspendedPageProxy's process, then call
        whenReadyToConsume() on it to wait for it to suspend. If the SuspendedPageProxy
        fails to suspend use a new process instead.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision):
        If we ignore the policy decision and the decision was "Suspend", send the DidFailToSuspendAfterProcessSwap
        IPC to the UIProcess so that the SuspendedPageProxy knows about it.

2018-12-11  Andy Estes  <aestes@apple.com>

        Introduce makeBlockPtr for lambdas
        https://bugs.webkit.org/show_bug.cgi?id=192594

        Reviewed by Alex Christensen.

        Adopted makeBlockPtr.

        * NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm:
        (-[WKDownloadProgress initWithDownloadTask:download:URL:sandboxExtension:]):
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::write):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache):
        (WebKit::saveCookies):
        * NetworkProcess/watchos/NetworkProximityAssertion.mm:
        (WebKit::BluetoothProximityAssertion::suspend):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setInputDelegate:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView maybeInstallIconLoadingClient]):
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinatorProxy::platformOpenPaymentSetup):
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::requestNewPageWithOptions):
        (WebKit::AutomationSessionClient::requestSwitchToPage):
        (WebKit::AutomationSessionClient::requestHideWindowOfPage):
        (WebKit::AutomationSessionClient::requestRestoreWindowOfPage):
        (WebKit::AutomationSessionClient::requestMaximizeWindowOfPage):
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didReceiveAuthenticationChallenge):
        (WebKit::DownloadClient::decideDestinationWithSuggestedFilename):
        * UIProcess/Cocoa/IconLoadingDelegate.mm:
        (WebKit::IconLoadingDelegate::IconLoadingClient::getLoadDecisionForIcon):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad):
        (WebKit::NavigationState::NavigationClient::webGLLoadPolicy const):
        (WebKit::NavigationState::NavigationClient::resolveWebGLLoadPolicy const):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):
        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):
        (WebKit::UIDelegate::UIClient::createNewPage):
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):
        (WebKit::UIDelegate::UIClient::requestStorageAccessConfirm):
        (WebKit::UIDelegate::UIClient::decidePolicyForGeolocationPermissionRequest):
        (WebKit::UIDelegate::UIClient::runBeforeUnloadConfirmPanel):
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota):
        (WebKit::UIDelegate::UIClient::windowFrame):
        (WebKit::UIDelegate::UIClient::toolbarsAreVisible):
        (WebKit::UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest):
        (WebKit::UIDelegate::UIClient::runOpenPanel):
        (WebKit::requestUserMediaAuthorizationForDevices):
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin):
        (WebKit::UIDelegate::UIClient::reachedApplicationCacheOriginQuota):
        (WebKit::UIDelegate::UIClient::requestPointerLock):
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning clickedOnLink:]):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        * UIProcess/WebAuthentication/Cocoa/HidConnection.mm:
        (WebKit::HidConnection::send):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::getUserConsent const):
        (WebKit::LocalConnection::getAttestation const):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::send):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestPasswordForQuickLookDocument):
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
        * UIProcess/mac/ServicesController.mm:
        (WebKit::hasCompatibleServicesForItems):
        (WebKit::ServicesController::refreshExistingServices):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (PageLoaderClient::didStartProvisionalLoadForFrame):

2018-12-11  Alex Christensen  <achristensen@webkit.org>

        Fix an internal build failure after r239014
        https://bugs.webkit.org/show_bug.cgi?id=192205

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (fontOfSize):
        There's a system that doesn't have safe browsing or UIFontTextStyleLargeTitle.

2018-12-11  Brian Burg  <bburg@apple.com>

        SimulatedInputDispatcher::transitionInputSourceToState() can reuse a moved-from completion handler
        https://bugs.webkit.org/show_bug.cgi?id=191155
        <rdar://problem/45745569>

        Reviewed by Joseph Pecoraro.

        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        Add an ASSERT to guard against unexpected inputs where >1 VirtualKey changes per state.
        webkitdriver needs to be updated to not produce such states in this scenario, but this will
        avoid a runtime crash caused by trying to call a moved-out completion handler a second time.

2018-12-11  Commit Queue  <commit-queue@webkit.org>

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

        Broke WPE build due to undefined references to toAPI() and
        toImpl() inside the C API (Requested by magomez on #webkit).

        Reverted changeset:

        "[meta][WebKit] Remove using namespace WebCore and WebKit in
        the global scope for unified source builds"
        https://bugs.webkit.org/show_bug.cgi?id=192449
        https://trac.webkit.org/changeset/239071

2018-12-10  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449

        Reviewed by Darin Adler.

        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * PlatformMac.cmake:
        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/WebProcessConnection.cpp:
        * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb:
        * Shared/API/c/cf/WKErrorCF.cpp:
        (WKErrorCreateWithCFError):
        (WKErrorCopyCFError):
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateCGImage):
        (WKImageCreateFromCGImage):
        * Shared/ChildProcess.cpp:
        * Shared/ContextMenuContextData.cpp:
        * Shared/EditorState.cpp:
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        * Shared/SessionState.cpp:
        * Shared/SessionTracker.cpp:
        * Shared/ShareableBitmap.cpp:
        * Shared/ShareableResource.cpp:
        * Shared/VisibleContentRectUpdateInfo.cpp:
        * Shared/WebBackForwardListItem.cpp:
        * Shared/WebContextMenuItemData.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebHitTestResultData.cpp:
        * Shared/WebImage.cpp:
        * Shared/WebMediaSessionMetadata.cpp:
        * Shared/WebMemorySampler.cpp:
        * Shared/WebMouseEvent.cpp:
        * Shared/WebRenderObject.cpp:
        * Shared/WebSQLiteDatabaseTracker.cpp:
        * Shared/WebWheelEvent.cpp:
        * Shared/cf/ArgumentCodersCF.cpp:
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        * SourcesCocoa.txt:
        * UIProcess/API/APIContentRuleListStore.cpp:
        * UIProcess/API/APIHitTestResult.cpp:
        * UIProcess/API/APINavigation.cpp:
        * UIProcess/API/APIOpenPanelParameters.cpp:
        * UIProcess/API/APIPageConfiguration.cpp:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURLWithShouldOpenExternalURLsPolicy):
        (WKPageLoadURLWithUserData):
        (WKPageLoadURLRequestWithUserData):
        (WKPageSetPaginationMode):
        (WKPageGetPaginationMode):
        (WKPageSetPageLoaderClient):
        (WKPageSetPagePolicyClient):
        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        * UIProcess/WebStorage/LocalStorageDatabase.cpp:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        (-[WKContentView dealloc]):
        (-[WKContentView page]):
        (-[WKContentView updateFixedClippingView:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView _updateForScreen:]):
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        (-[WKContentView _createDrawingAreaProxy]):
        (-[WKContentView _didCommitLayerTree:]):
        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]):
        (hasAssistedNode):
        (-[WKContentView setupInteraction]):
        (-[WKContentView positionInformation]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (inflateQuad):
        (-[WKContentView _updateTapHighlight]):
        (-[WKContentView _showTapHighlight]):
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView inputView]):
        (-[WKContentView _actionForLongPressFromPositionInformation:]):
        (-[WKContentView currentPositionInformation]):
        (-[WKContentView doAfterPositionInformationUpdate:forRequest:]):
        (-[WKContentView _currentPositionInformationIsValidForRequest:]):
        (-[WKContentView _hasValidOutstandingPositionInformationRequest:]):
        (-[WKContentView _currentPositionInformationIsApproximatelyValidForRequest:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsNearMarkedText:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView webSelectionRectsForSelectionRects:]):
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        (-[WKContentView _stylusSingleTapRecognized:]):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _attemptClickAtLocation:]):
        (-[WKContentView _positionInformationDidChange:]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView supportedPasteboardTypesForCurrentSelection]):
        (-[WKContentView _lookupForWebView:]):
        (-[WKContentView _shareForWebView:]):
        (-[WKContentView textStylingAtPosition:inDirection:]):
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView selectForWebView:]):
        (-[WKContentView _accessibilityRetrieveRectsEnclosingSelectionOffset:withGranularity:]):
        (-[WKContentView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]):
        (toGestureType):
        (toUIWKGestureType):
        (toSelectionTouch):
        (toUIWKSelectionTouch):
        (toGestureRecognizerState):
        (toUIGestureRecognizerState):
        (toUIWKSelectionFlags):
        (toWKTextGranularity):
        (toWKSelectionDirection):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]):
        (-[WKContentView autocorrectionData]):
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView selectedTextRange]):
        (-[WKContentView setMarkedText:selectedRange:]):
        (coreWritingDirection):
        (-[WKContentView closestPositionToPoint:]):
        (-[WKContentView insertText:]):
        (-[WKContentView textInputTraits]):
        (-[WKContentView handleKeyWebEvent:]):
        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]):
        (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]):
        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]):
        (-[WKContentView assistedNodeInformation]):
        (-[WKContentView assistedNodeSelectOptions]):
        (isAssistableInputType):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView updateCurrentAssistedNodeInformation:]):
        (-[WKContentView presentViewControllerForCurrentAssistedNode]):
        (-[WKContentView actionNameForFocusedFormControlView:]):
        (-[WKContentView selectWordForReplacement]):
        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView _beginSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _stopSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]):
        (-[WKContentView _showRunOpenPanel:resultListener:]):
        (-[WKContentView _showShareSheet:completionHandler:]):
        (-[WKContentView positionInformationForActionSheetAssistant:]):
        (-[WKContentView updatePositionInformationForActionSheetAssistant:]):
        (-[WKContentView _startDrag:item:]):
        (-[WKContentView _didHandleAdditionalDragItemsRequest:]):
        (-[WKContentView _didHandleStartDataInteractionRequest:]):
        (dropOperationForWebCoreDragOperation):
        (-[WKContentView dragDataForDropSession:dragDestinationAction:]):
        (-[WKContentView _didConcludeEditDataInteraction:]):
        (-[WKContentView _didPerformDragOperation:]):
        (-[WKContentView _prepareToDragPromisedAttachment:]):
        (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]):
        (-[WKContentView _autofillContext]):
        (-[WKContentView _dragInteraction:itemsForAddingToSession:withTouchAtPoint:completion:]):
        (-[WKContentView _dragInteraction:prepareForSession:completion:]):
        (-[WKContentView dragInteraction:itemsForBeginningSession:]):
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):
        (-[WKContentView dragInteraction:session:didEndWithOperation:]):
        (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]):
        (-[WKContentView dropInteraction:performDrop:]):
        (-[WKContentView dropInteraction:sessionDidEnd:]):
        (-[WKContentView allowsLanguageSelectionMenuForListViewController:]):
        (-[WKContentView shouldDisplayInputContextViewForListViewController:]):
        (-[WKContentView numericInputModeForListViewController:]):
        (-[WKContentView textContentTypeForListViewController:]):
        (-[WKContentView allowsDictationInputForListViewController:]):
        (-[WKContentView _simulateLongPressActionAtLocation:]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _presentationRectsForPreviewItemController:]):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::interface const):
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController _manager]):
        (-[WKFullScreenViewController _togglePiPAction:]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullscreenAnimationController configureInitialAndFinalStatesForTransition:]):
        (-[WKFullScreenWindowController isFullScreen]):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        (-[WKFullScreenWindowController webViewDidRemoveFromSuperviewWhileInFullscreen]):
        (-[WKFullScreenWindowController _exitFullscreenImmediately]):
        (-[WKFullScreenWindowController _manager]):
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (mediaTimeToCurrentTime):
        (-[WKAnimationDelegate initWithLayerID:layerTreeHost:]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]):

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=192573

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2018-12-10  Youenn Fablet  <youenn@apple.com>

        Remove derived classes of RealtimeMediaSourceCenter
        https://bugs.webkit.org/show_bug.cgi?id=192546

        Reviewed by Eric Carlson.

        pdate code according WebCore changes.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):
        (WebKit::UserMediaCaptureManager::initialize):

2018-12-10  Tim Horton  <timothy_horton@apple.com>

        Animated scrolling on Google Maps scrolls the page in addition to moving the map
        https://bugs.webkit.org/show_bug.cgi?id=192521
        <rdar://problem/46382007>

        Reviewed by Sam Weinig.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollViewAnimator rubberbandableDirections]):
        Only do keyboard-based rubber-banding in directions that we can actually
        scroll, not directions we can only finger-rubber-band in. This effectively
        means keyboard scrolling will ignore "alwaysBounce{Vertical, Horizontal}".

2018-12-10  Commit Queue  <commit-queue@webkit.org>

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

        Speculative rollout due to broken perf test (Requested by
        deanj on #webkit).

        Reverted changeset:

        "Enable HTTP and HTTPS proxies on iOS and make it a property
        of the NSURLSession"
        https://bugs.webkit.org/show_bug.cgi?id=192374
        https://trac.webkit.org/changeset/239023

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the iOS build after r239039.
        https://bugs.webkit.org/show_bug.cgi?id=192568

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dropInteraction:sessionDidUpdate:]):

2018-12-10  Alex Christensen  <achristensen@webkit.org>

        Fix WatchOS build.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionNameForFocusedFormControlView:]):

2018-12-10  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r239029.

        This patch caused internal build failures.

        Reverted changeset:

        "[meta][WebKit] Remove using namespace WebCore and WebKit in
        the global scope for unified source builds"
        https://bugs.webkit.org/show_bug.cgi?id=192449
        https://trac.webkit.org/changeset/239029

2018-12-10  Chris Dumez  <cdumez@apple.com>

        Add SPI to allow the client to set the user-agent at main frame level, from the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=192509
        <rdar://problem/46500832>

        Reviewed by Alex Christensen.

        Add SPI to allow the client to set the user-agent at main frame level, from the UIProcess instead of doing
        it at resource-level from the injected bundle.

        The custom user-agent string can now be set on _WKWebsitePolicies during the
        decidePolicyForNavigationAction for the main feame, and will impact this main resource load as well as its
        future subresource loads.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setCustomUserAgent:]):
        (-[_WKWebsitePolicies customUserAgent]):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

2018-12-10  Alex Christensen  <achristensen@webkit.org>

        Safe browsing warning should layout buttons vertically in narrow WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=192535
        <rdar://problem/46308364>

        Reviewed by Tim Horton.

        They're usually next to each other, but in narrow WKWebViews they currently get clipped.
        In order to make it more likely that both buttons are completely visible, put one above
        the other if the WKWebView is too narrow to completely show both.  This also helps with
        languages where the translations of "Go Back" or "Show Details" are rendered wider than English.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (buttonWidth):
        (-[WKSafeBrowsingWarning addContent]):

2018-12-10  Simon Fraser  <simon.fraser@apple.com>

        Allow control over child order when adding nodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=176914
        <rdar://problem/46542237>
        
        Re-land r239010 after over-zealous rollout.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Caret is obscured by finger when dragging over an editable element
        https://bugs.webkit.org/show_bug.cgi?id=192499
        <rdar://problem/46570101>

        Reviewed by Tim Horton.

        Add support for setting the `precise` property of `UIDropProposal` to YES when dragging over an editable area.
        When enabled, this property shifts the drop location up by a small amount, allowing the user to see the drop
        caret (currently, this is not the case, and it's difficult to drop text at a precise location on iOS). Changes
        are covered by adding to existing API tests.

        * Scripts/webkit/messages.py:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        Add a new version of `-_webView:willUpdateDataInteractionOperationToOperation:forSession:` that receives and
        returns a UIDropProposal, so that Mail can more easily port over existing logic in its legacy-WebKit-based
        compose implementation. iOS Safari is currently the only client of this private delegate, so the old version can
        be easily removed once Safari adopts this new version.

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

        Add plumbing to send the latest drag handling method from WebPage to WebPageProxy.

        (WebKit::WebPageProxy::resetCurrentDragInformation):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::currentDragHandlingMethod const):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dropInteraction:sessionDidUpdate:]):

        Call the new UI delegate hook when determining the drop proposal to return to UIKit. Additionally set the
        `precise` bit on the drop proposal in the case where the drop handling method is either "editing rich text" or
        "editing plain text".

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

2018-12-10  Youenn Fablet  <youenn@apple.com>

        Make mock capture happen in the process used for real capture
        https://bugs.webkit.org/show_bug.cgi?id=192544

        Reviewed by Eric Carlson.

        Make mock capture happen in the right process by only overriding
        factories by mock factories for source types that UserMediaCaptureManager will not override.
        That way, UserMediaCaptureManager will be used to go to UIProcess, where mock will be used as if it was the real capture.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::initialize):

2018-12-10  Alexey Proskuryakov  <ap@apple.com>

        Move ENABLE_SEC_ITEM_SHIM out of WebKit's config.h
        https://bugs.webkit.org/show_bug.cgi?id=192428

        Reviewed by Tim Horton.

        * config.h:

2018-12-10  Alexey Proskuryakov  <ap@apple.com>

        Move more macros out of WebKit's config.h
        https://bugs.webkit.org/show_bug.cgi?id=192430

        Reviewed by Tim Horton.

        * config.h:

2018-12-10  Chris Fleizach  <cfleizach@apple.com>

        [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=192449

        Reviewed by Darin Adler.

        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * PlatformMac.cmake:
        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/WebProcessConnection.cpp:
        * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb:
        * Shared/API/c/cf/WKErrorCF.cpp:
        (WKErrorCreateWithCFError):
        (WKErrorCopyCFError):
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateCGImage):
        (WKImageCreateFromCGImage):
        * Shared/ChildProcess.cpp:
        * Shared/ContextMenuContextData.cpp:
        * Shared/EditorState.cpp:
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        * Shared/SessionState.cpp:
        * Shared/SessionTracker.cpp:
        * Shared/ShareableBitmap.cpp:
        * Shared/ShareableResource.cpp:
        * Shared/VisibleContentRectUpdateInfo.cpp:
        * Shared/WebBackForwardListItem.cpp:
        * Shared/WebContextMenuItemData.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebHitTestResultData.cpp:
        * Shared/WebImage.cpp:
        * Shared/WebMediaSessionMetadata.cpp:
        * Shared/WebMemorySampler.cpp:
        * Shared/WebMouseEvent.cpp:
        * Shared/WebRenderObject.cpp:
        * Shared/WebSQLiteDatabaseTracker.cpp:
        * Shared/WebWheelEvent.cpp:
        * Shared/cf/ArgumentCodersCF.cpp:
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        * SourcesCocoa.txt:
        * UIProcess/API/APIContentRuleListStore.cpp:
        * UIProcess/API/APIHitTestResult.cpp:
        * UIProcess/API/APINavigation.cpp:
        * UIProcess/API/APIOpenPanelParameters.cpp:
        * UIProcess/API/APIPageConfiguration.cpp:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURLWithShouldOpenExternalURLsPolicy):
        (WKPageLoadURLWithUserData):
        (WKPageLoadURLRequestWithUserData):
        (WKPageSetPaginationMode):
        (WKPageGetPaginationMode):
        (WKPageSetPageLoaderClient):
        (WKPageSetPagePolicyClient):
        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        * UIProcess/WebStorage/LocalStorageDatabase.cpp:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        (-[WKContentView dealloc]):
        (-[WKContentView page]):
        (-[WKContentView updateFixedClippingView:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView _updateForScreen:]):
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        (-[WKContentView _createDrawingAreaProxy]):
        (-[WKContentView _didCommitLayerTree:]):
        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]):
        (hasAssistedNode):
        (-[WKContentView setupInteraction]):
        (-[WKContentView positionInformation]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (inflateQuad):
        (-[WKContentView _updateTapHighlight]):
        (-[WKContentView _showTapHighlight]):
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView inputView]):
        (-[WKContentView _actionForLongPressFromPositionInformation:]):
        (-[WKContentView currentPositionInformation]):
        (-[WKContentView doAfterPositionInformationUpdate:forRequest:]):
        (-[WKContentView _currentPositionInformationIsValidForRequest:]):
        (-[WKContentView _hasValidOutstandingPositionInformationRequest:]):
        (-[WKContentView _currentPositionInformationIsApproximatelyValidForRequest:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsNearMarkedText:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView webSelectionRectsForSelectionRects:]):
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        (-[WKContentView _stylusSingleTapRecognized:]):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _attemptClickAtLocation:]):
        (-[WKContentView _positionInformationDidChange:]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView supportedPasteboardTypesForCurrentSelection]):
        (-[WKContentView _lookupForWebView:]):
        (-[WKContentView _shareForWebView:]):
        (-[WKContentView textStylingAtPosition:inDirection:]):
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView selectForWebView:]):
        (-[WKContentView _accessibilityRetrieveRectsEnclosingSelectionOffset:withGranularity:]):
        (-[WKContentView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]):
        (toGestureType):
        (toUIWKGestureType):
        (toSelectionTouch):
        (toUIWKSelectionTouch):
        (toGestureRecognizerState):
        (toUIGestureRecognizerState):
        (toUIWKSelectionFlags):
        (toWKTextGranularity):
        (toWKSelectionDirection):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]):
        (-[WKContentView autocorrectionData]):
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView selectedTextRange]):
        (-[WKContentView setMarkedText:selectedRange:]):
        (coreWritingDirection):
        (-[WKContentView closestPositionToPoint:]):
        (-[WKContentView insertText:]):
        (-[WKContentView textInputTraits]):
        (-[WKContentView handleKeyWebEvent:]):
        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]):
        (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]):
        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]):
        (-[WKContentView assistedNodeInformation]):
        (-[WKContentView assistedNodeSelectOptions]):
        (isAssistableInputType):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView updateCurrentAssistedNodeInformation:]):
        (-[WKContentView presentViewControllerForCurrentAssistedNode]):
        (-[WKContentView actionNameForFocusedFormControlView:]):
        (-[WKContentView selectWordForReplacement]):
        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView _beginSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _stopSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]):
        (-[WKContentView _showRunOpenPanel:resultListener:]):
        (-[WKContentView _showShareSheet:completionHandler:]):
        (-[WKContentView positionInformationForActionSheetAssistant:]):
        (-[WKContentView updatePositionInformationForActionSheetAssistant:]):
        (-[WKContentView _startDrag:item:]):
        (-[WKContentView _didHandleAdditionalDragItemsRequest:]):
        (-[WKContentView _didHandleStartDataInteractionRequest:]):
        (dropOperationForWebCoreDragOperation):
        (-[WKContentView dragDataForDropSession:dragDestinationAction:]):
        (-[WKContentView _didConcludeEditDataInteraction:]):
        (-[WKContentView _didPerformDragOperation:]):
        (-[WKContentView _prepareToDragPromisedAttachment:]):
        (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]):
        (-[WKContentView _autofillContext]):
        (-[WKContentView _dragInteraction:itemsForAddingToSession:withTouchAtPoint:completion:]):
        (-[WKContentView _dragInteraction:prepareForSession:completion:]):
        (-[WKContentView dragInteraction:itemsForBeginningSession:]):
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):
        (-[WKContentView dragInteraction:session:didEndWithOperation:]):
        (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]):
        (-[WKContentView dropInteraction:performDrop:]):
        (-[WKContentView dropInteraction:sessionDidEnd:]):
        (-[WKContentView allowsLanguageSelectionMenuForListViewController:]):
        (-[WKContentView shouldDisplayInputContextViewForListViewController:]):
        (-[WKContentView numericInputModeForListViewController:]):
        (-[WKContentView textContentTypeForListViewController:]):
        (-[WKContentView allowsDictationInputForListViewController:]):
        (-[WKContentView _simulateLongPressActionAtLocation:]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _presentationRectsForPreviewItemController:]):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::interface const):
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController _manager]):
        (-[WKFullScreenViewController _togglePiPAction:]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullscreenAnimationController configureInitialAndFinalStatesForTransition:]):
        (-[WKFullScreenWindowController isFullScreen]):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        (-[WKFullScreenWindowController webViewDidRemoveFromSuperviewWhileInFullscreen]):
        (-[WKFullScreenWindowController _exitFullscreenImmediately]):
        (-[WKFullScreenWindowController _manager]):
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (mediaTimeToCurrentTime):
        (-[WKAnimationDelegate initWithLayerID:layerTreeHost:]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]):

2018-12-10  Tim Horton  <timothy_horton@apple.com>

        WKWebView should support custom tintColor
        https://bugs.webkit.org/show_bug.cgi?id=192518
        <rdar://problem/37243261>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView insertionPointColor]):
        (-[WKContentView selectionBarColor]):
        (-[WKContentView selectionHighlightColor]):
        Grab insertion point and selection colors from UITextInputTraits.

        (-[WKContentView _updateInteractionTintColor]):
        Determine our effective tint color:
            - transparent if interaction is disabled
            - a CSS-derived color if caret-color style is applied
            - the _inheritedInteractionTintColor, which climbs up to the tintColor API
        Apply it to our UITextInputTraits.

        (-[WKContentView tintColorDidChange]):
        (-[WKContentView textInputTraits]):
        Call _updateInteractionTintColor whenever we create a new UITextInputTraits
        or when the tint color changes.

2018-12-09  Youenn Fablet  <youenn@apple.com>

        Move capture manager from RealtimeMediaSourceCenter to capture factory
        https://bugs.webkit.org/show_bug.cgi?id=192542

        Reviewed by Eric Carlson.

        Make sure to unregister for video capture as done for other capture types.
        Implement manager which should be doing nothing as the manager is used for enumeration of devices
        which should only happen in UIProcess.

        Given that mock capture is interfering with UserMediaCaptureManager,
        switching on/off mock capture will require creating a new process.
        This shortcoming should be fixed once mock capture will be fully happening in
        the same process as regular capture.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2018-12-09  Saam barati  <sbarati@apple.com>

        Enable HTTP and HTTPS proxies on iOS and make it a property of the NSURLSession
        https://bugs.webkit.org/show_bug.cgi?id=192374
        <rdar://problem/46506286>

        Reviewed by Alex Christensen.

        This patch makes it so that we can use HTTP/HTTPS proxies on iOS as well.
        To enable on iOS, you can do something like:
        $ defaults write -g WebKit2HTTPProxy -string "http://localhost:8080"
        $ defaults write -g WebKit2HTTPSProxy -string "http://localhost:8080"
        
        This patch also changes the Proxy to be enabled on a per NSURLSession
        basis instead of a per process basis.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::proxyDictionary):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        (WebKit::overrideSystemProxies): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration httpProxy]):
        (-[_WKWebsiteDataStoreConfiguration setHTTPProxy:]):
        (-[_WKWebsiteDataStoreConfiguration httpsProxy]):
        (-[_WKWebsiteDataStoreConfiguration setHTTPSProxy:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::httpProxy const):
        (WebKit::WebsiteDataStoreConfiguration::setHTTPProxy):
        (WebKit::WebsiteDataStoreConfiguration::httpsProxy const):
        (WebKit::WebsiteDataStoreConfiguration::setHTTPSProxy):

2018-12-09  Adrian Perez de Castro  <aperez@igalia.com>

        Build failure due to missing include of APIWebsiteDataStore.h
        https://bugs.webkit.org/show_bug.cgi?id=192541

        Reviewed by Youenn Fablet.

        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp: Add missing
        include of APIWebsiteDataStore.h

2018-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS device] Crash when attempting to call -[_WKAttachment info] for an editable image
        https://bugs.webkit.org/show_bug.cgi?id=192538

        Reviewed by Tim Horton.

        Fix the crash by ensuring that the result of `-renderedDrawing` survives long enough to be wrapped by a
        `RetainPtr` in `-PNGRepresentation`. This isn't currently testable, since this codepath isn't supported on the
        iOS simulator; instead, I manually verified using MobileAttachments.app.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView renderedDrawing]):

2018-12-09  Commit Queue  <commit-queue@webkit.org>

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

        Breaks fast/visual-viewport/tiled-drawing/zoomed-fixed-
        scrolling-layers-state.html again (Requested by ap on
        #webkit).

        Reverted changeset:

        "Allow control over child order when adding nodes to the
        scrolling tree"
        https://bugs.webkit.org/show_bug.cgi?id=176914
        https://trac.webkit.org/changeset/239010

2018-12-08  Alex Christensen  <achristensen@webkit.org>

        Don't programmatically capitalize safe browsing warning buttons
        https://bugs.webkit.org/show_bug.cgi?id=192531
        <rdar://problem/46417791>

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (makeButton):

2018-12-08  Alex Christensen  <achristensen@webkit.org>

        Safe browsing warning should respect text size from settings
        https://bugs.webkit.org/show_bug.cgi?id=192205

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (fontWithSize):
        (makeButton):
        (-[WKSafeBrowsingWarning addContent]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):

2018-12-08  Frederic Wang  <fwang@igalia.com>

        Allow control over child order when adding nodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=176914
        <rdar://problem/46542237>

        Reviewed by Simon Fraser.

        Based on an earlier patch by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):

2018-12-07  Rob Buis  <rbuis@igalia.com>

        Remove unused API in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=192415

        Reviewed by Alex Christensen.

        This patch removed some unused API and headers in NetworkProcess.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::startPreflight):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkContentRuleListManager.h:
        * NetworkProcess/NetworkDataTask.cpp:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        * NetworkProcess/NetworkLoad.cpp:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadChecker.cpp:
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.cpp:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSocketStream.cpp:
        * NetworkProcess/NetworkSocketStream.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::PreconnectTask):
        (WebKit::PreconnectTask::frameID const): Deleted.
        (WebKit::PreconnectTask::pageID const): Deleted.
        * NetworkProcess/PreconnectTask.h:

2018-12-07  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] 'devicechange' event should not fire in frames that can't access capture devices
        https://bugs.webkit.org/show_bug.cgi?id=192511
        <rdar://problem/46562063>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionCheckProxy.cpp:
        (WebKit::UserMediaPermissionCheckProxy::UserMediaPermissionCheckProxy): Remove userMediaID parameter.
        (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo): ID not passed to callback.
        * UIProcess/UserMediaPermissionCheckProxy.h:
        (WebKit::UserMediaPermissionCheckProxy::create):
        (WebKit::UserMediaPermissionCheckProxy::completionHandler): Deleted.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::generateRequestID): New.
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged): Don't notify if
        the page does not have a granted request and does not have persistent access.
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Use generateRequestID.
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): Change variable name.
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Use generateRequestID.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

2018-12-07  Saam Barati  <sbarati@apple.com>

        WKWebProcessPlugInLoadDelegate should have API for saying which rendering events it wants to listen for
        https://bugs.webkit.org/show_bug.cgi?id=192473

        Reviewed by Andy Estes.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (PageLoaderClient::layoutMilestones const):

2018-12-07  Youenn Fablet  <youenn@apple.com>

        Update libwebrtc up to 0d007d7c4f
        https://bugs.webkit.org/show_bug.cgi?id=192316

        Reviewed by Eric Carlson.

        Update code base according new libwebrtc backend
        In particular, use directly int64_t for packet time.

        * Configurations/WebKit.xcconfig:
        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::signalReadPacket):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        * NetworkProcess/webrtc/NetworkRTCSocket.h:
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::signalReadPacket):

2018-12-07  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238947.

        Revision caused fast/visual-viewport/tiled-drawing/zoomed-
        fixed-scrolling-layers-state.html to constantly fail

        Reverted changeset:

        "Allow control over child order when adding nodes to the
        scrolling tree"
        https://bugs.webkit.org/show_bug.cgi?id=176914
        https://trac.webkit.org/changeset/238947

2018-12-06  David Kilzer  <ddkilzer@apple.com>

        Injected bundle for WebKitTestRunner leaks WKTypeRef objects
        <https://webkit.org/b/192481>
        <rdar://problem/46539059>

        Reviewed by Simon Fraser.

        Change function parameter name from `returnData[Ref]` to
        `returnRetainedData[Ref]` to document that the value returned is
        a +1 retained WKTypeRef object.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePostSynchronousMessage):
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePagePostSynchronousMessageForTesting):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2018-12-06  Frederic Wang  <fwang@igalia.com>

        Allow control over child order when adding nodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=176914

        Reviewed by Simon Fraser.

        Based on an earlier patch by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::decode): Make explicit that we want to append
        the new node at the end of child list.

2018-12-06  Yongjun Zhang  <yongjun_zhang@apple.com>

        We should ignore minimumEffectiveDeviceWidth if the page specifies device-width in viewport meta-tag.
        https://bugs.webkit.org/show_bug.cgi?id=192377
        <rdar://problem/46364206>

        Reviewed by Tim Horton.

        Since we are using page's viewport arguments to decide the default viewport parameters and
        whether we can use mininum effective device width, we should always call setViewportArguments()
        regardless of shouldIgnoreMetaViewport settings.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::viewportPropertiesDidChange): Always call setViewportArguments().
        (WebKit::WebPage::didCommitLoad): Ditto.

2018-12-06  Tim Horton  <timothy_horton@apple.com>

        Web Share API: share overlay does not stick to the Safari window
        https://bugs.webkit.org/show_bug.cgi?id=192469
        <rdar://problem/46074833>

        Reviewed by Wenson Hsieh.

        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet sharingServicePicker:didChooseSharingService:]):
        (-[WKShareSheet sharingServicePicker:delegateForSharingService:]):
        (-[WKShareSheet sharingService:sourceWindowForShareItems:sharingContentScope:]):
        (-[WKShareSheet sharingService:didFailToShareItems:error:]):
        (-[WKShareSheet sharingService:didShareItems:]):
        Implement another NSSharingServicePickerDelegate method to return
        an *NSSharingService* delegate when needed.

        Implement an NSSharingServiceDelegate method to return the window that
        the service's UI should attach to.

        Also, instead of notifying the Web Content process when a service is picked
        (or not) in the NSSharingServicePicker, wait until the share has completed
        (or failed) to send didComplete. This both makes the return completion
        value more accurate (matching iOS, if you cancel the share during the
        recipient choice step, it will now fail), and avoids explicitly tearing
        down the NSSharingServicePicker too early, which breaks the UI attaching mechanism.

2018-12-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView should match UITextView behavior when editing text with an RTL keyboard
        https://bugs.webkit.org/show_bug.cgi?id=187554
        <rdar://problem/42075638>

        Reviewed by Tim Horton.

        Add support for automatically switching the base writing direction to the default writing direction with respect
        to the current keyboard in an editable WKWebView by implementing `-setBaseWritingDirection:forRange:`. On iOS 12
        and earlier, UIKit invokes this protocol method whenever the keyboard is changed to one with a different writing
        direction, although in some other versions of iOS, this only happens when first focusing an editable area.

        Test: editing/input/ios/rtl-keyboard-input-on-focus.html

        * Platform/spi/ios/UIKitSPI.h:

        Declare UIKeyboardImpl IPI methods mostly for use in WebKitTestRunner (with the exception of
        `-setInitialDirection`, which we may invoke when we receive the first post-layout EditorState update after
        focusing an editable element).

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::increaseListLevel):
        (WebKit::WebPageProxy::decreaseListLevel):
        (WebKit::WebPageProxy::changeListType):
        (WebKit::WebPageProxy::setBaseWritingDirection):

        Drive-by style fixes: make these bail and return early if `!isValid()`.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):

        Reset assisted node state in the UI process upon web process termination.

        * UIProcess/WebPageProxy.h:

        Add plumbing for `setBaseWritingDirection`, from `WebPageProxy` to `WebPage` to `Editor`.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didReceiveEditorStateUpdateAfterFocus):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView baseWritingDirectionForPosition:inDirection:]):
        (coreWritingDirection):
        (-[WKContentView setBaseWritingDirection:forRange:]):

        Support `-setBaseWritingDirectionForPosition:forRange:`, but only in the case where the given range is the
        selected range. This is all that's currently needed to fulfill the requirements in <rdar://problem/42075638>,
        though we could potentially add full support for this in the future by mapping the given text range to a DOM
        range and moving the selection prior to setting the base writing direction.

        (-[WKContentView _didReceiveEditorStateUpdateAfterFocus]):

        Add a hook to notify WKContentView when the first post-layout EditorState has been received in the UI process.
        When this is invoked, if the web view is editable and the selection is not a range, we call into `UIKeyboardImpl`
        to change the initial writing direction if necessary.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAssistingNode):
        (WebKit::WebPageProxy::stopAssistingNode):
        (WebKit::WebPageProxy::editorStateChanged):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setBaseWritingDirection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-12-06  David Quesada  <david_quesada@apple.com>

        -[WKProcessPool _resumeDownloadFromData:path:] should allow specifying the originating web view
        https://bugs.webkit.org/show_bug.cgi?id=192411
        rdar://problem/46492487

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextResumeDownload):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _resumeDownloadFromData:path:originatingWebView:]):
        (-[WKProcessPool _resumeDownloadFromData:path:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::resumeDownload):
         - Set the originating page of the DownloadProxy.
         - If the originating page is non-null, use its session ID for the download.
         - Remove a FIXME. It's possible to do this now by providing the web view whose session
           should be used for the download.
        * UIProcess/WebProcessPool.h:

2018-12-06  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a quick fix after r238919

        Add an early return such that the error message is actually meaningful.

        * UIProcess/WebAuthentication/Mock/MockHidService.cpp:
        (WebKit::MockHidService::platformStartDiscovery):

2018-12-06  Alex Christensen  <achristensen@webkit.org>

        Remove unused LoaderStrategy::storeDerivedDataToCache and associated dead code
        https://bugs.webkit.org/show_bug.cgi?id=192452

        Reviewed by Anders Carlsson.

        This was introduced in r210835 but never used.
        It's preventing me from making the disk cache associated with a SessionID/NetworkSession.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::storeDerivedDataToCache): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::continueProcessingCachedEntryAfterDidReceiveResponse): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::storeDerivedDataToCache): Deleted.
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didRetrieveDerivedData): Deleted.
        * WebProcess/Network/WebResourceLoader.messages.in:

2018-12-06  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        REGRESSION(r231043): [GTK] Undefined references to WebCore::LayerRepresentation::* with -DENABLE_OPENGL=OFF builds
        https://bugs.webkit.org/show_bug.cgi?id=191997

        Reviewed by Philippe Normand.

        Fix build with -DENABLE_OPENGL=OFF and -DENABLE_VIDEO=OFF.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent): add required #if ENABLE(ASYNC_SCROLLING)

2018-12-05  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(PSON): Process swapping code doesn't set DisplayID in WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=192290

        Reviewed by Simon Fraser.

        Fixed the bug by updating the DisplayID upon attaching to a WebContent process
        after a process swap as well as after the previous WebContent process had crashed.

        Unfortunately no new tests since WebKitTestRunner / DumpRenderTree should use 0 as DisplayID
        as they have an off-screen NSWindow. The issue that this results in no fallback for
        the animation timer is tracked by webkit.org/b/192448.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::didRelaunchProcess):

2018-12-05  Youenn Fablet  <youenn@apple.com>

        Remove a document entry from NetworkMDNSRegister::m_services when document goes away
        https://bugs.webkit.org/show_bug.cgi?id=192429

        Reviewed by Eric Carlson.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::unregisterMDNSNames):
        We should remove the entry to limit the size of the map.

2018-12-05  Jiewen Tan  <jiewen_tan@apple.com>

        [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky
        https://bugs.webkit.org/show_bug.cgi?id=192061

        Reviewed by Dewei Zhu.

        Part 1.

        Add some loggings to determine possible causes for the flakiness.

        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        (WebKit::HidService::continueAddDeviceAfterGetInfo):
        * UIProcess/WebAuthentication/Mock/MockHidService.cpp:
        (WebKit::MockHidService::platformStartDiscovery):

2018-12-05  Chris Dumez  <cdumez@apple.com>

        Simplify logic inside WebPageProxy::continueNavigationInNewProcess()
        https://bugs.webkit.org/show_bug.cgi?id=192404

        Reviewed by Alex Christensen.

        Simplify get the item state from the current back/forward list item, instead of
        relying on WebBackForwardList::filteredItemStates().

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

2018-12-05  Youenn Fablet  <youenn@apple.com>

        Enable the possibility to do video capture in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=192394

        Reviewed by Eric Carlson.

        Add two web preferences to toggle audio/video capture in UIProcess or WebProcess.
        Add mechanism for video capture that was not implemented yet.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCaptureAudioInUIProcessEnabled):
        (WKPreferencesGetCaptureAudioInUIProcessEnabled):
        (WKPreferencesSetCaptureVideoInUIProcessEnabled):
        (WKPreferencesGetCaptureVideoInUIProcessEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateBoolValueForInternalDebugFeatureKey):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::createWebPage):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::initialize):

2018-12-05  Alex Christensen  <achristensen@webkit.org>

        Make WebsiteDataStoreConfiguration a proper API object
        https://bugs.webkit.org/show_bug.cgi?id=192380

        Reviewed by Youenn Fablet.

        In the immediate future I'll need to add things to _WKWebsiteDataStoreConfiguration.
        Instead of making ivars, setting them, copying them to a local object, make this a wrapper of an API::Object
        like all our other ObjC API objects are.

        * Shared/API/APIObject.h:
        (API::Object::wrapper const):
        (API::Object::wrapper): Deleted.
        * Shared/Cocoa/APIObject.mm:
        (API::Object::ref const):
        (API::Object::deref const):
        (API::Object::newObject):
        (API::Object::ref): Deleted.
        (API::Object::deref): Deleted.
        * Sources.txt:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::createLegacy):
        (API::WebsiteDataStore::WebsiteDataStore):
        (API::WebsiteDataStore::legacyDefaultDataStoreConfiguration):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration _webStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setWebStorageDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration _indexedDBDatabaseDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setIndexedDBDatabaseDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration _webSQLDatabaseDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setWebSQLDatabaseDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration _cookieStorageFile]):
        (-[_WKWebsiteDataStoreConfiguration _setCookieStorageFile:]):
        (-[_WKWebsiteDataStoreConfiguration _resourceLoadStatisticsDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setResourceLoadStatisticsDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration _cacheStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setCacheStorageDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration _serviceWorkerRegistrationDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setServiceWorkerRegistrationDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration setSourceApplicationBundleIdentifier:]):
        (-[_WKWebsiteDataStoreConfiguration sourceApplicationBundleIdentifier]):
        (-[_WKWebsiteDataStoreConfiguration sourceApplicationSecondaryIdentifier]):
        (-[_WKWebsiteDataStoreConfiguration setSourceApplicationSecondaryIdentifier:]):
        (-[_WKWebsiteDataStoreConfiguration _apiObject]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfigurationInternal.h: Added.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::create):
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::parameters):
        (WebKit::WebsiteDataStore::Configuration::Configuration): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::cacheStoragePerOriginQuota const):
        (WebKit::WebsiteDataStore::setCacheStoragePerOriginQuota):
        (WebKit::WebsiteDataStore::cacheStorageDirectory const):
        (WebKit::WebsiteDataStore::setCacheStorageDirectory):
        (WebKit::WebsiteDataStore::serviceWorkerRegistrationDirectory const):
        (WebKit::WebsiteDataStore::setServiceWorkerRegistrationDirectory):
        (WebKit::WebsiteDataStore::resolvedApplicationCacheDirectory const):
        (WebKit::WebsiteDataStore::resolvedMediaCacheDirectory const):
        (WebKit::WebsiteDataStore::resolvedMediaKeysDirectory const):
        (WebKit::WebsiteDataStore::resolvedDatabaseDirectory const):
        (WebKit::WebsiteDataStore::resolvedJavaScriptConfigurationDirectory const):
        (WebKit::WebsiteDataStore::resolvedCookieStorageFile const):
        (WebKit::WebsiteDataStore::resolvedIndexedDatabaseDirectory const):
        (WebKit::WebsiteDataStore::resolvedServiceWorkerRegistrationDirectory const):
        (WebKit::WebsiteDataStore::resolvedResourceLoadStatisticsDirectory const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp: Added.
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h: Added.
        (WebKit::WebsiteDataStoreConfiguration::create):
        (WebKit::WebsiteDataStoreConfiguration::cacheStoragePerOriginQuota):
        (WebKit::WebsiteDataStoreConfiguration::setCacheStoragePerOriginQuota):
        (WebKit::WebsiteDataStoreConfiguration::applicationCacheDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setApplicationCacheDirectory):
        (WebKit::WebsiteDataStoreConfiguration::mediaCacheDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setMediaCacheDirectory):
        (WebKit::WebsiteDataStoreConfiguration::mediaKeysStorageDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setMediaKeysStorageDirectory):
        (WebKit::WebsiteDataStoreConfiguration::javaScriptConfigurationDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setJavaScriptConfigurationDirectory):
        (WebKit::WebsiteDataStoreConfiguration::webStorageDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setWebStorageDirectory):
        (WebKit::WebsiteDataStoreConfiguration::indexedDBDatabaseDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setIndexedDBDatabaseDirectory):
        (WebKit::WebsiteDataStoreConfiguration::webSQLDatabaseDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setWebSQLDatabaseDirectory):
        (WebKit::WebsiteDataStoreConfiguration::localStorageDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setLocalStorageDirectory):
        (WebKit::WebsiteDataStoreConfiguration::cookieStorageFile const):
        (WebKit::WebsiteDataStoreConfiguration::setCookieStorageFile):
        (WebKit::WebsiteDataStoreConfiguration::resourceLoadStatisticsDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setResourceLoadStatisticsDirectory):
        (WebKit::WebsiteDataStoreConfiguration::networkCacheDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setNetworkCacheDirectory):
        (WebKit::WebsiteDataStoreConfiguration::cacheStorageDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setCacheStorageDirectory):
        (WebKit::WebsiteDataStoreConfiguration::applicationCacheFlatFileSubdirectoryName const):
        (WebKit::WebsiteDataStoreConfiguration::setApplicationCacheFlatFileSubdirectoryName):
        (WebKit::WebsiteDataStoreConfiguration::serviceWorkerRegistrationDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setServiceWorkerRegistrationDirectory):
        (WebKit::WebsiteDataStoreConfiguration::sourceApplicationBundleIdentifier const):
        (WebKit::WebsiteDataStoreConfiguration::setSourceApplicationBundleIdentifier):
        (WebKit::WebsiteDataStoreConfiguration::sourceApplicationSecondaryIdentifier const):
        (WebKit::WebsiteDataStoreConfiguration::setSourceApplicationSecondaryIdentifier):
        * WebKit.xcodeproj/project.pbxproj:

2018-12-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Turn WritingDirection into an enum class
        https://bugs.webkit.org/show_bug.cgi?id=192401
        Work towards <rdar://problem/42075638>

        Reviewed by Dan Bernstein.

        Change WritingDirection from an enum to an enum class. No change in behavior.

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

2018-12-05  Rob Buis  <rbuis@igalia.com>

        [Mac] HEAD requests changed to GET after 301, 302, and 303 redirections (http/tests/xmlhttprequest/head-redirection.html)
        https://bugs.webkit.org/show_bug.cgi?id=114965

        Reviewed by Frédéric Wang.

        HEAD requests should not be changed to GET after 303 redirects, see [1].
        This was fixed earlier for GTK [2].

        Behavior matches Firefox and Chrome.

        [1] http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-21#section-7.4
        [2] https://bugs.webkit.org/show_bug.cgi?id=110127

        Tests: web-platform-tests/fetch/api/redirect/redirect-method.html
               web-platform-tests/fetch/api/redirect/redirect-method-worker.html
               http/tests/xmlhttprequest/head-redirection.html

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):

2018-12-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove using namespace WebCore and WebKit under WebKit/Shared/API
        https://bugs.webkit.org/show_bug.cgi?id=192352

        Reviewed by Alex Christensen.

        Removed using namespace statements, and use namespace prefix
        instead.

        * Shared/API/APIURLRequest.cpp:
        * Shared/API/APIURLResponse.cpp:
        * Shared/API/c/WKArray.cpp:
        * Shared/API/c/WKCertificateInfo.cpp:
        * Shared/API/c/WKConnectionRef.cpp:
        * Shared/API/c/WKContextMenuItem.cpp:
        * Shared/API/c/WKData.cpp:
        * Shared/API/c/WKDictionary.cpp:
        * Shared/API/c/WKErrorRef.cpp:
        * Shared/API/c/WKGeometry.cpp:
        * Shared/API/c/WKImage.cpp:
        * Shared/API/c/WKMutableArray.cpp:
        * Shared/API/c/WKMutableDictionary.cpp:
        * Shared/API/c/WKNumber.cpp:
        * Shared/API/c/WKPluginInformation.cpp:
        * Shared/API/c/WKRenderLayer.cpp:
        * Shared/API/c/WKRenderObject.cpp:
        * Shared/API/c/WKSecurityOriginRef.cpp:
        * Shared/API/c/WKSerializedScriptValue.cpp:
        * Shared/API/c/WKString.cpp:
        * Shared/API/c/WKType.cpp:
        * Shared/API/c/WKURL.cpp:
        * Shared/API/c/WKURLRequest.cpp:
        * Shared/API/c/WKURLResponse.cpp:
        * Shared/API/c/WKUserContentURLPattern.cpp:
        * Shared/API/c/cairo/WKImageCairo.cpp:
        * Shared/API/c/curl/WKCertificateInfoCurl.cpp:

2018-12-04  Alex Christensen  <achristensen@webkit.org>

        Remove source application identifiers from NetworkProcessCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=192372

        Reviewed by Brady Eidson.

        The _WKWebProcessPoolConfiguration way of setting these was deprecated in http://trac.webkit.org/r235127
        The replacement was adopted in <rdar://problem/46359330>
        The transition process is done!  Time to remove the old code.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::globalSourceApplicationAuditTokenData): Deleted.
        (WebKit::globalSourceApplicationBundleIdentifier): Deleted.
        (WebKit::globalSourceApplicationSecondaryIdentifier): Deleted.
        (WebKit::NetworkSessionCocoa::setSourceApplicationAuditTokenData): Deleted.
        (WebKit::NetworkSessionCocoa::setSourceApplicationBundleIdentifier): Deleted.
        (WebKit::NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration sourceApplicationBundleIdentifier]):
        (-[_WKProcessPoolConfiguration setSourceApplicationBundleIdentifier:]):
        (-[_WKProcessPoolConfiguration sourceApplicationSecondaryIdentifier]):
        (-[_WKProcessPoolConfiguration setSourceApplicationSecondaryIdentifier:]):
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard):
        (WebKit::toPKPaymentRequest):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::configuration):

2018-12-04  Youenn Fablet  <youenn@apple.com>

        Calling getUserMedia in a link that was opened with target="_blank" does not work the second time
        https://bugs.webkit.org/show_bug.cgi?id=188088
        <rdar://problem/42681448>

        Reviewed by Eric Carlson.

        On closing a page, we need to make sure to consider that the capture is ended,
        as otherwise WebPageProxy will not get noticed from WebPage, since WebPageProxy is no longer an IPC receiver.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::endedCaptureSession):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):

2018-12-04  Chris Dumez  <cdumez@apple.com>

        Regression(r238817) PSON Page Cache API tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=192348

        Reviewed by Alex Christensen.

        Before suspending a WebProcess on iOS, we normally fake a memory pressure signal
        so that the suspended process uses as little memory as possible while suspended.
        Among other things, this will clear the page cache. This is an issue in the case
        of process-swap on navigation because we keep suspended web processes around to
        keep Page Cache functional.

        To address the issue, when a WebProcess is about to get suspended, we check if
        the process has any suspended WebPage (WebPage used for PSON PageCache support)
        and we bypass the PageCache clearing if it does.

        Our API tests did not catch this before r238817 because the NavigationState's
        assertion was preventing the old WebProcesses from suspending for 3 seconds,
        which was enough for those tests to complete.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::didFinishLoad):
        * UIProcess/SuspendedPageProxy.h:
        Take a background assertion until the suspension load is complete, to make sure
        the suspension load has a chance to complete before the process gets suspended.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::hasPageRequiringPageCacheWhileSuspended const):
        (WebKit::WebProcess::actualPrepareToSuspend):
        * WebProcess/WebProcess.h:

2018-12-04  Youenn Fablet  <youenn@apple.com>

        Device orientation may be wrong on page reload after crash
        https://bugs.webkit.org/show_bug.cgi?id=192349
        <rdar://problem/46359466>

        Reviewed by Eric Carlson.

        On page crash, the process is relaunched and the page is reloaded.
        At that point, the orientation information of the page is not reset until the next device orientation change.
        To fix that, add the device orientation to the page creation parameters so that we pass it everytime we create a page.
        Covered by manual testing.

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

2018-12-04  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE] Add gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=178900

        Reviewed by Michael Catanzaro.

        Add gtk-doc to WPE port. This patch tries to reuse as much code from
        WebKitGTK+ as possible.

        * PlatformWPE.cmake: Write variables to gtkdoc-wpe.cfg and gtkdoc-webextensions that is used by python script later.
        * UIProcess/API/wpe/WebKitWebContext.h: Placed sandbox functions in the same location as in the WebKitGTK+ for consistency.
        * UIProcess/API/wpe/docs/wpe-0.1-sections.txt: Added.
        * UIProcess/API/wpe/docs/wpe-docs.sgml: Added.
        * WebProcess/InjectedBundle/API/wpe/WebKitWebPage.h: Placed webkit_web_page_get_dom_document
        in the same position as in the WebKitGTK+ for consistency.
        * WebProcess/InjectedBundle/API/wpe/docs/wpe-webextensions-0.1-sections.txt: Added.
        * WebProcess/InjectedBundle/API/wpe/docs/wpe-webextensions-docs.sgml: Added.

2018-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move URLSoup back to WebCore after r238771
        https://bugs.webkit.org/show_bug.cgi?id=192306

        Reviewed by Michael Catanzaro.

        Include GUniquePtrSoup from WebCore again and fix several build failures that showed up after removing the soup
        includes from URL header.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::tlsConnectionAcceptCertificate):
        * PluginProcess/PluginProcess.cpp:
        * Shared/API/glib/WebKitURIRequest.cpp:
        * Shared/API/glib/WebKitURIResponse.cpp:
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        (webkit_uri_scheme_request_finish_error): Use soupURIToURL().
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_load_uri): Use soupURIToURL().
        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        * UIProcess/Launcher/glib/BubblewrapLauncher.h:
        * UIProcess/Launcher/glib/FlatpakLauncher.cpp:
        * UIProcess/Launcher/glib/FlatpakLauncher.h:

2018-12-04  Tim Horton  <timothy_horton@apple.com>

        Fix the watchOS build; stop unnecessarily linking CorePDF
        https://bugs.webkit.org/show_bug.cgi?id=192356
        <rdar://problem/46427844>

        Reviewed by Wenson Hsieh.

        * Configurations/WebKit.xcconfig:
        * Platform/spi/ios/CorePDFSPI.h:

2018-12-03  Tim Horton  <timothy_horton@apple.com>

        Make it possible to disable animated keyboard scrolling behavior
        https://bugs.webkit.org/show_bug.cgi?id=192331
        <rdar://problem/45586859>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator invalidate]):
        (-[WKKeyboardScrollingAnimator beginWithEvent:]):
        (-[WKKeyboardScrollingAnimator stopAnimatedScroll]):
        (-[WKKeyboardScrollingAnimator willStartInteractiveScroll]):
        (-[WKKeyboardScrollingAnimator startRepeatTimerIfNeeded]):
        (-[WKKeyboardScrollingAnimator stopRepeatTimer]):
        (-[WKKeyboardScrollingAnimator performDiscreteScroll]):
        (-[WKKeyboardScrollViewAnimator scrollToContentOffset:animated:]):
        (-[WKKeyboardScrollViewAnimator scrollWithScrollToExtentAnimationTo:]):
        * WebKit.xcodeproj/project.pbxproj:

2018-12-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove "using namespace WebKit" under Source/WebKit/WebProcess/InjectedBundle/API
        https://bugs.webkit.org/show_bug.cgi?id=192301

        Reviewed by Alex Christensen.

        Removed "using namespace WebKit" statement, and use "WebKit::"
        namespace prefix instead.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleDOMWindowExtension.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageBanner.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:

2018-12-03  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Google OAuth is broken in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=192337
        <rdar://problem/46353558>

        Reviewed by Alex Christensen.

        In WebPageProxy::swapToWebProcess(), we would call removeWebPage() on the old WebProcessProxy and then
        addExistingWebPage() on the new WebProcessProxy, as you would expect in case of process swap.

        The issue is that WebProcessProxy::removeWebPage() calls WebProcessPool::pageEndUsingWebsiteDataStore()
        which would cause the session to get destroyed assuming this was the last page using it. We would
        therefore lose session cookies after a process-swap in private session.

        To address the issue, a parameter to WebProcessPool::pageEndUsingWebsiteDataStore() and
        WebProcessPool::pageBeginUsingWebsiteDataStore() to control if we want to tell the WebProcessPool
        about the page beginning / ending its use of the session. In the case of a process-swap, we make
        sure the process pool is not notified.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::close):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::removeWebPage):
        * UIProcess/WebProcessProxy.h:

2018-12-03  Chris Dumez  <cdumez@apple.com>

        [PSON] Request by the client to process-swap is ignored if the window has an opener
        https://bugs.webkit.org/show_bug.cgi?id=192267
        <rdar://problem/46386886>

        Reviewed by Brady Eidson.

        If the client forces a process-swap, we should process-swap, even if the browsing
        context has an opener (or openees). Previously, we would only bypass the cross-site
        check, not the openee / openees checks.

        The issue when doing so is that the openee still has a opener link to the window
        in the old process. They would see that the window is still there and navigated
        to 'about:blank' due to our page suspension logic. To address the issue, we no
        longer suspend the old WebPage if the process swap was forced by the client and
        we make sure that the old WebPage gets closed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):

2018-12-03  Keith Rollin  <krollin@apple.com>

        Add .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192082
        <rdar://problem/46312533>

        Reviewed by Brent Fulgham.

        Add .xcfilelist files for Generate Derived Sources and Generate
        Unified Sources build phases in Xcode. These are just being staged for
        now; they'll be added to the Xcode projects later.

        * DerivedSources-input.xcfilelist: Added.
        * DerivedSources-output.xcfilelist: Added.
        * UnifiedSources-input.xcfilelist: Added.
        * UnifiedSources-output.xcfilelist: Added.

2018-12-03  Zalan Bujtas  <zalan@apple.com>

        [iOS] Unreviewed build fix.

        * Platform/Logging.h:

2018-12-03  Alex Christensen  <achristensen@webkit.org>

        Remove unused NetworkProcessCreationParameters.diskCacheSizeOverride
        https://bugs.webkit.org/show_bug.cgi?id=192246

        Reviewed by Chris Dumez.

        The last use of this functionality was removed in rdar://problem/46344871

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationDiskCacheSizeOverride):
        (WKContextConfigurationSetDiskCacheSizeOverride):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration diskCacheSizeOverride]):
        (-[_WKProcessPoolConfiguration setDiskCacheSizeOverride:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2018-12-03  Alex Christensen  <achristensen@webkit.org>

        Add WKWebProcessPlugInLoadDelegate SPI willStartProvisionalLoadForFrame with a completion handler
        https://bugs.webkit.org/show_bug.cgi?id=192272

        Reviewed by Brady Eidson.

        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::didStartProvisionalLoadForFrame):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (ResourceLoadClient::ResourceLoadClient):
        (ResourceLoadClient::loadDelegate const):
        (ResourceLoadClient::pluginContextController const):
        (PageLoaderClient::PageLoaderClient):
        (PageLoaderClient::loadDelegate const):
        (PageLoaderClient::pluginContextController const):
        (PageLoaderClient::didStartProvisionalLoadForFrame):
        (PageLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (PageLoaderClient::didFinishLoadForFrame):
        (PageLoaderClient::globalObjectIsAvailableForFrame):
        (PageLoaderClient::didRemoveFrameFromHierarchy):
        (PageLoaderClient::didCommitLoadForFrame):
        (PageLoaderClient::didFinishDocumentLoadForFrame):
        (PageLoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (PageLoaderClient::didFailLoadWithErrorForFrame):
        (PageLoaderClient::didSameDocumentNavigationForFrame):
        (PageLoaderClient::didLayoutForFrame):
        (PageLoaderClient::didReachLayoutMilestone):
        (PageLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame):
        (PageLoaderClient::didHandleOnloadEventsForFrame):
        (PageLoaderClient::userAgentForURL const):
        (ResourceLoadClient::willSendRequestForFrame):
        (ResourceLoadClient::didInitiateLoadForResource):
        (ResourceLoadClient::didFinishLoadForResource):
        (ResourceLoadClient::didFailLoadForResource):
        (-[WKWebProcessPlugInBrowserContextController setLoadDelegate:]):
        (didStartProvisionalLoadForFrame): Deleted.
        (didReceiveServerRedirectForProvisionalLoadForFrame): Deleted.
        (didFinishLoadForFrame): Deleted.
        (globalObjectIsAvailableForFrame): Deleted.
        (didRemoveFrameFromHierarchy): Deleted.
        (didCommitLoadForFrame): Deleted.
        (didFinishDocumentLoadForFrame): Deleted.
        (didFailProvisionalLoadWithErrorForFrame): Deleted.
        (didFailLoadWithErrorForFrame): Deleted.
        (didSameDocumentNavigationForFrame): Deleted.
        (didLayoutForFrame): Deleted.
        (didReachLayoutMilestone): Deleted.
        (didFirstVisuallyNonEmptyLayoutForFrame): Deleted.
        (didHandleOnloadEventsForFrame): Deleted.
        (userAgentForURL): Deleted.
        (setUpPageLoaderClient): Deleted.
        (willSendRequestForFrame): Deleted.
        (didInitiateLoadForResource): Deleted.
        (didFinishLoadForResource): Deleted.
        (didFailLoadForResource): Deleted.
        (setUpResourceLoadClient): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didStartProvisionalLoadForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2018-12-03  Tim Horton  <timothy_horton@apple.com>

        Swipe snapshot stays up too long swiping around on apple.com (waiting for first paint)
        https://bugs.webkit.org/show_bug.cgi?id=192319
        <rdar://problem/45928708>

        Reviewed by Simon Fraser.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame):
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        In r236966, I reverted slightly too much of r232416.
        We still need to defer requesting a presentation update callback until
        after the provisional load starts. Otherwise, we could get the callback
        while we're in the 'paused' state, and drop it on the floor. That would
        then mean that we time out instead of promptly removing the snapshot.

2018-12-03  Alex Christensen  <achristensen@webkit.org>

        Update process assertions after swapping processes
        https://bugs.webkit.org/show_bug.cgi?id=192318
        <rdar://problem/46377552>

        Reviewed by Chris Dumez.

        If the previous WebProcess had a ProcessAssertion to prevent it from being suspended,
        after navigation and process swapping we need the new WebProcess to update its process assertions.

        * UIProcess/API/Cocoa/PageLoadStateObserver.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didSwapWebProcesses):
        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::didSwapWebProcesses):
        * UIProcess/PageLoadState.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::finishAttachingToWebProcess):

2018-12-03  Daniel Bates  <dabates@apple.com>

        [iOS] Do not handle key events that are key commands
        https://bugs.webkit.org/show_bug.cgi?id=191608
        <rdar://problem/46046013>

        Reviewed by Ryosuke Niwa.

        A key down event may be associated with a key command. If it is then we want to execute the
        key command instead of inserting or deleting text. We need to ask UIKit to handle the current
        event as a key command to find out.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]): Ask UIKit to handle the current event
        as a key command. If it handles it then we're done. Otherwise, do what we do now.

2018-12-03  Zalan Bujtas  <zalan@apple.com>

        [iOS] Add logging channel for hover related content observation
        https://bugs.webkit.org/show_bug.cgi?id=192312

        Reviewed by Simon Fraser.

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

2018-12-03  Tim Horton  <timothy_horton@apple.com>

        Enable swipe snapshot removal logging in release builds
        https://bugs.webkit.org/show_bug.cgi?id=192313

        Reviewed by Dean Jackson.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::log const):
        This is super-low-traffic and super-helpful logging.
        Turn it on all the time.

2018-12-03  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Use WallTime for file time
        https://bugs.webkit.org/show_bug.cgi?id=192287

        Reviewed by Darin Adler.

        * Shared/SessionState.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DatabaseDetails>::decode):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        * UIProcess/API/glib/WebKitWebViewSessionState.cpp:
        (decodeHTTPBody):
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::getPluginInfo):
        (WebKit::PluginInfoCache::updatePluginInfo):
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::hasFileChangedSince):
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasesModifiedSince):
        (WebKit::LocalStorageDatabaseTracker::originDetails):
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeFormDataElement):
        (WebKit::decodeFormDataElement):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::removeAllMediaKeyStorageForOriginPath):
        (WebKit::WebMediaKeyStorageManager::deleteMediaKeyEntriesForOrigin):
        (WebKit::WebMediaKeyStorageManager::deleteMediaKeyEntriesModifiedBetweenDates):
        (WebKit::WebMediaKeyStorageManager::deleteAllMediaKeyEntries):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.h:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toHTTPBody):
        (WebKit::toFormData):

2018-12-03  Darin Adler  <darin@apple.com>

        [Cocoa] Check message IDs when decoding Mach messages in IPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=192300
        rdar://problem/46215523

        Reviewed by Chris Dumez.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendOutgoingMessage): Use message IDs other than 0 and 1 for
        the messages, as suggested by an expert at Apple.
        (IPC::createMessageDecoder): Update for the new message IDs.
        (IPC::Connection::receiveSourceEventHandler): Ignore messages with unexpected
        message IDs.

2018-12-03  Darin Adler  <darin@apple.com>

        [Cocoa] Check descriptor types in createMessageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=192302

        Reviewed by Chris Dumez.

        Not sure how to construct a test case for Connection, so not adding any
        tests at this time.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::createMessageDecoder): Check descriptor types and return nullptr if they
        are incorrect. Retained the assertions to help with debugging.
        (IPC::Connection::receiveSourceEventHandler): Ignore the message if no decoder
        is created, which means the message is invalid.

2018-12-03  Darin Adler  <darin@apple.com>

        Alignment padding needs to be zeroed out in IPC::Encoder
        https://bugs.webkit.org/show_bug.cgi?id=192304

        Reviewed by Chris Dumez.

        Might be useful to make a regression test for this, but I couldn't find any
        other tests for this code.

        * Platform/IPC/Encoder.cpp:
        (IPC::Encoder::grow): Use std::memset to zero-fill padding bytes.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataEncoder::grow): Ditto.

2018-12-03  Darin Adler  <darin@apple.com>

        [Cocoa] Streamline sandbox code a tiny bit
        https://bugs.webkit.org/show_bug.cgi?id=192299

        Reviewed by Anders Carlsson.

        * Shared/mac/SandboxUtilities.mm:
        (WebKit::processHasContainer): Removed separate function, just use the
        pathForProcessContainer instead of repeating logic. This costs a tiny
        bit of memory allocation overhead the first time this function is called,
        but in return we can eliminate a second copy of the code to call
        sandbox_container_path_for_pid.

2018-12-03  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] 'devicechange' event when more capture device information are revealed.
        https://bugs.webkit.org/show_bug.cgi?id=192268

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Call captureDevicesChanged
        if a filtered device list was returned previously.
        (WebKit::UserMediaPermissionRequestManagerProxy::resetAccess): Clear m_hasFilteredDeviceList.
        (WebKit::UserMediaPermissionRequestManagerProxy::wasGrantedVideoOrAudioAccess): New.
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Filter device
        list and strip device IDs if gUM permission hasn't been given.
        (WebKit::UserMediaPermissionRequestManagerProxy::watchdogTimerFired): Clear m_hasFilteredDeviceList.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

2018-12-03  Keith Rollin  <krollin@apple.com>

        Remove Network Capture
        https://bugs.webkit.org/show_bug.cgi?id=192296
        <rdar://problem/46408648>

        Reviewed by Daniel Bates.

        r209498 introduced an embedded record and replay facility for network
        resource loading. This facility was added in order to support a new
        implementation of the PLT and related performance tests. The PLT is
        currenty taking a different direction, and so this record/replace
        facility is no longer needed. Removing it as unused code.

        * CMakeLists.txt:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::setDefersLoading):
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        (WebKit::NetworkLoad::notifyDidReceiveResponse):
        (WebKit::NetworkLoad::didReceiveData):
        (WebKit::NetworkLoad::didCompleteWithError):
        (WebKit::NetworkLoad::initializeForRecord): Deleted.
        (WebKit::NetworkLoad::initializeForReplay): Deleted.
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::terminate):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/capture/NetworkCaptureEvent.cpp: Removed.
        * NetworkProcess/capture/NetworkCaptureEvent.h: Removed.
        * NetworkProcess/capture/NetworkCaptureLogging.h: Removed.
        * NetworkProcess/capture/NetworkCaptureManager.cpp: Removed.
        * NetworkProcess/capture/NetworkCaptureManager.h: Removed.
        * NetworkProcess/capture/NetworkCaptureRecorder.cpp: Removed.
        * NetworkProcess/capture/NetworkCaptureRecorder.h: Removed.
        * NetworkProcess/capture/NetworkCaptureReplayer.cpp: Removed.
        * NetworkProcess/capture/NetworkCaptureReplayer.h: Removed.
        * NetworkProcess/capture/NetworkCaptureResource.cpp: Removed.
        * NetworkProcess/capture/NetworkCaptureResource.h: Removed.
        * NetworkProcess/capture/NetworkDataTaskReplay.cpp: Removed.
        * NetworkProcess/capture/NetworkDataTaskReplay.h: Removed.
        * NetworkProcess/capture/json.hpp: Removed.
        * Sources.txt:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebKit.xcodeproj/project.pbxproj:
        * config.h:

2018-12-02  Zalan Bujtas  <zalan@apple.com>

        Add a runtime feature flag for LayoutFormattingContext.
        https://bugs.webkit.org/show_bug.cgi?id=192280

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-12-01  Chris Dumez  <cdumez@apple.com>

        [PSON] process-swapping may occur even though opener has handle to openee
        https://bugs.webkit.org/show_bug.cgi?id=192277

        Reviewed by Antti Koivisto.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/API/APINavigation.h:
        (API::Navigation::openedByDOMWithOpener const):
        (API::Navigation::openedViaWindowOpenWithOpener const): Deleted.
        (API::Navigation::opener const): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-12-01  Alexey Proskuryakov  <ap@apple.com>

        Modernize version check for _suppressedAutoAddedHTTPHeaders
        https://bugs.webkit.org/show_bug.cgi?id=192175

        Reviewed by Tim Horton.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        Also removed selector check - we only need to support running on 10.13.0 when building
        with 10.13.0 SDK.

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build.

        * UIProcess/API/C/curl/WKWebsiteDataStoreRefCurl.cpp:
        (WKWebsiteDataStoreEnableCustomNetworkProxySettings):

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Move URL from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=190234

        Reviewed by Keith Miller.

        * NetworkProcess/Cookies/WebCookieManager.cpp:
        * NetworkProcess/Cookies/WebCookieManager.h:
        * NetworkProcess/Cookies/WebCookieManager.messages.in:
        * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm:
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::publishDownloadProgress):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::publishProgress):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::publishProgress):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURLForSlice):
        (WebKit::NetworkBlobRegistry::unregisterBlobURL):
        (WebKit::NetworkBlobRegistry::blobSize):
        (WebKit::NetworkBlobRegistry::filesInBlob):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::didReceiveResponse):
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::setContentExtensionController):
        (WebKit::NetworkLoadChecker::url const):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::writeBlobToFilePath):
        (WebKit::NetworkProcess::publishDownloadProgress):
        (WebKit::NetworkProcess::preconnectTo):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::logBlockedCookieInformation):
        (WebKit::logCookieInformationInternal):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSocketStream.cpp:
        (WebKit::NetworkSocketStream::create):
        * NetworkProcess/NetworkSocketStream.h:
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::retrieveRecords):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCache.h:
        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::retrieveRecords):
        * NetworkProcess/cache/CacheStorageEngineConnection.h:
        * NetworkProcess/cache/CacheStorageEngineConnection.messages.in:
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::recordRetrievedCachedEntry):
        (WebKit::NetworkCache::Statistics::recordRevalidationSuccess):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::firstPartyForCookies const):
        * NetworkProcess/capture/NetworkCaptureEvent.cpp:
        (WebKit::NetworkCapture::Request::operator WebCore::ResourceRequest const):
        (WebKit::NetworkCapture::Response::operator WebCore::ResourceResponse const):
        (WebKit::NetworkCapture::Error::operator WebCore::ResourceError const):
        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        (WebKit::NetworkCapture::Manager::findBestFuzzyMatch):
        (WebKit::NetworkCapture::Manager::fuzzyMatchURLs):
        (WebKit::NetworkCapture::Manager::urlIdentifyingCommonDomain):
        * NetworkProcess/capture/NetworkCaptureManager.h:
        * NetworkProcess/capture/NetworkCaptureResource.cpp:
        (WebKit::NetworkCapture::Resource::url):
        (WebKit::NetworkCapture::Resource::queryParameters):
        * NetworkProcess/capture/NetworkCaptureResource.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::deleteHSTSCacheForHostNames):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::openCFURLRef):
        (WebKit::replacedNSWorkspace_launchApplicationAtURL_options_configuration_error):
        * Shared/API/APIURL.h:
        (API::URL::create):
        (API::URL::equals):
        (API::URL::URL):
        (API::URL::url const):
        (API::URL::parseURLIfNecessary const):
        * Shared/API/APIUserContentURLPattern.h:
        (API::UserContentURLPattern::matchesURL const):
        * Shared/API/c/WKURLRequest.cpp:
        * Shared/API/c/WKURLResponse.cpp:
        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCreateWithCFURL):
        (WKURLCopyCFURL):
        * Shared/API/glib/WebKitURIRequest.cpp:
        * Shared/API/glib/WebKitURIResponse.cpp:
        * Shared/APIWebArchiveResource.mm:
        (API::WebArchiveResource::WebArchiveResource):
        * Shared/AssistedNodeInformation.h:
        * Shared/Cocoa/WKNSURLExtras.mm:
        (-[NSURL _web_originalDataAsWTFString]):
        (): Deleted.
        * Shared/SessionState.h:
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::itemIsInSameDocument const):
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebErrors.h:
        * Shared/WebHitTestResultData.cpp:
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode):
        (IPC::decode):
        * Shared/gtk/WebErrorsGtk.cpp:
        * Shared/ios/InteractionInformationAtPosition.h:
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::appendRedirectionURL):
        * UIProcess/API/APINavigation.h:
        (API::Navigation::takeRedirectChain):
        * UIProcess/API/APINavigationAction.h:
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::signedPublicKeyAndChallengeString):
        (API::NavigationClient::contentRuleListNotification):
        (API::NavigationClient::webGLLoadPolicy const):
        (API::NavigationClient::resolveWebGLLoadPolicy const):
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::saveDataToFileInDownloadsFolder):
        * UIProcess/API/APIUserScript.cpp:
        (API::UserScript::generateUniqueURL):
        * UIProcess/API/APIUserScript.h:
        * UIProcess/API/APIUserStyleSheet.cpp:
        (API::UserStyleSheet::generateUniqueURL):
        * UIProcess/API/APIUserStyleSheet.h:
        * UIProcess/API/C/WKOpenPanelResultListener.cpp:
        (filePathsFromFileURLs):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadPlainTextStringWithUserData):
        (WKPageSetPageUIClient):
        (WKPageSetPageNavigationClient):
        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserStyleSheet):
        (WKPageGroupAddUserScript):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsPrevalentResourceForDebugMode):
        (WKWebsiteDataStoreSetStatisticsLastSeen):
        (WKWebsiteDataStoreSetStatisticsPrevalentResource):
        (WKWebsiteDataStoreSetStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubresourceUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubFrameUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsRedirectingTo):
        (WKWebsiteDataStoreSetStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreIsStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreSetStatisticsGrandfathered):
        (WKWebsiteDataStoreIsStatisticsGrandfathered):
        (WKWebsiteDataStoreSetStatisticsSubframeUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectFrom):
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:associatedURL:userContentWorld:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarning:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]):
        (-[WKWebViewConfiguration urlSchemeHandlerForURLScheme:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (-[_WKApplicationManifest initWithCoder:]):
        (+[_WKApplicationManifest applicationManifestFromJSON:manifestURL:documentURL:]):
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]):
        * UIProcess/API/glib/IconDatabase.cpp:
        * UIProcess/API/glib/WebKitCookieManager.cpp:
        (webkit_cookie_manager_get_cookies):
        * UIProcess/API/glib/WebKitFileChooserRequest.cpp:
        * UIProcess/API/glib/WebKitSecurityOrigin.cpp:
        (webkit_security_origin_new_for_uri):
        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_load_plain_text):
        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI):
        (WebKit::WebPaymentCoordinatorProxy::validateMerchant):
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKPaymentRequest):
        * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::navigateBrowsingContext):
        (WebKit::domainByAddingDotPrefixIfNeeded):
        (WebKit::WebAutomationSession::addSingleCookie):
        (WebKit::WebAutomationSession::deleteAllCookies):
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didFinish):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::webGLLoadPolicy const):
        (WebKit::NavigationState::NavigationClient::resolveWebGLLoadPolicy const):
        (WebKit::NavigationState::NavigationClient::contentRuleListNotification):
        (WebKit::NavigationState::NavigationClient::willPerformClientRedirect):
        (WebKit::NavigationState::NavigationClient::didPerformClientRedirect):
        (WebKit::NavigationState::NavigationClient::signedPublicKeyAndChallengeString):
        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm: Copied from Source/WebKit/WebProcess/Network/WebSocketProvider.h.
        (WebKit::SafeBrowsingResult::SafeBrowsingResult):
        * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm:
        (WebKit::reportAnErrorURL):
        (WebKit::malwareDetailsURL):
        (WebKit::safeBrowsingDetailsText):
        (WebKit::SafeBrowsingWarning::SafeBrowsingWarning):
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource finish:]):
        (WebKit::SystemPreviewController::finish):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        (WebKit::UIDelegate::UIClient::saveDataToFileInDownloadsFolder):
        (WebKit::requestUserMediaAuthorizationForDevices):
        (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin):
        * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm:
        (-[WKReloadFrameErrorRecoveryAttempter attemptRecovery]):
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingWarning:completionHandler:]):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showSafeBrowsingWarning):
        (WebKit::WebViewImpl::writeToURLForFilePromiseProvider):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::publishProgress):
        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit::DownloadProxy::setRedirectChain):
        (WebKit::DownloadProxy::redirectChain const):
        * UIProcess/FrameLoadState.cpp:
        (WebKit::FrameLoadState::didStartProvisionalLoad):
        (WebKit::FrameLoadState::didReceiveServerRedirectForProvisionalLoad):
        (WebKit::FrameLoadState::didSameDocumentNotification):
        (WebKit::FrameLoadState::setUnreachableURL):
        * UIProcess/FrameLoadState.h:
        (WebKit::FrameLoadState::url const):
        (WebKit::FrameLoadState::setURL):
        (WebKit::FrameLoadState::provisionalURL const):
        (WebKit::FrameLoadState::unreachableURL const):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::writeBlobToFilePath):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::showSafeBrowsingWarning):
        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::hasOnlySecureContent):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        * UIProcess/SafeBrowsingResult.h: Copied from Source/WebKit/UIProcess/SystemPreviewController.h.
        (WebKit::SafeBrowsingResult::create):
        (WebKit::SafeBrowsingResult::url const):
        (WebKit::SafeBrowsingResult::provider const):
        (WebKit::SafeBrowsingResult::isPhishing const):
        (WebKit::SafeBrowsingResult::isMalware const):
        (WebKit::SafeBrowsingResult::isUnwantedSoftware const):
        (WebKit::SafeBrowsingResult::isKnownToBeUnsafe const):
        * UIProcess/SafeBrowsingWarning.h:
        (WebKit::SafeBrowsingWarning::create):
        * UIProcess/SuspendedPageProxy.cpp:
        * UIProcess/SystemPreviewController.h:
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::url const):
        (WebKit::WebFrameProxy::provisionalURL const):
        (WebKit::WebFrameProxy::unreachableURL const):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebOpenPanelResultListenerProxy.cpp:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadDataWithNavigation):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::contentRuleListNotification):
        (WebKit::WebPageProxy::processDidTerminate):
        (WebKit::WebPageProxy::signedPublicKeyAndChallengeString):
        (WebKit::WebPageProxy::setURLSchemeHandlerForScheme):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::tryPrewarmWithDomainInformation):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResourceForDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/ios/DragDropInteractionState.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
        * UIProcess/ios/WKLegacyPDFView.mm:
        (-[WKLegacyPDFView actionSheetAssistant:shareElementWithURL:rect:]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView actionSheetAssistant:shareElementWithURL:rect:]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _updateLocationInfo]):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeLegacySessionState):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):
        * UIProcess/win/WebInspectorProxyWin.cpp:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::showPaymentUI):
        (WebKit::WebPaymentCoordinator::validateMerchant):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        (WebKit::WebCacheStorageConnection::doRetrieveRecords):
        * WebProcess/Cache/WebCacheStorageConnection.h:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::willLoadDataRequest):
        (API::InjectedBundle::PageLoaderClient::userAgentForURL const):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameAllowsFollowingLink):
        (WKBundleFrameCopySuggestedFilenameForResourceWithURL):
        (WKBundleFrameCopyMIMETypeForResourceWithURL):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageHasLocalDataForURL):
        * WebProcess/InjectedBundle/API/gtk/DOM/ConvertToUTF8String.cpp:
        (convertToUTF8String):
        * WebProcess/InjectedBundle/API/gtk/DOM/ConvertToUTF8String.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/Network/WebSocketProvider.h:
        * WebProcess/Network/WebSocketStream.cpp:
        (WebKit::WebSocketStream::WebSocketStream):
        * WebProcess/Network/WebSocketStream.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::clickedLink):
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performURLRequest):
        (WebKit::PluginView::performJavaScriptURLRequest):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::webVisiblePluginInfo):
        * WebProcess/Plugins/WebPluginInfoProvider.h:
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::signedPublicKeyAndChallengeString const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::shouldForceUniversalAccessFromLocalURL):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::readURLFromPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebPage/VisitedLinkTableController.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::allowsFollowingLink const):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLInFrame):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadAlternateHTML):
        (WebKit::WebPage::dumpHistoryForTesting):
        (WebKit::WebPage::sendCSPViolationReport):
        (WebKit::WebPage::addUserScript):
        (WebKit::WebPage::addUserStyleSheet):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::frameURL const):
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::sendPrewarmInformation):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::activePagesOrigins):

2018-11-30  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Add more logging of sandbox call entries.
        https://bugs.webkit.org/show_bug.cgi?id=192261
        rdar://problem/45772445

        Reviewed by Dean Jackson.

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

2018-11-30  Tim Horton  <timothy_horton@apple.com>

        Editable images should always return some data, even if the canvas doesn't have a size yet
        https://bugs.webkit.org/show_bug.cgi?id=192265
        <rdar://problem/46385911>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView layoutSubviews]):
        (emptyImage):
        (-[WKDrawingView renderedDrawing]):
        (-[WKDrawingView PNGRepresentation]):
        Some clients strongly depend on there being some data in an image, even if
        it's not of a usable size yet. We'll invalidate the attachment when the
        canvas size changes, so it will eventually settle at a usable size (after
        the first layer tree commit that includes the editable image).

2018-11-30  Don Olmstead  <don.olmstead@sony.com>

        Rename ENABLE_SUBTLE_CRYPTO to ENABLE_WEB_CRYPTO
        https://bugs.webkit.org/show_bug.cgi?id=192197

        Reviewed by Jiewen Tan.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2018-11-30  Alexey Proskuryakov  <ap@apple.com>

        Move USE_CFNETWORK_IGNORE_HSTS to its proper place
        https://bugs.webkit.org/show_bug.cgi?id=192173

        Reviewed by Tim Horton.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (updateIgnoreStrictTransportSecuritySettingIfNecessary):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Remove unused WebProcessCreationParameters.uiProcessCookieStorageIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=192157

        Reviewed by Chris Dumez.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Remove privateBrowsingEnabled from NetworkProcessCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=192156

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2018-11-30  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API for ProtectionSpace.
        https://bugs.webkit.org/show_bug.cgi?id=191648

        Reviewed by Alex Christensen.

        Added API to get certificate information from protection space.

        * PlatformWin.cmake:
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData):
        (IPC::ArgumentCoder<ProtectionSpace>::decodePlatformData):
        * UIProcess/API/C/curl/WKProtectionSpaceCurl.cpp: Added.
        (WKProtectionSpaceCopyCertificateInfo):
        * UIProcess/API/C/curl/WKProtectionSpaceCurl.h: Added.

2018-11-30  David Quesada  <david_quesada@apple.com>

        -[WKProcessPool _downloadURLRequest:] should allow specifying the initiating web view
        https://bugs.webkit.org/show_bug.cgi?id=192212
        rdar://problem/46363706

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _downloadURLRequest:originatingWebView:]):
        (-[WKProcessPool _downloadURLRequest:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

2018-11-30  Per Arne Vollan  <pvollan@apple.com>

        Remove invalid character in sandbox introduced in r238703.

        Unreviewed sandbox fix.

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

2018-11-30  Andy Estes  <aestes@apple.com>

        [Cocoa] Add some WKA extension points
        https://bugs.webkit.org/show_bug.cgi?id=192131
        <rdar://problem/46330293>

        Reviewed by Tim Horton.

        * DerivedSources.make: Added an extension point for WebPreferences.yaml.
        * Platform/IPC/MessageSender.h:
        (IPC::MessageSender::sendWithAsyncReply): Send async messages via IPC::MessageSender.
        * Platform/cocoa/WebKitAdditions.mm: A an extension point for additional WebKit sources.
        * SourcesCocoa.txt: Added WebKitAdditions.mm as non-unified source.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy): Called finishConstruction.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h: Added an extension point for
        WebPaymentCoordinatorProxy.
        * WebKit.xcodeproj/project.pbxproj: Added WebKitAdditions.mm.
        * WebProcess/ApplePay/WebPaymentCoordinator.h: Added an extension point for
        WebPaymentCoordinator.

2018-11-30  Frederic Wang  <fwang@igalia.com>

        [WebAuthN] Support CTAP HID authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=188623

        Unreviewed build fix.

        * UIProcess/WebAuthentication/Cocoa/HidConnection.mm: Add missing header.

2018-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r238635): Dragging a text selection within WKWebView causes the selection highlight to get into a bad state
        https://bugs.webkit.org/show_bug.cgi?id=192165
        <rdar://problem/46346682>

        Reviewed by Daniel Bates.

        Fixes a bug in PageClientImpl::isViewFocused. Consider the following scenario:
        1. WKWebView is hosted within the view hierarchy
        2. First responder is *not* WKContentView
        3. The active focus retain count is nonzero

        Before r238635, we would return true, due to condition (3). However, after r238635, we only consider whether the
        first responder is WKContentView, since the web view is in the view hierarchy. This breaks scenarios where
        WebKit or UIKit attempts to retain focus and later restore the content view to be the first responder (an
        example of this is dragging a text selection between editable elements in the same web view).

        To fix this, simply bail early and return true if focus is being retained.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewFocused):

2018-11-29  Tim Horton  <timothy_horton@apple.com>

        Inform clients when editable image attachment backing data changes
        https://bugs.webkit.org/show_bug.cgi?id=192206
        <rdar://problem/46350277>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::invalidateGeneratedFileWrapper):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didInvalidateDataForAttachment:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::didInvalidateDataForAttachment):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::didInvalidateDataForAttachment):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didInvalidateDataForAttachment):
        * UIProcess/WebPageProxy.h:
        Plumb file-wrapper-invalidation through from APIAttachment to WKUIDelegate.

2018-11-29  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] DeviceIdHashSaltStorage should use iframe and top level documents
        https://bugs.webkit.org/show_bug.cgi?id=192182

        Reviewed by Youenn Fablet.

        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::deviceIdHashSaltForOrigin): Key off of request and top 
        level documents.
        (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltForOrigins): Ditto.
        * UIProcess/DeviceIdHashSaltStorage.h:
        (WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin::HashSaltForOrigin):

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Pass both documents.
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Ditto.
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Ditto.

2018-11-29  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238713.

        Breaks internal builds.

        Reverted changeset:

        "[Cocoa] Add some WKA extension points"
        https://bugs.webkit.org/show_bug.cgi?id=192131
        https://trac.webkit.org/changeset/238713

2018-11-29  Simon Fraser  <simon.fraser@apple.com>

        Add an internal feature flag to enable async overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=192184

        Reviewed by Tim Horton.

        Add a new internal feature flag that will enable async overflow-scrolling for
        most overflow:scroll elements. Defaults to off.

        * Shared/WebPreferences.yaml:

2018-11-29  Andy Estes  <aestes@apple.com>

        [Cocoa] Add some WKA extension points
        https://bugs.webkit.org/show_bug.cgi?id=192131
        <rdar://problem/46330293>

        Reviewed by Tim Horton.

        * DerivedSources.make: Added an extension point for WebPreferences.yaml.
        * Platform/IPC/MessageSender.h:
        (IPC::MessageSender::sendWithAsyncReply): Send async messages via IPC::MessageSender.
        * Platform/cocoa/WebKitAdditions.mm: A an extension point for additional WebKit sources.
        * SourcesCocoa.txt: Added WebKitAdditions.mm as non-unified source.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy): Called finishConstruction.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h: Added an extension point for
        WebPaymentCoordinatorProxy.
        * WebKit.xcodeproj/project.pbxproj: Added WebKitAdditions.mm.
        * WebProcess/ApplePay/WebPaymentCoordinator.h: Added an extension point for
        WebPaymentCoordinator.

2018-11-29  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build.

        * Platform/spi/ios/PencilKitSPI.h:

2018-11-29  David Quesada  <david_quesada@apple.com>

        Add SPI to publish NSProgress on active downloads
        https://bugs.webkit.org/show_bug.cgi?id=192021
        rdar://problem/44405661

        Reviewed by Alex Christensen.

        Make it possible for clients to allow other processes to monitor the state of active
        downloads. On Cocoa platforms, this can be done by creating an NSProgress, publishing
        it on an appropriate file URL (potentially a different file URL than where the download
        data is being written), updating properties on it as the download makes progress, and
        wiring up a cancellation handler that allows it to be remotely canceled. Interested
        clients can then subscribe to progress on that URL and receive a proxy to the progress
        that WebKit publishes.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::~Download):
        (WebKit::Download::platformDestroyDownload):
            Add a platform-customizable hook for destructing the Download. DownloadCocoa.mm
            will interact with its Objective-C NSProgress instance at this point.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::dataTaskBecameDownloadTask):
            See comments for publishDownloadProgress().
        (WebKit::DownloadManager::publishDownloadProgress):
            If the provided downloadID corresponds to a non-Pending Download, hand the URL
            and a matching sandbox extension to the Download so it can create its progress.
            Otherwise, store the URL and sandbox extension on the PendingDownload to be used
            later when the full Download is created. When this happens, dataTaskBecameDownloadTask()
            will tell the PendingDownload about the Download it has become. The PendingDownload
            will then relay the progress URL and sandbox extension to the Download.

        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::publishProgress):
            Store the progress info for later use, when the proper Download is created.
        (WebKit::PendingDownload::didBecomeDownload):
            If there was a progress URL provided earlier, tell the Download corresponding to this
            PendingDownload to publish its progress using that URL.

        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::platformDestroyDownload):
            When the Download is destroyed (i.e. when the download succeeds, fails, or is canceled),
            unpublish the progress, since there is no longer any activity to report.
        (WebKit::Download::publishProgress):
            Resolve the sandbox extension, create a progress configured to reflect the progress of
            this Download's NSURLSessionDownloadTask, and publish it at the given file URL.

        * NetworkProcess/Downloads/cocoa/WKDownloadProgress.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKDownload.h.
        * NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm: Added.
        (-[WKDownloadProgress initWithDownloadTask:download:URL:sandboxExtension:]):
            Configure this progress, start observing properties on the download task that this
            progress will reflect, and connect the cancellation handler of the progress to cancel
            the corresponding Download.
        (-[WKDownloadProgress publish]):
        (-[WKDownloadProgress unpublish]):
            Override these methods to consume and revoke the sandbox extension to make sure the
            process has access to the progress file while the progress will be published.
        (-[WKDownloadProgress dealloc]):
        (-[WKDownloadProgress observeValueForKeyPath:ofObject:change:context:]):
            When either byte count (number received, or number expected to receive) of the download
            task changes, update this progress to reflect that.

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

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
            Allow looking up the services that manages published NSProgresses.

        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload publishProgressAtURL:]):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::publishProgress):
        * UIProcess/Downloads/DownloadProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-11-29  Tim Horton  <timothy_horton@apple.com>

        Make drawing tools available when an editable image is focused
        https://bugs.webkit.org/show_bug.cgi?id=192172
        <rdar://problem/30337960>

        Reviewed by Dean Jackson.

        * Platform/spi/ios/PencilKitSPI.h:
        Add some more SPI.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode const):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleStylusSingleTapAtPoint):
        (WebKit::isAssistableElement):
        (WebKit::WebPage::getAssistedNodeInformation):
        Plumb the assisted node's embedded view ID, if available.
        Also add a new input type for drawings, and use it when appropriate.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/_WKFocusedElementInfo.h:
        Add WKInputTypeDrawing.

        * UIProcess/ios/PencilKitSoftLink.h: Added.
        * UIProcess/ios/PencilKitSoftLink.mm: Added.
        Pull soft-linking out into its own file, to fix unified sources.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]):
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView requiresAccessoryView]):
        Install a keyboard when a drawing is focused.
        Also, deduplicate one "curretUserInterfaceIdiomIsPad"; just fall through.

        (-[WKContentView inputView]):
        Make a WKInkPickerControl when a drawing is focused.

        (-[WKContentView textInputTraits]):
        (isAssistableInputType):
        * UIProcess/ios/WKDrawingView.h:
        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]):
        (-[WKDrawingView PNGRepresentation]):
        (-[WKDrawingView loadDrawingFromPNGRepresentation:]):
        Adopt PencilKitSoftLink.

        (-[WKDrawingView canvasView]):
        Expose the internal canvas view for use by WKInkPickerControl.

        * UIProcess/ios/WKInkPickerControl.h: Copied from Source/WebKit/Platform/spi/ios/PencilKitSPI.h.
        * UIProcess/ios/WKInkPickerControl.mm: Added.
        (-[WKInkPickerView initWithFrame:drawingView:]):
        (-[WKInkPickerView didPickInk]):
        (-[WKInkPickerView inlineInkPickerDidToggleRuler:]):
        (-[WKInkPickerView inlineInkPicker:didSelectTool:]):
        (-[WKInkPickerView inlineInkPicker:didSelectColor:]):
        (-[WKInkPickerView inkPickerSize]):
        (-[WKInkPickerView layoutSubviews]):
        (-[WKInkPickerView sizeThatFits:]):
        (-[WKInkPickerView viewControllerForPopoverPresentationFromInlineInkPicker:]):
        (-[WKInkPickerControl initWithDrawingView:]):
        (-[WKInkPickerControl beginEditing]):
        (-[WKInkPickerControl endEditing]):
        (-[WKInkPickerControl assistantView]):
        Install and hook up a PKInlineInkPicker.
        Center it in the keyboard.
        Plumb changes through to the canvas view.

        * WebKit.xcodeproj/project.pbxproj:

2018-11-29  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Add logging for some sandbox entries.
        https://bugs.webkit.org/show_bug.cgi?id=192126

        Reviewed by Brent Fulgham.

        Add logging for sandbox entries which are possibly not needed.

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

2018-11-29  Alex Christensen  <achristensen@webkit.org>

        Fix _WKWebsiteDataStoreConfiguration. sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier SPI introduced in r235127
        https://bugs.webkit.org/show_bug.cgi?id=192191

        Reviewed by Andy Estes.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        When trying to adopt the new SPI and verify it worked, I found that the strings are not copied in one place where they should be.

2018-11-29  Megan Gardner  <megan_gardner@apple.com>

        Move Lookup Code for better cross platform usage
        https://bugs.webkit.org/show_bug.cgi?id=191732

        Reviewed by Alex Christensen.

        Lookup is being replaced by Reveal. This framework should work on all platforms.
        The patch moves the code that we expect will be needed for all platforms to the more
        general cocoa area. This patch changes no funcationality, and should not change
        anything currently. This work will be build on later when Reveal is ready to support
        multiple platforms.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _lookupGestureRecognized:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): Deleted.
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection):
        (WebKit::WebPage::performDictionaryLookupForRange):
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPage::performDictionaryLookupForSelection): Deleted.
        (WebKit::WebPage::performDictionaryLookupForRange): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPage::performDictionaryLookupForSelection): Deleted.
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): Deleted.
        (WebKit::WebPage::dictionaryPopupInfoForRange): Deleted.
        (WebKit::WebPage::performDictionaryLookupForRange): Deleted.

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        [ContentObservation] Decouple content change and DOM timer scheduling observation
        https://bugs.webkit.org/show_bug.cgi?id=192170

        Reviewed by Simon Fraser.

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

2018-11-29  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Tell AirPlay picker when a file has video
        https://bugs.webkit.org/show_bug.cgi?id=192155
        <rdar://problem/43843865>

        Reviewed by Jer Noble.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]):
        Add hasVideo parameter.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.h:
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker showFromView:routeSharingPolicy:routingContextUID:hasVideo:]): Add
        hasVideo parameter, pass info to MPMediaControlsViewController.
        (-[WKAirPlayRoutePicker showFromView:routeSharingPolicy:routingContextUID:]): Deleted.

2018-11-29  Alexey Proskuryakov  <ap@apple.com>

        Modernize the check for kCFURLRequestContentDecoderSkipURLCheck existence
        https://bugs.webkit.org/show_bug.cgi?id=192041

        Reviewed by Tim Horton.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):

2018-11-29  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238678.

        Breaks internal builds.

        Reverted changeset:

        "Move Lookup Code for better cross platform usage"
        https://bugs.webkit.org/show_bug.cgi?id=191732
        https://trac.webkit.org/changeset/238678

2018-11-29  Suresh Koppisetty  <skoppisetty@apple.com>

        Addressed a FIXME by removing an unnecessary call to [NSApplication sharedApplication].
        https://bugs.webkit.org/show_bug.cgi?id=192099

        Reviewed by Geoffrey Garen.

        [NSApplication sharedApplication] call is no longer needed in platformInitializeWebProcess as [NSApplication _accessibilityInitialize] calls [NSApplication sharedApplication].

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

2018-11-29  Megan Gardner  <megan_gardner@apple.com>

        Move Lookup Code for better cross platform usage
        https://bugs.webkit.org/show_bug.cgi?id=191732

        Reviewed by Alex Christensen.

        Lookup is being replaced by Reveal. This framework should work on all platforms.
        The patch moves the code that we expect will be needed for all platforms to the more
        general cocoa area. This patch changes no funcationality, and should not change
        anything currently. This work will be build on later when Reveal is ready to support
        multiple platforms.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _lookupGestureRecognized:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): Deleted.
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection):
        (WebKit::WebPage::performDictionaryLookupForRange):
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPage::performDictionaryLookupForSelection): Deleted.
        (WebKit::WebPage::performDictionaryLookupForRange): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPage::performDictionaryLookupForSelection): Deleted.
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): Deleted.
        (WebKit::WebPage::dictionaryPopupInfoForRange): Deleted.
        (WebKit::WebPage::performDictionaryLookupForRange): Deleted.

2018-11-29  Conrad Shultz  <conrad_shultz@apple.com>

        Factor out configuration of the file upload image picker
        https://bugs.webkit.org/show_bug.cgi?id=192138
        <rdar://problem/46334871>

        Reviewed by Tim Horton.

        By factoring configuration of the picker into its own method, it makes it easier
        to apply custom configuration in subclasses in the future.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]):
        (-[WKFileUploadPanel _configureImagePicker:]):

2018-11-29  Tomas Popela  <tpopela@redhat.com>

        [GTK][WPE] Fix BubblewrapLauncher clang warnings
        https://bugs.webkit.org/show_bug.cgi?id=192086

        Reviewed by Michael Catanzaro.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bindPathVar): Initialize the i variable to 0.
        (WebKit::setupSeccomp): Initialize the optional datum_b member.

2018-11-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION(?): all "Show *" develop menu items cause the page to crash
        https://bugs.webkit.org/show_bug.cgi?id=192016
        <rdar://problem/46284417>

        Reviewed by Devin Rousso.

        Previously calling the Page's inspectorController.show()
        would create a frontend connection on the WebProcess side.
        However now the frontend connection is handed to the WebProcess
        once the UIProcess creates it. So queue actions that take place
        immediately after showing the inspector until we have a frontend
        to send the actions to.

        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::setFrontendConnection):
        (WebKit::WebInspector::closeFrontendConnection):
        (WebKit::WebInspector::whenFrontendConnectionEstablished):
        (WebKit::WebInspector::showConsole):
        (WebKit::WebInspector::showResources):
        (WebKit::WebInspector::showTimelines):
        (WebKit::WebInspector::showMainResourceForFrame):
        (WebKit::WebInspector::startPageProfiling):
        (WebKit::WebInspector::stopPageProfiling):
        (WebKit::WebInspector::startElementSelection):
        (WebKit::WebInspector::stopElementSelection):

2018-11-28  Vivek Seth  <v_seth@apple.com>

        Consult dummy storage for HTTPS Upgrade, Apply If Appropriate
        https://bugs.webkit.org/show_bug.cgi?id=192094
        <rdar://problem/45851103> HTTPS Upgrade: Consult dummy storage for HTTPS Upgrade, Apply If Appropriate

        Reviewed by Chris Dumez.

        For main page loads upgrade HTTP requests to HTTPS if the hostname belongs to a set of upgradable hostnames.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded):
        (WebKit::NetworkLoadChecker::checkRequest):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):

2018-11-28  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r234980): Crash in -[WKWebView _restorePageStateToUnobscuredCenter:scale:]
        https://bugs.webkit.org/show_bug.cgi?id=192127
        rdar://problem/44194179

        Reviewed by Tim Horton.
        
        _restorePageStateToUnobscuredCenter: could receive an Optional<FloatRect> from the
        web process, and unconditionally called .value() even though it may not be engaged.
        
        No repro steps known, so no testcase.

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

2018-11-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r238653 and r238656.
        https://bugs.webkit.org/show_bug.cgi?id=192130

        Breaks iOS build (Requested by smfr on #webkit).

        Reverted changesets:

        "Move Lookup Code for better cross platform usage"
        https://bugs.webkit.org/show_bug.cgi?id=191732
        https://trac.webkit.org/changeset/238653

        "Attempt to fix the iOS build by only including RevealSPI.h
        when it's needed."
        https://trac.webkit.org/changeset/238656

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Modernize BlobRegistry::writeBlobsToTemporaryFiles
        https://bugs.webkit.org/show_bug.cgi?id=192117

        Reviewed by Dean Jackson.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::writeBlobsToTemporaryFiles):
        (WebKit::NetworkBlobRegistry::writeBlobToFilePath):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::writeBlobToFilePath):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::sendWithAsyncReply):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::writeBlobToFilePath):
        (WebKit::NetworkProcessProxy::didWriteBlobToFilePath): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles):
        (WebKit::NetworkProcessConnection::didWriteBlobsToTemporaryFiles): Deleted.
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Move loadThrottleLatency from NetworkProcessCreationParameters to NetworkSessionCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=192122

        Reviewed by Dean Jackson.

        This is part of an effort to reduce global variables in the NetworkProcess.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::didReceiveResponse):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::loadThrottleLatency const): Deleted.
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::loadThrottleLatency const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp: Added.
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        (WebKit::NetworkSessionCreationParameters::encode const): Deleted.
        (WebKit::NetworkSessionCreationParameters::decode): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * Sources.txt:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * WebKit.xcodeproj/project.pbxproj:

2018-11-15  Megan Gardner  <megan_gardner@apple.com>

        Move Lookup Code for better cross platform usage
        https://bugs.webkit.org/show_bug.cgi?id=191732

        Reviewed by Alex Christensen.

        Lookup is being replaced by Reveal. This framework should work on all platforms.
        The patch moves the code that we expect will be needed for all platforms to the more
        general cocoa area. This patch changes no funcationality, and should not change
        anything currently. This work will be build on later when Reveal is ready to support
        multiple platforms.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _lookupGestureRecognized:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): Deleted.
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection):
        (WebKit::WebPage::performDictionaryLookupForRange):
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPage::performDictionaryLookupForSelection): Deleted.
        (WebKit::WebPage::performDictionaryLookupForRange): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPage::performDictionaryLookupForSelection): Deleted.
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): Deleted.
        (WebKit::WebPage::dictionaryPopupInfoForRange): Deleted.
        (WebKit::WebPage::performDictionaryLookupForRange): Deleted.

2018-11-28  Keith Rollin  <krollin@apple.com>

        Update generate-{derived,unified}-sources scripts to support generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192031
        <rdar://problem/46286816>

        Reviewed by Alex Christensen.

        The Generate Derived Sources and Generate Unified Sources build phases
        in Xcode need to have their inputs and outputs specified. This
        specification will come in the form of .xcfilelist files that will be
        attached to these build phases. There is one .xcfilelist file that
        lists the input file and one that lists the output files. As part of
        this work, the various generate-{derived,unified}-sources scripts that
        are executed in these Generate build phases are modified to help in
        the creation of these .xcfilelist files. In particular, they can now
        be invoked with command-line parameters. These parameters are then
        used to alter the normal execution of these scripts, causing them to
        produce the .xcfilelist files as opposed to actually generating the
        files that are listed in those files.

        * Scripts/generate-derived-sources.sh:
        * Scripts/generate-unified-sources.sh:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Revert print_all_generated_files work in r238008; tighten up target specifications
        https://bugs.webkit.org/show_bug.cgi?id=192025
        <rdar://problem/46284301>

        Reviewed by Alex Christensen.

        In r238008, I added a facility for DerivedSources.make makefiles to
        print out the list of files that they generate. This output was used
        in the generation of .xcfilelist files used to specify the output of
        the associated Generate Derived Sources build phases in Xcode. This
        approach worked, but it meant that people would need to follow a
        specific convention to keep this mechanism working.

        Instead of continuing this approach, I'm going to implement a new
        facility based on the output of `make` when passed the -d flag (which
        prints dependency information). This new mechanism is completely
        automatic and doesn't need maintainers to follow a convention. To that
        end, remove most of the work performed in r238008 that supports the
        print_all_generated_files target.

        At the same time, it's important for the sets of targets and their
        dependencies to be complete and correct. Therefore, also include
        changes to bring those up-to-date. As part of that, you'll see
        prevalent use of a particular technique. Here's an example:

            BYTECODE_FILES = \
                Bytecodes.h \
                BytecodeIndices.h \
                BytecodeStructs.h \
                InitBytecodes.asm \
            #
            BYTECODE_FILES_PATTERNS = $(subst .,%,$(BYTECODE_FILES))

            all : $(BYTECODE_FILES)

            $(BYTECODE_FILES_PATTERNS): $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb
                ...

        These lines indicate a set of generated files (those specified in
        BYTECODE_FILES). These files are generated by the BytecodeList.rb
        tool. But, as opposed to the normal rule where a single foo.output is
        generated by foo.input plus some additional dependencies, this rule
        produces multiple output files from a tool whose connection to the
        output files is not immediately clear. A special approach is needed
        where a single rule produces multiple output files. The normal way to
        implement this is to use an .INTERMEDIATE target. However, we used
        this approach in the past and ran into a problem with it, addressing
        it with an alternate approach in r210507. The above example shows this
        approach. The .'s in the list of target files are replaced with %'s,
        and the result is used as the left side of the dependency rule.

        * DerivedSources.make:

2018-11-28  Daniel Bates  <dabates@apple.com>

        [iOS] Page not defocused when Find-in-page becomes first responder
        https://bugs.webkit.org/show_bug.cgi?id=192084
        <rdar://problem/46146777>

        Reviewed by Tim Horton.

        When -becomeFirstResponder and -resignFirstResponder is called the page should become focused
        and defocused, respectively. WebKit adjusts it behavior depending on whether it knows it has
        focus. This includes decisions about whether to allow an element to be focused. We need to
        ensure that WebKit knows whether the web view is focused for it to make good decisions.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewFocused): Check if the content view is the first responder and
        hence is accepting keyboard input. Note that picture-in-picture views do not accept keyboard
        input.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView becomeFirstResponderForWebView]): Update activity state when the view
        becomes focused.
        (-[WKContentView resignFirstResponderForWebView]): Update activity state when the view
        becomes defocused.

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Remove dead code from an earlier attempt at implementing safe browsing
        https://bugs.webkit.org/show_bug.cgi?id=192067

        Reviewed by Chris Dumez.

        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Move logCookieInformation bool from NetworkProcess to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=192049

        Reviewed by Chris Dumez.

        Part of an effort to remove globals in the NetworkProcess.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::shouldLogCookieInformation const): Deleted.
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        (WebKit::NetworkResourceLoader::shouldLogCookieInformation):
        (WebKit::NetworkResourceLoader::logCookieInformation const):
        (WebKit::logBlockedCookieInformation):
        (WebKit::logCookieInformationInternal):
        (WebKit::NetworkResourceLoader::logCookieInformation):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::logCookieInformation const):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

2018-11-28  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238620.

        Broke internal builds again.

        Reverted changeset:

        "Remove @no-unify of InjectedBundleRangeHandle.cpp and
        InjectedBundleNodeHandle.cpp"
        https://bugs.webkit.org/show_bug.cgi?id=191853
        https://trac.webkit.org/changeset/238620

2018-11-28  Yongjun Zhang  <yongjun_zhang@apple.com>

        Allow WebKit clients to specify a minimum effective width for layout.
        https://bugs.webkit.org/show_bug.cgi?id=191499
        <rdar://problem/45362678>

        Reviewed by Wenson Hsieh.

        If we ignore the meta viewport (_shouldIgnoreMetaViewport is true), the default layout width will be device
        width. For clients that wish to lay out the content with a different width value, we would need to add a way
        to specify the effective width for layout.

        * UIProcess/API/Cocoa/WKWebView.mm: Add an iVar _minimumEffectiveDeviceWidth.
        (-[WKWebView _dispatchSetViewLayoutSize:]): Call the new setViewportConfigurationViewLayoutSize method.
        (-[WKWebView _setViewScale:]): Ditto.
        (-[WKWebView _setMinimumEffectiveWidth:]): The setter for _minimumEffectiveDeviceWidth.
        (-[WKWebView _minimumEffectiveWidth]): Getter for _minimumEffectiveDeviceWidth
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Add a property _minimumEffectiveDeviceWidth to WKWebView.
        * UIProcess/WebPageProxy.h: Change setViewportConfigurationViewLayoutSize to take another argument minimumEffectiveDeviceWidth.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize): Also send effectiveWidth to WebContent process.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Set the initial effective width to 0 when creating a web page, this tells ViewportConfiguration
             to ignore the minimum effective width value.
        * WebProcess/WebPage/WebPage.h: Change setViewportConfigurationViewLayoutSize to take another argument effectiveWidth.
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setViewportConfigurationViewLayoutSize): Also pass effectiveWidth value to ViewportConfiguration.

2018-11-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove @no-unify of InjectedBundleRangeHandle.cpp and InjectedBundleNodeHandle.cpp
        https://bugs.webkit.org/show_bug.cgi?id=191853

        Reviewed by Michael Catanzaro.

        In r235845, I excluded InjectedBundleRangeHandle.cpp and
        InjectedBundleNodeHandle.cpp from unify source builds in order to
        work around a MSVC bug.

        Then, I commited a different workaround for the MSVC bug in
        r238386. Now, we can include InjectedBundleRangeHandle.cpp and
        InjectedBundleNodeHandle.cpp in unified source builds. Revert
        r235845.

        * Sources.txt: Removed @no-unify of InjectedBundleRangeHandle.cpp
        and InjectedBundleNodeHandle.cpp
        * WebKit.xcodeproj/project.pbxproj: Unchecked Target Membership
        not to be compiled by XCode.

2018-11-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION(r238378): reloading WebInspector after a settings change doesn't re-show WebInspector
        https://bugs.webkit.org/show_bug.cgi?id=191971

        Reviewed by Matt Baker.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::reopen): Deleted.
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:
        Move reopen out of the WebProcess...

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::reopen):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        And into the UIProcess where the order of messages won't
        be as problematic.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::reopen):
        Send a message to the WebInspectorProxy instead.

2018-11-28  Alexey Proskuryakov  <ap@apple.com>

        Remove another OS version check from NetworkDataTaskCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=192046

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::statelessCookieStorage):

2018-11-28  Alexey Proskuryakov  <ap@apple.com>

        Modernize version checks for same site cookie support
        https://bugs.webkit.org/show_bug.cgi?id=192054

        Reviewed by Tim Horton.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: (WebKit::updateTaskWithFirstPartyForSameSiteCookies):
        Also removed runtime checks, which are no longer relevant.

2018-11-27  Mark Lam  <mark.lam@apple.com>

        ENABLE_FAST_JIT_PERMISSIONS should be false for iosmac.
        https://bugs.webkit.org/show_bug.cgi?id=192055
        <rdar://problem/46288783>

        Reviewed by Saam Barati.

        * Configurations/FeatureDefines.xcconfig:

2018-11-27  Alex Christensen  <achristensen@webkit.org>

        Make synchronous IPC introduced in r237267 asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=190757

        Reviewed by Chris Dumez.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _getActivePagesOriginsInWebProcessForTesting:completionHandler:]):
        (-[WKProcessPool _getActivePagesOriginsInWebProcessForTesting:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::activePagesOriginsInWebProcessForTesting):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::activePagesDomainsForTesting):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getActivePagesOriginsForTesting):
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::getActivePagesOriginsForTesting):

2018-11-27  Alex Christensen  <achristensen@webkit.org>

        Safe browsing warning text needs to be visible on High Sierra
        https://bugs.webkit.org/show_bug.cgi?id=192022

        Reviewed by Tim Horton.

        Something about AppKit, autolayout, view insertion order, and NSTextView makes the text lay
        out with initial size of {0, 0} on High Sierra. Using an NSTextField instead makes the details visible.

        Covered by an API test.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (makeLabel):
        (-[WKSafeBrowsingWarning addContent]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):
        (-[WKSafeBrowsingWarning layoutText]):
        (makeTitleLabel): Deleted.

2018-11-27  Tim Horton  <timothy_horton@apple.com>

        WKNavigation.AutomaticViewReloadAfterWebProcessCrash asserts after r238538
        https://bugs.webkit.org/show_bug.cgi?id=192038
        <rdar://problem/46288457>

        Reviewed by Wenson Hsieh.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::resetState):
        (WebKit::m_editableImageController): Deleted.
        Properly invalidate m_editableImageController when resetting WebPageProxy.
        Otherwise, the MessageReceiverMaps get invalidated, then later when
        EditableImageController goes away we assert trying to remove the receiver.

2018-11-27  Jiewen Tan  <jiewen_tan@apple.com>

        (r238246) [ MacOS Debug ] Layout Test http/wpt/webauthn/ctap-hid-failure.https.html is Crashing
        https://bugs.webkit.org/show_bug.cgi?id=191757

        Reviewed by Chris Dumez.

        Wrong nonce error causes retransmission, which then trigger wrong nonce error. This is expected
        behavior for mock testing. However, the main thread could time out when MockHidConnection::send
        is excuting the block on another thread. The block will then return without invoking the callback,
        which triggers this WTFCrash. The solution is always invoking the callback before return in the
        block.

        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::send):

2018-11-27  Keith Rollin  <krollin@apple.com>

        Better parsing of comments in generate-message*.py
        https://bugs.webkit.org/show_bug.cgi?id=191866
        <rdar://problem/46189563>

        Reviewed by Chris Dumez.

        The script parsing the *.messages.in files would treat a line starting
        with '#' as a comment, but not a line starting with '<whitespace>#'.
        This means that jamming a '#' right in front of the first character of
        a message definition (as opposed to the beginning of a line) will have
        no effect and the line will get treated just the same as a
        non-commented line. Fix this by trimming all white space from the
        beginning and ending of the line before processing it.

        * Scripts/webkit/parser.py:
        (parse):
        * Scripts/webkit/test-messages.in:

2018-11-27  Thibault Saunier  <tsaunier@igalia.com>

        [GTK|WPE] Allow disabling WebRTC unified plan SDP through an env var
        https://bugs.webkit.org/show_bug.cgi?id=192024

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsConstructed):

2018-11-27  Alexey Proskuryakov  <ap@apple.com>

        Modernize the check for async _saveCookies existence
        https://bugs.webkit.org/show_bug.cgi?id=191987

        Reviewed by Dean Jackson.

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

2018-11-27  Tim Horton  <timothy_horton@apple.com>

        Serialize and deserialize editable image strokes
        https://bugs.webkit.org/show_bug.cgi?id=192002
        <rdar://problem/30900149>

        Reviewed by Dean Jackson.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::updateAttributes):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willUpdateAttachmentAttributes):
        * UIProcess/WebPageProxy.h:
        When an attachment would update its DOM attributes, plumb a notification
        to EditableImageController, and allow it to block the update (because
        we don't really want to set src for editable image attachments,
        we just want the UI process to fully own the data).

        * Platform/spi/ios/PencilKitSPI.h:
        Add some SPI.

        * UIProcess/ios/EditableImageController.h:
        * UIProcess/ios/EditableImageController.mm:
        (WebKit::EditableImageController::loadStrokesFromAttachment):
        Add a helper to load strokes from an attachment.

        (WebKit::EditableImageController::associateWithAttachment):
        Try to load strokes from the attachment when initially associated.
        Don't create a file wrapper around a null image, so it will be regenerated later.

        (WebKit::EditableImageController::willUpdateAttachmentAttributes):
        The aforementioned plumbing at update time.

        * UIProcess/ios/WKDrawingView.h:
        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView layoutSubviews]):
        Invalidate the attachment (so it will be regenerated upon request) if the
        canvas size changes.

        (-[WKDrawingView PNGRepresentation]):
        Serialize strokes into the EXIF User Comment field.
        We will find a different field to use (ideally a custom vendor-specific
        field that nobody else will use for anything), but this works for now.

        Don't try to render an image if we don't have a size or scale;
        PKImageRenderer will just fail anyway, so bail early.

        In the iOS Simulator, PKImageRenderer currently returns an unusable image.
        Instead, so that we have a image on which to serialize the strokes,
        create a transparent 1x1 image. This makes it possible to serialize strokes
        even though we don't have a usable rendered image, so that we can still test
        this change (and future changes).

        (-[WKDrawingView loadDrawingFromPNGRepresentation:]):
        If available, deserialize strokes from the EXIF User Comment field.

        (-[WKDrawingView drawingDidChange:]):
        (-[WKDrawingView invalidateAttachment]):
        Factor invalidateAttachment out of drawingDidChange so we can call
        it from layoutSubviews too!

2018-11-27  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) crash under WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame()
        https://bugs.webkit.org/show_bug.cgi?id=191983
        <rdar://problem/46246863>

        Reviewed by Geoffrey Garen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        Make sure the navigation still exists in m_mainFrameCreationHandler and return early if it
        does not.

        (WebKit::WebPageProxy::resetState):
        Clear out m_mainFrameCreationHandler / m_mainFrameWindowCreationHandler if we resetting the state
        after a crash. At this point, there is no chance the WebProcess will send us the IPC that will
        cause these to get called and we do not want old state to remain for future navigations.

2018-11-16  Jiewen Tan  <jiewen_tan@apple.com>

        Disallow loading webarchives as iframes
        https://bugs.webkit.org/show_bug.cgi?id=191728
        <rdar://problem/45524528>

        Reviewed by Youenn Fablet.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::unableToImplementPolicy):
        Add a check to prevent null pointer dereference.

2018-11-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebKit.AddAndRemoveDataDetectors hits a debug assertion after r238515
        https://bugs.webkit.org/show_bug.cgi?id=191996

        Reviewed by Tim Horton.

        This assertion is hit because `decode(Decoder& decoder, NSArray<Class> *allowedClasses)` expects the decoded
        object (of class `_NSArrayM`) to be equal to `NSArray.class`.

        We fix the crash by relaxing the debug assertion when decoding securely-codable objects over IPC. Instead of
        checking that the class of the decoded object is equal to one of the allowed classes, check that the object is a
        kind of any of the allowed classes.

        * Shared/Cocoa/ArgumentCodersCocoa.h:
        (IPC::isObjectClassAllowed):
        (IPC::decode):

2018-11-27  Tomas Popela  <tpopela@redhat.com>

        [GTK][WPE] Remove temporary workaround in Source/WebKit/Platform*.cmake
        https://bugs.webkit.org/show_bug.cgi?id=192008

        Reviewed by Michael Catanzaro.

        Looks like it's not needed anymore as the code compiles fine without
        it.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

2018-11-27  Antti Koivisto  <antti@apple.com>

        Factor mask layer applying in RemoteLayerTreePropertyApplier into a shared function
        https://bugs.webkit.org/show_bug.cgi?id=192001

        Reviewed by Tim Horton.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        (WebKit::RemoteLayerTreePropertyApplier::updateMask):

        Shared function, with some special tricks for iOS backdrop layers.

        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToUIView):

2018-11-27  Antti Koivisto  <antti@apple.com>

        Stop collecting related layers in RemoteLayerTreeHost::updateLayerTree
        https://bugs.webkit.org/show_bug.cgi?id=192003

        Reviewed by Tim Horton.

        We can pass the node hash directly to RemoteLayerTreePropertyApplier. The collection step doesn't seem
        to add anything except an extra hash lookup.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):

        Pass m_nodes directly.
        Some random cleanups.

2018-11-27  Antti Koivisto  <antti@apple.com>

        Remote tile layers shouldn't be UIViews
        https://bugs.webkit.org/show_bug.cgi?id=191953

        Reviewed by Tim Horton.

        They don't need any UIView functionality, nor do they ever have UIView descendants.
        We can use lighter weight objects.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        (WebKit::RemoteLayerTreePropertyApplier::updateChildren):

        Factor to a function shared between platforms.
        Support having both views and plain layers in the same tree.
        Assert that all siblings are of the same type and that we don't attempt to add views to layers.

        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToUIView):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):

        Use new plain layer on Mac too.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (-[WKPlainRemoteLayer description]):

        Add a CALayer subclass so we can have a description, similar to WKCompositingView and pals.

        (WebKit::RemoteLayerTreeNode::createWithPlainLayer):
        (WebKit::RemoteLayerTreeNode::detachFromParent):

        Support having null view.

        (WebKit::RemoteLayerTreeNode::appendLayerDescription):

        Helper for layer descriptions.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):

        Construct plain layers for tiles.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (-[WKCompositingView description]):
        (-[WKUIRemoteView description]):
        (-[WKBackdropView description]):

2018-11-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove "using namespace WebCore" under Source/WebKit/WebProcess/InjectedBundle/API
        https://bugs.webkit.org/show_bug.cgi?id=191995

        Reviewed by Alex Christensen.

        The statement "using namespace WebCore" should be placed inside
        namespace WebKit for unified source builds. But, source files
        defining WebKit API can't be enclosed by namespace WebKit { }
        becuase they are defined in the global scope.

        "using namespace WebCore" in global scope and unified source
        builds may cause build breaks (Bug 191853).

        Remove "using namespace WebCore" in the global scope. Use
        "WebCore::" prefix instead.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleClearAllDatabases):
        (WKBundleSetDatabaseQuota):
        (WKBundleClearResourceLoadStatistics):
        (WKBundleResourceLoadStatisticsNotifyObserver):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetFrameLoadState):
        (WKBundleFrameClearOpener):
        (WKBundleFrameCallShouldCloseOnWebView):
        (WKBundleFrameCopySecurityOrigin):
        (WKBundleFrameFocus):
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:

2018-11-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] No way for clients to tell whether the content view is in the responder chain when the web view is
        https://bugs.webkit.org/show_bug.cgi?id=169212
        <rdar://problem/30899656>

        Reviewed by Tim Horton.

        Add an SPI hook to allow internal WKWebView clients to determine whether the WKWebView's content view is the
        first responder. Intended for use by clients, such as Mail, that embed native text input views and other views
        that may become first responder within the view hierarchy of the WKWebView.

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

2018-11-26  Tim Horton  <timothy_horton@apple.com>

        Insert <attachment> elements under editable images to make their backing data accessible
        https://bugs.webkit.org/show_bug.cgi?id=191844
        <rdar://problem/30900149>

        Reviewed by Simon Fraser.

        * DerivedSources.make:
        * SourcesCocoa.txt:
        * UIProcess/API/APIAttachment.h:
        fileWrapper() is no longer a trivial getter; it can now construct
        the file wrapper from a file wrapper generator if necessary.

        Add setFileWrapperGenerator() and invalidateGeneratedFileWrapper().

        Make m_fileWrapper mutable so it can be adjusted inside its own getter.

        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::fileWrapper const):
        If we have a fileWrapperGenerator and don't have a cached file wrapper,
        create one before returning it.

        (API::Attachment::invalidateGeneratedFileWrapper):
        Invalidate the currently-cached file wrapper. The next time a client
        requests the file wrapper it will be regenerated.

        (API::Attachment::fileName const):
        (API::Attachment::fileSizeForDisplay const):
        (API::Attachment::enclosingImageData const):
        (API::Attachment::isEmpty const):
        (API::Attachment::createSerializedRepresentation const):
        Make use of fileWrapper() instead of m_fileWrapper directly, to ensure
        that it is created lazily if necessary.

        (API::Attachment::setFileWrapperGenerator):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createEmbeddedView):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (-[WKEmbeddedView initWithEmbeddedViewID:]):
        Defer to EditableImageController for creating WKDrawingViews for
        editable images. This is done primarily so we don't have to pollute
        Remote Layer Tree and DrawingArea interfaces with editable-image-specific messages.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_editableImageController):
        (WebKit::m_resetRecentCrashCountTimer): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::editableImageController):
        Keep an EditableImageController on the WebPageProxy.

        * UIProcess/ios/EditableImageController.h: Added.
        * UIProcess/ios/EditableImageController.messages.in: Added.
        * UIProcess/ios/EditableImageController.mm: Added.
        (WebKit::EditableImageController::EditableImageController):
        (WebKit::EditableImageController::~EditableImageController):
        (WebKit::EditableImageController::ensureEditableImage):
        (WebKit::EditableImageController::editableImage):
        (WebKit::EditableImageController::didCreateEditableImage):
        (WebKit::EditableImageController::didDestroyEditableImage):
        (WebKit::EditableImageController::associateWithAttachment):
        (WebKit::EditableImageController::invalidateAttachmentForEditableImage):
        Add EditableImageController, which keeps track of EditableImages.
        It can be messaged directly to create or destroy the UI-side state
        of an editable image, and also to associate a WKDrawingView with
        a particular attachment.

        * UIProcess/ios/WKDrawingView.h:
        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]):
        Store the WebPageProxy (weakly) so that we can get to the EditableImageController.

        (-[WKDrawingView layoutSubviews]):
        (-[WKDrawingView PNGRepresentation]):
        Synchronously render the PKCanvasView to PNG.

        (-[WKDrawingView drawingDidChange:]):
        If the drawing changes, inform the APIAttachment that it needs
        to discard its NSFileWrapper; a new one will be generated lazily.

        (-[WKDrawingView init]): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::associateEditableImageWithAttachment):
        (WebKit::WebChromeClient::didCreateEditableImage):
        (WebKit::WebChromeClient::didDestroyEditableImage):

2018-11-26  Jer Noble  <jer.noble@apple.com>

        Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI
        https://bugs.webkit.org/show_bug.cgi?id=190951
        <rdar://problem/45213065>

        Reviewed by Alex Christensen.

        Add an asyncronous reply request to VideoFullscreenManager.

        * Platform/IPC/MessageSender.h:
        (IPC::MessageSender::sendWithAsyncReply):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::requestRouteSharingPolicyAndContextUID):
        * WebProcess/cocoa/VideoFullscreenManager.h:
        * WebProcess/cocoa/VideoFullscreenManager.messages.in:
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::requestRouteSharingPolicyAndContextUID):

2018-11-26  Alex Christensen  <achristensen@webkit.org>

        Rename WKWebView._safeBrowsingWarningForTesting to _safeBrowsingWarning to use it for more than testing
        https://bugs.webkit.org/show_bug.cgi?id=191981

        Reviewed by Tim Horton.

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

2018-11-26  Daniel Bates  <dabates@apple.com>

        REGRESSION (r237738): Command Down Arrow doesn't scroll to the end of a page anymore
        https://bugs.webkit.org/show_bug.cgi?id=191967
        <rdar://problem/45976390>

        Reviewed by Tim Horton.

        Fixes an issue where pressing Command + Down Arrow does not scroll the view to the end of the page.

        Following r237738 the value of the enumerations used to identify modifier keys (e.g. Shift) changed
        to match the values of the corresponding enumerations in GraphicsServices, which are the
        enumerations UIKit uses to computes the modifier flags bitmask when instantiating a WebEvent to
        pass to WebKit. Before r237738 WebKit was using enumerations whose values matched the values
        of the corresponding UIKit public API UIKeyModifier* enumerations. For non-content editable elements,
        WebKit intercepts UIKit events in -_handleKeyUIEvent, synthesizes and dispatches its own WebEvent.
        However it was creating WebEvents with a modifier flags bitmask built from the UIKeyModifier* enumerations,
        -_modifierFlags, as opposed to a bitmask from the GraphicsServices enumerations, -_gsModifierFlags.
        Instead WebKit should call -_gsModifierFlags to compute the GraphicsServices-compatible modifier
        flags bitmask when instantiating a WebEvent.

        * Platform/spi/ios/UIKitSPI.h: Expose -_gsModifierFlags and remove -_modifierFlags.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleKeyUIEvent:]): Remove unnecessary code to update the current modifier state.
        This will be done by the WebProcess when it receives the keyboard event.
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]): Do not pass modifier flags changed events
        to the scrolling animator as it does not know how to handle these kinds of events and triggers an
        assertion failure when it tries to read the input string from the event (calls -charactersIgnoringModifiers).
        FlagsChanged WebEvents events do not have an input string just like a FlagsChanged NSEvent that
        they model on Mac.
        * UIProcess/ios/WKWebEvent.mm:
        (-[WKWebEvent initWithEvent:]): Pass the value of -_gsModifierFlags for the modifier flags bitmask
        instead of the value of -_modifierFlags.

2018-11-26  Chris Dumez  <cdumez@apple.com>

        [PSON] process pre-warming should not be on for everyone
        https://bugs.webkit.org/show_bug.cgi?id=191966
        <rdar://problem/46138499>

        Reviewed by Ryosuke Niwa.

        If automatic process-prewarming is not explicitly turned on/off by the client, then we now only
        turn it on automatically after the first process swap. Previously, it was always enabled if
        process-swap on cross-site navigation was enabled (which is the case by default for all apps).

        This is important because some apps do not actually browse (only display static content) or never
        browse cross-site, and thus would not benefit from process prewarming and yet pay a memory cost.

        * UIProcess/API/APIProcessPoolConfiguration.h:
        Add m_clientWouldBenefitFromAutomaticProcessPrewarming flag which is false by default and is used
        as a fallback if the client did not call setIsAutomaticProcessWarmingEnabled().

        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationPrewarmsProcessesAutomatically):
        (WKContextConfigurationSetPrewarmsProcessesAutomatically):
        Add C API to toggle automatic process prewarming. It is needed for Safari to turn on this feature
        by default for browsing. This way Safari does not have to wait for the first process swap to
        start prewarming.

        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        Only do automatic process prewarming if process-swap on cross-site navigation is also enabled.
        This is needed for clients like Safari that explicitly enable automatic process prewarming but
        only want to have it enabled if PSON is also enabled via experimental features.

        (WebKit::WebProcessPool::processForNavigation):
        On first process swap, if the client did not explicitly turn on or off automatic process prewarming
        then we enable it then. This avoids paying the cost of process prewarming in apps that would not
        benefit from it.

2018-11-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Make it easier to encode NSObjects
        https://bugs.webkit.org/show_bug.cgi?id=191948

        Reviewed by Dean Jackson.

        It should be easier to encode objects that conform to NSSecureCoding for WebKit IPC. Right
        now, several argument coders duplicate the logic for encoding and decoding objects using
        NSKeyedArchiver and NSKeyedUnarchiver.

        This patch adds encodeObject() and decodeObject() primitives for encoding and decoding using
        Foundation keyed archiving. It then partially specializes ArgumentCoder for raw pointers and
        RetainPtrs whose pointee conforms to NSSecureCoding to call these new primitives.

        This allows us to use Encoder::operator<< to encode raw pointers or RetainPtrs and use
        Decoder::operator>> to decode to an optional RetainPtr. By default, IPC::decode infers the
        allowed class for decoding by calling `[T class]`. We can also specify the allowed classes
        explicitly for containers and classes that are loaded at runtime.

        * Shared/Cocoa/ArgumentCodersCocoa.h: Added.
        * Shared/Cocoa/ArgumentCodersCocoa.mm: Added.
        * Shared/Cocoa/DataDetectionResult.mm:
        (WebKit::DataDetectionResult::encode const): Removed custom encoding code and used ArgumentCodersCocoa instead.
        (WebKit::DataDetectionResult::decode): Ditto.
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::Payment>::encode): Ditto.
        (IPC::ArgumentCoder<WebCore::Payment>::decode): Ditto.
        (IPC::ArgumentCoder<WebCore::PaymentAuthorizationResult>::decode): Ditto.
        (IPC::ArgumentCoder<WebCore::PaymentContact>::encode): Ditto.
        (IPC::ArgumentCoder<WebCore::PaymentContact>::decode): Ditto.
        (IPC::ArgumentCoder<WebCore::PaymentMerchantSession>::encode): Ditto.
        (IPC::ArgumentCoder<WebCore::PaymentMerchantSession>::decode): Ditto.
        (IPC::ArgumentCoder<WebCore::PaymentMethod>::encode): Ditto.
        (IPC::ArgumentCoder<WebCore::PaymentMethod>::decode): Ditto.
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::decode): Ditto.
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::description const): Added some needed namespaces due to unified source shuffling.
        * Shared/WebCoreArgumentCoders.h: Modernized several decoders.
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const): Removed custom encoding code and used ArgumentCodersCocoa instead.
        (WebKit::InteractionInformationAtPosition::decode): Ditto.
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::ProtectionSpace>::encodePlatformData): Ditto.
        (IPC::ArgumentCoder<WebCore::ProtectionSpace>::decodePlatformData): Ditto.
        (IPC::ArgumentCoder<WebCore::Credential>::encodePlatformData): Ditto.
        (IPC::ArgumentCoder<WebCore::Credential>::decodePlatformData): Ditto.
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::encodePlatformData): Ditto.
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::decodePlatformData): Ditto.
        (IPC::deviceContextKey): Deleted.
        * Shared/mac/WebHitTestResultData.mm:
        (WebKit::WebHitTestResultData::platformEncode const): Ditto.
        (WebKit::WebHitTestResultData::platformDecode): Ditto.
        * SourcesCocoa.txt: Added ArgumentCodersCocoa.mm.
        * WebKit.xcodeproj/project.pbxproj: Ditto.

2018-11-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        CompletionHandler-based async IPC messages only work when the completion handler takes a single argument
        https://bugs.webkit.org/show_bug.cgi?id=191965

        Reviewed by Tim Horton.

        Teach `messages.py` to handle the case where an async IPC completion handler takes no arguments, or takes more
        than a single argument. Currently, the generated code attempts to wrap all arguments in a `WTFMove(*~)`, but
        this either results in `WTFMove(*)` in the case where there are no arguments, or `WTFMove(*foo, *bar, *baz)` in
        the case where there are several arguments. Both of these results fail to compile.

        Instead, emit `completionHandler()` when there are no arguments, and
        `completionHandler(WTFMove(*foo), WTFMove(*bar), WTFMove(*baz))` when there are multiple arguments.

        Tests:  TestAsyncMessageWithNoArguments
                TestAsyncMessageWithMultipleArguments

        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp:
        (Messages::WebPage::TestAsyncMessageWithNoArguments::callReply):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::cancelReply):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::send):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::callReply):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::cancelReply):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::send):
        (WebKit::WebPage::didReceiveMessage):
        * Scripts/webkit/MessagesSuperclass-expected.h:
        (Messages::WebPage::TestAsyncMessageWithNoArguments::receiverName):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::name):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::asyncMessageReplyName):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::arguments const):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::receiverName):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::name):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::asyncMessageReplyName):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::arguments const):
        * Scripts/webkit/messages.py:
        * Scripts/webkit/messages_unittest.py:

        Add new `messages.py` unit tests to cover these cases.

        * Scripts/webkit/test-superclass-messages.in:

2018-11-26  Jeremy Jones  <jeremyj@apple.com>

        Use Full Screen consistently in localizable strings.
        https://bugs.webkit.org/show_bug.cgi?id=190363
        rdar://problem/43882333

        Reviewed by Jon Lee.

        Rename "Fullscreen" to "Full Screen" in localizable strings for consistency.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _showPhishingAlert]):

2018-11-26  Daniel Bates  <dabates@apple.com>

        Wire up ChromeClient::takeFocus() on iOS
        https://bugs.webkit.org/show_bug.cgi?id=191763
        <rdar://problem/18584508>

        Reviewed by Dan Bernstein.

        Expose existing Mac SPI for use on iOS. This will allow Safari to be notified when
        the engine has cycled through all the tab focusable elements on the page.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):

2018-11-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal 32-bit macOS 10.13 build after r238471

        r238471 added an `#include WebPageMessages.h` in `WebPage.h`, which causes the 32-bit macOS build using an
        internal macOS SDK ≤ 10.13 to fail. To address this, move the `#include` back under `PLATFORM(IOS_FAMILY)` by
        changing the parameters of `WebPage::removeDataDetectedLinks` and `WebPage::detectDataInAllFrames` to completion
        handlers rather than async IPC replies.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::removeDataDetectedLinks):
        (WebKit::WebPage::detectDataInAllFrames):
        * WebProcess/WebPage/WebPage.h:

2018-11-26  Antti Koivisto  <antti@apple.com>

        Clean up layer tree freezing logic in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=191826

        Reviewed by Dean Jackson.

        Use OptionSet<LayerTreeFreezeReason> to track various reasons that can cause layer tree to get frozen.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):
        (WebKit::WebPage::updateDrawingAreaLayerTreeFreezeState):

        Layer tree is unfrozen when there there are no reasons to freeze it.

        (WebKit::WebPage::didStartPageTransition):
        (WebKit::WebPage::didCompletePageTransition):
        (WebKit::WebPage::beginPrinting):
        (WebKit::WebPage::endPrinting):
        (WebKit::WebPage::setIsSuspended):
        (WebKit::WebPage::setLayerTreeStateIsFrozen): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationDidEnterBackground):
        (WebKit::WebPage::applicationWillEnterForeground):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::freezeAllLayerTrees):
        (WebKit::WebProcess::unfreezeAllLayerTrees):
        (WebKit::WebProcess::processDidResume):
        (WebKit::WebProcess::setAllLayerTreeStatesFrozen): Deleted.
        * WebProcess/WebProcess.h:

2018-11-25  Antti Koivisto  <antti@apple.com>

        RemoteLayerTreeNode construction cleanups
        https://bugs.webkit.org/show_bug.cgi?id=191951

        Reviewed by Tim Horton.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):

            Drop unused LayerProperties argument.

        (WebKit::RemoteLayerTreeHost::createLayer):

            Split the actual construction out to makeNode.
            Map updating is shared between platforms.
            Move setting of layerID and clearing default actions to RemoteLayerTreeNode.

        (WebKit::RemoteLayerTreeHost::makeNode):

            Returns RemoteLayerTreeNode.

        (WebKit::RemoteLayerTreeHost::setLayerID): Deleted.
        (WebKit::RemoteLayerTreeHost::layerID): Deleted.

            Move to RemoteLayerTreeNode.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (WebKit::RemoteLayerTreeNode::RemoteLayerTreeNode):
        (WebKit::RemoteLayerTreeNode::setLayerID):
        (WebKit::RemoteLayerTreeNode::layerID):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        (WebKit::RemoteLayerTreeHost::createEmbeddedView):
        (WebKit::RemoteLayerTreeHost::createLayer): Deleted.
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (-[WKCompositingView description]):
        (-[WKUIRemoteView description]):
        (-[WKBackdropView description]):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::addAnimationToLayer):

2018-11-25  Tim Horton  <timothy_horton@apple.com>

        Make it possible to insert editable images with a gesture
        https://bugs.webkit.org/show_bug.cgi?id=191937

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _stylusTapGestureShouldCreateEditableImage]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Add a internal getter for a WKWebViewConfiguration property.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):
        Add a undo name.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        Add a single-stylus-tap gesture recognizer.

        (-[WKContentView _stylusSingleTapRecognized:]):
        If allowed, request to insert an editable image when a stylus tap occurs.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleStylusSingleTapAtPoint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleStylusSingleTapAtPoint):
        Do a hit test, select the hit position, insert an editable image, and
        then de-assist any assisted node (to make the keyboard go away).
        For now, we'll only insert if we hit non-replaced elements,
        though this heuristic will need to be enhanced significantly once we
        decide on a design.

2018-11-25  Tim Horton  <timothy_horton@apple.com>

        Scrolling and drawing compete for incoming gestures
        https://bugs.webkit.org/show_bug.cgi?id=191940

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/PencilKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/ios/WKDrawingView.mm:
        (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]):
        Make scrolling and drawing mutually exclusive if editable images
        are enabled.

2018-11-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Fix a few localizable string descriptions in WebEditCommandProxy.cpp and WebEditorClient.mm
        https://bugs.webkit.org/show_bug.cgi?id=191945

        Reviewed by Anders Carlsson.

        Replace some a couple of command undo action name descriptions with "Undo action name", to match all other
        edit commands.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):

2018-11-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add WKWebView SPI to trigger and remove data detection
        https://bugs.webkit.org/show_bug.cgi?id=191918
        <rdar://problem/36185051>

        Reviewed by Tim Horton.

        Adds support for two new WKWebView SPI methods, `-_detectDataWithTypes:completionHandler:` and
        `-_removeAllDataDetectedLinks:`, to allow internal WebKit clients to run data detection and add links to data
        detected content, or remove all data detected links from the document.

        Test: WebKit.AddAndRemoveDataDetectors

        * Shared/Cocoa/DataDetectionResult.h:
        * Shared/Cocoa/DataDetectionResult.mm:
        (WebKit::DataDetectionResult::decode):

        Modernize DataDetectionResult's IPC decoding, so that it can be used with reply-based async IPC.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _removeDataDetectedLinks:]):
        (-[WKWebView _detectDataWithTypes:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::detectDataInAllFrames):
        (WebKit::WebPageProxy::removeDataDetectedLinks):

        Add or remove data detected links from each frame in the page, and then propagate the new data detector
        results of the main frame to the UI process (this matches current behavior, where the results of -[WKWebView
        _dataDetectionResults] only reflects data detection results in the main frame of the page).

        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::removeDataDetectedLinks):
        (WebKit::WebPage::detectDataInAllFrames):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-11-24  Andy Estes  <aestes@apple.com>

        [Cocoa] SOFT_LINK_CLASS_FOR_{HEADER,SOURCE} should generate a more concise getter function
        https://bugs.webkit.org/show_bug.cgi?id=191899

        Reviewed by Dean Jackson.

        * Shared/cocoa/WebCoreArgumentCodersCocoa.mm:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:

2018-11-23  Antti Koivisto  <antti@apple.com>

        Replace LayerOrView typedef with a class
        https://bugs.webkit.org/show_bug.cgi?id=191927

        Reviewed by Tim Horton.

        This typedef restricts remote layer representation to be either a CA layer or a view. We might want
        have more flexibility, for example tiles don't really need to be UIViews. It will also make it easier
        to unify Mac and iOS code, and hopefully make it less confusing too.

        This patch introduces RemoteLayerTreeNode class that replaces most uses of LayerOrView typedef
        (the rest are converted to pure CALayer). It also does a bunch of related cleanup.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToUIView):
        (WebKit::applyPropertiesToLayer): Deleted.
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _propertiesOfLayerWithID:]):
        * UIProcess/Cocoa/LayerRepresentation.h: Removed.
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):
        * UIProcess/PageClient.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::layerWithIDForTesting const):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        (WebKit::RemoteLayerTreeHost::rootNode const):
        (WebKit::RemoteLayerTreeHost::rootLayer const): Deleted.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::nodeForID const):
        (WebKit::RemoteLayerTreeHost::layerWillBeRemoved):
        (WebKit::RemoteLayerTreeHost::animationDidStart):
        (WebKit::RemoteLayerTreeHost::animationDidEnd):
        (WebKit::RemoteLayerTreeHost::clearLayers):
        (WebKit::RemoteLayerTreeHost::layerWithIDForTesting const):
        (WebKit::RemoteLayerTreeHost::layerForID const):
        (WebKit::RemoteLayerTreeHost::rootLayer const):
        (WebKit::RemoteLayerTreeHost::createLayer):
        (WebKit::RemoteLayerTreeHost::detachRootLayer):
        (WebKit::RemoteLayerTreeHost::mapAllIOSurfaceBackingStore):
        (WebKit::RemoteLayerTreeHost::getLayer const): Deleted.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h: Added.
        (WebKit::RemoteLayerTreeNode::layer const):
        (WebKit::RemoteLayerTreeNode::uiView const):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm: Added.
        (WebKit::RemoteLayerTreeNode::RemoteLayerTreeNode):
        (WebKit::RemoteLayerTreeNode::detachFromParent):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeScrollingPerformanceData.mm:
        (WebKit::RemoteLayerTreeScrollingPerformanceData::blankPixelCount const):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        (WebKit::layerRepresentationFromLayerOrView): Deleted.
        * UIProcess/WebAuthentication/Cocoa/HidService.h:
        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/LayerRepresentation.mm: Removed.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setRemoteLayerTreeRootNode):
        (WebKit::PageClientImpl::acceleratedCompositingRootLayer const):
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setRemoteLayerTreeRootNode):
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::setRemoteLayerTreeRootNode):
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer): Deleted.
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setRemoteLayerTreeRootNode):
        (WebKit::WebPageProxy::acceleratedCompositingRootLayer const):
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):

2018-11-23  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Enable Web Authentication as an experimental feature for macOS
        https://bugs.webkit.org/show_bug.cgi?id=191932
        rdar://problem/46225210

        Reviewed by Brent Fulgham.

        * Shared/WebPreferences.yaml:

2018-11-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable drag and drop support for iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=191818
        <rdar://problem/43907454>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefaultValues.cpp:
        (defaultCustomPasteboardDataEnabled):

        Enable custom pasteboard data by default on iOSMac. While writing and reading custom pasteboard data is
        currently broken in iOSMac due to the lack of `teamData` and `preferredPresentationStyle`, opting into custom
        pasteboard data at least allows us to avoid writing unsanitized data types to the pasteboard.

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

        Fix a regression from <https://trac.webkit.org/r236619> wherein the web process crashes when attempting to edit
        a text field. This happens because the call to `-[UIKeyboard isInHardwareKeyboardMode]` on the iOSMac platform
        attempts to initialize a `UHASWorkspace` from the web process, which then attempts to connect to the UIKit host
        application. Instead, we can skip this call altogether on iOSMac, where the platform never considers a hardware
        keyboard to be "connected", even when typing.

2018-11-23  Antti Koivisto  <antti@apple.com>

        UI side compositing doesn't paint on Mac
        https://bugs.webkit.org/show_bug.cgi?id=191908

        Reviewed by Tim Horton.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::bytesPerPixel const):
        (WebKit::RemoteLayerBackingStore::surfaceBufferFormat const):

        These deep color formats are not supported on Mac.

2018-11-22  Chris Dumez  <cdumez@apple.com>

        Regression(r238353) Load sometimes hangs when navigating back after a cross-site navigation
        https://bugs.webkit.org/show_bug.cgi?id=191914

        Reviewed by Ryosuke Niwa.

        When process-swapping on a cross-site server-side redirect, we end up doing a decidePolicyForNavigationResponse
        policy check for the about:blank suspension load. This policy decision is ignored by the UIProcess because
        SuspendedPageProxy does not handle this particular IPC message. To handle the issue, make sure the WebProcess
        never sends a DecidePolicyForNavigationResponse IPC to the UIProcess for about:blank suspension loads and let
        the load proceed.

        The issue was already there before r238353 but it was made obvious by r238353 which caused a hang when trying
        to reuse a Suspended page which is hanging while trying to suspend.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):

2018-11-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] clang emits a warning when building WebKit after r238293
        https://bugs.webkit.org/show_bug.cgi?id=191917

        Reviewed by Dan Bernstein.

        Move the implementations of -setSafeBrowsingEnabled: and -isSafeBrowsingEnabled to the main implementation of
        WKPreferences to fix the warning.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences setSafeBrowsingEnabled:]):
        (-[WKPreferences isSafeBrowsingEnabled]):

2018-11-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Address post-review feedback after r238438
        https://bugs.webkit.org/show_bug.cgi?id=191913

        Reviewed by Ryosuke Niwa.

        Replace boolean arguments to setSelectedRange, replaceSelectionWithText and replaceSelectionWithFragment with
        enum flags, and tweak a couple of functions to take `const Vector&` instead of `Vector&&`.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageReplaceStringMatches):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::replaceMatches):
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::replaceStringMatchesFromInjectedBundle):
        (WebKit::WebPage::replaceMatches):
        (WebKit::WebPage::replaceSelectionWithText):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::updateSelectionWithTouches):
        (WebKit::WebPage::selectWithTwoTouches):
        (WebKit::WebPage::extendSelection):
        (WebKit::WebPage::selectWordBackward):
        (WebKit::WebPage::moveSelectionByOffset):
        (WebKit::WebPage::selectPositionAtPoint):
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPage::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPage::updateSelectionWithExtentPoint):
        (WebKit::WebPage::replaceSelectedText):
        (WebKit::WebPage::replaceDictatedText):
        (WebKit::WebPage::syncApplyAutocorrection):

2018-11-22  Mark Lam  <mark.lam@apple.com>

        Rollout r238432: Breaks internal Mac builds.
        https://bugs.webkit.org/show_bug.cgi?id=191909
        <rdar://problem/46214163>

        Unreviewed. Rolling out r238432: Remove @no-unify of InjectedBundleRangeHandle.cpp and InjectedBundleNodeHandle.cpp

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2018-11-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.23.1 release.

        * gtk/NEWS: Add release notes for 2.23.1.

2018-11-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WebKit2] Add support for replacing find-in-page text matches
        https://bugs.webkit.org/show_bug.cgi?id=191786
        <rdar://problem/45813871>

        Reviewed by Ryosuke Niwa.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView replaceMatches:withString:inSelectionOnly:resultCollector:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::replaceMatches):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient replaceMatches:withString:inSelectionOnly:resultCollector:]):

        Implement this method to opt in to "Replace…" UI on macOS in the find bar. In this API, we're given a list of
        matches to replace. We propagate the indices of each match to the web process, where FindController maps them to
        corresponding replacement ranges. Currently, the given list of matches is only ever a list containing the first
        match, or a list containing all matches.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageFindStringMatches):
        (WKBundlePageReplaceStringMatches):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::replaceMatches):

        Map match indices to Ranges, and then call into WebCore::Page to do the heavy lifting (see WebCore ChangeLog for
        more details). Additionally add a hard find-and-replace limit here to prevent the web process from spinning
        indefinitely if there are an enormous number of find matches.

        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findStringMatchesFromInjectedBundle):
        (WebKit::WebPage::replaceStringMatchesFromInjectedBundle):

        Add helpers to exercise find and replace in WebKit2.

        (WebKit::WebPage::replaceMatches):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-11-21  Andy Estes  <aestes@apple.com>

        [Cocoa] Create a soft-linking file for PassKit
        https://bugs.webkit.org/show_bug.cgi?id=191875
        <rdar://problem/46203215>

        Reviewed by Myles Maxfield.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm: Removed SOFT_LINK macros and included PassKitSoftLink.h instead.
        * SourcesCocoa.txt: Removed @no-unify from WebPaymentCoordinatorProxyIOS.mm and WebPaymentCoordinatorProxyMac.mm.
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: Removed SOFT_LINK macros and included PassKitSoftLink.h instead.
        * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm: Ditto.
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm: Ditto.
        * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm: Included NSAttributedStringSPI.h.
        * UIProcess/mac/WebProcessProxyMac.mm: Included ProcessPrivilege.h.
        * WebKit.xcodeproj/project.pbxproj: Removed WebPaymentCoordinatorProxyIOS.mm and WebPaymentCoordinatorProxyMac.mm from the WebKit target.

2018-11-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove @no-unify of InjectedBundleRangeHandle.cpp and InjectedBundleNodeHandle.cpp
        https://bugs.webkit.org/show_bug.cgi?id=191853

        Reviewed by Michael Catanzaro.

        In r235845, I excluded InjectedBundleRangeHandle.cpp and
        InjectedBundleNodeHandle.cpp from unify source builds in order to
        work around a MSVC bug.

        Then, I commited a different workaround for the MSVC bug in
        r238386. Now, we can include InjectedBundleRangeHandle.cpp and
        InjectedBundleNodeHandle.cpp in unified source builds. Revert
        r235845.

        * Sources.txt: Removed @no-unify of InjectedBundleRangeHandle.cpp
        and InjectedBundleNodeHandle.cpp
        * WebKit.xcodeproj/project.pbxproj: Unchecked Target Membership
        not to be compiled by XCode.

2018-11-20  Jeff Miller  <jeffm@apple.com>

        Return nullptr immediately if the key doesn't exist in the HashMap.
        https://bugs.webkit.org/show_bug.cgi?id=191841

        Reviewed by Chris Dumez.

        * Shared/API/APIDictionary.h:

2018-11-20  Don Olmstead  <don.olmstead@sony.com>

        WebPasteboard should USE(LIBWPE)
        https://bugs.webkit.org/show_bug.cgi?id=191846

        Reviewed by Michael Catanzaro.

        Add USE(LIBWPE) for Pasteboard related functionality within WebKit.

        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-11-20  Don Olmstead  <don.olmstead@sony.com>

        [WPE] Fix some feature guards in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=191847

        Reviewed by Michael Catanzaro.

        Some feature guards are not present in these files.

        * UIProcess/API/wpe/PageClientImpl.cpp:
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/wpe/WebProcessPoolWPE.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2018-11-20  Antti Koivisto  <antti@apple.com>

        Avoid potential longer than expected layer flush delays
        https://bugs.webkit.org/show_bug.cgi?id=191833

        Reviewed by Dean Jackson.

        Layer flush throttling also stops style recalcs and layouts. Layouts schedule layer flushes. Especially
        on a slow network we can in principle end up in situation where layer flush timer fires but there is no
        flush scheduled and so nothing happens. However there is a pending style recalc or layout that would
        actually schedule a flush (in practice various things force style recalcs and this doesn't occur
        commonly).

        To avoid this we should flush unconditionally when the flush timer fires. This performs any pending
        style recalc and layout too. If there is nothing to do the flush will be cheap.

        PLT doesn't appear to hit cases affected by this patch and there shouldn't be any impact.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:

        Remove now unnecessary m_hasPendingFlush bit, simplifying the logic.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setLayerTreeStateIsFrozen):

        Schedule unconditionally when unfreezing.

        (WebKit::TiledCoreAnimationDrawingArea::scheduleCompositingLayerFlush):

        Remove branch that starts the flush timer. It is not needed as either it was already running
        or immediate flush is already scheduled and will start the timer anyway.

        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::adjustLayerFlushThrottling):
        (WebKit::TiledCoreAnimationDrawingArea::layerFlushThrottlingTimerFired):

        Flush unconditionally.

2018-11-19  Don Olmstead  <don.olmstead@sony.com>

        Simplify platform check in WebEditorClient
        https://bugs.webkit.org/show_bug.cgi?id=191848

        Reviewed by Fujii Hironori.

        !PLATFORM(GTK) && !PLATFORM(COCOA) && !PLATFORM(WPE) can be better
        represented as PLATFORM(WIN).

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:

2018-11-19  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable JIT in a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=191822
        <rdar://problem/28119360>

        Reviewed by Geoffrey Garen.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _canUseJIT:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration enableJIT]):
        (-[_WKProcessPoolConfiguration setEnableJIT:]):
        * UIProcess/Launcher/ProcessLauncher.h:
        (WebKit::ProcessLauncher::Client::enableJIT const):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canUseJIT):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::enableJIT const):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::processPool const):
        (WebKit::WebProcessProxy::processPool): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::canUseJIT):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-11-19  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API for CertificateInfo.
        https://bugs.webkit.org/show_bug.cgi?id=191647

        Reviewed by Alex Christensen.

        Added API for CertificateInfo to create, fetch contents.

        Tests: TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp

        * PlatformWin.cmake:
        * Shared/API/c/curl/WKCertificateInfoCurl.cpp: Added.
        (WKCertificateInfoCreateWithCertficateChain):
        (WKCertificateInfoGetVerificationError):
        (WKCertificateInfoGetCertificateChainSize):
        (WKCertificateInfoCopyCertificateAtIndex):
        * Shared/API/c/curl/WKCertificateInfoCurl.h: Copied from Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp.
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::encode):
        (IPC::ArgumentCoder<CertificateInfo>::decode):

2018-11-19  Don Olmstead  <don.olmstead@sony.com>

        Add USE(LIBWPE) for WebKit events
        https://bugs.webkit.org/show_bug.cgi?id=191842

        Reviewed by Michael Catanzaro.

        Moves all WPE events to USE(LIBWPE) instead of PLATFORM(WPE). Updates
        filenames to LibWPE.

        * PlatformWPE.cmake:
        * Shared/NativeWebKeyboardEvent.h:
        * Shared/NativeWebMouseEvent.h:
        * Shared/NativeWebTouchEvent.h:
        * Shared/NativeWebWheelEvent.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.h:
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        * Shared/libwpe/NativeWebKeyboardEventLibWPE.cpp: Renamed from Source/WebKit/Shared/wpe/NativeWebKeyboardEventWPE.cpp.
        * Shared/libwpe/NativeWebMouseEventLibWPE.cpp: Renamed from Source/WebKit/Shared/wpe/NativeWebMouseEventWPE.cpp.
        * Shared/libwpe/NativeWebTouchEventLibWPE.cpp: Renamed from Source/WebKit/Shared/wpe/NativeWebTouchEventWPE.cpp.
        * Shared/libwpe/NativeWebWheelEventLibWPE.cpp: Renamed from Source/WebKit/Shared/wpe/NativeWebWheelEventWPE.cpp.
        * Shared/libwpe/WebEventFactory.cpp: Renamed from Source/WebKit/Shared/wpe/WebEventFactory.cpp.
        * Shared/libwpe/WebEventFactory.h: Renamed from Source/WebKit/Shared/wpe/WebEventFactory.h.
        * SourcesWPE.txt:

2018-11-19  David Quesada  <david_quesada@apple.com>

        EXC_BAD_ACCESS when invoking a DownloadProxy's destination decision handler after the download has been canceled
        https://bugs.webkit.org/show_bug.cgi?id=191762
        rdar://problem/46151509

        Reviewed by Dean Jackson.

        When the DownloadClient calls the decision handler with a destination path, check if
        m_processPool is null before trying to access its network process. This can happen
        if a download is canceled before the client decides its destination.

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

2018-11-19  Tomoki Imai  <Tomoki.Imai@sony.com>

        [cairo] BackingStore::incorporateUpdate should use CompositeCopy to support drawsBackground=false in general Cairo ports
        https://bugs.webkit.org/show_bug.cgi?id=191577

        Reviewed by Carlos Garcia Campos.

        We should use CompositeCopy operator to update bitmap to overwrite existing bitmap even if source contains
        transparent parts. It enables ports which uses Cairo to set drawsBackground to false.
        GTK ports has custom background extension, and in such case, we need to use CompositeSourceOver to retain
        custom background.

        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate): Use CompositeCopy operator to update bitmap.

2018-11-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Reload Web Inspector" button no longer partially works
        https://bugs.webkit.org/show_bug.cgi?id=191773
        <rdar://problem/46139932>

        Reviewed by Devin Rousso.

        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::load):
        (WebKit::RemoteWebInspectorProxy::reopen):
        * UIProcess/RemoteWebInspectorProxy.h:
        * UIProcess/RemoteWebInspectorProxy.messages.in:
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::reopen):
        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::reopen):
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::reopen):
        * WebProcess/WebPage/WebInspectorUI.h:

2018-11-19  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Solve some issues in the enumerateDevices code
        https://bugs.webkit.org/show_bug.cgi?id=191832

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:
        Increase the version to 2.24.
        (webkitDeviceInfoPermissionRequestAllow):
        (webkitDeviceInfoPermissionRequestDeny):
        * UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:
        Replace the forward declaration with the include.
        * UIProcess/API/gtk/WebKitDeviceInfoPermissionRequest.h: Typo.
        * UIProcess/API/gtk/WebKitWebsiteData.h:
        Increase the version to 2.24.
        * UIProcess/API/wpe/WebKitDeviceInfoPermissionRequest.h: Typo.
        * UIProcess/API/wpe/WebKitWebsiteData.h:
        Increase the version to 2.24.

2018-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r238318.

        Add new symbols to API documentation files. They should have been added in r237031, but r238318 revealed it.

        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:

2018-11-19  Joseph Pecoraro  <pecoraro@apple.com>

        Regression(r238330): A lot of WebInspector tests are crashing on the bots
        https://bugs.webkit.org/show_bug.cgi?id=191814

        Reviewed by Ryosuke Niwa.

        Expose the expected connection type from the UIProcess into the WebProcess.
        When there is a local inspector connection to the UIProcess expose it as
        a local frontend channel to the inspector controllers in the Page.

        * UIProcess/WebPageInspectorTargetAgent.h:
        * UIProcess/WebPageInspectorTargetAgent.cpp:
        (WebKit::WebPageInspectorTargetAgent::frontendChannel):
        An additional FrontendChannel class is not needed, just use self.

        (WebKit::WebPageInspectorTargetAgent::WebPageInspectorTargetAgent):
        (WebKit::WebPageInspectorTargetAgent::connectionType const):
        (WebKit::WebPageInspectorTargetAgent::sendMessageToFrontend):
        Expose the channel to targets as local if there is a local frontend
        in the UIProcess.

2018-11-18  Joseph Pecoraro  <pecoraro@apple.com>

        Regression(r238330) ProcessSwap.WebInspector API test is a flaky crash in debug
        https://bugs.webkit.org/show_bug.cgi?id=191812

        Reviewed by Chris Dumez.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::setFrontendConnection):
        It can be possible to receive a frontend connection multiple times
        if another WebProcess opened the inspector and this WebProcess got
        swapped in before the InspectorProcess notified the WebProcess of
        a connection to use. It is always best to use the latest connection
        we have received, since any others would have been invalidated.

2018-11-18  Chris Dumez  <cdumez@apple.com>

        [PSON] Received an invalid message "WebPageProxy.DidPerformClientRedirect" from the web process
        https://bugs.webkit.org/show_bug.cgi?id=191828

        Reviewed by Antti Koivisto.

        WebPageProxy::didPerformClientRedirect() had a MESSAGE_CHECK_URL() for both the source
        and the destination URL. The macro calls WebProcessProxy::checkURLReceivedFromWebProcess()
        to make sure that both URLs were actually loaded by this WebContent process.

        However, now that we're enabled process-swap on cross-site navigation, these checks are no
        longer fully valid. If the client-side redirect is cross-site, then the source and destination
        URLs get loaded by 2 different WebContent processes. Since didPerformClientRedirect() gets
        called after the redirect and gets set by the new WebContent process, only the destination URL
        is guaranteed to have been loaded by this process. The source URL may have been loaded in
        another process so this patch drops the message check for the source URL.

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

2018-11-18  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Use Box<BinarySemaphore> instead of dispatch_semaphore_t
        https://bugs.webkit.org/show_bug.cgi?id=189691

        Reviewed by Ryosuke Niwa.

        Use Box<BinarySemaphore> instead, which utilizes our WTF::Lock mechanism.

        * NetworkProcess/watchos/NetworkProximityManager.mm:
        (WebKit::NetworkProximityManager::updateRecommendation):

2018-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Remove all usages of UIItemProvider, UIItemProviderReading, and related classes
        https://bugs.webkit.org/show_bug.cgi?id=191819

        Reviewed by Dan Bernstein.

        Replace UIItemProvider (and related classes) with NSItemProvider.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]):
        (-[WKContentView dropInteraction:performDrop:]):

2018-11-17  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed WinCairo build fix for r238353.

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

2018-11-17  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: m_messageReceivers.contains(...) under ViewGestureController removeMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=191734
        <rdar://problem/46151497>

        Reviewed by Ryosuke Niwa.

        When a WebProcess crashes, we destroy the ViewGestureController and reconstruct it later
        after we've relaunched a new WebProcess. The ViewGestureController controller takes care
        of adding itself as an IPC message receiver to the WebProcessProxy, and the destructor
        takes care of removing itself as an IPC message receiver.

        However, when process-swapping on navigation, we do not destroy the ViewGestureController
        because doing so would take down the swipe gesture snapshot on cross-site swipe navigation.
        This led to hitting this assertion later on because the ViewGestureController is still
        registered as an IPC message receiver with the old process after process swapping.

        To address the issue, we now make sure the ViewGestureController unregisters itself from
        the old process and registers itself with the new process on process-swap.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::~ViewGestureController):
        (WebKit::ViewGestureController::disconnectFromProcess):
        (WebKit::ViewGestureController::connectToProcess):
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::processWillSwap):
        (WebKit::WebViewImpl::didRelaunchProcess):

2018-11-17  Chris Dumez  <cdumez@apple.com>

        [PSON] ASSERTION FAILED: m_uncommittedState.state == State::Committed
        https://bugs.webkit.org/show_bug.cgi?id=191781

        Reviewed by Ryosuke Niwa.

        The crash was happening when switching to a suspended page that is not yet done
        suspending (e.g. in case of very fast back/forward navigation). The WebPageProxy
        would reattach to the suspended process and get load notifications that it did
        not expect since it did not schedule any load yet. Those notifications are for
        the about:blank load we do for page suspension.

        To address the issue, make swapToWebProcess() asynchronous and take a completion
        handler. When we try to unsuspend a SuspendedPageProxy, we first make sure it
        is actually done suspending. If it is not done suspending, we wait until it is
        before telling in to unsuspend and proceeding with the new load.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::unsuspend):
        (WebKit::SuspendedPageProxy::didFinishLoad):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:

2018-11-17  Chris Dumez  <cdumez@apple.com>

        Unreviewed follow-up to r238343 to address debug assertions in 2 API tests.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessCrashed):

2018-11-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: add button to show system certificate dialog
        https://bugs.webkit.org/show_bug.cgi?id=191458
        <rdar://problem/45977019>

        Reviewed by Joseph Pecoraro.

        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::showCertificate): Added.
        (WebKit::WebInspectorProxy::platformShowCertificate): Added.
        * UIProcess/mac/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformShowCertificate): Added.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformShowCertificate): Added.
        * UIProcess/mac/WebInspectorProxyWPE.cpp:
        (WebKit::WebInspectorProxy::platformShowCertificate): Added.
        * UIProcess/mac/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformShowCertificate): Added.
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::showCertificate): Added.

        * UIProcess/RemoteWebInspectorProxy.messages.in:
        * UIProcess/RemoteWebInspectorProxy.h:
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::showCertificate): Added.
        (WebKit::RemoteWebInspectorProxy::platformShowCertificate): Added.
        * UIProcess/mac/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformShowCertificate): Added.
        * UIProcess/mac/RemoteWebInspectorProxyMac.mm:
        (WebKit::RemoteWebInspectorProxy::platformShowCertificate): Added.
        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::showCertificate): Added.

        * NetworkProcess/cache/NetworkCacheCoders.h:
        * NetworkProcess/cache/NetworkCacheCodersCocoa.cpp: Removed.
        * NetworkProcess/cache/NetworkCacheCodersCurl.cpp: Removed.
        * NetworkProcess/cache/NetworkCacheCodersSoup.cpp: Removed.
        Moved `WebCore::CertificateInfo` code for `WTF::Encoder` and `WTF::Decoder` into their
        respective platform's CertificateInfo.h file.

        * UIProcess/Authentication/mac/WebCredentialMac.mm:

        * Configurations/WebKit.xcconfig:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * WebKit.xcodeproj/project.pbxproj:

2018-11-16  Chris Dumez  <cdumez@apple.com>

        Regression(ProcessPrewarming) Assertion hit in NetworkProcessProxy destructor
        https://bugs.webkit.org/show_bug.cgi?id=191800

        Reviewed by Ryosuke Niwa.

        Make sure the NetworkProcessProxy destructor calls its remaining m_pendingConnectionReplies
        completion handlers to avoid hitting an assertion in the CompletionHandler destructor.

        Prewarmed WebProcess do not keep the ProcessPool alive and thus not the NetworkProcessProxy
        either. As a result, it is possible for NetworkProcessProxy to have pending connection
        requests from those prewarmed processes when it is destroyed. Similar story for the
        suspended page processes when they are destroyed.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Tweak _showSafeBrowsingWarningWithTitle SPI
        https://bugs.webkit.org/show_bug.cgi?id=191799

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        (+[WKWebView _visitUnsafeWebsiteSentinel]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning clickedOnLink:]):
        I need to localize "Continue" and "Cancel" so they aren't always in English.

2018-11-16  Chris Dumez  <cdumez@apple.com>

        WKWebViewMacEditingTests.DoNotCrashWhenInterpretingKeyEventWhileDeallocatingView API test is crashing in debug
        https://bugs.webkit.org/show_bug.cgi?id=191797

        Reviewed by Ryosuke Niwa.

        We were hitting the assertion because the error handler was first getting called. It would
        deallocate the send right, cancel/null out the XPC connection and call
        didFinishLaunchingProcess(0, IPC::Connection::Identifier()).

        Then the xpc_connection_send_message_with_reply() block would get called later and
        would try to deallocate the send right again, and call
        didFinishLaunchingProcess(0, IPC::Connection::Identifier()) again because the xpc
        connection is null.

        Handle this case by having the xpc_connection_send_message_with_reply() block check
        that we're still launching (i.e. didFinishLaunchingProcess() has not been called
        yet).

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

2018-11-16  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed follow-up to r238330.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        Don't clear the pointer after invalidating since the pointer is
        used later one. We don't mind it being used after invalidation
        it will do the right thing, we'd rather have the WebInspectorProxy
        lifetime match the WebPageProxy.

2018-11-16  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.NavigationWithLockedHistoryWithoutPSON API test is a flaky crash in debug
        https://bugs.webkit.org/show_bug.cgi?id=191795

        Reviewed by Alex Christensen.

        If the WebProcessPool is getting destroyed while there is a prewarmed WebContent process
        that is awaiting its connnection to the network process, then we'll hit the
        process->hasOneRef() assertion in the WebProcessPool destructor. This is because
        NetworkProcessProxy::m_pendingConnectionReplies keeps a RefPtr to the WebProcessProxy
        that is awaiting the connection. The NetworkProcessProxy does not really need to keep
        the WebProcessProxy alive in this case so this patch switches to using a WeakPtr instead.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::networkProcessCrashed):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessProxy.h:

2018-11-16  Chris Dumez  <cdumez@apple.com>

        [macOS] Label "prewarmed" WebContent processes in Activity Monitor
        https://bugs.webkit.org/show_bug.cgi?id=191765
        <rdar://problem/45953463>

        Reviewed by Geoffrey Garen.

        Label "prewarmed" WebContent processes in Activity Monitor to facilitate debugging.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getExtraInitializationData):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):
        (WebKit::WebProcessProxy::markIsNoLongerInPrewarmedPool):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::markIsNoLongerPrewarmed):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeProcessName):
        (WebKit::WebProcess::updateProcessName):
        (WebKit::WebProcess::platformInitializeProcess):

2018-11-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Local Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191740
        <rdar://problem/45470897>

        Reviewed by Timothy Hatcher.

        When a web page asks to open a local Web Inspector, that inspector
        will now connect in the UIProcess (WebPageProxy / WebPageInspectorController)
        instead of the WebContentProcess (WebKit::WebInspector / InspectorController).

        Previously a WebInspectorProxy was re-created every time the WebPageProxy's
        WebPage / WebProcess was changed, effectively closing the Web Inspector
        frontend when the WebPage was swapped or crashed.

        This change keeps the WebInspectorProxy alive as long as the WebPageProxy
        is alive. During process swaps, or process crashes, the WebInspectorProxy
        is reset when the page is reset and updated when the page's WebProcess
        changes. Since WebInspectorProxy owns the Web Inspector view / window
        the Web Inspector window can be kept alive across (and attached state)
        across WebPage / WebProcess changes.

        Previously the WebContentProcess's WebKit::WebInspector was the Local
        FrontendChannel for the WebCore::InspectorController. This can't
        outlive the single WebContentProcess.

        This change makes the UIProcesses' WebInspectorProxy the Local FrontendChannel
        for the WebKit::WebPageInspectorController. Given the WebInspectorProxy
        now stays alive alongside the WebPageProxy this will live across process changes.
        This means that the WebInspectorUI process must send its backend messages to
        the WebInspectorProxy -> WebPageInspectorController now instead of the
        old path WebInspector -> WebCore::InspectorController.

        A direct IPC connection is still maintained between the WebContentProcess's
        WebKit::WebInspector and the InspectorProcess's WebInspectorUI. Previously
        this connection was established by WebKit::WebInspector vending an
        IPC::Attachment to the WebInspectorUI process. This patch inverts that
        relationship, because the WebInspectorUI process now lives across multiple
        WebContentProcess changes. The WebInspectorUI now vends the IPC::Attachment
        to the WebContentProcess each time the process changes. This way they can both
        still communicate through normal Messages::WebInspector/WebInspectorUI
        messages and everything behaves as previously expected.

        * Scripts/webkit/messages.py:
        Header for Inspector::FrontendChannel::ConnectionType.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::openLocalFrontend):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openLocalInspectorFrontend):
        (WebKit::WebInspector::setFrontendConnection):
        (WebKit::WebInspector::closeFrontendConnection):
        (WebKit::WebInspector::close):
        (WebKit::WebInspector::openFrontendConnection): Deleted.
        (WebKit::WebInspector::sendMessageToBackend): Deleted.
        (WebKit::WebInspector::sendMessageToFrontend): Deleted.
        On the WebProcess side we ask the UIProcess to open a local frontend and now
        receive instead of vend an IPC connection to the WebInspectorUI process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::resetState):
        Keep the WebInspectorProxy alive alongside the WebPageProxy.
        Update it as processes / states change.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::openLocalInspectorFrontend):
        (WebKit::WebInspectorProxy::createInspectorPage): Deleted.
        (WebKit::WebInspectorProxy::sendMessageToFrontend):
        (WebKit::WebInspectorProxy::closeFrontendPageAndWindow):
        Open and close a local frontend by being the FrontendChannel on the UIProcess side.

        (WebKit::WebInspectorProxy::sendMessageToBackend):
        Dispatch WebInspectorUI backend messages to the UIProcess's InspectorController
        now that the InspectorController is here instead of in the WebProcess.

        (WebKit::WebInspectorProxy::setFrontendConnection):
        Transfer the WebProcess <-> InspectorProcess IPC connection through us
        because we are the one link between them when processes change.

        (WebKit::WebInspectorProxy::invalidate):
        (WebKit::WebInspectorProxy::frontendLoaded):
        Be safer and handle inspectedPage being potentially null.

        * WebProcess/WebPage/WebPageInspectorTargetController.cpp:
        (WebKit::WebPageInspectorTargetController::connectInspector):
        * WebProcess/WebPage/WebPageInspectorTargetController.h:
        * WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.cpp:
        (WebKit::WebPageInspectorTargetFrontendChannel::create):
        (WebKit::WebPageInspectorTargetFrontendChannel::WebPageInspectorTargetFrontendChannel):
        * WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.h:
        * UIProcess/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::connect):
        Proxy the ConnectionType received on the UIProcess side to the WebProcess side
        when connecting to sub-targets.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::connectInspector):
        (WebKit::WebPage::setHasLocalInspectorFrontend): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::hasLocalInspectorFrontend const): Deleted.
        (WebKit::WebPageProxy::setHasLocalInspectorFrontend): Deleted.
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        Eliminate the hasLocalInspectorFrontend state that was only used
        to disable PSON. PSON no longer needs to be disabled for this reason.

        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection):
        (WebKit::WebInspectorUI::updateConnection):
        (WebKit::WebInspectorUI::closeWindow):
        (WebKit::WebInspectorUI::sendMessageToBackend):
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:
        Vend an IPC connection on demand to the WebProcess side.

2018-11-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK][WPE] Add "WebKitDeviceInfoPermissionRequest.h" into webkit2.h
        https://bugs.webkit.org/show_bug.cgi?id=191744
        <rdar://problem/46125461>

        Unreviewed, install the file.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

2018-11-16  Zalan Bujtas  <zalan@apple.com>

        Add DidFirstMeaningfulPaint milestone.
        https://bugs.webkit.org/show_bug.cgi?id=191754

        Reviewed by Simon Fraser.

        * Shared/API/c/WKPageLoadTypes.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toWKLayoutMilestones):
        (WebKit::toLayoutMilestones):
        * UIProcess/API/C/WKPageRenderingProgressEvents.h:
        * UIProcess/API/C/WKPageRenderingProgressEventsInternal.h:
        (pageRenderingProgressEvents):

2018-11-16  Chris Dumez  <cdumez@apple.com>

        Automatic process prewarming should be turned on if PSON is enabled via experimental features
        https://bugs.webkit.org/show_bug.cgi?id=191761

        Reviewed by Ryosuke Niwa.

        m_isAutomaticProcessWarmingEnabledByClient is a std::optional and should not be initialized to
        true / false until the client calls API to toggle the feature. When m_isAutomaticProcessWarmingEnabledByClient
        is std::nullopt then m_processSwapsOnNavigationFromExperimentalFeatures controls automatic
        process prewarming.

        * UIProcess/API/APIProcessPoolConfiguration.h:

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Add API to disable safe browsing checks
        https://bugs.webkit.org/show_bug.cgi?id=191610

        Reviewed by Dean Jackson.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences setSafeBrowsingEnabled:]):
        (-[WKPreferences isSafeBrowsingEnabled]):
        (-[WKPreferences _setSafeBrowsingEnabled:]): Deleted.
        (-[WKPreferences _safeBrowsingEnabled]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-11-16  Chris Dumez  <cdumez@apple.com>

        WebKit.UnavailablePlugIn API test is crashing in debug
        https://bugs.webkit.org/show_bug.cgi?id=191753

        Reviewed by Alex Christensen.

        Add missing early returns. Those were mistakenly dropped in r235200.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad):

2018-11-16  Chris Dumez  <cdumez@apple.com>

        [Mac] Regression: WebContent process's display name is no longer set
        https://bugs.webkit.org/show_bug.cgi?id=191722
        <rdar://problem/45960550>

        Reviewed by Per Arne Vollan.

        Make sure The WebContent process calls _RegisterApplication() during initialization and
        *before* trying to set its display name. Setting the display name fails otherwise.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeProcessName):
        (WebKit::WebProcess::platformInitializeProcess):

2018-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        Enable process swap on cross-site navigation by default on iOS
        https://bugs.webkit.org/show_bug.cgi?id=191735

        Reviewed by Chris Dumez.

        Enabled the feature.

        * Shared/WebPreferencesDefaultValues.h:

2018-11-16  Antti Koivisto  <antti@apple.com>

        REGRESSION(r237467) [PSON] iOS: Going back to a page sometimes doesn't restore the full page
        https://bugs.webkit.org/show_bug.cgi?id=191737

        Reviewed by Simon Fraser.

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

        Layer tree should stay frozen in m_shouldResetDrawingArea state. Otherwise spurious commit transactions may
        mess up state on UI process side.

        Specifically WKWebView._needsResetViewStateAfterCommitLoadForMainFrame would get stuck to TRUE and prevent
        all viewport updates because WKWebView._firstPaintAfterCommitLoadTransactionID has value greater
        than any current transaction IDs.

2018-11-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed typo fix in comment added in r238250.

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

2018-11-16  Sihui Liu  <sihui_liu@apple.com>

        Storing blobs in IDB on iOS: "Error preparing blob/file"
        https://bugs.webkit.org/show_bug.cgi?id=188438
        <rdar://problem/43097279>

        Reviewed by Alex Christensen.

        Grant sandbox extension of temp folder to network process, and clean up some code that managed sandbox extension
        of IDB temporary blob files in network process.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURLOptionallyFileBacked):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::handleGetResult):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        (WebKit::NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob): Deleted.
        (WebKit::NetworkConnectionToWebProcess::getBlobDataFileReferenceForPath): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::accessToTemporaryFileComplete):
        (WebKit::NetworkProcess::getSandboxExtensionsForBlobFiles):
        (WebKit::NetworkProcess::prepareForAccessToTemporaryFile): Deleted.
        (WebKit::NetworkProcess::updateTemporaryFileSandboxExtensions): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::didGetRecord):
        (WebKit::WebIDBConnectionToServer::didGetAllRecords):
        (WebKit::WebIDBConnectionToServer::didOpenCursor):
        (WebKit::WebIDBConnectionToServer::didIterateCursor):
        (WebKit::preregisterSandboxExtensionsIfNecessary): Deleted.

2018-11-16  Don Olmstead  <don.olmstead@sony.com>

        Add USE(LIBWPE) to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=191401

        Reviewed by Michael Catanzaro.

        Rename PlatformDisplayWPE to PlatformDisplayLibWPE.

        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp:
        (WebKit::AcceleratedSurfaceWPE::initialize):
        * WebProcess/wpe/WebProcessMainWPE.cpp:

2018-11-16  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Add API to enable/disable device mocks
        https://bugs.webkit.org/show_bug.cgi?id=191699

        This basically us to test MediaStream/WebRTC support without
        requiring cameras or microphones and is quite useful.

        Also fix the GStreamerAudioMock by:
          - Stop setting `leaky-upstream` on the GStreamerCapturer queue,
            this was usefull when we were trying to bring the MediaStream
            sources inside the main pipeline, it is not the case anymore
            (and not doable with latest version of LibWebRTC).
          - Use a 'ticks' wave on the gstreamer audiotestsrc so the test
            stream is similar to what Apple port does.

        Reviewed by Xabier Rodriguez-Calvar.

        The mocks are already tested and the API is really simple.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_mock_capture_devices):
        (webkit_settings_set_enable_mock_capture_devices):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:

2018-11-16  Thibault Saunier  <tsaunier@igalia.com>

        [GTK][WPE] Add "WebKitDeviceInfoPermissionRequest.h" into webkit2.h
        https://bugs.webkit.org/show_bug.cgi?id=191744

        It should always have been there.

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/webkit2.h:

2018-11-16  Antoine Quint  <graouts@apple.com>

        PointerEvents should not require touch event listeners to be registered
        https://bugs.webkit.org/show_bug.cgi?id=191333
        <rdar://problem/45857523>

        Reviewed by Dean Jackson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateTouchEventTracking):
        (WebKit::WebPageProxy::touchEventTrackingType const):
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::handleTouchEventAsynchronously):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:

2018-11-15  Myles C. Maxfield  <mmaxfield@apple.com>

        WKPreferencesSetFontSmoothingLevel doesn't actually do anything
        https://bugs.webkit.org/show_bug.cgi?id=191708

        Reviewed by Simon Fraser.

        Delete the symbol because no one calls it and it doesn't do anything

        * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb:
        * Shared/FontSmoothingLevel.h: Removed.
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toFontSmoothingLevel): Deleted.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetFontSmoothingLevel): Deleted.
        (WKPreferencesGetFontSmoothingLevel): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/WebPreferences.h:
        * WebKit.xcodeproj/project.pbxproj:
        * mac/WebKit2.order:

2018-11-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238244.

        Caused High Sierra test runs to fail early with 50 crashes and
        casued 25 API failures.

        Reverted changeset:

        "[css-logical] Implement flow-relative margin, padding and
        border shorthands"
        https://bugs.webkit.org/show_bug.cgi?id=188697
        https://trac.webkit.org/changeset/238244

2018-11-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused WebInspectorProxy code
        https://bugs.webkit.org/show_bug.cgi?id=191674

        Reviewed by Dean Jackson.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::closeFrontendPageAndWindow):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::setInspectorWindowFrame): Deleted.
        (WebKit::WebInspectorProxy::inspectorWindowFrame): Deleted.
        * WebProcess/WebPage/WebInspector.h:

2018-11-15  Ryosuke Niwa  <rniwa@webkit.org>

        Enable process swap on cross-site navigation by default on macOS
        https://bugs.webkit.org/show_bug.cgi?id=191572

        Reviewed by Chris Dumez.

        Enabled the feature by default on macOS.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2018-11-15  Chris Dumez  <cdumez@apple.com>

        IndexedDB.IndexedDBTempFileSize API test times out with process prewarming enabled
        https://bugs.webkit.org/show_bug.cgi?id=191671
        <rdar://problem/46086062>

        Reviewed by Alex Christensen.

        Enabling process prewarming caused IndexedDB.IndexedDBTempFileSize API to time out and print
        the following line:
        "Attempted to create a NetworkLoad with a session (id=2) that does not exist."

        This actually identified a pre-existing bug with our handling of non-default data store.
        Whenever a page starts using a data store, we call WebProcessPool::pageBeginUsingWebsiteDataStore()
        which will call NetworkProcessProxy::addSession() if the network process was already started
        to let the network process know about this non-default session. There are several issues with the
        current model:
        1. If the network process was not created yet when pageBeginUsingWebsiteDataStore() is called,
           then the network process will not know about the non-default session when it actually gets
           started later on. This is unlikely to happen in practice, except in case of network process
           crash because we create the network process as soon as we initialize the first WebProcessProxy.
        2. Even if we successfuly managed to register the session with the network process proxy, we get
           in trouble if the network process crashes or is terminated later on as we do not re-register
           those sessions with the new network process.

        To address these 2 issues, WebProcessPool::ensureNetworkProcess() now takes care of registering
        all the non-default sessions (that are associated with this process pool) with the new network
        process. The WebProcessPool knows about these sessions because it adds them to m_sessionToPagesMap
        whenever WebProcessPool::pageBeginUsingWebsiteDataStore() is called, even if the network process
        proxy was not created yet.

        The reason the IndexedDB.IndexedDBTempFileSize API test was failing was because it did:
        1. A load in a WebView V1 with a non-default session
        2. Process prewarming kicked in after this load and would create a new WebProcessProxy.
        3. Terminate the network process
        4. Another load in a WebView V2 with the same non-defaut session, which would reuse the
          prewarmed process. Because the network process was terminated, constructing the new
          page would not register the session ID with the new network process when
          pageBeginUsingWebsiteDataStore() is called.
        -> The load would hang because the new network process would not know about the
           non-default session when started later on.

        The bug was previously hidden without process prewarming because step 4 would create a *new*
        WebProcessProxy and WebProcessPool::initializeNewWebProcess() would call ensureNetworkProcess()
        so that pageBeginUsingWebsiteDataStore() would successfuly register the session with the
        network process later on.

        I wrote a second API test (WebKit.DoLoadWithNonDefaultDataStoreAfterTerminatingNetworkProcess)
        to demonstrate the pre-existing bug without process prewarming enabled.

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

2018-11-15  Vivek Seth  <v_seth@apple.com>

        Create feature flag (HTTPS_UPGRADE)
        https://bugs.webkit.org/show_bug.cgi?id=191613
        <rdar://problem/45851068>

        Reviewed by Dean Jackson.

        * config.h:

2018-11-15  Chris Dumez  <cdumez@apple.com>

        Regression(r238215) WKProcessPool.WarmInitialProcess API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=191693

        Reviewed by Alex Christensen.

        Allow *explicit* process prewarming to construct the default data store if necessary or we would
        not be obeying the client's request. Only automatic process prewarming should avoid constructing
        the default data store unnecessarily to avoid causing memory regressions.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextWarmInitialProcess):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _warmInitialProcess]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::prewarmProcess):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToOneProcess):

2018-11-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, comment improvement over r238166.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.h:

2018-11-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Use a real nonce for CTAPHID_INIT
        https://bugs.webkit.org/show_bug.cgi?id=191533
        <rdar://problem/46103502>

        Reviewed by Brent Fulgham.

        Use a real nonce for CTAPHID_INIT request according to:
        https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html#ctaphid_init-0x06.
        The challenge here is the new transaction needs to start in the next runloop otherwise a dead lock will form:
        wrong nonce -> new transaction -> new nonce -> write init request -> read init response from last run as it
        piped in the run loop -> wrong nonce of course -> ...
        To break the above dead lock, we have to start the new transaction in the next run. However, that isn't
        sufficient as the arrived init response will be piped in HidConnection::m_inputReports, which is designed
        on purpose to store any data packets within (initialized, terminated) time interval to prevent data loss in
        the case when HidConnection::registerDataReceivedCallback is called after the first data packet's arrival.
        In order to break the dead lock completely, HidConnection::invalidateCache will bnnne called prior to every
        send to delete any potential init response from last run. HidConnection::invalidateCache is not necessary
        for other protocols though. The above scenario is more or less a design flaw in CTAP HID.

        Of course, all above scenarios are covered in our mock tests.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/Cocoa/HidConnection.h:
        (WebKit::HidConnection::invalidateCache):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::send):
        (WebKit::MockHidConnection::parseRequest):
        (WebKit::MockHidConnection::feedReports):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.h:
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h:
        * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp:
        (WebKit::CtapHidDriver::Worker::transact):
        (WebKit::CtapHidDriver::CtapHidDriver):
        (WebKit::CtapHidDriver::transact):
        (WebKit::CtapHidDriver::continueAfterChannelAllocated):
        (WebKit::CtapHidDriver::returnResponse):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.h:

2018-11-15  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        Add a CSSLogicalEnabled runtime flag.

        * Shared/WebPreferences.yaml:

2018-11-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria::AuthenticatorAttachment should be optional
        https://bugs.webkit.org/show_bug.cgi?id=191522

        Reviewed by Brent Fulgham.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManagerInternal::collectTransports):

2018-11-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Make Accept-Languages header look more like other browsers
        https://bugs.webkit.org/show_bug.cgi?id=191614

        Reviewed by Carlos Garcia Campos.

        This changes our Accept-Language header to better match other browsers, from something
        like this:

        Accept-Language: en-us, en;q=0.90, es-es;q=0.80, es;q=0.70

        to something like this:

        Accept-Language: en-US,en;q=0.90,es-ES;q=0.80,es;q=0.70

        There's no particular motivation for this change. I just noticed we were different for no
        clear reason.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::buildAcceptLanguages):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_set_preferred_languages):

2018-11-15  Daniel Bates  <dabates@apple.com>

        [iOS] Shift + Tab does not focus previous field
        https://bugs.webkit.org/show_bug.cgi?id=191596
        <rdar://problem/45892053>

        Reviewed by Wenson Hsieh.

        Wire up the the tab and shift + tab key commands to the WKWebView/WKContentView's
        action forwarding mechanism. Also rename -_prevAccessoryTab to -_previousAccessoryTab.

        * Platform/spi/ios/UIKitSPI.h: Add more SPI.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView keyCommands]):
        (-[WKContentView _nextAccessoryTabForWebView:]): Added.
        (-[WKContentView _previousAccessoryTabForWebView:]): Added.
        (-[WKContentView _nextAccessoryTab:]): Deleted.
        (-[WKContentView _prevAccessoryTab:]): Deleted.

2018-11-15  Keith Rollin  <krollin@apple.com>

        Delete old .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191669
        <rdar://problem/46081994>

        Reviewed by Chris Dumez.

        .xcfilelist files were created and added to the Xcode project files in
        https://trac.webkit.org/changeset/238008/webkit. However, they caused
        build issues and they were removed from the Xcode projects in
        https://trac.webkit.org/changeset/238055/webkit. This check-in removes
        the files from the repository altogether. They'll ultimately be
        replaced with new files with names that indicate whether the
        associated files are inputs to the Run Script phase or are files
        created by the Run Script phase.

        * DerivedSources.xcfilelist: Removed.
        * UnifiedSources.xcfilelist: Removed.

2018-11-15  Frederic Wang  <fwang@igalia.com>

        [WebAuthN] Make AuthenticatorManager
        https://bugs.webkit.org/show_bug.cgi?id=189279

        Unreviewed build fix.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm: Add missing header.
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm: Ditto.
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp: Ditto.

2018-11-14  Keith Rollin  <krollin@apple.com>

        Move scripts for Derived and Unified Sources to external files
        https://bugs.webkit.org/show_bug.cgi?id=191670
        <rdar://problem/46082278>

        Reviewed by Keith Miller.

        Move the scripts in the Generate Derived Sources and Generate Unified
        Sources Run Script phases from the Xcode projects to external shell
        script files. Then invoke those scripts from the Run Script phases.
        This refactoring is being performed to support later work that will
        invoke these scripts in other contexts.

        The scripts were maintained as-is when making the move. I did a little
        reformatting and added 'set -e' to the top of each file, but that's
        it.

        * Scripts/generate-derived-sources.sh: Added.
        * Scripts/generate-unified-sources.sh: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.DecidePolicyForNavigationActionForHyperlinkThatRedirects API fails when PSON is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191640

        Reviewed by Alex Christensen.

        The issue was that when process-swapping on a redirect, the parameters provided by the new
        WebContent process for navigationActionData / originatingFrameInfoData / frameSecurityOrigin
        are not correct because it does not have sufficient information (it does not know a swap
        happened).

        To address the issue, we now store the navigationActionData / originatingFrameInfoData /
        frameSecurityOrigin on the Navigation object whenever decidePolicyForNavigationAction is
        called. If the decidePolicyForNavigationAction is for a redirect, use the ones we stored
        on the Navigation object instead of the ones provided by the WebContent process. In case
        of redirect, those do not change anyway.

        This fixes all WebKit.DecidePolicyForNavigationAction* tests with PSON enabled.

        * UIProcess/API/APINavigation.h:
        (API::Navigation::currentRequestIsRedirect const):
        (API::Navigation::wasUserInitiated const):
        (API::Navigation::shouldForceDownload const):
        (API::Navigation::treatAsSameOriginNavigation const):
        (API::Navigation::hasOpenedFrames const):
        (API::Navigation::openedViaWindowOpenWithOpener const):
        (API::Navigation::opener const):
        (API::Navigation::requesterOrigin const):
        (API::Navigation::lockHistory const):
        (API::Navigation::lockBackForwardList const):
        (API::Navigation::clientRedirectSourceForHistory const):
        (API::Navigation::setLastNavigationAction):
        (API::Navigation::lastNavigationAction const):
        (API::Navigation::setOriginatingFrameInfo):
        (API::Navigation::originatingFrameInfo const):
        (API::Navigation::setDestinationFrameSecurityOrigin):
        (API::Navigation::destinationFrameSecurityOrigin const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/WebPageProxy.h:

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.WebsiteDataStoreCustomPaths API test is failing when enabling process prewarming
        https://bugs.webkit.org/show_bug.cgi?id=191638

        Reviewed by Alex Christensen.

        WebProcessPool::prewarmProcess() should not create the default WebSite Data Store if it
        does not exist yet. This is bad for memory consumption and it is what was causing this
        API test to fail.

        WebProcessPool::prewarmProcess() now tries to use the following data stores in this
        order of preference:
        1. WebProcessPool::m_websiteDataStore (aka this process pool's primary data store)
        2. The data store of the last WebProcessProxy that was created
        3. The default data store if it exists

        If no suitable data store is found, we cancel the process prewarming and log a console
        message instead.

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

2018-11-14  Timothy Hatcher  <timothy@apple.com>

        Enabled dark mode CSS support by default.
        https://bugs.webkit.org/show_bug.cgi?id=191609
        rdar://problem/46046861

        Reviewed by Megan Gardner.

        * Shared/WebPreferences.yaml: Set DarkModeCSSEnabled's defaultValue to true.

2018-11-14  Timothy Hatcher  <timothy@apple.com>

        Default the view background color and text color to different values when in dark mode.
        https://bugs.webkit.org/show_bug.cgi?id=191607
        rdar://problem/46045854

        Reviewed by Dean Jackson.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::backgroundColor const): Use controlBackgroundColor.
        (WebKit::WebViewImpl::updateLayer): Simplified and use backgroundColor() getter.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Drop backgroundColor.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDrawsBackground): Drop backgroundColor.

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Pass Inspector::FrontendChannel as a reference connect/disconnect methods
        https://bugs.webkit.org/show_bug.cgi?id=191612

        Reviewed by Matt Baker.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::connect):
        (WebKit::WebAutomationSession::disconnect):
        (WebKit::WebAutomationSession::terminate):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/WebPageDebuggable.cpp:
        (WebKit::WebPageDebuggable::connect):
        (WebKit::WebPageDebuggable::disconnect):
        * UIProcess/WebPageDebuggable.h:
        * UIProcess/WebPageInspectorController.cpp:
        (WebKit::WebPageInspectorController::connectFrontend):
        (WebKit::WebPageInspectorController::disconnectFrontend):
        * UIProcess/WebPageInspectorController.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::close):
        * WebProcess/WebPage/WebPageInspectorTarget.cpp:
        (WebKit::WebPageInspectorTarget::connect):
        (WebKit::WebPageInspectorTarget::disconnect):

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed attempted wincairo build fix after 238192.

        * WebProcess/WebPage/WebPageInspectorTargetController.h:
        * WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.cpp:

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Follow-up: Keep Disabling Process Swap for Local Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=191494
        <rdar://problem/45469854>

        Reviewed by Devin Rousso.

        Continue to have the Local Inspector disable PSON while open
        until support is added.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::hasLocalInspectorFrontend const):
        (WebKit::WebPageProxy::setHasLocalInspectorFrontend):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openFrontendConnection):
        (WebKit::WebInspector::closeFrontendConnection):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setHasLocalInspectorFrontend):
        * WebProcess/WebPage/WebPage.h:

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Remote Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191494
        <rdar://problem/45469854>

        Reviewed by Devin Rousso.

        To support process swapping a slim Web Inspector backend lives in the UIProcess.
        The Web Inspector frontend connects to it and is told about sub-targets, namely
        pages, that it can further connect to. When performing a process swap the backend
        tells the frontend to destroy existing targets and create new targets.

        In the UIProcess the WebPageProxy has a WebPageInspectorController, with a single
        TargetAgent holding InspectorTargetProxies to targets it knows about. Inspector
        protocol messages go through this inspector controller and are routed to the
        WebPage and its WebCore::Page's InspectorController. The WebPageProxy decides
        when to close and expose new page targets during process swap, or basically
        any time it reconnects to a WebProcess. So this patch also makes Web Inspector
        stay alive and reconnect to a page when the inspected page crashes!

        In the WebContentProcess the WebPage has a WebPageInspectorTarget. It also
        has a WebPageInspectorTargetController in anticipation of further sub-targets
        within the page (workers, frames) but none exist at the moment. The WebPage
        relies on the WebPageProxy to know when to expose this target as a debuggable.

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        New files.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Remote inspector state can now stay in the UIProcess and does not need to
        be passed down to the WebContentProcess.

        * UIProcess/WebPageDebuggable.cpp: Copied from Source/WebCore/page/PageDebuggable.cpp.
        (WebKit::WebPageDebuggable::WebPageDebuggable):
        (WebKit::WebPageDebuggable::name const):
        (WebKit::WebPageDebuggable::url const):
        (WebKit::WebPageDebuggable::hasLocalDebugger const):
        (WebKit::WebPageDebuggable::connect):
        (WebKit::WebPageDebuggable::disconnect):
        (WebKit::WebPageDebuggable::dispatchMessageFromRemote):
        (WebKit::WebPageDebuggable::setIndicating):
        (WebKit::WebPageDebuggable::setNameOverride):
        * UIProcess/WebPageDebuggable.h: Copied from Source/WebCore/page/PageDebuggable.h.
        Remote debuggable entry point into the UIProcess for a page.
        This is pretty much identical to the PageDebuggable in WebCore.

        * Scripts/webkit/messages.py:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::createInspectorTarget):
        (WebKit::WebPageProxy::destroyInspectorTarget):
        (WebKit::WebPageProxy::sendMessageToInspectorFrontend):
        (WebKit::WebPageProxy::setIndicating):
        (WebKit::WebPageProxy::allowsRemoteInspection const):
        (WebKit::WebPageProxy::setAllowsRemoteInspection):
        (WebKit::WebPageProxy::remoteInspectionNameOverride const):
        (WebKit::WebPageProxy::setRemoteInspectionNameOverride):
        (WebKit::WebPageProxy::remoteInspectorInformationDidChange):
        (WebKit::WebPageProxy::clearInspectorTargets):
        (WebKit::WebPageProxy::createInspectorTargets):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::inspectorController):
        (WebKit::WebPageProxy::allowsRemoteInspection const): Deleted.
        (WebKit::WebPageProxy::remoteInspectionNameOverride const): Deleted.
        Own more inspector state in the UIProcess including a debuggable and inspector controller.

        * UIProcess/WebPageInspectorController.h: Added.
        * UIProcess/WebPageInspectorController.cpp: Added.
        (WebKit::WebPageInspectorController::WebPageInspectorController):
        (WebKit::WebPageInspectorController::pageClosed):
        (WebKit::WebPageInspectorController::hasLocalFrontend const):
        (WebKit::WebPageInspectorController::hasRemoteFrontend const):
        (WebKit::WebPageInspectorController::connectFrontend):
        (WebKit::WebPageInspectorController::disconnectFrontend):
        (WebKit::WebPageInspectorController::disconnectAllFrontends):
        (WebKit::WebPageInspectorController::dispatchMessageFromFrontend):
        (WebKit::WebPageInspectorController::setIndicating):
        (WebKit::WebPageInspectorController::clearTargets):
        (WebKit::WebPageInspectorController::createInspectorTarget):
        (WebKit::WebPageInspectorController::destroyInspectorTarget):
        (WebKit::WebPageInspectorController::sendMessageToInspectorFrontend):
        InspectorController with a single TargetAgent in the UIProcess.

        * UIProcess/WebPageInspectorTargetAgent.h:
        * UIProcess/WebPageInspectorTargetAgent.cpp:
        (WebKit::WebPageInspectorTargetAgent::WebPageInspectorTargetAgent):
        (WebKit::WebPageInspectorTargetAgent::frontendChannel):
        Target agent implementation.

        * UIProcess/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::create):
        (WebKit::InspectorTargetProxy::InspectorTargetProxy):
        (WebKit::InspectorTargetProxy::connect):
        (WebKit::InspectorTargetProxy::disconnect):
        (WebKit::InspectorTargetProxy::sendMessageToTargetBackend):
        * UIProcess/InspectorTargetProxy.h:
        UIProcess proxy for an InspectorTarget in the WebContentProcess.

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

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):
        (WebKit::WebPage::connectInspector):
        (WebKit::WebPage::disconnectInspector):
        (WebKit::WebPage::sendMessageToTargetBackend):
        (WebKit::WebPage::setIndicating):
        (WebKit::WebPage::setAllowsRemoteInspection): Deleted.
        (WebKit::WebPage::setRemoteInspectionNameOverride): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        * WebProcess/WebPage/WebPageInspectorTarget.h:
        * WebProcess/WebPage/WebPageInspectorTarget.cpp:
        (WebKit::WebPageInspectorTarget::WebPageInspectorTarget):
        (WebKit::WebPageInspectorTarget::identifier const):
        (WebKit::WebPageInspectorTarget::connect):
        (WebKit::WebPageInspectorTarget::disconnect):
        (WebKit::WebPageInspectorTarget::sendMessageToTargetBackend):
        InspectorTarget for this WebPage.

        * WebProcess/WebPage/WebPageInspectorTargetController.cpp: Added.
        (WebKit::WebPageInspectorTargetController::WebPageInspectorTargetController):
        (WebKit::WebPageInspectorTargetController::~WebPageInspectorTargetController):
        (WebKit::WebPageInspectorTargetController::addTarget):
        (WebKit::WebPageInspectorTargetController::removeTarget):
        (WebKit::WebPageInspectorTargetController::connectInspector):
        (WebKit::WebPageInspectorTargetController::disconnectInspector):
        (WebKit::WebPageInspectorTargetController::sendMessageToTargetBackend):
        (WebKit::WebPageInspectorTargetController::sendMessageToTargetFrontend):
        * WebProcess/WebPage/WebPageInspectorTargetController.h:
        * WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.h:
        * WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.cpp:
        (WebKit::WebPageInspectorTargetFrontendChannel::create):
        (WebKit::WebPageInspectorTargetFrontendChannel::WebPageInspectorTargetFrontendChannel):
        (WebKit::WebPageInspectorTargetFrontendChannel::sendMessageToFrontend):
        Preparation for more target managment in the WebContentProcess.

2018-11-14  Alex Christensen  <achristensen@webkit.org>

        Add SPI to show a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=191604

        Reviewed by Andy Estes.

        Safari has a case where it shows safe browsing warnings for a reason other than being told to by the SafeBrowsing framework.
        Because safe browsing is moving to WebKit, we will have Safari call this WebKit SPI in that case.
        The warning looks a little different, so I had to change the structure of a SafeBrowsingResult and the location of the string processing,
        but the existing behavior is the same as verified by existing unit tests.  I added a unit test to verify behavior of the new SPI.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarning:completionHandler:]):
        (+[WKWebView _confirmMalwareSentinel]):
        (+[WKWebView _visitUnsafeWebsiteSentinel]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm: Removed.
        * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm: Copied from Source/WebKit/UIProcess/Cocoa/SafeBrowsingResultCocoa.mm.
        (WebKit::malwareDetailsBase):
        (WebKit::learnMoreURL):
        (WebKit::reportAnErrorBase):
        (WebKit::localizedProvider):
        (WebKit::SafeBrowsingWarning::visitUnsafeWebsiteSentinel):
        (WebKit::SafeBrowsingWarning::confirmMalwareSentinel):
        (WebKit::replace):
        (WebKit::addLinkAndReplace):
        (WebKit::reportAnErrorURL):
        (WebKit::malwareDetailsURL):
        (WebKit::safeBrowsingTitleText):
        (WebKit::safeBrowsingWarningText):
        (WebKit::safeBrowsingDetailsText):
        (WebKit::SafeBrowsingWarning::SafeBrowsingWarning):
        (WebKit::learnMore): Deleted.
        (WebKit::SafeBrowsingResult::SafeBrowsingResult): Deleted.
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingWarning:completionHandler:]):
        (-[WKSafeBrowsingWarning addContent]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):
        (-[WKSafeBrowsingWarning clickedOnLink:]):
        (-[WKSafeBrowsingTextView initWithAttributedString:forWarning:]):
        (confirmMalwareSentinel): Deleted.
        (visitUnsafeWebsiteSentinel): Deleted.
        (replace): Deleted.
        (addLinkAndReplace): Deleted.
        (reportAnErrorURL): Deleted.
        (malwareDetailsURL): Deleted.
        (titleText): Deleted.
        (warningText): Deleted.
        (detailsText): Deleted.
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingResult:completionHandler:]): Deleted.
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showSafeBrowsingWarning):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::showSafeBrowsingWarning):
        * UIProcess/SafeBrowsingResult.h: Removed.
        * UIProcess/SafeBrowsingWarning.h: Copied from Source/WebKit/UIProcess/SafeBrowsingResult.h.
        (WebKit::SafeBrowsingWarning::create):
        (WebKit::SafeBrowsingWarning::title const):
        (WebKit::SafeBrowsingWarning::warning const):
        (WebKit::SafeBrowsingWarning::details const):
        (WebKit::SafeBrowsingResult::create): Deleted.
        (WebKit::SafeBrowsingResult::isPhishing const): Deleted.
        (WebKit::SafeBrowsingResult::isMalware const): Deleted.
        (WebKit::SafeBrowsingResult::isUnwantedSoftware const): Deleted.
        (WebKit::SafeBrowsingResult::url const): Deleted.
        (WebKit::SafeBrowsingResult::provider const): Deleted.
        (WebKit::SafeBrowsingResult::localizedProviderName const): Deleted.
        (WebKit::SafeBrowsingResult::malwareDetailsURLBase const): Deleted.
        (WebKit::SafeBrowsingResult::reportAnErrorURLBase const): Deleted.
        (WebKit::SafeBrowsingResult::learnMoreURL const): Deleted.
        (WebKit::SafeBrowsingResult::needsSafeBrowsingWarning const): Deleted.
        (): Deleted.
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
        (WebKit::WebFramePolicyListenerProxy::use):
        * UIProcess/WebFramePolicyListenerProxy.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy):
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        (WebKit::WebFrameProxy::didHandleContentFilterUnblockNavigation):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::create):
        (WebKit::WebFrameProxy::page const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        * WebKit.xcodeproj/project.pbxproj:

2018-11-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] A few drag and drop tests are crashing after r238146
        https://bugs.webkit.org/show_bug.cgi?id=191617

        Reviewed by Dean Jackson.

        The notion of temporarily suppressing the selection assistant was introduced during iOS drag and drop
        development as a way of allowing both the selection view and dropped content snapshot to fade in simultaneously
        during a drop in an editable element. r238146 piggy-backs on this mechanism by changing selection suppression
        state when an element is focused, when the selection changes, and when an element is blurred, depending on
        whether the currently focused element is transparent.

        However, in the case where the selection assistant is suppressed due to a running drop animation, if focus moves
        to an element that is not fully transparent, we end up prematurely unsuppressing the text selection assistant.
        This subsequently causes selection UI to immediately show up after a drop instead of animating in alongside a
        snapshot of the inserted document fragment, if the drop moved focus to an editable element.

        A number of drag and drop tests on iOS exercised this codepath by dragging content into editable fields and/or
        moving content between editable elements in a web view. These tests began to crash due to selection views and
        the accompanying callout bar appearing earlier than usual, which triggers an unrelated UIKit assertion in
        <https://webkit.org/b/190401>.

        This patch fixes the failing tests by refactoring our selection assistant suppression code. Instead of
        maintaining a single `BOOL` flag indicating whether the selection is suppressed, we use an `OptionSet` of
        `SuppressSelectionAssistantReason`s, which (at the moment) only include (1) a running drop animation, and (2)
        focusing a transparent element. The text selection assistant is considered suppressed when either of the reasons
        apply. This allows us to correctly handle a drop animation that occurs simultaneously as an element is focused
        without unsuppressing the selection assistant early, and also allows us to handle selection assistant
        suppression in more nuanced ways, depending on the suppression reason.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _displayFormNodeInputView]):

        Only prevent zooming to the focused element during drop if we're suppressing the selection assistant due to
        focusing a transparent element. In the case of a drop, we still want to allow scrolling and zooming.

        (-[WKContentView canShowNonEmptySelectionView]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsNearMarkedText:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView _startAssistingKeyboard]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView _shouldSuppressSelectionCommands]):
        (-[WKContentView _beginSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _stopSuppressingSelectionAssistantForReason:]):

        Add helper methods for adding or removing selection assistant suppression reasons. When the last selection
        assistant suppression reason is removed, we activate the selection assistant, and conversely, when the first
        suppression reason is added, we deactivate the selection assistant.

        (-[WKContentView _didConcludeEditDataInteraction:]):
        (-[WKContentView _didPerformDragOperation:]):
        (-[WKContentView dropInteraction:performDrop:]):
        (-[WKContentView suppressAssistantSelectionView]): Deleted.
        (-[WKContentView setSuppressAssistantSelectionView:]): Deleted.

2018-11-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WebKit2] Hook up some more editing actions (-_pasteAndMatchStyle:, -makeTextWritingDirectionNatural:)
        https://bugs.webkit.org/show_bug.cgi?id=191605
        <rdar://problem/45813991>

        Reviewed by Dean Jackson.

        Hook up a couple of editing actions on iOS and macOS. The `-pasteAndMatchStyle:` selector is privately declared
        in UIKit, but does not exist on macOS; as such, add `-_pasteAndMatchStyle:` as SPI on WKWebView, and
        additionally implement the unprefixed version, `-pasteAndMatchStyle:`, on iOS.

        Since `-makeTextWritingDirectionNatural:` is already declared on both iOS and macOS (SPI on UIResponder and API
        on macOS, respectively) we simply implement the unprefixed variant on both platforms.

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

2018-11-14  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (WEBPROCESS_WINDOWSERVER_BLOCKING): requestAnimationFrame Stops Completing
        https://bugs.webkit.org/show_bug.cgi?id=190884

        Reviewed by Dean Jackson.

        Since the Web page currently owns the display link on the UI process side, the display link will be
        deleted in the UI process when a Web page is closed. This is incorrect, since a display link can be
        reused between Web pages in the WebContent process. This patch moves the ownership of the UI process
        display links to the Web process object to address this issue. Also, the display ID of the display
        being updated is included in the message to the WebContent process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::displayLinkCallback):
        * UIProcess/mac/DisplayLink.h:
        (WebKit::DisplayLink::displayID const):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::startDisplayLink): Deleted.
        (WebKit::WebPageProxy::stopDisplayLink): Deleted.
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::startDisplayLink):
        (WebKit::WebProcessProxy::stopDisplayLink):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::create):
        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):
        (WebKit::DrawingArea::createDisplayRefreshMonitor):
        (WebKit::DrawingArea::displayWasRefreshed): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::displayWasRefreshed):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        Client should be able to disable PSON even if the experimental feature is on by default
        https://bugs.webkit.org/show_bug.cgi?id=191634

        Reviewed by Dean Jackson.

        Instead of overriding the APIProcessPoolConfiguration's m_processSwapsOnNavigation flag to true
        when the experimental is enabled, use a separate flag to store this information. If the client
        explicitly sets the APIProcessPoolConfiguration's m_processSwapsOnNavigation flag then we obey
        the client's request, otherwise, we fall back to using the state from experimental features.

        This allows:
        - API tests to explicitely disable PSON / Process prewarming even if those are on by default
          in experimental features.
        - If the client does not set those flags on the APIProcessPoolConfiguration (Safari for e.g.),
          then the experimental feature flag still fully controls the feature.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.ApplicationManifestBasic API test is failing when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191602

        Reviewed by Alex Christensen.

        Add support for process swapping for a [WKWebView loadHTML:] load by storing
        the necessary data on the API::Navigation and doing a loadData() instead of
        a loadRequest() after process swapping when this data is present on the
        navigation.

        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::Navigation):
        * UIProcess/API/APINavigation.h:
        (API::Navigation::create):
        (API::Navigation::substituteData const):
        * UIProcess/WebNavigationState.cpp:
        (WebKit::WebNavigationState::createLoadDataNavigation):
        * UIProcess/WebNavigationState.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):

2018-11-14  Antti Koivisto  <antti@apple.com>

        Align Mac WK2 layer flush throttling with iOS
        https://bugs.webkit.org/show_bug.cgi?id=191632

        Reviewed by Zalan Bujtas.

        Currently Mac WK2 uses WebCore side throttling implementation in RenderLayerCompositor. This code has
        throttling timer per-frame while the actual decision making and layer flushes itself are per page. These
        timers generate way more flushes than expected in presence of multiple frames. There are also bugs in how
        flushing state is updated when frames are created dynamically.

        On iOS WK2 throttling is implemented on WebKit side and controlled by a per-page timer. Recent fixes also
        make this implementation visually fast. We should align the Mac implementation and eventually unify them.

        This patch implements throttling in TiledCoreAnimationDrawingArea mirroring the iOS RemoteLayerTreeDrawingArea
        implementation. There are some adjustments for platform differences (local vs remote layers) and we continue
        using runloop observer for the actual flushes. Timings are as in the existing Mac code.

        The patch appears to be a significant performance progression.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::setLayerTreeStateIsFrozen):

        Schedule an immediate flush when layers are unfrozen.

        (WebKit::TiledCoreAnimationDrawingArea::scheduleCompositingLayerFlush):
        (WebKit::TiledCoreAnimationDrawingArea::scheduleCompositingLayerFlushImmediately):

        Track pending flushes with m_hasPendingFlush bit.
        Delay flush if the flush throttling timer is active. Start it if we throttling but it is not active yet.

        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

        Clear m_hasPendingFlush if the flush succeeded.
        Restart the throttling timer if we are still throttling.
        Manage runloop observer invalidation here instead of the caller (and stop returning value).

        (WebKit::TiledCoreAnimationDrawingArea::layerFlushRunLoopCallback):
        (WebKit::TiledCoreAnimationDrawingArea::adjustLayerFlushThrottling):

        Returning 'true' here disables WebCore side throttling code.

        Start or stop the throttling timer on state changes.

        (WebKit::TiledCoreAnimationDrawingArea::layerFlushThrottlingIsActive const):

        This is used to control style and layout timers on WebCore side. Return false on frozen
        state since unfreezing depends on style and layout.

        (WebKit::TiledCoreAnimationDrawingArea::startLayerFlushThrottlingTimer):
        (WebKit::TiledCoreAnimationDrawingArea::layerFlushThrottlingTimerFired):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.WKHTTPCookieStoreWithoutProcessPool API test is failing with process prewarming is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191624

        Reviewed by Alex Christensen.

        Stop setting the WebProcessPool's primary data store (m_websiteDataStore) to the default one in
        WebProcessPool::prewarmProcess(). We did not really need to, we can pass the default data store
        to the new WebPageProxy without having to set m_websiteDataStore. m_websiteDataStore only gets
        set upon constructor if thr default data store already exists or later on when creating a WebPage
        that uses the default data store.

        In the case of the API test, the following was happening:
        1. Create an ephemeral data store EDS
        2. Create a WebView V1 using datastore EDS
        3. Do a load in V1
        4. Process prewarming would kick in and wrongly associated V1's process pool PP1 with the default data store
        5. Create/Get the default datastore and set a few cookies on it
        6. Create a WebView V2 using default datastore and a fresh new process pool PP2
        7. Do a load in V2 and expect the cookies to be there

        In HTTPCookieStore::setCookie() that is called at step 5, we call:
        m_owningDataStore->processPoolForCookieStorageOperations()

        In this case, m_owningDataStore is the default datastore and this call would previously return null because
        there is no WebProcessPool yet associated with the default datastore. However, with the process prewarming
        bug at step 4, the process pool PP1 would be returned since it was wrongly associated with the default
        data store. As a result, we would call setCookie() on PP1's WebCookieManagerProxy and this would fail
        because PP1's network process knows nothing about this session ID (it was only ever used with an ephemeral
        session).

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

2018-11-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support CTAP HID authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=188623
        <rdar://problem/43353777>

        Reviewed by Brent Fulgham and Chris Dumez.

        This patch introduces a primitive support of CTAP HID authenticators for WebAuthN in macOS.
        It involves low level HID device management&communication, high level CTAP HID authenticator
        management&communication, and mock testing. The above three aspects will be covered in details:
        1) Low level HID device management&communication: HidService&HidConnection
        It relies on IOHIDManager to discover appropriate hid devices by passing a matching dictionary:
        { PrimaryUsagePage: 0xf1d0, PrimaryUsage: 0x01}. For communication, it utilizes HID reports.
        To send a report, it calls IOHIDDeviceSetReport since the async version is not implemented.
        To recieve a report, it calls IOHIDDeviceRegisterInputReportCallback to asynchronously wait
        for incoming reports.
        Here is the corresponding reference:
        https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html#//apple_ref/doc/uid/TP40000970-CH214-SW2
        2) High level CTAP HID authenticator management&communication: HidService&CtapHidDriver
        Whenever an appropriate hid device is discovered by IOHIDManager, an AuthenticatorGetInfo command
        is sent to the device to determine properties of the authenticator, says, which version of protocol
        it supports, i.e. CTAP or U2F. So far, we only support CTAP authenticators. Once the authenticator
        is determined to support CTAP, we then instantiate CtapHidAuthenticator which will then take care
        of even higher level WebAuthN requests&responses.
        Binaries are constructed and packaged according to the CTAP HID porotocol. CtapHidDriver takes care
        of concurrency and channels, i.e. allocating channel and establishing the actual request/response
        transaction. At the meantime, CtapHidDriver::Worker is then responsible for each single transaction.
        Here is the corresponding reference:
        https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html#usb.
        3) Mock Testing: MockHidService & MockHidConnection
        A CTAP hid authenticator is simulated within MockHidConnection with options of specifying specific
        error scenarios and of course could take care of successful cases. Four stages are presented in the
        simulated authenticator to reflect: a) allocating channel for AuthenticatorGetInfo, b) sending
        AuthenticatorGetInfo, c) allocating channel for actual request, and d) sending the actual request.

        Besides implementing the above, it also does a few other things:
        1) Make AuthenticatorManager::clearState asynchronous to avoid cyclic dependency:
        Authenticator::returnResponse => AuthenticatorManager::respondReceived => AuthenticatorManager::clearState
        => Authenticator::~Authenticator.
        2) Reorganize unified build sources to make it clear that which files are .mm and which are .cpp.
        3) Import LocalAuthentication.framework in LocalAuthenticationSoftLink instead of being scattered.

        * Sources.txt:
        * SourcesCocoa.txt:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManagerInternal::collectTransports):
        (WebKit::AuthenticatorManager::clearStateAsync):
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp:
        (WebKit::AuthenticatorTransportService::create):
        (WebKit::AuthenticatorTransportService::createMock):
        (WebKit::AuthenticatorTransportService::startDiscovery):
        (WebKit::AuthenticatorTransportService::startDiscovery const): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorTransportService.h:
        * UIProcess/WebAuthentication/Cocoa/HidConnection.h: Copied from Source/WebKit/UIProcess/WebAuthentication/AuthenticatorTransportService.h.
        * UIProcess/WebAuthentication/Cocoa/HidConnection.mm: Added.
        (WebKit::reportReceived):
        (WebKit::HidConnection::HidConnection):
        (WebKit::HidConnection::~HidConnection):
        (WebKit::HidConnection::initialize):
        (WebKit::HidConnection::terminate):
        (WebKit::HidConnection::send):
        (WebKit::HidConnection::registerDataReceivedCallback):
        (WebKit::HidConnection::unregisterDataReceivedCallback):
        (WebKit::HidConnection::receiveReport):
        (WebKit::HidConnection::consumeReports):
        (WebKit::HidConnection::registerDataReceivedCallbackInternal):
        * UIProcess/WebAuthentication/Cocoa/HidService.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalService.h.
        * UIProcess/WebAuthentication/Cocoa/HidService.mm: Added.
        (WebKit::deviceAddedCallback):
        (WebKit::deviceRemovedCallback):
        (WebKit::HidService::HidService):
        (WebKit::HidService::~HidService):
        (WebKit::HidService::startDiscoveryInternal):
        (WebKit::HidService::platformStartDiscovery):
        (WebKit::HidService::createHidConnection const):
        (WebKit::HidService::deviceAdded):
        (WebKit::HidService::continueAddDeviceAfterGetInfo):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticationSoftLink.h:
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        * UIProcess/WebAuthentication/Cocoa/LocalService.h:
        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
        (WebKit::LocalService::startDiscoveryInternal):
        (WebKit::LocalService::startDiscoveryInternal const): Deleted.
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::respondReceivedInternal):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: Added.
        (WebKit::MockHidConnection::MockHidConnection):
        (WebKit::MockHidConnection::initialize):
        (WebKit::MockHidConnection::terminate):
        (WebKit::MockHidConnection::send):
        (WebKit::MockHidConnection::registerDataReceivedCallbackInternal):
        (WebKit::MockHidConnection::assembleRequest):
        (WebKit::MockHidConnection::parseRequest):
        (WebKit::MockHidConnection::feedReports):
        (WebKit::MockHidConnection::stagesMatch const):
        (WebKit::MockHidConnection::shouldContinueFeedReports):
        (WebKit::MockHidConnection::continueFeedReports):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Mock/MockLocalConnection.h.
        * UIProcess/WebAuthentication/Mock/MockHidService.cpp: Copied from Source/WebKit/UIProcess/WebAuthentication/Mock/MockLocalService.cpp.
        (WebKit::MockHidService::MockHidService):
        (WebKit::MockHidService::platformStartDiscovery):
        (WebKit::MockHidService::createHidConnection const):
        * UIProcess/WebAuthentication/Mock/MockHidService.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Mock/MockLocalConnection.h.
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.h:
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        * UIProcess/WebAuthentication/Mock/MockLocalService.mm: Renamed from Source/WebKit/UIProcess/WebAuthentication/Mock/MockLocalService.cpp.
        (WebKit::MockLocalService::MockLocalService):
        (WebKit::MockLocalService::platformStartDiscovery const):
        (WebKit::MockLocalService::createLocalConnection const):
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h:
        * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp: Added.
        (WebKit::CtapHidAuthenticator::CtapHidAuthenticator):
        (WebKit::CtapHidAuthenticator::makeCredential):
        (WebKit::CtapHidAuthenticator::continueMakeCredentialAfterResponseReceived const):
        (WebKit::CtapHidAuthenticator::getAssertion):
        (WebKit::CtapHidAuthenticator::continueGetAssertionAfterResponseReceived const):
        * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalService.h.
        * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp: Added.
        (WebKit::CtapHidDriver::Worker::Worker):
        (WebKit::CtapHidDriver::Worker::~Worker):
        (WebKit::CtapHidDriver::Worker::transact):
        (WebKit::CtapHidDriver::Worker::write):
        (WebKit::CtapHidDriver::Worker::read):
        (WebKit::CtapHidDriver::Worker::returnMessage):
        (WebKit::CtapHidDriver::CtapHidDriver):
        (WebKit::CtapHidDriver::transact):
        (WebKit::CtapHidDriver::continueAfterChannelAllocated):
        (WebKit::CtapHidDriver::continueAfterResponseReceived):
        (WebKit::CtapHidDriver::returnResponse):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.h: Added.
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-11-13  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed correction to previous build fix to avoid any internal/downstream repercussions.

        * WebProcess/Network/webrtc/LibWebRTCProvider.h:

2018-11-13  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed GTK/WPE build fix for r238159. 

        * WebProcess/Network/webrtc/LibWebRTCProvider.h:

2018-11-13  Timothy Hatcher  <timothy@apple.com>

        Use a light scrollbar for transparent web views in dark mode.
        https://bugs.webkit.org/show_bug.cgi?id=191559
        rdar://problem/46000489

        Reviewed by Dean Jackson.

        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage): Use FrameView's useDarkAppaearance().
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect): Ditto.

2018-11-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Do not show selection UI for editable elements with opacity near zero
        https://bugs.webkit.org/show_bug.cgi?id=191442
        <rdar://problem/45958625>

        Reviewed by Simon Fraser.

        Add support for suppressing native selection UI (for instance, selection highlight views, selection handles, and
        selection-related gestures) when the selection is inside a transparent editable element. This helps maintain
        compatibility with text editors that work by capturing key events and input events hidden contenteditable
        elements, and reflect these changes in different document or different part of the document.

        Since selection UI is rendered in the UI process on iOS using element geometry propagated from the web process,
        selection rendering is entirely decoupled from the process of painting in the web process. This means that if
        the editable root has an opacity of 0, we would correctly hide the caret and selection on macOS, but draw over
        the transparent element on iOS. When these hidden editable elements are focused, this often results in unwanted
        behaviors, such as double caret painting, native and custom selection UI from the page being drawn on top of one
        another, and the ability to change selection via tap and loupe gestures within hidden text.

        To fix this, we compute whether the focused element is transparent when an element is focused, or when the
        selection changes, and send this information over to the UI process via `AssistedNodeInformation` and
        `EditorState`. In the UI process, we then respect this information by suppressing the selection assistant if the
        focused element is transparent; this disables showing and laying out selection views, as well as gestures
        associated with selection overlays. However, this still allows for contextual autocorrection and spell checking.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode const):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:

        Add `elementIsTransparent` flags, and also add boilerplate IPC code.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):

        Prevent zooming to the focused element if the focused element is hidden.

        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsNearMarkedText:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

        Don't allow these text interaction gestures to begin while suppressing the selection assistant.

        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

        When an element is focused, begin suppressing the selection assistant if the element is fully transparent.

        (-[WKContentView _stopAssistingNode]):

        When the focused element is blurred, reset state by ending selection assistant suppression (additionally
        reactivating the selection assistant if needed). This ensures that selection in non-editable text isn't broken
        after focusing a hidden editable element.

        (-[WKContentView _updateChangedSelection:]):

        If needed, suppress or un-suppress the selection assistant when the selection changes. On certain rich text
        editors, a combination of custom selection UI and native selection UI is used. For instance, on Microsoft Office
        365, caret selections are rendered using the native caret view, but as soon as the selection becomes ranged, the
        editable root becomes fully transparent, and Office's selection UI takes over.

        (-[WKContentView _shouldSuppressSelectionCommands]):

        Override this UIKit SPI hook to suppress selection commands (e.g. the callout bar) when suppressing the
        selection assistant.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::getAssistedNodeInformation):

        Compute and set `elementIsTransparent` using the assisted node.

2018-11-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238137.

        Introduced API test failures on macOS.

        Reverted changeset:

        "Enable process swap on cross-site navigation by default on
        macOS"
        https://bugs.webkit.org/show_bug.cgi?id=191572
        https://trac.webkit.org/changeset/238137

2018-11-13  Ryosuke Niwa  <rniwa@webkit.org>

        Enable process swap on cross-site navigation by default on macOS
        https://bugs.webkit.org/show_bug.cgi?id=191572

        Reviewed by Chris Dumez.

        Enabled the feature by default on macOS.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2018-11-13  Daniel Bates  <dabates@apple.com>

        Consolidate WebKit UIKitSPI.h and UIKitTestSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=173341
        <rdar://problem/32752890>

        Reviewed by Simon Fraser.

        * Platform/spi/ios/UIKitSPI.h:

2018-11-13  Alex Christensen  <achristensen@webkit.org>

        Fix internal builds after r238115
        https://bugs.webkit.org/show_bug.cgi?id=191441

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingTextView intrinsicContentSize]):
        Some iOS-like operating systems don't have safe browsing.  Don't use symbols that don't exist on those systems.

2018-11-13  Ali Juma  <ajuma@chromium.org>

        Turn Intersection Observer on by default
        https://bugs.webkit.org/show_bug.cgi?id=191569

        Reviewed by Simon Fraser.

        * Shared/WebPreferences.yaml:

2018-11-12  Darshan Kadu  <darsh7807@gmail.com>

        Implement Cache API support for WPE/GTK
        https://bugs.webkit.org/show_bug.cgi?id=178316

        Reviewed by Michael Catanzaro.

        Added a new API function WKWebsiteDataStoreSetCacheStoragePerOriginQuota which sets the
        cache limit per origin.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetCacheStoragePerOriginQuota):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2018-11-12  Alex Christensen  <achristensen@webkit.org>

        [iOS] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=191441

        Reviewed by Tim Horton.

        In r237863 I implemented this for Mac.  This refines the UI and implements it for iOS.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextHandlesSafeBrowsing):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarning:completionHandler:]):
        (-[WKWebView _clearSafeBrowsingWarning]):
        (-[WKWebView layoutSubviews]):
        (-[WKWebView setFrameSize:]):
        (+[WKWebView _handlesSafeBrowsing]):
        (-[WKWebView _safeBrowsingWarningForTesting]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::allocFileWrapperInstance const):
        (WebKit::PageClientImplCocoa::serializableFileWrapperClasses const):
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (confirmMalwareSentinel):
        (visitUnsafeWebsiteSentinel):
        (colorForItem):
        (addLinkAndReplace):
        (-[WKSafeBrowsingExclamationPoint drawRect:]):
        (makeButton):
        (makeTitleLabel):
        (setBackground):
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingResult:completionHandler:]):
        (-[WKSafeBrowsingWarning addContent]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):
        (-[WKSafeBrowsingWarning layoutText]):
        (-[WKSafeBrowsingWarning textView:clickedOnLink:atIndex:]):
        (-[WKSafeBrowsingWarning layout]):
        (-[WKSafeBrowsingWarning layoutSubviews]):
        (-[WKSafeBrowsingWarning textView:shouldInteractWithURL:inRange:interaction:]):
        (-[WKSafeBrowsingWarning didMoveToWindow]):
        (-[WKSafeBrowsingWarning clickedOnLink:]):
        (-[WKSafeBrowsingTextView initWithAttributedString:forWarning:]):
        (-[WKSafeBrowsingTextView intrinsicContentSize]):
        (colorNamed): Deleted.
        (+[WKSafeBrowsingTextView viewWithAttributedString:linkTarget:]): Deleted.
        (+[WKSafeBrowsingTextView viewWithString:]): Deleted.
        (-[WKSafeBrowsingTextView clickedOnLink:atIndex:]): Deleted.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        (WebKit::PageClientImpl::clearSafeBrowsingWarning):
        (WebKit::PageClientImpl::mimeTypesWithCustomContentProviders):
        (WebKit::PageClientImpl::navigationGestureDidBegin):
        (WebKit::PageClientImpl::navigationGestureWillEnd):
        (WebKit::PageClientImpl::navigationGestureDidEnd):
        (WebKit::PageClientImpl::willRecordNavigationSnapshot):
        (WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):
        (WebKit::PageClientImpl::requestPasswordForQuickLookDocument):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::showShareSheet):
        (WebKit::PageClientImpl::navigationGestureDidBegin):
        (WebKit::PageClientImpl::navigationGestureWillEnd):
        (WebKit::PageClientImpl::navigationGestureDidEnd):
        (WebKit::PageClientImpl::willRecordNavigationSnapshot):
        (WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):

2018-11-12  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        * Platform/spi/ios/PencilKitSPI.h: Added.
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::LayerCreationProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::encode const):
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::decode):
        * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::createPlatformCALayerForEmbeddedView):
        * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::createForEmbeddedView):
        (WebKit::PlatformCALayerRemote::PlatformCALayerRemote):
        (WebKit::PlatformCALayerRemote::embeddedViewID const):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::layerWasCreated):
        Propagate EmbeddedViewID through the PlatformCALayer constructor and
        through the layer creation parameters to the UI process.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setEditableImagesEnabled:]):
        (-[WKWebViewConfiguration _editableImagesEnabled]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        Add a preference to enable editable images.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::layerWillBeRemoved):
        (WebKit::RemoteLayerTreeHost::clearLayers):
        (WebKit::RemoteLayerTreeHost::createLayer):
        Keep track of "embedded views" in two maps: embeddedViewID->UIView,
        and layerID->embeddedViewID. Clean them up when layers go away.
        If a embedded view is reparented, currently it must be added to a new
        layer in the same commit as it is removed from the previous layer
        in order to persist the view's state (otherwise the view will be
        destroyed and recreated). This will be less of a problem after future
        patches introduce serialization of image data and whatnot.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        (WebKit::RemoteLayerTreeHost::createEmbeddedView):
        Move the various remote layer tree UIView subclasses out into a separate file.

        Add createEmbeddedView, which is used for LayerTypeEditableImageLayer,
        and creates a WKDrawingView and sticks it in the maps.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h: Added.
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm: Added.
        (-[UIView _web_recursiveFindDescendantInteractibleViewAtPoint:withEvent:]):
        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):
        (-[WKCompositingView hitTest:withEvent:]):
        (-[WKCompositingView description]):
        (+[WKTransformView layerClass]):
        (+[WKSimpleBackdropView layerClass]):
        (+[WKShapeView layerClass]):
        (-[WKRemoteView initWithFrame:contextID:]):
        (+[WKRemoteView layerClass]):
        (-[WKBackdropView hitTest:withEvent:]):
        (-[WKBackdropView description]):
        (-[WKChildScrollView initWithFrame:]):
        Move various remote layer tree UIView subclasses here, to their own file.
        Make our UIView hit testing override test for views that conform to the
        protocol "WKNativelyInteractible", which switches to normal UIView hit
        testing. WKDrawingView will be the one such view.

        Add WKChildScrollView and pull the one thing we customize out into it,
        to make RemoteLayerTreeHost::createLayer less logic-ful.

        * UIProcess/ios/WKDrawingView.h: Added.
        * UIProcess/ios/WKDrawingView.mm: Added.
        (-[WKDrawingView init]):
        (-[WKDrawingView layoutSubviews]):
        Add a very simple WKDrawingView, which uses PKCanvasView to edit the image.

        * WebKit.xcodeproj/project.pbxproj:
        * SourcesCocoa.txt:
        Add the new files.

2018-11-12  Don Olmstead  <don.olmstead@sony.com>

        Shipped PNGs include bad profiles: iCCP: known incorrect sRGB profile
        https://bugs.webkit.org/show_bug.cgi?id=189230
        <rdar://problem/44050379>

        Reviewed by Joseph Pecoraro.

        Runs all png images through zopflipng. This results in a smaller file
        size and takes care of this issue as a byproduct.

        * Resources/ios/iOS.xcassets/StartPictureInPictureButton.imageset/StartPictureInPictureButton@1x.png:
        * Resources/ios/iOS.xcassets/StartPictureInPictureButton.imageset/StartPictureInPictureButton@2x.png:
        * Resources/ios/iOS.xcassets/StartPictureInPictureButton.imageset/StartPictureInPictureButton@3x.png:
        * Resources/ios/iOS.xcassets/StopPictureInPictureButton.imageset/StopPictureInPictureButton@1x.png:
        * Resources/ios/iOS.xcassets/StopPictureInPictureButton.imageset/StopPictureInPictureButton@2x.png:
        * Resources/ios/iOS.xcassets/StopPictureInPictureButton.imageset/StopPictureInPictureButton@3x.png:

2018-11-12  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Screen capture should be an experimental feature on OSX only
        https://bugs.webkit.org/show_bug.cgi?id=191552
        <rdar://problem/45994142>

        Reviewed by Youenn Fablet.

        * Shared/WebPreferences.yaml: Make ScreenCaptureEnabled.condition ENABLE(MEDIA_STREAM) && PLATFORM(MAC).

2018-11-12  Takashi Komori  <Takashi.Komori@sony.com>

        Resurrect WebKitTestRunner for Windows port
        https://bugs.webkit.org/show_bug.cgi?id=189257

        Reviewed by Fujii Hironori.

        * PlatformWin.cmake:

2018-11-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations experimental
        https://bugs.webkit.org/show_bug.cgi?id=191543

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2018-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement a new edit command to change the enclosing list type
        https://bugs.webkit.org/show_bug.cgi?id=191487
        <rdar://problem/45955922>

        Reviewed by Ryosuke Niwa.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):

        Add undo/redo edit action strings for ConvertToOrderedList and ConvertToUnorderedList.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::increaseListLevel):
        (WebKit::WebPage::decreaseListLevel):
        (WebKit::WebPage::changeListType):

        Remove preflight checks for these list editing commands. These are not necessary because these commands fall
        back to being noops if these checks return false. This avoids an extraneous ancestor walk to determine the
        enclosing list element when changing list type.

2018-11-11  Daniel Bates  <dabates@apple.com>

        [iOS] Draw caps lock indicator in password fields
        https://bugs.webkit.org/show_bug.cgi?id=190565
        <rdar://problem/45262343>

        Reviewed by Dean Jackson.

        Notify the WebContent process with the current modifer state on window activation changes. Notify
        the WebContent process when hardware keyboard availability changes (e.g. a keyboard is attached).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Register for hardware keyboard availability changed notifications.
        (-[WKWebView dealloc]): Unregister from hardware availability changed notifications.
        (hardwareKeyboardAvailabilityChangedCallback): Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateCurrentModifierState): Compile this code when building for iOS.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleKeyUIEvent:]): Update the current modifier state if this event is a hardware
        keyboard flags changed event.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::hardwareKeyboardAvailabilityChanged): Added.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::hardwareKeyboardAvailabilityChanged):
        Added new message HardwareKeyboardAvailabilityChanged. Notify the focused HTML input element (if we have
        one) that the caps lock state may have changed when we receive message HardwareKeyboardAvailabilityChanged
        so that we toggle visibility of the caps lock indicator.

2018-11-11  Dan Bernstein  <mitz@apple.com>

        ProcessPoolConfiguration::copy() doesn’t copy m_customWebContentServiceBundleIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=191514

        Reviewed by Geoffrey Garen.

        Test: WebKitCocoa/WKProcessPoolConfiguration.mm

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy): Copy m_customWebContentServiceBundleIdentifier.

2018-11-11  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        * Platform/mac/StringUtilities.mm:
        * UIProcess/ApplicationStateTracker.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:

2018-11-10  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        * Platform/mac/StringUtilities.mm:
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::applicationDidEnterBackground):
        (WebKit::ApplicationStateTracker::applicationDidFinishSnapshottingAfterEnteringBackground):
        (WebKit::ApplicationStateTracker::applicationWillEnterForeground):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:

2018-11-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238065.

        Breaks internal builds.

        Reverted changeset:

        "Make it possible to edit images inline"
        https://bugs.webkit.org/show_bug.cgi?id=191352
        https://trac.webkit.org/changeset/238065

2018-11-10  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        * Platform/spi/ios/PencilKitSPI.h: Added.
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::LayerCreationProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::encode const):
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::decode):
        * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::createPlatformCALayerForEmbeddedView):
        * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::createForEmbeddedView):
        (WebKit::PlatformCALayerRemote::PlatformCALayerRemote):
        (WebKit::PlatformCALayerRemote::embeddedViewID const):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::layerWasCreated):
        Propagate EmbeddedViewID through the PlatformCALayer constructor and
        through the layer creation parameters to the UI process.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setEditableImagesEnabled:]):
        (-[WKWebViewConfiguration _editableImagesEnabled]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        Add a preference to enable editable images.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::layerWillBeRemoved):
        (WebKit::RemoteLayerTreeHost::clearLayers):
        (WebKit::RemoteLayerTreeHost::createLayer):
        Keep track of "embedded views" in two maps: embeddedViewID->UIView,
        and layerID->embeddedViewID. Clean them up when layers go away.
        If a embedded view is reparented, currently it must be added to a new
        layer in the same commit as it is removed from the previous layer
        in order to persist the view's state (otherwise the view will be
        destroyed and recreated). This will be less of a problem after future
        patches introduce serialization of image data and whatnot.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        (WebKit::RemoteLayerTreeHost::createEmbeddedView):
        Move the various remote layer tree UIView subclasses out into a separate file.

        Add createEmbeddedView, which is used for LayerTypeEditableImageLayer,
        and creates a WKDrawingView and sticks it in the maps.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h: Added.
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm: Added.
        (-[UIView _web_recursiveFindDescendantInteractibleViewAtPoint:withEvent:]):
        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):
        (-[WKCompositingView hitTest:withEvent:]):
        (-[WKCompositingView description]):
        (+[WKTransformView layerClass]):
        (+[WKSimpleBackdropView layerClass]):
        (+[WKShapeView layerClass]):
        (-[WKRemoteView initWithFrame:contextID:]):
        (+[WKRemoteView layerClass]):
        (-[WKBackdropView hitTest:withEvent:]):
        (-[WKBackdropView description]):
        (-[WKChildScrollView initWithFrame:]):
        Move various remote layer tree UIView subclasses here, to their own file.
        Make our UIView hit testing override test for views that conform to the
        protocol "WKNativelyInteractible", which switches to normal UIView hit
        testing. WKDrawingView will be the one such view.

        Add WKChildScrollView and pull the one thing we customize out into it,
        to make RemoteLayerTreeHost::createLayer less logic-ful.

        * UIProcess/ios/WKDrawingView.h: Added.
        * UIProcess/ios/WKDrawingView.mm: Added.
        (-[WKDrawingView init]):
        (-[WKDrawingView layoutSubviews]):
        Add a very simple WKDrawingView, which uses PKCanvasView to edit the image.

        * WebKit.xcodeproj/project.pbxproj:
        * SourcesCocoa.txt:
        Add the new files.

2018-11-09  Zalan Bujtas  <zalan@apple.com>

        [iOS] Issue initial paint soon after the visuallyNonEmpty milestone is fired.
        https://bugs.webkit.org/show_bug.cgi?id=191078
        <rdar://problem/45736178>

        Reviewed by Antti Koivisto.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::layerFlushThrottlingIsActive const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::scheduleInitialDeferredPaint):
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::layerFlushThrottlingIsActive const):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::setLayerTreeStateIsFrozen):
        (WebKit::RemoteLayerTreeDrawingArea::initialDeferredPaint):
        (WebKit::RemoteLayerTreeDrawingArea::scheduleInitialDeferredPaint):
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlush):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scheduleInitialDeferredPaint):

2018-11-09  John Wilander  <wilander@apple.com>

        Add ability to configure document.cookie lifetime cap through user defaults
        https://bugs.webkit.org/show_bug.cgi?id=191480
        <rdar://problem/45240871>

        Reviewed by Chris Dumez.

        This change makes the capped lifetime in seconds configurable through
        user defaults.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setAgeCapForClientSideCookies):
        (WebKit::NetworkProcess::setShouldCapLifetimeForClientSideCookies): Deleted.
            Renamed setAgeCapForClientSideCookies().
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm:
        (WebKit::ResourceLoadStatisticsMemoryStore::registerUserDefaultsIfNeeded):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setAgeCapForClientSideCookies):
        (WebKit::NetworkProcessProxy::didSetAgeCapForClientSideCookies):
        (WebKit::NetworkProcessProxy::setShouldCapLifetimeForClientSideCookies): Deleted.
            Renamed setAgeCapForClientSideCookies().
        (WebKit::NetworkProcessProxy::didSetShouldCapLifetimeForClientSideCookies): Deleted.
            Renamed didSetAgeCapForClientSideCookies().
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::setAgeCapForClientSideCookies):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateClientSideCookiesAgeCap):
        (WebKit::ResourceLoadStatisticsMemoryStore::didCreateNetworkProcess):
            New function that handles all the things that need to be done when a network
            process has been created.
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::didCreateNetworkProcess):
            Now just calls the corresponding function on its memory store where all the
            configuration parameters are available.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setAgeCapForClientSideCookies):
        (WebKit::WebsiteDataStore::setShouldCapLifetimeForClientSideCookies): Deleted.
            Renamed setAgeCapForClientSideCookies().
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-11-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238047.

        Introduced layout test failures on iOS simulator.

        Reverted changeset:

        "[iOS] Draw caps lock indicator in password fields"
        https://bugs.webkit.org/show_bug.cgi?id=190565
        https://trac.webkit.org/changeset/238047

2018-11-09  Chris Dumez  <cdumez@apple.com>

        Suspended page persists even after back/forward list item is gone
        https://bugs.webkit.org/show_bug.cgi?id=191488
        <rdar://problem/45953006>

        Reviewed by Geoffrey Garen.

        Currently, the WebProcessPool owns the SuspendedPageProxy objects and makes sure we cap how
        many we can have. The WebBackForwardListItem merely has a WeakPtr to its associated
        SuspendedPageProxy. However, there is no point in having the WebProcessPool keeping a
        SuspendedPageProxy object alive if there is no longer any WebBackForwardListItem pointing
        to it.

        To address the issue, WebBackForwardListItem nows tells the WebProcessPool to destroy
        its SuspendedPageProxy when necessary. WebBackForwardList also takes care of nulling
        out the WebBackForwardListItem's SuspendedPageProxy after the item has been removed
        from the list (in case somebody keeps the item alive).

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::~WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::setSuspendedPage):
        (WebKit::WebBackForwardListItem::suspendedPageIsNoLongerNeeded):
        * Shared/WebBackForwardListItem.h:
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::didRemoveItem):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::removeSuspendedPageProxy):
        * UIProcess/WebProcessPool.h:

2018-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Implement SPI on WKWebView to increase and decrease list levels
        https://bugs.webkit.org/show_bug.cgi?id=191471
        <rdar://problem/45952472>

        Reviewed by Tim Horton.

        Implement these method stubs by calling into Editor.

        Test: WKWebViewEditActions.ModifyListLevel

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::increaseListLevel):
        (WebKit::WebPage::decreaseListLevel):
        (WebKit::WebPage::changeListType):

2018-11-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix after https://bugs.webkit.org/show_bug.cgi?id=191324

        Remove the use of .xcfilelists until their side-effects are better
        understood.

        * WebKit.xcodeproj/project.pbxproj:

2018-11-09  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl][WebKit] Implement Proxy configuration API.
        https://bugs.webkit.org/show_bug.cgi?id=189053

        Reviewed by Youenn Fablet.

        Added proxy configuration API to WebsiteDataStore. Three API were added in WKWebsiteDataStoreRefCurl.h:
        - WKWebsiteDataStoreEnableDefaultNetworkProxySettings(WKWebsiteDataStoreRef)
        - WKWebsiteDataStoreEnableCustomNetworkProxySettings(WKWebsiteDataStoreRef, WKURLRef, WKStringRef ignoreHosts)
        - WKWebsiteDataStoreDisableNetworkProxySettings(WKWebsiteDataStoreRef)

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSessionCreationParameters.h:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::setNetworkProxySettings):
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        (WebKit::NetworkSessionCurl::NetworkSessionCurl):
        * NetworkProcess/curl/RemoteNetworkingContextCurl.cpp:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * PlatformWin.cmake:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        (IPC::ArgumentCoder<CurlProxySettings>::encode):
        (IPC::ArgumentCoder<CurlProxySettings>::decode):
        * UIProcess/API/C/curl/WKWebsiteDataStoreRefCurl.cpp:
          Copied from Source/WebKit/NetworkProcess/curl/NetworkSessionCurl.cpp.
        (WKWebsiteDataStoreEnableDefaultNetworkProxySettings):
        (WKWebsiteDataStoreEnableCustomNetworkProxySettings):
        (WKWebsiteDataStoreDisableNetworkProxySettings):
        * UIProcess/API/C/curl/WKWebsiteDataStoreRefCurl.h:
          Copied from Source/WebKit/NetworkProcess/curl/NetworkSessionCurl.cpp.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::networkProxySettings const):
        * UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp:
          Copied from Source/WebKit/NetworkProcess/curl/NetworkSessionCurl.cpp.
        (WebKit::WebsiteDataStore::platformSetParameters):
        (WebKit::WebsiteDataStore::setNetworkProxySettings):

2018-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Introduce WKWebView SPI to insert nested ordered and unordered lists
        https://bugs.webkit.org/show_bug.cgi?id=191410
        <rdar://problem/45898610>

        Reviewed by Dean Jackson.

        Prefixes a few iOS-only SPI methods declared on WKWebView in r236867 with underscores, and also exposes some
        more cross-platform Cocoa editing SPI. Once the unprefixed SPI methods are no longer used by internal clients,
        these will need to be removed (see followup bug: webkit.org/b/191450). See below for more details.

        Covered by new and existing API tests in WKWebViewEditActions.

        * UIProcess/API/Cocoa/WKWebView.mm:

        Hoist the definition (and undefinition) of `FORWARD_ACTION_TO_WKCONTENTVIEW` to encompass both the WKWebView
        implementation and the WKWebView (WKPrivate) implementation. This allows us to use this macro when implementing
        SPI methods in the WKPrivate category, as well as methods that are part of the main WKWebView implementation.

        (-[WKWebView canPerformAction:withSender:]):
        (-[WKWebView targetForAction:withSender:]):

        Add forwarding for the new editing commands in -canPerformAction: and -targetForAction:.

        (-[WKWebView _toggleStrikeThrough:]):
        (-[WKWebView _increaseListLevel:]):
        (-[WKWebView _decreaseListLevel:]):
        (-[WKWebView _changeListType:]):
        (-[WKWebView _setFont:sender:]):
        (-[WKWebView _setFontSize:sender:]):
        (-[WKWebView _setTextColor:sender:]):

        Add definitions for the new editing methods on WKWebView, using macros (`WEBCORE_PRIVATE_COMMAND` on macOS and
        `FORWARD_ACTION_TO_WKCONTENTVIEW` on iOS) to help reduce the code duplication.

        (-[WKWebView _pasteAsQuotation:]): Deleted.

        Remove this method definition, which is now replaced by macros on iOS and macOS.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Introduce the new SPI to WKWebView (WKPrivate), and add FIXMEs to remove old, unprefixed variants of the SPI.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::increaseListLevel):
        (WebKit::WebPageProxy::decreaseListLevel):
        (WebKit::WebPageProxy::changeListType):

        Add plumbing for these list editing commands.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _increaseListLevelForWebView:]):
        (-[WKContentView _decreaseListLevelForWebView:]):
        (-[WKContentView _changeListTypeForWebView:]):
        (-[WKContentView _toggleStrikeThroughForWebView:]):
        (-[WKContentView _setFontForWebView:sender:]):
        (-[WKContentView _setFontSizeForWebView:sender:]):
        (-[WKContentView _setTextColorForWebView:sender:]):
        (-[WKContentView toggleStrikeThroughForWebView:]):
        (-[WKContentView setFontForWebView:sender:]):
        (-[WKContentView setFontSizeForWebView:sender:]):
        (-[WKContentView setTextColorForWebView:sender:]):
        (-[WKContentView canPerformActionForWebView:withSender:]):

        Check for the new action selectors here, and additionally add validation for `_pasteAsQuotation:`. Let the
        unprefixed versions of these methods simply call the prefixed versions (these method implementations will be
        removed in a followup once doing so would not affect any clients of WebKit).

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::increaseListLevel):
        (WebKit::WebPage::decreaseListLevel):
        (WebKit::WebPage::changeListType):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Add stubs for several list editing commands that are yet to be hooked up to WebCore. These will be implemented
        in a future patch.

2018-11-09  Antti Koivisto  <antti@apple.com>

        Use OptionSet for layout milestones
        https://bugs.webkit.org/show_bug.cgi?id=191470

        Reviewed by Dean Jackson.

        * Shared/API/Cocoa/_WKRenderingProgressEventsInternal.h:
        (renderingProgressEvents):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toWKLayoutMilestones):
        (WebKit::toLayoutMilestones):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::newlyReachedLayoutMilestones const):
        (WebKit::RemoteLayerTreeTransaction::setNewlyReachedLayoutMilestones):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didReachLayoutMilestone):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::renderingProgressDidChange):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        (WKPageSetPageNavigationClient):
        * UIProcess/API/C/WKPageRenderingProgressEventsInternal.h:
        (pageRenderingProgressEvents):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (layoutMilestones):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::renderingProgressDidChange):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::listenForLayoutMilestones):
        (WebKit::WebPageProxy::didLayoutForCustomContentProvider):
        (WebKit::WebPageProxy::didReachLayoutMilestone):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::didReachLayoutMilestone):
        (API::InjectedBundle::PageLoaderClient::layoutMilestones const):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didReachLayoutMilestone):
        (WebKit::InjectedBundlePageLoaderClient::layoutMilestones const):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReachLayoutMilestone):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::dispatchDidReachLayoutMilestone):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::dispatchDidReachLayoutMilestone):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):
        (WebKit::WebPage::listenForLayoutMilestones):
        (WebKit::WebPage::dispatchDidReachLayoutMilestone):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::sendPendingNewlyReachedLayoutMilestones):
        (WebKit::TiledCoreAnimationDrawingArea::dispatchDidReachLayoutMilestone):

2018-11-09  Daniel Bates  <dabates@apple.com>

        [iOS] Draw caps lock indicator in password fields
        https://bugs.webkit.org/show_bug.cgi?id=190565
        <rdar://problem/45262343>

        Reviewed by Dean Jackson.

        Notify the WebContent process with the current modifer state on window activation changes. Notify
        the WebContent process when hardware keyboard availability changes (e.g. a keyboard is attached).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Register for hardware keyboard availability changed notifications.
        (-[WKWebView dealloc]): Unregister from hardware availability changed notifications.
        (hardwareKeyboardAvailabilityChangedCallback): Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateCurrentModifierState): Compile this code when building for iOS.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleKeyUIEvent:]): Update the current modifier state if this event is a hardware
        keyboard flags changed event.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::hardwareKeyboardAvailabilityChanged): Added.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::hardwareKeyboardAvailabilityChanged):
        Added new message HardwareKeyboardAvailabilityChanged. Notify the focused HTML input element (if we have
        one) that the caps lock state may have changed when we receive message HardwareKeyboardAvailabilityChanged
        so that we toggle visibility of the caps lock indicator.

2018-11-09  Tim Horton  <timothy_horton@apple.com>

        Make use of _UIRemoteView instead of CALayerHost if possible for WKRemoteView
        https://bugs.webkit.org/show_bug.cgi?id=191449
        <rdar://problem/45884977>

        Reviewed by Eric Carlson.

        UIRemoteView has some nice process assertion management that it would
        be nice to not duplicate. So, we can just use it instead of CALayerHost!

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::page const):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (-[WKUIRemoteView hitTest:withEvent:]):
        (-[WKUIRemoteView description]):
        (createRemoteView):
        (WebKit::RemoteLayerTreeHost::createLayer):

2018-11-09  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Make screen capture an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=191472
        <rdar://problem/45946499>

        Reviewed by Jer Noble.

        * Shared/WebPreferences.yaml: Make ScreenCaptureEnabled an experimental feature.

2018-11-09  Daniel Bates  <dabates@apple.com>

        [iOS] Pressing forward delete key in text field does nothing and we should not invoke an editor
        action when forward delete is pressed outside a text field
        https://bugs.webkit.org/show_bug.cgi?id=190566
        <rdar://problem/45262367>

        Reviewed by Wenson Hsieh.

        Override -_deleteForwardAndNotify to perform a forward deletion and remove the dead code that
        expected UIKit to send us a character string with 0xF728 for the forward delete key. UIKit
        ceased doing this many years ago. We may revist this decision once <rdar://problem/45772078>
        is fixed.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        (-[WKContentView _deleteForwardAndNotify:]):

2018-11-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, try to fix the 32-bit macOS build

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

2018-11-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add an SPI to allow WebView clients to add additional supported image formats
        https://bugs.webkit.org/show_bug.cgi?id=190454

        Reviewed by Simon Fraser.

        * Platform/mac/StringUtilities.h:
        * Platform/mac/StringUtilities.mm:
        (WebKit::webCoreStringVectorFromNSStringArray):
        A helper function which converts an NSArray of NSStrings to a Vector of
        WTFString.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Handle encoding and decoding the AdditionalSupportedImageTypes which will
        allow transferring it from the UI process to the web process.

        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::additionalSupportedImageTypes const):
        (API::PageConfiguration::setAdditionalSupportedImageTypes):
        Store the AdditionalSupportedImageTypes in the APIPageConfiguration
        which is used when creating the WebPageProxy in the UIPorcess.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _additionalSupportedImageTypes]):
        (-[WKWebViewConfiguration _setAdditionalSupportedImageTypes:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        Setter/Getter for the AdditionalSupportedImageTypes.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        Copy the AdditionalSupportedImageTypes from APIPageConfiguration to 
        WebPageCreationParameters.

        * UIProcess/WebPageProxy.h:
        Delete unimplemented function.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):
        Copy the AdditionalSupportedImageTypes from WebPageCreationParameters to
        WebCore.

2018-11-08  Megan Gardner  <megan_gardner@apple.com>

        Adopt Reveal Framework to replace Lookup
        https://bugs.webkit.org/show_bug.cgi?id=191097
        <rdar://problem/45924508>

        Reviewed by Tim Horton.

        Pass in what it needed to clear the textIndicators. This is better than
        the current notification structure.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKWindowVisibilityObserver dealloc]):
        (-[WKWindowVisibilityObserver startObservingLookupDismissalIfNeeded]):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _animationControllerForText]):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::showDefinitionForAttributedString):

        Generate and pass in the text indicator information, as this is needed now.

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

2018-11-08  Keith Rollin  <krollin@apple.com>

        Create .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191324
        <rdar://problem/45852819>

        Reviewed by Alex Christensen.

        As part of preparing for enabling XCBuild, create and use .xcfilelist
        files. These files are using during Run Script build phases in an
        Xcode project. If a Run Script build phase produces new files that are
        used later as inputs to subsequent build phases, XCBuild needs to know
        about these files. These files can be either specified in an "output
        files" section of the Run Script phase editor, or in .xcfilelist files
        that are associated with the Run Script build phase.

        This patch takes the second approach. It consists of three sets of changes:

        - Modify the DerivedSources.make files to have a
          'print_all_generated_files" target that produces a list of the files
          they create.

        - Create a shell script that produces .xcfilelist files from the
          output of the previous step, as well as for the files created in the
          Generate Unified Sources build steps.

        - Add the new .xcfilelist files to the associated projects.

        Note that, with these changes, the Xcode workspace and projects can no
        longer be fully loaded into Xcode 9. Xcode will attempt to load the
        projects that have .xcfilelist files associated with them, but will
        fail and display a placeholder for those projects instead. It's
        expected that all developers are using Xcode 10 by now and that not
        being able to load into Xcode 9 is not a practical issue. Keep in mind
        that this is strictly an IDE issue, and that the projects can still be
        built with `xcodebuild`.

        Also note that the shell script that creates the .xcfilelist files can
        also be used to verify that the set of files that's currently checked
        in is up-to-date. This checking can be used as part of a check-in hook
        or part of check-webkit-style to sooner catch cases where the
        .xcfilelist files need to be regenerated.

        * DerivedSources.make:
        * DerivedSources.xcfilelist: Added.
        * UnifiedSources.xcfilelist: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-11-08  Timothy Hatcher  <timothy@apple.com>

        Add experimental support for a `supported-color-schemes` CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=191319
        rdar://problem/45852261

        Reviewed by Dean Jackson.

        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):

2018-11-08  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Use DeviceIdHashSaltStorage to generate device ID hash salt
        https://bugs.webkit.org/show_bug.cgi?id=190825
        <rdar://problem/45486085>

        Reviewed by Youenn Fablet.

        * UIProcess/API/C/WKUserMediaPermissionCheck.cpp:
        (WKUserMediaPermissionCheckSetUserMediaAccessInfo):
        * UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:
        (webkitDeviceInfoPermissionRequestAllow):
        (webkitDeviceInfoPermissionRequestDeny):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin):
        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::regenerateDeviceIdHashSaltForOrigin):
        (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltForOrigin):
        * UIProcess/DeviceIdHashSaltStorage.h:
        * UIProcess/UserMediaPermissionCheckProxy.cpp:
        (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo):
        * UIProcess/UserMediaPermissionCheckProxy.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::createPermissionRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
        (WebKit::UserMediaPermissionRequestManagerProxy::updateDeviceIDHashSalt):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::deviceIdentifierHashSalt const): Deleted.

2018-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash when running with sandbox enabled
        https://bugs.webkit.org/show_bug.cgi?id=191353

        Reviewed by Michael Catanzaro.

        g_key_file_set_string_list() expects a null-terminated array as parameter.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::createFlatpakInfo): Append nullptr to sharedPermissions array.

2018-11-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build with recent SDKs.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _EVOrganizationName]):

2018-11-07  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Enable cap on partitioned cache max age
        https://bugs.webkit.org/show_bug.cgi?id=191395
        <rdar://problem/45885977>

        Reviewed by Chris Dumez.

        This change does not bump the network cache revision number.
        It's not needed since it was done just a week ago.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::setCacheMaxAgeCap):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCacheMaxAgeCap):
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::didCreateNetworkProcess):

2018-11-07  Daniel Bates  <dabates@apple.com>

        [iOS] Support deleting to the start of the line and to the end of the line
        https://bugs.webkit.org/show_bug.cgi?id=191389
        <rdar://problem/45883972>

        Reviewed by Wenson Hsieh.

        Add support for the key commands Command + Delete and Control + K to delete to the start
        of the line and to delete to the end of the line, respectively.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _deleteToStartOfLine]): Added.
        (-[WKContentView _deleteToEndOfLine]): Added.

2018-11-07  Daniel Bates  <dabates@apple.com>

        [iOS] Option + Delete should delete previous word
        https://bugs.webkit.org/show_bug.cgi?id=191381
        <rdar://problem/23681351>

        Reviewed by Wenson Hsieh.

        Implement support for pressing Option + Delete to delete the previous word. This makes text editing
        in WebKit more closely match the platform conventions.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _deleteByWord]):

2018-11-07  Daniel Bates  <dabates@apple.com>

        Override +[UIKeyboard isInHardwareKeyboardMode] in WebKitTestRunner and DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=190141

        Reviewed by Darin Adler.

        Directly use +[UIKeyboard isInHardwareKeyboardMode]. We will override this class method
        in DumpRenderTree and WebKitTestRunner to always return NO so as to make test runs
        deterministic regardless of whether a hardware keyboard is attached.

        * Shared/NativeWebKeyboardEvent.h:
        * Shared/ios/NativeWebKeyboardEventIOS.mm:
        (WebKit::isInHardwareKeyboardMode): Deleted.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):

2018-11-07  Zamiul Haque  <zhaque@apple.com>

        Force a gregorian calendar to show for credit card expiration date inputs
        (autocomplete='cc-exp'*) regardless of default system settings.
        https://bugs.webkit.org/show_bug.cgi?id=191096
        rdar://problem/42640256

        Reviewed by Tim Horton.

        Added some plumbing code to expose the calendar identifier of the calendar used by a
        presented date picker. Added shouldPresentGregorianCalendar:, to be used for
        determining what property values a date input control must present a Gregorian
        calendar for.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView formInputPeripheral]):
        * UIProcess/ios/forms/WKFormInputControl.mm:

2018-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK/WPE build when memfd is not available after r237922.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::createSharedMemory):

2018-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Linux] Use memfd_create when available in SharedMemory implementation
        https://bugs.webkit.org/show_bug.cgi?id=189741

        Reviewed by Michael Catanzaro.

        If memfd is available, use it instead of shm_open.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::createSharedMemory): Helper to create the shared memory, trying first with memfd and falling back to
        shm if it's not available.
        (WebKit::SharedMemory::create): Use createSharedMemory() helper.

2018-11-06  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
        https://bugs.webkit.org/show_bug.cgi?id=191291

        Reviewed by Myles Maxfield.

        Properly disable WEBGPU on all non-Metal platforms for now.

        * Configurations/FeatureDefines.xcconfig:

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Make mDNS ICE Candidate an experimental flag again
        https://bugs.webkit.org/show_bug.cgi?id=191262

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebRTCMDNSICECandidatesEnabled):
        (WKPreferencesGetWebRTCMDNSICECandidatesEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-11-06  Suresh Koppisetty  <skoppisetty@apple.com>

        Don’t use the main queue to create an XPC connection.
        https://bugs.webkit.org/show_bug.cgi?id=191160
        <rdar://problem/45736262>

        Reviewed by Geoffrey Garen.

        Don't use the main queue to create an XPC connection. xpc_connection_set_bootstrap does
        dispatch_mach_send_barrier_f on this queue which delays the sending of the subsequent
        bootstrap message (sent to launchd for launching a new target process) when the main queue is busy.

        Now that the XPC connection runs on the default concurrent queue, errorHandler could be invoked
        by any thread. The job of errorHandler is to dispatch errorHandlerImpl to the main thread,
        where errorHandlerImpl is responsible for the actual handling of errors if any.

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

2018-11-06  Brian Burg  <bburg@apple.com>

        Add missing iOS availability macro to _WKAutomationSessionConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=191320

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKAutomationSessionConfiguration.h:

2018-11-06  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove cap on partitioned cache max age if it matches a network reload (redirect-only)
        https://bugs.webkit.org/show_bug.cgi?id=189760
        <rdar://problem/44612242>

        Reviewed by Youenn Fablet and Antti Koivisto.

        When a redirect cache entry for a prevalent resource reaches its max
        age cap, it is loaded again from the network and the network response
        is compared with what's in the cache. If it's a match, the cache entry
        is fully accepted. If not, a new capped cache entry is created.

        This feature is still off by default.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::canUseCachedRedirect const):
            Now checks the new member m_cacheEntryForMaxAgeCapValidation.
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
            New case handled for entry->hasReachedPrevalentResourceAgeCap().
        (WebKit::NetworkResourceLoader::validateCacheEntryForMaxAgeCapValidation):
            This is where the new logic compares the incoming redirect with the
            cached one. If they match, an uncapped entry is allowed to be stored.
            If they don't match, a new capped entry will be stored.
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
            Now calls the new
            NetworkResourceLoader::validateCacheEntryForMaxAgeCapValidation()
            function.
        * NetworkProcess/NetworkResourceLoader.h:
            Added the m_cacheEntryForMaxAgeCapValidation member.
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeUseDecision):
            Restored to previous behavior which means
            UseDecision::NoDueToPrevalentResourceAgeCap was removed.
        (WebKit::NetworkCache::Cache::retrieve):
            Restored to previous behavior.
        (WebKit::NetworkCache::Cache::storeRedirect):
            Now takes the optional maxAgeCap and caps the entry's max age if it's set.
        (WebKit::NetworkCache::hasReachedPrevalentResourceAgeCap): Deleted.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::encodeAsStorageRecord const):
            Now encodes m_maxAgeCap.
        (WebKit::NetworkCache::Entry::decodeStorageRecord):
            Now decodes m_maxAgeCap.
        (WebKit::NetworkCache::Entry::hasReachedPrevalentResourceAgeCap const):
            Added.
        (WebKit::NetworkCache::Entry::capMaxAge):
            Added.
        * NetworkProcess/cache/NetworkCacheEntry.h:
            Added the optional m_maxAgeCap.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
            Now gets the optional max age cap from the NetworkStorageSession and sends it
            to Cache::storeRedirect().
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::cachedEntryReuseFailureToDiagnosticKey):
            Removed handling of UseDecision::NoDueToPrevalentResourceAgeCap.

2018-11-06  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r230523): Caps lock indicator not shown in password field
        https://bugs.webkit.org/show_bug.cgi?id=190056

        Reviewed by Ryosuke Niwa.

        Update cached modifier state in the WebProcess when WebKit::WebPage::keyEvent is called, and
        when the window becomes active.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::updateCurrentModifierState):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::updateCurrentModifierState):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-11-06  Alex Christensen  <achristensen@webkit.org>

        Add ObjC SPI equivalent of WKContextHandlesSafeBrowsing
        https://bugs.webkit.org/show_bug.cgi?id=191329

        Reviewed by Tim Horton.

        Like WKContextHandlesSafeBrowsing, this is so I can make one change in WebKit and enable safe browsing
        in WKWebView and disable it in Safari at the same time without broken revisions between landing two changes
        in two repositories.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (+[WKWebView handlesSafeBrowsing]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2018-11-06  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] User should not be prompted again after denying getDisplayMedia request
        https://bugs.webkit.org/show_bug.cgi?id=191227
        <rdar://problem/45784512>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::wasRequestDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

2018-11-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MediaStream] User should not be prompted again after denying getDisplayMedia request
        https://bugs.webkit.org/show_bug.cgi?id=191227
        <rdar://problem/45784512>

        Unreviewed build fix of ports not ENABLE(MEDIA_STREAM).

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: Define getRequestAction only if ENABLE(MEDIA_STREAM).
        * UIProcess/UserMediaPermissionRequestManagerProxy.h: Ditto.

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

        [Mac] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=188871

        Reviewed by Tim Horton.

        * Platform/spi/Cocoa/SafeBrowsingSPI.h:
        * Resources/SafeBrowsing.xcassets: Added.
        * Resources/SafeBrowsing.xcassets/Contents.json: Added.
        * Resources/SafeBrowsing.xcassets/WKSafeBrowsingWarningBackground.colorset: Added.
        * Resources/SafeBrowsing.xcassets/WKSafeBrowsingWarningBackground.colorset/Contents.json: Added.
        * Resources/SafeBrowsing.xcassets/WKSafeBrowsingWarningText.colorset: Added.
        * Resources/SafeBrowsing.xcassets/WKSafeBrowsingWarningText.colorset/Contents.json: Added.
        * Resources/SafeBrowsing.xcassets/WKSafeBrowsingWarningTitle.colorset: Added.
        * Resources/SafeBrowsing.xcassets/WKSafeBrowsingWarningTitle.colorset/Contents.json: Added.
        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextHandlesSafeBrowsing):
        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm:
        (WebKit::malwareDetailsBase):
        (WebKit::learnMore):
        (WebKit::reportAnErrorBase):
        (WebKit::localizedProvider):
        (WebKit::SafeBrowsingResult::SafeBrowsingResult):
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h: Added.
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: Added.
        (confirmMalwareSentinel):
        (visitUnsafeWebsiteSentinel):
        (colorNamed):
        (replace):
        (addLinkAndReplace):
        (-[WKSafeBrowsingExclamationPoint drawRect:]):
        (-[WKSafeBrowsingExclamationPoint intrinsicContentSize]):
        (reportAnErrorURL):
        (malwareDetailsURL):
        (titleText):
        (warningText):
        (detailsText):
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingResult:completionHandler:]):
        (-[WKSafeBrowsingWarning dealloc]):
        (-[WKSafeBrowsingWarning goBackClicked]):
        (-[WKSafeBrowsingWarning clickedOnLink:]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):
        (+[WKSafeBrowsingTextView viewWithAttributedString:linkTarget:]):
        (+[WKSafeBrowsingTextView viewWithString:]):
        (-[WKSafeBrowsingTextView intrinsicContentSize]):
        (-[WKSafeBrowsingTextView clickedOnLink:atIndex:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showSafeBrowsingWarning):
        (WebKit::WebViewImpl::clearSafeBrowsingWarning):
        (WebKit::WebViewImpl::setFrameSize):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::showSafeBrowsingWarning):
        (WebKit::PageClient::clearSafeBrowsingWarning):
        * UIProcess/SafeBrowsingResult.h:
        (WebKit::SafeBrowsingResult::url const):
        (WebKit::SafeBrowsingResult::provider const):
        (WebKit::SafeBrowsingResult::localizedProviderName const):
        (WebKit::SafeBrowsingResult::malwareDetailsURLBase const):
        (WebKit::SafeBrowsingResult::reportAnErrorURLBase const):
        (WebKit::SafeBrowsingResult::learnMoreURL const):
        (WebKit::SafeBrowsingResult::needsSafeBrowsingWarning const):
        (WebKit::SafeBrowsingResult::isKnownToBeUnsafe const): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        (WebKit::PageClientImpl::clearSafeBrowsingWarning):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::setImpl):
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        (WebKit::PageClientImpl::clearSafeBrowsingWarning):
        * WebKit.xcodeproj/project.pbxproj:

2018-11-05  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Remove BackingStore, BackingStoreCairo implementation files from build
        https://bugs.webkit.org/show_bug.cgi?id=191269

        Reviewed by Michael Catanzaro.

        * SourcesWPE.txt: Drop the BackingStore.cpp and BackingStoreCairo.cpp
        files from the WPE build. These are not used at all in WPE configuration
        as they are only used by the GTK+ port for non-AC functionality.

2018-11-05  Chris Dumez  <cdumez@apple.com>

        Use same limit for page cache and suspended pages
        https://bugs.webkit.org/show_bug.cgi?id=191266

        Reviewed by Geoffrey Garen.

        Use same limit for page cache and suspended pages as they serve the same purpose.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _maximumSuspendedPageCount]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::updateMaxSuspendedPageCount):
        (WebKit::WebProcessPool::setCacheModel):
        (WebKit::WebProcessPool::addSuspendedPageProxy):
        * UIProcess/WebProcessPool.h:

2018-11-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Allow WKWebView clients to customize bar button item groups in the accessory view when editing
        https://bugs.webkit.org/show_bug.cgi?id=191240
        <rdar://problem/44872806>

        Reviewed by Tim Horton.

        Allow WKWebView clients to override WKContentView's default input assistant item by plumbing the call to
        `-inputAssistantItem` through `-[WKWebView inputAssistantItem]`, such that if a client asks WKWebView for its
        input assistant item and changes its leading or trailing bar button groups, the changes will be reflected by
        WKContentView; additionally, this allows clients to achieve the same effect by overriding `-inputAssistantItem`
        on WKWebView.

        Test:   KeyboardInputTests.ModifyInputAssistantItemBarButtonGroups
                KeyboardInputTests.OverrideInputAssistantItemBarButtonGroups

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView inputAssistantItem]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputAssistantItem]):

        Route the call to `[super inputAssistantItem]` through `-[WKWebView inputAssistantItem]`, so that the input
        assistant item may be overridden via WKWebView.

        (-[WKContentView inputAssistantItemForWebView]):

2018-11-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237785.

        Introduced layout test and API test failures on macOS and iOS.

        Reverted changeset:

        "[iOS] Issue initial paint soon after the visuallyNonEmpty
        milestone is fired."
        https://bugs.webkit.org/show_bug.cgi?id=191078
        https://trac.webkit.org/changeset/237785

2018-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237784 and r237788.
        https://bugs.webkit.org/show_bug.cgi?id=191270

        Caused mediastream layout test failures (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[MediaStream] User should not be prompted again after denying
        getDisplayMedia request"
        https://bugs.webkit.org/show_bug.cgi?id=191227
        https://trac.webkit.org/changeset/237784

        "[MediaStream] User should not be prompted again after denying
        getDisplayMedia request"
        https://bugs.webkit.org/show_bug.cgi?id=191227
        https://trac.webkit.org/changeset/237788

2018-11-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MediaStream] User should not be prompted again after denying getDisplayMedia request
        https://bugs.webkit.org/show_bug.cgi?id=191227
        <rdar://problem/45784512>

        Unreviewed build fix of ports not ENABLE(MEDIA_STREAM).

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: Define getRequestAction only if ENABLE(MEDIA_STREAM).
        * UIProcess/UserMediaPermissionRequestManagerProxy.h: Ditto.

2018-11-04  Zalan Bujtas  <zalan@apple.com>

        [iOS] Issue initial paint soon after the visuallyNonEmpty milestone is fired.
        https://bugs.webkit.org/show_bug.cgi?id=191078
        <rdar://problem/45736178>

        Reviewed by Antti Koivisto.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::layerFlushThrottlingIsActive const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::scheduleInitialDeferredPaint):
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::layerFlushThrottlingIsActive const):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::setLayerTreeStateIsFrozen):
        (WebKit::RemoteLayerTreeDrawingArea::initialDeferredPaint):
        (WebKit::RemoteLayerTreeDrawingArea::scheduleInitialDeferredPaint):
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlush):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scheduleInitialDeferredPaint):

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

        [MediaStream] User should not be prompted again after denying getDisplayMedia request
        https://bugs.webkit.org/show_bug.cgi?id=191227
        <rdar://problem/45784512>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::wasRequestDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

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

        Mac production builds should sign the network process xpc service with entitlements
        https://bugs.webkit.org/show_bug.cgi?id=191209
        <rdar://problem/45377609>

        Reviewed by Geoff Garen.

        * Configurations/Network-OSX.entitlements: Copied from Configurations/Network-OSX-sandbox.entitlements.
        * Configurations/NetworkService.xcconfig:
        Set CODE_SIGN_ENTITLEMENTS_COCOA_TOUCH_NO like we do for the web process,
        except with the corresponoding network process entitlements file.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _networkProcessHasEntitlementForTesting:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::networkProcessHasEntitlementForTesting):
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:
        Add infrastructure to test that the network process actually has an entitlement.

2018-11-03  Philippe Normand  <pnormand@igalia.com>

        [WPE] Add the WebKitVersion.h header
        https://bugs.webkit.org/show_bug.cgi?id=191015
        <rdar://problem/45647211>

        Reviewed by Michael Catanzaro.

        * PlatformWPE.cmake: Install the generated header as well.

2018-11-02  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r237761.

        Makes most API tests timeout and WK2 tests crash

        Reverted changeset:

        "Mac production builds should sign the network process xpc
        service with entitlements"
        https://bugs.webkit.org/show_bug.cgi?id=191209
        https://trac.webkit.org/changeset/237761

2018-11-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, attempt to fix the build with recent SDKs.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceExit):

2018-11-02  Alex Christensen  <achristensen@webkit.org>

        Mac production builds should sign the network process xpc service with entitlements
        https://bugs.webkit.org/show_bug.cgi?id=191209
        <rdar://problem/45377609>

        Reviewed by Geoff Garen.

        * Configurations/NetworkService.xcconfig:
        Set CODE_SIGN_ENTITLEMENTS_COCOA_TOUCH_NO like we do for the web process,
        except with the corresponoding network process entitlements file.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _networkProcessHasEntitlementForTesting:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::networkProcessHasEntitlementForTesting):
        * UIProcess/WebProcessPool.h:
        Add infrastructure to test that the network process actually has an entitlement.

2018-11-02  Daniel Bates  <dabates@apple.com>

        [iOS] WebKit should dispatch DOM events when a modifier key is pressed
        https://bugs.webkit.org/show_bug.cgi?id=190487

        Reviewed by Tim Horton.

        Add support for modifier flags change events dispatched by UIKit.

        * Shared/ios/WebIOSEventFactory.mm:
        (modifiersForEvent): Update for renamed enumerations.
        (WebIOSEventFactory::createWebKeyboardEvent): Modifier keys do not have an associated
        character and do not participate in key repeat.
        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction): Update for renamed enumerations.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]): Return NO if the event represents a
        modifier flags change to allow the default handling.
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]): Update for renamed enumerations.

2018-11-02  Chris Dumez  <cdumez@apple.com>

        [PSON] Reuse SuspendedPages' process when possible, for performance
        https://bugs.webkit.org/show_bug.cgi?id=191166

        Reviewed by Geoffrey Garen.

        When process-swapping check if there is an existing SuspendedPage for the domain we're going to.
        If there is, use this SuspendedPage's process for the navigation instead of a fresh new process.
        This change should be beneficial for performance as it:
        - Avoids spinning up a new process (CPU & memory cost)
        - Likely better leverages caches since this process already loaded this domain in the past

        Due to current limitations, using a SuspendedPage's proxy may consume the SuspendedPage, which
        means that it can no longer be used for PageCache on history navigations. We need to do this when
        the SuspendedPageProxy in question was created for the current WebPageProxy because:
        - This SuspendedPageProxy's process already has a suspended WebPage with this WebPageProxy's pageID
        and
        - We do not currently support having more than one WebPage with a given pageID within a single
          WebProcess.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):

2018-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Rename <wtf/unicode/UTF8.h> to <wtf/unicode/UTF8Conversion.h> in order to avoid conflicting with ICU's unicode/utf8.h
        https://bugs.webkit.org/show_bug.cgi?id=189693

        Reviewed by Yusuke Suzuki.

        * Shared/API/APIString.h: Replaced <wtf/unicode/UTF8.h> with <wtf/unicode/UTF8Conversion.h>.

2018-11-01  Daniel Bates  <dabates@apple.com>

        Cleanup: Extraneous platform guarding of -_setUpSQLiteDatabaseTrackerClient
        https://bugs.webkit.org/show_bug.cgi?id=191124

        Reviewed by Tim Horton.

        Remove the platform guard around the call to -_setUpSQLiteDatabaseTrackerClient as the
        implementation of that message is already guarded.

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

2018-11-01  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, attempt to fix the build with recent SDKs.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):

2018-11-01  Sihui Liu  <sihui_liu@apple.com>

        Add a storage limit for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=190598
        <rdar://problem/44654715>

        Reviewed by Chris Dumez.

        Add SPI for testing.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::idbServer):
        (WebKit::NetworkProcess::setIDBPerOriginQuota):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetIDBPerOriginQuota):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setIDBPerOriginQuota):
        * UIProcess/WebProcessPool.h:

2018-11-01  Chris Dumez  <cdumez@apple.com>

        [PSON] WebPageProxy::receivedNavigationPolicyDecision() should not schedule the new load asynchronously when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=191076

        Reviewed by Geoffrey Garen.

        WebPageProxy::receivedNavigationPolicyDecision() should not schedule the new load asynchronously when process-swapping.
        The client can request a new load synchronously after answering the policy decision, in which case we'd end up loading
        the wrong URL.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:

2018-11-01  Chris Dumez  <cdumez@apple.com>

        [PSON] Unable to submit a file in FormData cross-site
        https://bugs.webkit.org/show_bug.cgi?id=191138

        Reviewed by Alex Christensen.

        When PSON is enabled, we are unable to submit a file in FormData cross-site. Although we encode the
        request body over IPC since r237639, we're missing the right sandbox extensions for its to work for
        files.

        Update FormDataReference encoder to pass along the necessary sandbox extensions for files in the
        FormData, and have its decoder consume those extensions so that the recipient has access to those
        files. Also update LoadParameters's IPC encoder / decoder to encoder an IPC::FormDataReference
        (which encodes both FormData and sandbox extensions) instead of a FormData.

        * Platform/IPC/FormDataReference.h:
        (IPC::FormDataReference::encode const):
        (IPC::FormDataReference::decode):
        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        ERROR: ResourceLoadStatisticsPersistentStorage: Unable to delete statistics file
        https://bugs.webkit.org/show_bug.cgi?id=191152

        Reviewed by Chris Dumez.

        The statistics file is not created unconditionally, so
        make sure it exists before logging an error.

        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::clear):
        Check that the file exists before logging an error.

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        [GLIB] Silent a build warning when not using Wayland

        Unreviewed.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:

2018-11-01  Frederic Wang  <fwang@igalia.com>

        [WebAuthN] Make AuthenticatorManager
        https://bugs.webkit.org/show_bug.cgi?id=189279

        Unreviewed build fix.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.h: Add missing headers.

2018-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        API test WKAttachmentTests.CopyAndPasteBetweenWebViews fails on macOS 10.13
        https://bugs.webkit.org/show_bug.cgi?id=191114
        <rdar://problem/45700410>

        Reviewed by Dean Jackson.

        Followup to r237648: also make sure that we insecurely unarchive NSFileWrapper on platforms that don't support
        secure archiving of file wrappers.

        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::updateFromSerializedRepresentation):

2018-10-31  Dean Jackson  <dino@apple.com>

        Forward original fragment identifier into System Preview
        https://bugs.webkit.org/show_bug.cgi?id=191141
        <rdar://problem/45717542>

        Reviewed by Wenson Hsieh.

        If the URL used by the page includes a fragment identifier, use
        it when telling QuickLook to open a local file.

        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didFinish): Append original fragment identifier
        to the destination URL.

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        [iOS] Do not paint tap highlight unless it is above a certain threshold
        https://bugs.webkit.org/show_bug.cgi?id=191134
        <rdar://problem/43615142>

        Flashing a large portion of the screen on every tap looks unpleasant.
        This patch impoves the existing heuristic by adding area check and a % threshold.  

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showTapHighlight]):
        (highlightedQuadsAreSmallerThanRect): Deleted.

2018-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        API test WKAttachmentTests.CopyAndPasteBetweenWebViews fails on macOS 10.13
        https://bugs.webkit.org/show_bug.cgi?id=191114
        <rdar://problem/45700410>

        Reviewed by Dean Jackson.

        On macOS 10.12, we don't attempt secure archival at all because SECURE_ARCHIVER_API is turned off, and on macOS
        10.14, NSFileWrapper supports secure coding. However, on macOS 10.13, SECURE_ARCHIVER_API is on despite
        NSFileWrapper not being securely codable, so we're unable to serialize attachment data.

        To fix this, we only use the secure archiver on ≥ macOS 10.14 and ≥ iOS 12.

        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::createSerializedRepresentation const):

2018-10-31  Zach Li  <zacharyli323@gmail.com>

        Add credit card autofill button
        https://bugs.webkit.org/show_bug.cgi?id=191051
        <rdar://problem/45657011>

        Reviewed by Wenson Hsieh.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (toAutoFillButtonType):
        (toWKAutoFillButtonType):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandlePrivate.h:
        Introduce a new button type for credit card autofill.
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (toAutoFillButtonType):
        (toWKAutoFillButtonType):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:

2018-10-31  Chris Dumez  <cdumez@apple.com>

        [PSON] When process-swapping for a POST request the HTTP body gets dropped
        https://bugs.webkit.org/show_bug.cgi?id=191046
        <rdar://problem/45229732>

        Reviewed by Alex Christensen.

        For performance reasons, the ResourceRequest IPC encoder does not encode the request's HTTP body (aka form data).
        When we decide to process-swap for a POST request in WebPageProxy::decidePolicyForNavigationAction(), the request
        we pass the new WebProcess thus no longer has a HTTP body and the load will likely fail in the new process.

        To address the issue, we now pass the request body along with the request when sending the DecidePolicyForNavigationActionAsync
        / DecidePolicyForNavigationActionSync IPC from the WebProcess to the UIProcess. No action is needed for the
        LoadRequest IPC to the new WebProcess since the LoadParameters' IPC encoder takes care of encoding the request's
        body already.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-10-31  Antti Koivisto  <antti@apple.com>

        Stop using LayerFlushScheduler in WK2
        https://bugs.webkit.org/show_bug.cgi?id=191065

        Reviewed by Tim Horton.

        Code gets more understandable when TiledCoreAnimationDrawingArea simply uses RunLoopObserver
        directly for flush scheduling. LayerFlushScheduler can be later moved to WK1.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::~TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::setLayerTreeStateIsFrozen):
        (WebKit::TiledCoreAnimationDrawingArea::scheduleCompositingLayerFlush):
        (WebKit::TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition):
        (WebKit::TiledCoreAnimationDrawingArea::layerFlushRunLoopCallback):
        (WebKit::TiledCoreAnimationDrawingArea::invalidateLayerFlushRunLoopObserver):
        (WebKit::TiledCoreAnimationDrawingArea::scheduleLayerFlushRunLoopObserver):

2018-10-31  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Certificates loaded from the cache don't include the certificate chain
        https://bugs.webkit.org/show_bug.cgi?id=190956

        Reviewed by Youenn Fablet.

        Similarly to what was done for the IPC coders, serialize
        the entire certificate chain in the cache coder. Bump
        the cache version due to the caching format changes.

        * NetworkProcess/cache/NetworkCacheCoders.h: Add GRefPtr<GByteArray> coders.
        * NetworkProcess/cache/NetworkCacheCodersSoup.cpp:
        (WTF::Persistence::certificatesDataListFromCertificateInfo):
        (WTF::Persistence::certificateFromCertificatesDataList): Helpers.
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode):
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode):
        (WTF::Persistence::Coder<GRefPtr<GByteArray>>::encode):
        (WTF::Persistence::Coder<GRefPtr<GByteArray>>::decode):
        * NetworkProcess/cache/NetworkCacheStorage.h: Bump the cache version.

2018-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Attachment dropped from one web view to another is missing its file wrapper
        https://bugs.webkit.org/show_bug.cgi?id=190530
        <rdar://problem/45232149>

        Reviewed by Tim Horton.

        See WebCore ChangeLog for more details.

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

        Add IPC encoding/decoding support for SerializedAttachmentData.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::createSerializedRepresentation const):
        (API::Attachment::updateFromSerializedRepresentation):
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::createSerializedRepresentation const):

        Add a method to serialize and return attachment info as a blob of data.

        (API::Attachment::updateFromSerializedRepresentation):

        Add a method to update the attachment, given a serialized blob of data. On Cocoa platforms, this fails
        gracefully if the serialized data cannot be decoded.

        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::allocFileWrapperInstance const):
        (WebKit::PageClientImplCocoa::serializableFileWrapperClasses const):
        (WebKit::PageClientImplCocoa::allocFileWrapperInstance): Deleted.

        Add an additional hook to return the list of NSFileWrapper subclasses suitable for deserialization. This
        array contains (at minimum) NSFileWrapper, but may additionally include a custom NSFileWrapper subclass, if
        configured.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::allocFileWrapperInstance const):
        (WebKit::PageClient::serializableFileWrapperClasses const):
        (WebKit::PageClient::allocFileWrapperInstance): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::registerAttachmentsFromSerializedData):

        Registers the given serialized attachment data, creating new _WKAttachment instances if necessary. Currently,
        this does not update the file wrappers of existing _WKAttachments; we should revisit this in the future to see
        if we can additionally update file wrappers for existing attachments, without breaking the case where the user
        copies and pastes or drags and drops attachments within a single web view and the client expects _WKAttachment
        instances to be reused.

        (WebKit::WebPageProxy::serializedAttachmentDataForIdentifiers):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerAttachments):
        (WebKit::WebEditorClient::serializedAttachmentDataForIdentifiers):

        Implement a new IPC hook to fetch an array of serialized attachment data blobs, given a list of attachment
        identifiers.

        * WebProcess/WebCoreSupport/WebEditorClient.h:

2018-10-30  Chris Dumez  <cdumez@apple.com>

        [PSON] View gesture snapshot gets taken down early when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=191083
        <rdar://problem/45058738>

        Reviewed by Alex Christensen.

        When process-swapping, we would call WebViewImpl::processDidExit(), which would destroy
        the ViewGestureController and thus take down the swipe navigation snapshot before it
        should. We now call WebViewImpl::processDidSwap() instead, which does the same thing,
        except for destroying the ViewGestureController. As a result, the view snapshot stays
        visible as long as it is needed, even in case of process swap.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleProcessSwapOrExit):
        (WebKit::WebViewImpl::processWillSwap):
        (WebKit::WebViewImpl::processDidExit):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::processWillSwap):

2018-10-30  Chris Dumez  <cdumez@apple.com>

        [PSON] WebView renders with incorrect dimensions after back or forward
        https://bugs.webkit.org/show_bug.cgi?id=191071
        <rdar://problem/45058950>

        Reviewed by Alex Christensen.

        Make sure WebPage::reinitializeWebPage() updates the page's dimensions if needed using the
        WebPageCreationParameters it is provided.

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

2018-10-30  Dewei Zhu  <dewei_zhu@apple.com>

        Move 'ProcessSwapOnCrossSiteNavigationEnabled' to 'experimental' category.
        https://bugs.webkit.org/show_bug.cgi?id=191049

        Reviewed by Dean Jackson.

        Move the feature flag to experimental feature section.

        * Shared/WebPreferences.yaml:

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Enable InstallAPI for iOS unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=191043
        rdar://problem/32728423

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig: Enabled it. Added NSURLDownloadSPI.h as an
        excluded header - WebKit doesn't export NSURLDownload, so the definition
        shouldn't be processed by InstallAPI.

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete MAX_ALLOWED macros
        https://bugs.webkit.org/show_bug.cgi?id=190916

        Reviewed by Tim Horton.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
        * Platform/spi/Cocoa/DeviceIdentitySPI.h:
        * Platform/spi/ios/UIKitSPI.h:
        * Shared/WebPreferencesDefaultValues.cpp:
        (defaultCustomPasteboardDataEnabled):
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKPaymentRequest):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]): Deleted.

2018-10-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237600 and r237604.
        https://bugs.webkit.org/show_bug.cgi?id=191086

        Breaks internal iOS builds (Requested by ryanhadd_ on
        #webkit).

        Reverted changesets:

        "Enable InstallAPI for iOS unconditionally"
        https://bugs.webkit.org/show_bug.cgi?id=191043
        https://trac.webkit.org/changeset/237600

        "Build fix attempt after enabling InstallAPI for iOS."
        https://bugs.webkit.org/show_bug.cgi?id=191043
        https://trac.webkit.org/changeset/237604

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Build fix attempt after enabling InstallAPI for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=191043
        rdar://problem/32728423

        * Configurations/WebKit.xcconfig: Skip NSURLDownloadSPI.h here too.

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Enable InstallAPI for iOS unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=191043
        rdar://problem/32728423

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig: Enabled it.

2018-10-30  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] CoordinatedLayerTreeHost::flushLayersAndForceRepaint() should schedule the flush
        https://bugs.webkit.org/show_bug.cgi?id=191066

        Reviewed by Michael Catanzaro.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::flushLayersAndForceRepaint):
        Only schedule the layer flush in this call, don't perform it on the
        spot. This avoids re-entry of the layer flushing process in cases when
        the associated display refresh monitor is requested a callback during
        the layout phase that's executed under the initial layer flush.

2018-10-29  Dewei Zhu  <dewei_zhu@apple.com>

        Move 'ProcessSwapOnCrossSiteNavigationEnabled' to 'experimental' category.
        https://bugs.webkit.org/show_bug.cgi?id=191049

        Reviewed by Chris Dumez.

        Move 'ProcessSwapOnCrossSiteNavigationEnabled' from 'internal' to 'experimental' category.

        * Shared/WebPreferences.yaml:

2018-10-29  Youenn Fablet  <youenn@apple.com>

        Handle MDNS resolution of candidates through libwebrtc directly
        https://bugs.webkit.org/show_bug.cgi?id=190681

        Reviewed by Eric Carlson.

        Add support for AsyncResolver to resolve MDNS.
        This basically reuse the code path used to resolve STUN server addresses.
        Removed MDNS specific resolution.
        Use existing CFHost resolution mechanism to do the actual resolution.

        Make sure that a resolver is kept alive while iterating through its clients when signaling done.
        Some of its clients may indeed call Destroy() on the resolver during that iteration.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCResolver::Destroy):
        (WebKit::LibWebRTCResolver::doDestroy):
        (WebKit::LibWebRTCResolver::setResolvedAddress):
        (WebKit::LibWebRTCResolver::setError):
        (WebKit::LibWebRTCProvider::createPeerConnection):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.cpp:
        * WebProcess/Network/webrtc/WebMDNSRegister.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.messages.in:

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * Resources/WebContentProcess.xib:
        * WebKit.xcodeproj/project.pbxproj:
        * en.lproj/InfoPlist.strings: Renamed from Source/WebKit/English.lproj/InfoPlist.strings.
        English->en

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Make FindOptionsShowOverlay work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=190551

        Reviewed by Andy Estes.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        Update the find indicator after installing the page overlay for the find holes.
        This ensures that if the find indicator mechanism also uses page overlays,
        as it does on iOS, that they are installed in the correct order (because
        order of installation directly affects z-order).

        (WebKit::FindController::findIndicatorRadius const):
        (WebKit::FindController::shouldHideFindIndicatorOnScroll const):
        Add two getters for design differences between find-in-page on iOS vs. other platforms.

        (WebKit::FindController::rectsForTextMatchesInRect):
        Return FloatRects instead of IntRects for ease of use in the caller.
        Don't clip rects for matches that intersect the current tile. We still
        drop ones that don't intersect at all, but if they do intersect, we
        provide the full rect (which may overlap a different tile), so that
        e.g. border drawing will work correctly.

        (WebKit::FindController::drawRect):
        Adopt shrink-wrapping for find holes. This has minimal impact on macOS,
        where the holes don't have rounded corners, but on iOS this makes
        overlapping or adjacent holes look great. We already do this for the indicator,
        so it only makes sense to do the same for the holes.

        In order to support shrink-wrapping here, switch to using a Clear operator
        with a path-fill instead of clearRect to clear out the holes.

        Avoid hiding the find indicator on scroll if the platform says not to.

        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::findIndicatorRadius const):
        (WebKit::FindController::shouldHideFindIndicatorOnScroll const):
        Slightly adjust the find indicator's parameters to be compatible with having holes.
        Reduce the horizontal margin by half a point so that it fits precisely in the hole.
        Drop the "TightlyFitContent" text indicator parameter, because we want 
        rects that match the holes, and they do not tightly fit the content's height.
        This matches macOS's behavior.

2018-10-29  Jer Noble  <jer.noble@apple.com>

        CRASH in CoreGraphics: ERROR_CGDataProvider_BufferIsNotBigEnough
        https://bugs.webkit.org/show_bug.cgi?id=190954

        Reviewed by Simon Fraser.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::makeCGImage):

2018-10-29  Youenn Fablet  <youenn@apple.com>

        Guard H264 simulcast with a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=191025

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2018-10-29  Chris Dumez  <cdumez@apple.com>

        [PSON] When Safari restores session state after launching, going back and forward does not swap processes
        https://bugs.webkit.org/show_bug.cgi?id=190975
        <rdar://problem/45059256>

        Reviewed by Antti Koivisto.

        When deciding to process-swap or not on a history navigation, we normally check the BackForwardListItems'
        process identifiers do check if they come from different WebProcesses or not. However, the check was invalid
        in the case where the BackForwardListItems were restored by the client. After a session restore, the
        items' process identifier is the UIProcess one. Therefore, we need to disable the BackForwardListItems'
        process identifiers check if if the process identifier is the one of the UIProcess.

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

2018-10-29  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Enable VP8 by default
        https://bugs.webkit.org/show_bug.cgi?id=190672

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2018-10-28  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Add the WebKitVersion.h header
        https://bugs.webkit.org/show_bug.cgi?id=191015

        Reviewed by Michael Catanzaro.

        Add the WebKitVersion.h API header for the WPE port. As with other
        headers providing the GLib API, we have to provide a WPE-specific
        version, but the implementation file can be shared with the GTK port,
        and is moved under the UIProcess/API/glib/ directory accordingly.

        * PlatformWPE.cmake:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitVersion.cpp: Renamed from Source/WebKit/UIProcess/API/gtk/WebKitVersion.cpp.
        * UIProcess/API/wpe/WebKitVersion.h.in: Added.
        * UIProcess/API/wpe/webkit.h:

2018-10-26  Megan Gardner  <megan_gardner@apple.com>

        Remove Unused WebSelectionAssistant
        https://bugs.webkit.org/show_bug.cgi?id=190939

        Reviewed by Tim Horton.

        We made webSelectionAssistant alwasys nil last year when we moved to using
        the textSelectionAssistant for all text selection on the web. This patch merely 
        goes through and cleans out all the references to this object that is always nil.
        No functionality should change.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didExitStableState]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView _scrollingNodeScrollingWillBegin]):
        (-[WKContentView _scrollingNodeScrollingDidEnd]):
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _uiTextSelectionRects]):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _willStartScrollingOrZooming]):
        (-[WKContentView _didEndScrollingOrZooming]):
        (-[WKContentView _lookupForWebView:]):
        (-[WKContentView _shareForWebView:]):
        (-[WKContentView _addShortcutForWebView:]):
        (-[WKContentView _showDictionary:]):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView selectionInteractionAssistant]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]):
        (-[WKContentView _restoreCalloutBarIfNeeded]):
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):
        (-[WKContentView webSelectionAssistant]): Deleted.

2018-10-26  Commit Queue  <commit-queue@webkit.org>

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

        broke internal iOS builds (Requested by zalan on #webkit).

        Reverted changeset:

        "Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI"
        https://bugs.webkit.org/show_bug.cgi?id=190951
        https://trac.webkit.org/changeset/237458

2018-10-26  Chris Dumez  <cdumez@apple.com>

        [PSON] Only delay attaching drawingArea in case of process swap and drop DidCompletePageTransition IPC handshake
        https://bugs.webkit.org/show_bug.cgi?id=190971

        Reviewed by Geoffrey Garen.

        Only delay attaching drawingArea in case of process swap and drop DidCompletePageTransition IPC handshake.

        Since r236257, the WebProcess would always delay attaching the drawing area when a new WebPage is created. The
        WebProcess would send a DidCompletePageTransition IPC to the UIProcess when the page transition is complete and
        the UIProcess would then send an IPC back to attach the drawing area.

        In the new design, WebPageCreationParameters contains a flag indicating if the WebPage should delay attaching
        the drawing area or not. We only delay attaching in case of process swap and we've successfuly suspended the
        previous page. Then when WebPage::didCompletePageTransition(), we stop sending the DidCompletePageTransition
        IPC to the UIProcess and instead have the WebProcess attach the drawing area right away if we've delayed
        attaching until then.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldAttachDrawingAreaOnPageTransition):
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::didCompletePageTransition):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

2018-10-26  Chris Dumez  <cdumez@apple.com>

        [PSON] Avoid tearing down the drawing area when suspending a WebPage due to process-swap
        https://bugs.webkit.org/show_bug.cgi?id=190879

        Reviewed by Antti Koivisto.

        Avoid tearing down the drawing area when suspending a WebPage due to process-swap. We really only need to reset
        the drawing area upon resuming the WebPage. There is no strict need to destroy the drawing area on suspension
        and this has caused various crashes because code usually assumes we always have a drawing area.

        This patch also drops various drawing area null checks that were added to address PSON crashes.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::tearDownDrawingAreaInWebProcess): Deleted.
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::didCompletePageTransition):
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsAndRootView):
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
        (WebKit::WebChromeClient::contentsSizeChanged const):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scheduleTreeStateCommit):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::exitAcceleratedCompositingMode):
        (WebKit::WebPage::setIsSuspended):
        (WebKit::WebPage::tearDownDrawingAreaForSuspend): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-10-26  Antti Koivisto  <antti@apple.com>

        Use random() instead of begin() to limit cache sizes
        https://bugs.webkit.org/show_bug.cgi?id=190957

        Reviewed by Chris Dumez.

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

2018-10-26  Chris Dumez  <cdumez@apple.com>

        Modernize / Simplify IPC::Connection::sendOutgoingMessage()
        https://bugs.webkit.org/show_bug.cgi?id=190931

        Reviewed by Alex Christensen.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendOutgoingMessage):

2018-10-26  Jer Noble  <jer.noble@apple.com>

        Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI
        https://bugs.webkit.org/show_bug.cgi?id=190951
        <rdar://problem/45213065>

        Reviewed by Alex Christensen.

        Add an asyncronous reply request to VideoFullscreenManager.

        Drive-by fix: messages.py generates "WTFMove(*arg1, *arg2)" instead of "WTFMove(*arg1), WTFMove(*arg2)"
        in its reply handler generation.

        * Platform/IPC/MessageSender.h:
        (IPC::MessageSender::sendWithAsyncReply):
        * Scripts/webkit/messages.py:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::requestRouteSharingPolicyAndContextUID):
        * WebProcess/cocoa/VideoFullscreenManager.h:
        * WebProcess/cocoa/VideoFullscreenManager.messages.in:
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::requestRouteSharingPolicyAndContextUID):

2018-10-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, another try at fixing the GTK build with sandbox enabled

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::memfd_create): Deleted.

2018-10-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations CSS Integration off by default
        https://bugs.webkit.org/show_bug.cgi?id=190901

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2018-10-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, try to fix GTK build with sandbox enabled

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:

2018-10-25  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Follow-up fixes to the certificate coders
        https://bugs.webkit.org/show_bug.cgi?id=190900

        Reviewed by Michael Catanzaro.

        Cleanup the GRefPtr mess I created earlier. Also we now bail out
        if any certificate in the chain has no data instead of returning a
        cropped chain.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::encode):
        (IPC::ArgumentCoder<CertificateInfo>::decode):

2018-10-25  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][AC] Resizing the window doesn't always update the visible rect
        https://bugs.webkit.org/show_bug.cgi?id=189743

        Reviewed by Michael Catanzaro.

        Disassociate resizing that can be done on an AcceleratedSurface object
        between "host resizes" and "client resizes".

        The former is done from ThreadedCoordinatedLayerTreeHost directly, and
        is currently used only for GTK on X11, where a new pixmap object is
        created on each resize, which affects the context ID that is based on
        that pixmap object's address.

        The latter is done from the composition thread. It's used for GTK on
        Wayland and WPE. In both cases, the underlying window object does not
        change on each resize, but it's necessary to perform the actual resize
        on the composition thread.

        So far it hasn't been performed there, which ended up pushing sizes of
        the WebKit view and the underlying window object out of sync during
        resizing, leaving parts of window unrendered.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::renderLayerTree):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/AcceleratedSurface.cpp:
        (WebKit::AcceleratedSurface::hostResize):
        (WebKit::AcceleratedSurface::resize): Deleted.
        * WebProcess/WebPage/AcceleratedSurface.h:
        (WebKit::AcceleratedSurface::clientResize):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.cpp:
        (WebKit::AcceleratedSurfaceWayland::clientResize):
        (WebKit::AcceleratedSurfaceWayland::resize): Deleted.
        * WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.h:
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
        (WebKit::AcceleratedSurfaceX11::hostResize):
        (WebKit::AcceleratedSurfaceX11::resize): Deleted.
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h:
        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp:
        (WebKit::AcceleratedSurfaceWPE::clientResize):
        (WebKit::AcceleratedSurfaceWPE::resize): Deleted.
        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.h:

2018-10-24  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete macOS version guards
        https://bugs.webkit.org/show_bug.cgi?id=190887

        Reviewed by Dan Bernstein.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2018-10-24  Megan Gardner  <megan_gardner@apple.com>

        Turn on Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=190810

        Reviewed by Tim Horton.

        Remove conic gradients from experimental features and turn it on always.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:

2018-10-24  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Cleanup: MIMETypeRegistry functions
        https://bugs.webkit.org/show_bug.cgi?id=190838

        Reviewed by Simon Fraser.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):

2018-10-24  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r237257): [iOS] Crashes in com.apple.WebKit: WebKit::RemoteScrollingCoordinator::scheduleTreeStateCommit
        https://bugs.webkit.org/show_bug.cgi?id=190804

        Reviewed by Alex Christensen.

        Fix null-dereference of the drawing area in RemoteScrollingCoordinator::scheduleTreeStateCommit.
        With process-swap-on-navigation enabled, suspended pages' drawing area gets torn down.

        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scheduleTreeStateCommit):

2018-10-24  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Cleanups to the certificate decoder
        https://bugs.webkit.org/show_bug.cgi?id=190867

        Reviewed by Žan Doberšek.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::decode):

2018-10-24  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Cleanups to the certificate encoder
        https://bugs.webkit.org/show_bug.cgi?id=190865

        Reviewed by Žan Doberšek.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::encode):

2018-10-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237261.

        The layout test for this change crashes under GuardMalloc.

        Reverted changeset:

        "Handle MDNS resolution of candidates through libwebrtc
        directly"
        https://bugs.webkit.org/show_bug.cgi?id=190681
        https://trac.webkit.org/changeset/237261

2018-10-23  David Kilzer  <ddkilzer@apple.com>

        Fix false positive leaks when using custom -init methods that don't start with -init
        <https://webkit.org/b/190818>
        <rdar://problem/45476042>

        Reviewed by Dan Bernstein.

        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        (-[WKWebViewContentProvider web_initWithFrame:webView:mimeType:]):
        Add attribute to make this behave like an -init method.

2018-10-23  Chris Dumez  <cdumez@apple.com>

        [PSON] Add support for cross-site client-side redirects
        https://bugs.webkit.org/show_bug.cgi?id=190806
        <rdar://problem/45047344>

        Reviewed by Geoffrey Garen.

        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::setSuspendedPage):
        * UIProcess/API/APINavigation.h:
        (API::Navigation::setLockHistory):
        (API::Navigation::lockHistory const):
        (API::Navigation::setLockBackForwardList):
        (API::Navigation::lockBackForwardList const):
        (API::Navigation::setClientRedirectSourceForHistory):
        (API::Navigation::clientRedirectSourceForHistory const):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::willPerformClientRedirect):
        (API::NavigationClient::didPerformClientRedirect):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::didPerformClientRedirect):
        * UIProcess/FrameLoadState.h:
        (WebKit::FrameLoadState::setURL):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigation):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::setCurrentHistoryItemForReattach):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-10-23  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Pass full certificate chain in CertificateInfo coder
        https://bugs.webkit.org/show_bug.cgi?id=190789

        Reviewed by Michael Catanzaro.

        When the network process serializes certificate data to other
        processes through the argument coders, the certificate chain, if
        present, is lost. In practice this means that applications using
        the public API to process certificate info have no details on the
        certificate chain, other than the very basics included in the
        certificate. Serialize the entire chain if available in the
        certificate.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::encode): Encode the
        certificate chain if present.
        (IPC::ArgumentCoder<CertificateInfo>::decode): Decode the
        entire certificate chain and rebuild it.

2018-10-22  Keith Rollin  <krollin@apple.com>

        Use Location = "Relative to Build Products" rather than "Relative to Group"
        https://bugs.webkit.org/show_bug.cgi?id=190781

        Reviewed by Alexey Proskuryakov.

        Almost all Derived Files are included in Xcode projects with the
        Location attribute set to "Relative to Group". While this currently
        works, the Derived Files can no longer be found when enabling XCBuild
        (which has stricter requirements). Fix this by setting the Location
        attribute to "Relative to Build Products".

        * WebKit.xcodeproj/project.pbxproj:

2018-10-22  Tim Horton  <timothy_horton@apple.com>

        Don't waste time under -setupInteraction under -initWithFrame for unparented WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=190801
        <rdar://problem/43674361>

        Reviewed by Megan Gardner.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView didMoveToWindow]):
        Defer the first call to WKContentViewInteraction's -setupInteraction
        until the view is parented. This avoids a few milliseconds of unnecessary
        work for views that are never parented.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        Keep track of the current state of WKContentViewInteraction's gestures.
        Use this to make it OK to call -setupInteraction multiple times.

2018-10-22  Chris Dumez  <cdumez@apple.com>

        Deque's contains() and findIf() should be const
        https://bugs.webkit.org/show_bug.cgi?id=190796

        Reviewed by Antti Koivisto.

        Mark method as const now that Deque's implementation allows it to be.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::hasSuspendedPageProxyFor const):
        (WebKit::WebProcessPool::hasSuspendedPageProxyFor): Deleted.
        * UIProcess/WebProcessPool.h:

2018-10-19  Brent Fulgham  <bfulgham@apple.com>

        Allow WebContent process to check some file system features
        https://bugs.webkit.org/show_bug.cgi?id=190768
        <rdar://problem/45377609>

        Reviewed by Alexey Proskuryakov.

        This patch unblocks some IOKit properties that are needed by lower level frameworks to make decisions
        about how to efficiently use the file system.

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

2018-10-19  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Search terms are not saved for <input type="search">
        https://bugs.webkit.org/show_bug.cgi?id=188174

        Reviewed by Fujii Hironori.

        Add support for saving the search terms for <input
        type="search"> to a SQLite database, replacing the
        CF-based implementation for Windows and adding support
        for non-legacy WebKit.

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::saveRecentSearches): Use SQLite database
        implementation in WebCore::SearchPopupMenuDB to save search
        terms
        (WebKit::WebPageProxy::loadRecentSearches): Use SQLite database
        implementation in WebCore::SearchPopupMenuDB to load search
        terms

2018-10-19  Alex Christensen  <achristensen@webkit.org>

        WebDataListSuggestionsDropdown should use a WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=190763
        <rdar://problem/45417449>

        Reviewed by Tim Horton.

        Nothing suspicious here. It's just good practice to not keep raw pointers that aren't reset when the object they point to are destroyed.

        * UIProcess/WebDataListSuggestionsDropdown.cpp:
        (WebKit::WebDataListSuggestionsDropdown::WebDataListSuggestionsDropdown):
        (WebKit::WebDataListSuggestionsDropdown::close):
        * UIProcess/WebDataListSuggestionsDropdown.h:
        (WebKit::WebDataListSuggestionsDropdown::Client::~Client): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.h:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (WebKit::WebDataListSuggestionsDropdownIOS::create):
        (WebKit::WebDataListSuggestionsDropdownIOS::WebDataListSuggestionsDropdownIOS):
        (WebKit::WebDataListSuggestionsDropdownIOS::close):
        (WebKit::WebDataListSuggestionsDropdownIOS::didSelectOption):
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.h:
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (WebKit::WebDataListSuggestionsDropdownMac::create):
        (WebKit::WebDataListSuggestionsDropdownMac::WebDataListSuggestionsDropdownMac):
        (WebKit::WebDataListSuggestionsDropdownMac::didSelectOption):
        (WebKit::WebDataListSuggestionsDropdownMac::selectOption):

2018-10-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [Datalist] Can't pick datalist suggestions in a stock WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190621
        <rdar://problem/45310649>

        Reviewed by Tim Horton.

        Fixes the bug by refactoring datalist suggestion information on iOS; currently, we override text suggestions on
        _WKFormInputSession. This only works for a few internal clients (including Safari) that set a _WKInputDelegate
        and also implement either -_webView:willStartInputSession: or -_webView:didStartInputSession:, which is
        necessary in order to ensure that WebKit creates and maintains a form input session.

        The two pieces of information that datalist code needs to vend to WKContentView are a list of UITextSuggestions
        and a custom input view, which are both currently properties of _WKFormInputSession. This patch lifts these out
        of the input session and makes them properties of WKContentView, which are used in
        WebDataListSuggestionsDropdownIOS.

        Test: fast/forms/datalist/datalist-textinput-suggestions-order.html

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:

        Add new properties to WKContentView: an input view for datalist suggestions, and a list of text suggestions.

        (-[WKFormInputSession setSuggestions:]):
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _endEditing]):

        Pull out common logic when resigning first responder or tabbing to the next or previous text field into a new
        helper. This helper notifies `_inputPeripheral`, `_formInputSession`, and `_dataListTextSuggestionsInputView`
        when editing has ended; the input peripheral and suggestions input view use this chance to send the value of the
        form control to the web process.

        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView inputView]):

        If a custom input view is not set but we have an input view for a datalist's text suggestions, use the datalist
        input view.

        (-[WKContentView accessoryTab:]):
        (-[WKContentView _stopAssistingNode]):

        Clear datalist state on WKContentView.

        (-[WKContentView dataListTextSuggestionsInputView]):
        (-[WKContentView dataListTextSuggestions]):
        (-[WKContentView setDataListTextSuggestionsInputView:]):
        (-[WKContentView setDataListTextSuggestions:]):
        (-[WKContentView updateTextSuggestionsForInputDelegate]):

        Pull out logic for setting suggestions on UIKit's `inputDelegate` (i.e. UIKeyboardImpl). We now first consult
        internally-vended text suggestions from _WKFormInputSession; if an internal client has not overridden our text
        suggestions, then we simply use suggestions from the current datalist (if present).

        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsPicker updateWithInformation:]):
        (-[WKDataListSuggestionsPicker showSuggestionsDropdown:activationType:]):
        (-[WKDataListSuggestionsPicker invalidate]):
        (-[WKDataListSuggestionsPopover updateWithInformation:]):
        (-[WKDataListSuggestionsPopover showSuggestionsDropdown:activationType:]):
        (-[WKDataListSuggestionsPopover didSelectOptionAtIndex:]):

        Change all the places that currently manipulate WKContentView's form input session to directly set text
        suggestions and the text suggestion input view on the content view instead.

2018-10-19  John Wilander  <wilander@apple.com>

        Only cap lifetime of persistent cookies created client-side through document.cookie when resource load statistics is enabled
        https://bugs.webkit.org/show_bug.cgi?id=190687
        <rdar://problem/45349024>

        Reviewed by Alex Christensen.

        This patch adds the following:
        - The WebProcessPool now tells the WebsiteDataStore when a network process has
            been created.
        - The WebsiteDataStore in turn tells the WebResourceLoadStatisticsStore when
            a network process has been created.
        - The WebResourceLoadStatisticsStore makes sure to update the network processes
            with its cookie policy when it's notified that a network process has been
            created.

        In addition, this patch changes the following:
        - The ResourceLoadStatisticsMemoryStore no longer keeps track of which domains
            it has told the network process to block cookies for. The reason is that
            we cannot assume that there is only one network process so we should
            always send complete blocking data.
        - The ResourceLoadStatisticsMemoryStore's functions for communicating cookie
            blocking state to the network process no longer take and forward the
            "clear first" parameter. This is because complete data is sent every time
            and thus the network process' set is always cleared on an update.
        - Removes WebsiteDataStore::networkProcessDidCrash() and
            WebResourceLoadStatisticsStore::scheduleCookieBlockingStateReset() since
            the call site---WebProcessPool::ensureNetworkProcess()---now calls
            WebsiteDataStore::didCreateNetworkProcess() after a network process
            crash and the state sync for cookie blocking is triggered.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcess::setShouldCapLifetimeForClientSideCookies):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcessProxy::setShouldCapLifetimeForClientSideCookies):
        (WebKit::NetworkProcessProxy::didSetShouldCapLifetimeForClientSideCookies):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::clear):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::clearBlockingStateForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::resetCookieBlockingState): Deleted.
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::didCreateNetworkProcess):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingStateReset): Deleted.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::WebsiteDataStore::setShouldCapLifetimeForClientSideCookies):
        (WebKit::WebsiteDataStore::didCreateNetworkProcess):
        (WebKit::WebsiteDataStore::networkProcessDidCrash): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-10-19  Alex Christensen  <achristensen@webkit.org>

        Rebase python tests.

        * Scripts/webkit/messages_unittest.py:

2018-10-19  Alex Christensen  <achristensen@webkit.org>

        Rebase python tests.

        * Scripts/Makefile:
        * Scripts/webkit/MessageReceiver-expected.cpp:
        * Scripts/webkit/Messages-expected.h:

2018-10-19  Alex Christensen  <achristensen@webkit.org>

        Mark LegacySync IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=190759

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessageLegacySync):
        * PluginProcess/PluginControllerProxy.messages.in:
        * Scripts/webkit/messages.py:
        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/WebFullScreenManagerProxy.messages.in:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/WebProcessPool.messages.in:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/WebStorage/StorageManager.messages.in:
        * UIProcess/mac/SecItemShimProxy.messages.in:
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        * WebProcess/Plugins/PluginProxy.messages.in:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.messages.in:

2018-10-19  Alex Christensen  <achristensen@webkit.org>

        Update and add python tests after r237294
        https://bugs.webkit.org/show_bug.cgi?id=190746

        * Scripts/Makefile: Added to help updating expectations.
        * Scripts/webkit/LegacyMessageReceiver-expected.cpp:
        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp:
        (Messages::WebPage::TestAsyncMessage::callReply):
        (Messages::WebPage::TestAsyncMessage::cancelReply):
        (Messages::WebPage::TestAsyncMessage::send):
        (WebKit::WebPage::didReceiveMessage):
        * Scripts/webkit/MessagesSuperclass-expected.h:
        (Messages::WebPage::TestAsyncMessage::receiverName):
        (Messages::WebPage::TestAsyncMessage::name):
        (Messages::WebPage::TestAsyncMessage::asyncMessageReplyName):
        (Messages::WebPage::TestAsyncMessage::TestAsyncMessage):
        (Messages::WebPage::TestAsyncMessage::arguments const):
        * Scripts/webkit/test-superclass-messages.in:
        Adding the extra newline made python tests fail.
        I also added more tests for the new functionality introduced in r237924.

2018-10-19  Alex Christensen  <achristensen@webkit.org>

        Introduce CompletionHandler-based Async IPC messages with replies
        https://bugs.webkit.org/show_bug.cgi?id=190746

        Reviewed by Tim Horton.

        Before this patch, to make an asynchronous IPC message with a reply you had to find two objects that
        can talk to each other, make two new message types, send a generated identifier, keep track of that
        identifier, make a HashMap somewhere to store the object waiting for the response, and hook it all up.
        What a mess.  No wonder people take shortcuts and make strange design decisions.

        Now, you can just use a CompletionHandler and mark the reply as Async in *.messages.in.
        I've adopted this with a message whose behavior is covered by the storage/indexeddb/modern/blob-cursor.html
        layout test and many others.  I intent to refine and further adopt this incrementally.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getSandboxExtensionsForBlobFiles):
        (WebKit::NetworkProcess::didGetSandboxExtensionsForBlobFiles): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        This is representative of how code will be simplified with greater adoption. 
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::decode):
        Modernize HandleArray decoding.
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchMessage):
        (IPC::nextAsyncReplyHandlerID):
        (IPC::asyncReplyHandlerMap):
        Handle async replies when looking at incoming messages from the sending process.
        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithAsyncReply):
        Send a message with an async reply and prepare the reply receiver.
        * Platform/IPC/Encoder.h:
        Make the uint64_t encoder public so we can use it when encoding the listenerID.
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessageAsync):
        Handle an asynchronous message with a reply from the receiving process.
        This is similar to how DelayedReply messages are handled, but the listenerID is automatically captured and sent back.
        * Scripts/webkit/messages.py:
        Generate code for async message replies.
        * Shared/Databases/IndexedDB/WebIDBResult.cpp:
        (WebKit::WebIDBResult::decode):
        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::HandleArray::at):
        (WebKit::SandboxExtension::HandleArray::decode):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::HandleArray::decode):
        Modernize the decoding of HandleArray to work with generated decoding.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getSandboxExtensionsForBlobFiles):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        This is also representative of how code will be simplified with greater adoption.
        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.cpp:
        (WebKit::MediaDeviceSandboxExtensions::decode):
        Modernize HandleArray decoding.

2018-10-19  Chris Dumez  <cdumez@apple.com>

        [PSON] WebPageProxy::didCompletePageTransition() may interact with a SuspendedPageProxy from a previous navigation
        https://bugs.webkit.org/show_bug.cgi?id=190717

        Reviewed by Antti Koivisto.

        WebPageProxy::didCompletePageTransition() may interact with a SuspendedPageProxy from a previous navigation. We need
        to reset m_lastSuspendedPage whenever the page starts a new navigation as m_lastSuspendedPage is only updated when
        we process-swap otherwise.

        Also rename the data member to m_pageSuspendedDueToCurrentNavigation for clarity.

        In a follow-up, I will see if I can get rid of this data member entirely or maybe move it to the Navigation
        object.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::didCompletePageTransition):
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):

2018-10-18  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow ports to optionally do screen capture in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=190728
        <rdar://problem/45376824>

        Reviewed by Jer Noble and Tim Horton.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Encode shouldCaptureDisplayInUIProcess.
        (WebKit::WebProcessCreationParameters::decode): Decode shouldCaptureDisplayInUIProcess.
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy): Copy shouldCaptureDisplayInUIProcess.
        * UIProcess/API/APIProcessPoolConfiguration.h:

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::remoteVideoSampleAvailable):
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): Remove
        RealtimeMediaSource::Type parameter, CaptureDevice has the same information. Deal with display
        capture "devices".
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess): Copy shouldCaptureDisplayInUIProcess.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::Source): Only allocate a ring buffer for Audio sources.
        (WebKit::UserMediaCaptureManager::Source::~Source): Same for deallocate.
        (WebKit::UserMediaCaptureManager::Source::storage): m_ringBuffer is a pointer.
        (WebKit::UserMediaCaptureManager::Source::setStorage): Ditto.
        (WebKit::UserMediaCaptureManager::Source::setRingBufferFrameBounds): Ditto.
        (WebKit::UserMediaCaptureManager::Source::audioSamplesAvailable): Ditto.
        (WebKit::UserMediaCaptureManager::Source::remoteVideoSampleAvailable): Create a 
        PixelBuffer-backed media sample and call videoSampleAvailable.
        (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager): Clear the audio and display capture
        factory overrides.
        (WebKit::UserMediaCaptureManager::initialize): Set the audio and display capture factory overrides.
        (WebKit::UserMediaCaptureManager::createCaptureSource):
        (WebKit::UserMediaCaptureManager::remoteVideoSampleAvailable):
        * WebProcess/cocoa/UserMediaCaptureManager.h:
        * WebProcess/cocoa/UserMediaCaptureManager.messages.in:

2018-10-18  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r237272.

        Broke on device iOS builds and Windows builds

        Reverted changeset:

        "[MediaStream] Allow ports to optionally do screen capture in
        the UI process"
        https://bugs.webkit.org/show_bug.cgi?id=190728
        https://trac.webkit.org/changeset/237272

2018-10-18  Jer Noble  <jer.noble@apple.com>

        Enable WKPreferences._lowPowerVideoAudioBufferSizeEnabled by default
        https://bugs.webkit.org/show_bug.cgi?id=190315

        Reviewed by Eric Carlson.

        This preference is disabled for WebKitLegacy because it can interact poorly with clients' own use of audio.
        It can be enabled for WebKit since it will only affect the WebProcess and not the client process.

        * Shared/WebPreferences.yaml:

2018-10-18  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow ports to optionally do screen capture in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=190728
        <rdar://problem/45376824>

        Reviewed by Jer Noble and Tim Horton.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Encode shouldCaptureDisplayInUIProcess.
        (WebKit::WebProcessCreationParameters::decode): Decode shouldCaptureDisplayInUIProcess.
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy): Copy shouldCaptureDisplayInUIProcess.
        * UIProcess/API/APIProcessPoolConfiguration.h:

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::remoteVideoSampleAvailable):
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): Remove
        RealtimeMediaSource::Type parameter, CaptureDevice has the same information. Deal with display
        capture "devices".
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess): Copy shouldCaptureDisplayInUIProcess.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::Source): Only allocate a ring buffer for Audio sources.
        (WebKit::UserMediaCaptureManager::Source::~Source): Same for deallocate.
        (WebKit::UserMediaCaptureManager::Source::storage): m_ringBuffer is a pointer.
        (WebKit::UserMediaCaptureManager::Source::setStorage): Ditto.
        (WebKit::UserMediaCaptureManager::Source::setRingBufferFrameBounds): Ditto.
        (WebKit::UserMediaCaptureManager::Source::audioSamplesAvailable): Ditto.
        (WebKit::UserMediaCaptureManager::Source::remoteVideoSampleAvailable): Create a 
        PixelBuffer-backed media sample and call videoSampleAvailable.
        (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager): Clear the audio and display capture
        factory overrides.
        (WebKit::UserMediaCaptureManager::initialize): Set the audio and display capture factory overrides.
        (WebKit::UserMediaCaptureManager::createCaptureSource):
        (WebKit::UserMediaCaptureManager::remoteVideoSampleAvailable):
        * WebProcess/cocoa/UserMediaCaptureManager.h:
        * WebProcess/cocoa/UserMediaCaptureManager.messages.in:

2018-10-18  Chris Dumez  <cdumez@apple.com>

        [PSON] SuspendedPages do not report meaningful domains in Activity Monitor
        https://bugs.webkit.org/show_bug.cgi?id=190721
        <rdar://problem/45059699>

        Reviewed by Alex Christensen.

        SuspendedPages do not report meaningful domains in Activity Monitor, which makes
        debugging harder.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::origin):
        (WebKit::WebProcess::updateActivePages):

2018-10-18  Alexey Proskuryakov  <ap@apple.com>

        Switch from PLATFORM(IOS) to PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=190729

        Reviewed by Tim Horton.

        * DerivedSources.make:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):
        * NetworkProcess/NetworkActivityTracker.h:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::updateTaskWithFirstPartyForSameSiteCookies):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        (WebKit::NetworkProcess::sourceApplicationAuditData const):
        (WebKit::NetworkProcess::platformSyncAllCookies):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
        (IPC::Connection::receiveSourceEventHandler):
        (IPC::AccessibilityProcessSuspendedNotification):
        * Platform/ios/AccessibilityIOS.mm:
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalHostingProcess):
        * Platform/spi/Cocoa/DeviceIdentitySPI.h:
        * Platform/spi/ios/CelestialSPI.h:
        * Platform/spi/ios/FrontBoardServicesSPI.h:
        * PluginProcess/mac/PluginProcessShim.mm:
        * Shared/API/Cocoa/WKDataDetectorTypesInternal.h:
        * Shared/API/Cocoa/WebKit.m:
        * Shared/AssistedNodeInformation.cpp:
        * Shared/AssistedNodeInformation.h:
        * Shared/CacheModel.cpp:
        (WebKit::calculateURLCacheSizes):
        * Shared/ChildProcess.cpp:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        * Shared/DrawingAreaInfo.h:
        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode const):
        (WebKit::EditorState::decode):
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        (WebKit::operator<<):
        * Shared/EditorState.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::checkEntitlements):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        * Shared/NativeWebKeyboardEvent.h:
        * Shared/NativeWebMouseEvent.h:
        * Shared/NativeWebTouchEvent.h:
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode const):
        (WebKit::PrintInfo::decode):
        * Shared/PrintInfo.h:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/SessionState.cpp:
        (WebKit::FrameState::encode const):
        (WebKit::FrameState::decode):
        * Shared/SessionState.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.h:
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):
        * Shared/WebKeyboardEvent.cpp:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.cpp:
        (defaultPassiveTouchListenersAsDefaultOnDocument):
        (defaultCustomPasteboardDataEnabled):
        * Shared/WebPreferencesDefaultValues.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebTouchEvent.cpp:
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode):
        (IPC::decode):
        * Shared/cf/ArgumentCodersCF.h:
        * Shared/ios/ChildProcessIOS.mm:
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        * Shared/ios/InteractionInformationRequest.cpp:
        * Shared/ios/InteractionInformationRequest.h:
        * Shared/ios/NativeWebKeyboardEventIOS.mm:
        * Shared/ios/NativeWebMouseEventIOS.mm:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        * Shared/ios/WebIOSEventFactory.h:
        * Shared/ios/WebIOSEventFactory.mm:
        * Shared/ios/WebIconUtilities.h:
        * Shared/ios/WebIconUtilities.mm:
        * Shared/mac/ArgumentCodersMac.h:
        * Shared/mac/ArgumentCodersMac.mm:
        * Shared/mac/SandboxExtensionMac.mm:
        * Shared/mac/SecItemShim.cpp:
        (WebKit::initializeSecItemShim):
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APIUIClient.h:
        * UIProcess/API/C/WKInspector.cpp:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetIgnoresViewportScaleLimits):
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextIsPlugInUpdateAvailable):
        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction description]):
        * UIProcess/API/Cocoa/WKPreviewActionItemIdentifiers.mm:
        * UIProcess/API/Cocoa/WKPreviewElementInfo.mm:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (IGNORE_WARNINGS_BEGIN):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _pluginProcessCount]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldRequireUserGestureToLoadVideo):
        (validate):
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setUpSQLiteDatabaseTrackerClient]):
        (-[WKWebView dealloc]):
        (-[WKWebView allowsLinkPreview]):
        (-[WKWebView setAllowsLinkPreview:]):
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        (-[WKWebView _scrollPerformanceData]):
        (-[WKWebView _allowsMediaDocumentInlinePlayback]):
        (-[WKWebView _setAllowsMediaDocumentInlinePlayback:]):
        (-[WKWebView _contentsOfUserInterfaceItem:]):
        (-[WKWebView _internalDoAfterNextPresentationUpdate:withoutWaitingForPainting:withoutWaitingForAnimatedResize:]):
        (-[WKWebView _doAfterNextVisibleContentRectUpdate:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (defaultApplicationNameForUserAgent):
        * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:userInfo:]):
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:
        * UIProcess/API/Cocoa/_WKAttachment.mm:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.mm:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        * UIProcess/API/Cocoa/_WKElementActionInternal.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (-[WKPaymentAuthorizationViewControllerDelegate invalidate]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didAuthorizePayment:handler:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectPaymentMethod:handler:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingMethod:handler:]):
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingContact:handler:]):
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard):
        (WebKit::toPKPaymentRequest):
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentSession):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingMethodSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteShippingContactSelection):
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentMethodSelection):
        * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/ApplicationStateTracker.mm:
        * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:
        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
        (WebKit::BackgroundProcessResponsivenessTimer::shouldBeActive const):
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::shutDownProcess):
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::takeActivityToken):
        (WebKit::DownloadClient::releaseActivityTokenIfNecessary):
        * UIProcess/Cocoa/LayerRepresentation.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationState):
        (WebKit::NavigationState::didChangeIsLoading):
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/Cocoa/VersionChecks.mm:
        (WebKit::linkedOnOrAfter):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):
        (WebKit::VideoFullscreenManagerProxy::exitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::preparedToReturnToInline):
        (WebKit::VideoFullscreenManagerProxy::setVideoLayerFrame):
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet presentWithParameters:completionHandler:]):
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.h:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/Gamepad/cocoa/UIGamepadProviderCocoa.mm:
        (WebKit::UIGamepadProvider::platformSetDefaultGamepadProvider):
        * UIProcess/Gamepad/ios/UIGamepadProviderIOS.mm:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::shouldLeakBoost):
        (WebKit::systemDirectoryPath):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/PageClient.h:
        * UIProcess/ProcessAssertion.cpp:
        * UIProcess/ProcessAssertion.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation const):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::clearLayers):
        (WebKit::RemoteLayerTreeHost::detachRootLayer):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        * UIProcess/WKImagePreviewViewController.h:
        * UIProcess/WKImagePreviewViewController.mm:
        * UIProcess/WKInspectorHighlightView.h:
        * UIProcess/WKInspectorHighlightView.mm:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticatorInternal::buildAuthData):
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserConsented):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserConsented):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::getUserConsent const):
        (WebKit::LocalConnection::getAttestation const):
        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
        (WebKit::LocalService::isAvailable):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        * UIProcess/WebGeolocationManagerProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/WebOpenPanelResultListenerProxy.cpp:
        * UIProcess/WebOpenPanelResultListenerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::viewDidLeaveWindow):
        (WebKit::WebPageProxy::updateThrottleState):
        (WebKit::WebPageProxy::waitForDidUpdateActivityState):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::exitFullscreenImmediately):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::pageDidScroll):
        (WebKit::WebPageProxy::processDidTerminate):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
        (WebKit::WebPageProxy::hasActiveVideoForControlsManager const):
        (WebKit::WebPageProxy::requestControlledElementID const):
        (WebKit::WebPageProxy::isPlayingVideoInEnhancedFullscreen const):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::updateProcessAssertions):
        (WebKit::WebProcessPool::reinstateNetworkProcessAssertionState):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::isMainThreadOrCheckDisabled):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::didSetAssertionState):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasePath const):
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.h:
        * UIProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        * UIProcess/_WKWebViewPrintFormatter.mm:
        * UIProcess/_WKWebViewPrintFormatterInternal.h:
        * UIProcess/ios/DragDropInteractionState.h:
        * UIProcess/ios/DragDropInteractionState.mm:
        * UIProcess/ios/InputViewUpdateDeferrer.h:
        * UIProcess/ios/InputViewUpdateDeferrer.mm:
        * UIProcess/ios/LayerRepresentation.mm:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        * UIProcess/ios/ResourceLoadStatisticsPersistentStorageIOS.mm:
        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/SmartMagnificationController.messages.in:
        * UIProcess/ios/SmartMagnificationController.mm:
        * UIProcess/ios/TextCheckerIOS.mm:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        * UIProcess/ios/WKApplicationStateTrackingView.h:
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKGeolocationProviderIOS.h:
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        * UIProcess/ios/WKInspectorNodeSearchGestureRecognizer.h:
        * UIProcess/ios/WKInspectorNodeSearchGestureRecognizer.mm:
        * UIProcess/ios/WKKeyboardScrollingAnimator.h:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        * UIProcess/ios/WKPDFPageNumberIndicator.h:
        * UIProcess/ios/WKPDFPageNumberIndicator.mm:
        * UIProcess/ios/WKPasswordView.h:
        * UIProcess/ios/WKPasswordView.mm:
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        * UIProcess/ios/WKSyntheticClickTapGestureRecognizer.h:
        * UIProcess/ios/WKSyntheticClickTapGestureRecognizer.m:
        * UIProcess/ios/WKWebEvent.h:
        * UIProcess/ios/WKWebEvent.mm:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.h:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/ios/WebProcessProxyIOS.mm:
        * UIProcess/ios/forms/WKAirPlayRoutePicker.h:
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        * UIProcess/ios/forms/WKFileUploadPanel.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        * UIProcess/ios/forms/WKFormColorControl.h:
        * UIProcess/ios/forms/WKFormColorControl.mm:
        * UIProcess/ios/forms/WKFormColorPicker.h:
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        * UIProcess/ios/forms/WKFormInputControl.h:
        * UIProcess/ios/forms/WKFormInputControl.mm:
        * UIProcess/ios/forms/WKFormPopover.h:
        * UIProcess/ios/forms/WKFormPopover.mm:
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        * UIProcess/ios/forms/WKFormSelectPicker.h:
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        * UIProcess/ios/forms/WKFormSelectPopover.h:
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:
        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.h:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        * UIProcess/ios/fullscreen/WKFullscreenStackView.h:
        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeFrameStateNode):
        (WebKit::decodeBackForwardTreeNode):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * UIProcess/mac/ViewSnapshotStore.mm:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::videoControlsManagerDidChange):
        (WebKit::WebFullScreenManager::willEnterFullScreen):
        (WebKit::WebFullScreenManager::didEnterFullScreen):
        (WebKit::WebFullScreenManager::willExitFullScreen):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        * WebProcess/Geolocation/WebGeolocationManager.h:
        * WebProcess/Geolocation/WebGeolocationManager.messages.in:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFrameState):
        (WebKit::applyFrameState):
        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowRect):
        (WebKit::WebChromeClient::enterVideoFullscreenForVideoElement):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        (WebKit::WebFrameLoaderClient::saveViewStateToItem):
        (WebKit::WebFrameLoaderClient::restoreViewState):
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebKit::WebFrameLoaderClient::objectContentType):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        (WebKit::WebInspectorClient::hideHighlight):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect):
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::dispatchDidCollectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::mainFrameDidLayout):
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/ViewGestureGeometryCollector.messages.in:
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.h:
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm:
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebOpenPanelResultListener.cpp:
        * WebProcess/WebPage/WebOpenPanelResultListener.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_cpuLimit):
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::scalePage):
        (WebKit::WebPage::setUseFixedLayout):
        (WebKit::WebPage::disabledAdaptationsDidChange):
        (WebKit::WebPage::viewportPropertiesDidChange):
        (WebKit::WebPage::pageDidScroll):
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::updatePreferences):
        (WebKit::WebPage::willCommitLayerTree):
        (WebKit::WebPage::didFlushLayerTreeAtTime):
        (WebKit::WebPage::mainFrameDidLayout):
        (WebKit::WebPage::resetAssistedNodeForFrame):
        (WebKit::WebPage::elementDidFocus):
        (WebKit::WebPage::elementDidBlur):
        (WebKit::WebPage::willReplaceMultipartContent):
        (WebKit::WebPage::didReplaceMultipartContent):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.messages.in:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        * WebProcess/cocoa/VideoFullscreenManager.h:
        * WebProcess/cocoa/VideoFullscreenManager.messages.in:
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::supportsVideoFullscreen const):
        (WebKit::VideoFullscreenManager::supportsVideoFullscreenStandby const):
        (WebKit::VideoFullscreenManager::didSetupFullscreen):
        (WebKit::VideoFullscreenManager::didExitFullscreen):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::initializeProcessName):
        (WebKit::registerWithAccessibility):
        (WebKit::WebProcess::sourceApplicationAuditData const):
        (WebKit::WebProcess::initializeSandbox):
        * WebProcess/mac/SecItemShimLibrary.mm:
        * config.h:

2018-10-18  Alex Christensen  <achristensen@webkit.org>

        Clean up FrameLoader two-state enums
        https://bugs.webkit.org/show_bug.cgi?id=190731

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillPerformClientRedirect):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2018-10-18  Youenn Fablet  <youenn@apple.com>

        Handle MDNS resolution of candidates through libwebrtc directly
        https://bugs.webkit.org/show_bug.cgi?id=190681

        Reviewed by Eric Carlson.

        Add support for AsyncResolver to resolve MDNS.
        This basically reuse the code path used to resolve STUN server addresses.
        Removed MDNS specific resolution.
        Use existing CFHost resolution mechanism to do the actual resolution.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createPeerConnection):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.cpp:
        * WebProcess/Network/webrtc/WebMDNSRegister.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.messages.in:

2018-10-18  Chris Dumez  <cdumez@apple.com>

        [PSON] Cap number of SuspendedPageProxy objects and allow a WebPageProxy to have more than one
        https://bugs.webkit.org/show_bug.cgi?id=190688
        <rdar://problem/45354095>

        Reviewed by Antti Koivisto.

        Cap number of SuspendedPageProxy objects to 3 to avoid accumulating too many "suspended" processes.

        Also allow a WebPageProxy to have more than one SuspendedPageProxy so that PageCache now works for
        more than 1 history navigation (up to 3 with the suspended page limit in this patch).

        The following cleanup / refactoring was made to support this:
        - The SuspendedPageProxy objects are now owned by the WebProcessPool instead of the WebPageProxy.
          The WebProcessPool is in charge of limiting the number of SuspendedPageProxy objects by dropping
          the oldest one whenever a WebPageProxy tries to add a new one and we've already reached the limit.
        - WebProcessProxy no longer needs to know anything about suspended pages, which simplifies the
          code quite a bit. Instead, the SuspendedPageProxy objects now register themselves as
          IPC::MessageReceivers with their WebProcessProxy. The SuspendedPageProxy also take care of
          calling maybeShutdown() on their WebProcessProxy when they get destroyed.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::tearDownDrawingAreaInWebProcess):
        (WebKit::SuspendedPageProxy::unsuspend):
        (WebKit::SuspendedPageProxy::didFinishLoad):
        (WebKit::SuspendedPageProxy::didReceiveSyncMessage):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::didCompletePageTransition):
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::WebProcessPool::addSuspendedPageProxy):
        (WebKit::WebProcessPool::removeAllSuspendedPageProxiesForPage):
        (WebKit::WebProcessPool::takeSuspendedPageProxy):
        (WebKit::WebProcessPool::hasSuspendedPageProxyFor):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        (WebKit::WebProcessProxy::canTerminateChildProcess):
        (WebKit::WebProcessProxy::requestTermination):
        * UIProcess/WebProcessProxy.h:

2018-10-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable the datalist element by default on iOS and macOS
        https://bugs.webkit.org/show_bug.cgi?id=190594
        <rdar://problem/45281159>

        Reviewed by Ryosuke Niwa and Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * Platform/spi/ios/UIKitSPI.h:

        Add SPI to UITextSuggestion.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (-[WKDataListSuggestionCell setText:]):
        (-[WKDataListSuggestionTable initWithElementRect:]):

        Fix the 32-bit macOS build with ENABLE(DATALIST_ELEMENT).

2018-10-17  Andy Estes  <aestes@apple.com>

        [Apple Pay] Increment the API version to 5
        https://bugs.webkit.org/show_bug.cgi?id=190686
        <rdar://problem/45348523>

        Reviewed by Simon Fraser.

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::supportsVersion):

2018-10-17  Alex Christensen  <achristensen@webkit.org>

        BackForwardClient needs to be able to support UIProcess-only back/forward lists
        https://bugs.webkit.org/show_bug.cgi?id=190675

        Reviewed by Chris Dumez.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::itemAtIndex const):
        (WebKit::WebBackForwardList::backListCount const):
        (WebKit::WebBackForwardList::forwardListCount const):
        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::backForwardBackListCount):
        (WebKit::WebPageProxy::backForwardForwardListCount):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::backListCount const):
        (WebKit::WebBackForwardListProxy::forwardListCount const):
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dumpHistoryForTesting):

2018-10-17  Ali Juma  <ajuma@chromium.org>

        Flaky IntersectionObserver web platform tests involving style updates
        https://bugs.webkit.org/show_bug.cgi?id=189091

        Reviewed by Simon Fraser.

        Add a WebPage::willDisplayPage bottleneck that gets called when flushing layers
        or, in the non-composited case, when rendering the page into a bitmap.

        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::updateBackingStoreState):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::layerFlushTimerFired):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willDisplayPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2018-10-16  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Fix xdg-desktop-portal permissions from a sandbox
        https://bugs.webkit.org/show_bug.cgi?id=190619

        Reviewed by Michael Catanzaro.

        We have to generate a /.flatpak-info file for xdg-desktop-portal
        to properly treat us as a sandboxed application.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::createSealedMemFdWithData):
        (WebKit::argsToFd):
        (WebKit::XDGDBusProxyLauncher::setPermissions):
        (WebKit::createFlatpakInfo):
        (WebKit::bubblewrapSpawn):

2018-10-16  Sihui Liu  <sihui_liu@apple.com>

        Add a switch for Web SQL
        https://bugs.webkit.org/show_bug.cgi?id=190271

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebSQLDisabled):
        (WKPreferencesGetWebSQLDisabled):
        * UIProcess/API/C/WKPreferencesRef.h:

2018-10-16  Alex Christensen  <achristensen@webkit.org>

        Remove InjectedBundleBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=190640

        Reviewed by Chris Dumez.

        These objects are only used in testing now, so I made a replacement to be used for testing,
        WKBundlePageDumpHistoryForTesting and WKBundleClearHistoryForTesting.
        The existence of these objects is problematic with process swapping and the true back/forward list being in the UIProcess.

        * Sources.txt:
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp:
        (WKBundleBackForwardListGetTypeID):
        (WKBundleBackForwardListCopyItemAtIndex):
        (WKBundleBackForwardListGetBackListCount):
        (WKBundleBackForwardListGetForwardListCount):
        (WKBundleBackForwardListClear):
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.h:
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
        (WKBundleBackForwardListItemGetTypeID):
        (WKBundleBackForwardListItemIsSame):
        (WKBundleBackForwardListItemCopyURL):
        (WKBundleBackForwardListItemCopyTarget):
        (WKBundleBackForwardListItemIsTargetItem):
        (WKBundleBackForwardListItemCopyChildren):
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageDumpHistoryForTesting):
        (WKBundleClearHistoryForTesting):
        (WKBundlePageGetBackForwardList):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.h: Removed.
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.h: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        (WebKit::dumpHistoryItem):
        (WebKit::WebPage::dumpHistoryForTesting):
        (WebKit::WebPage::clearHistory):
        (WebKit::WebPage::didReceiveSyncMessage):
        (WebKit::WebPage::backForwardList): Deleted.
        * WebProcess/WebPage/WebPage.h:

2018-10-16  Timothy Hatcher  <timothy@apple.com>

        Add <meta name="supported-color-schemes"> to control what color schemes the page supports
        https://bugs.webkit.org/show_bug.cgi?id=190526
        rdar://problem/45230140

        Reviewed by Dean Jackson.

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView drawRect:]): Update use of LocalDefaultSystemAppearance.
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage): Ditto.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::paintControlForLayerInContext): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect): Ditto.

2018-10-16  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag and bindings for CSS Painting API
        https://bugs.webkit.org/show_bug.cgi?id=190237

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-10-16  Philippe Normand  <pnormand@igalia.com>

        [GLib] Build error with RemoteInspector disabled
        https://bugs.webkit.org/show_bug.cgi?id=190623

        Reviewed by Michael Catanzaro.

        Compilation guards added to ensure the build still works when the
        Remote WebInspector has been disabled.

        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        * UIProcess/API/glib/WebKitAutomationSessionPrivate.h:
        * UIProcess/RemoteWebInspectorProxy.cpp:

2018-10-16  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Fix sandbox on distros with suid bubblewrap
        https://bugs.webkit.org/show_bug.cgi?id=190616

        Reviewed by Michael Catanzaro.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):

2018-10-16  Alex Christensen  <achristensen@webkit.org>

        Replace HistoryItem* with HistoryItem& where possible
        https://bugs.webkit.org/show_bug.cgi?id=190617

        Reviewed by Chris Dumez.

        * WebProcess/WebCoreSupport/SessionStateConversion.h:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WK2NotifyHistoryItemChanged):
        (WebKit::WebBackForwardListProxy::goToItem):
        * WebProcess/WebPage/WebBackForwardListProxy.h:

2018-10-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, another GTK build fix after r237146

        * UIProcess/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow):

2018-10-15  Justin Fan  <justin_fan@apple.com>

        Add WebGPU 2018 feature flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=190509

        Reviewed by Dean Jackson.

        Re-add ENABLE_WEBGPU, an experimental feature flag, and a RuntimeEnabledFeature
        for the 2018 WebGPU prototype.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Fix API tests after r237146

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::decode):
        I accidentally changed the decoder.

2018-10-15  Sihui Liu  <sihui_liu@apple.com>

        HSTS cache entries cannot be removed by origin
        https://bugs.webkit.org/show_bug.cgi?id=190455
        <rdar://problem/45181322>

        Reviewed by Chris Dumez.

        The SPI _CFNetworkResetHSTS does not recognize url without protocol, so we need to add protocol manually.

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

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Fix GTK build, even though bots are not working right now.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateFrontendPage):

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r237146

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

2018-10-15  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r236512): [ Mac WK2 ] Layout Test editing/undo/undo-smart-delete-word.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190375
        <rdar://problem/45177807>

        Reviewed by Ryosuke Niwa.

        The test is doing the following:
        > document.execCommand("Delete"); document.execCommand("Undo");

        Both operation are synchronous and rely on synchronous IPC from the WebProcess to the UIProcess.
        However, for the undo operation to succeed, the first command need to have been registered with
        with the UIProcess via the WebPageProxy::RegisterEditCommandForUndo IPC to the UIProcess, which
        is asynchronous.

        After r236512, the UIProcess no longer processes incoming sync / async IPC in order and thus,
        it is possible for the WebPageProxy::ExecuteUndoRedo synchronous IPC to get processed by the
        UIProcess *before* the WebPageProxy::RegisterEditCommandForUndo asynchronous IPC for the
        previous "Delete" command. As a result, canUndo would return false and we would fail to undo.

        To address the issue, use SendOption::DispatchMessageEvenWhenWaitingForSyncReply flag when sending
        the WebPageProxy::RegisterEditCommandForUndo IPC, so that it gets processed in order with regards
        to surrounding synchronous IPC.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerUndoStep):

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Modernize BackForwardClient.h
        https://bugs.webkit.org/show_bug.cgi?id=190610

        Reviewed by Chris Dumez.

        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp:
        (WebKit::InjectedBundleBackForwardList::clear):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::WebBackForwardListProxy):
        (WebKit::WebBackForwardListProxy::backListCount const):
        (WebKit::WebBackForwardListProxy::forwardListCount const):
        (WebKit::WebBackForwardListProxy::backListCount): Deleted.
        (WebKit::WebBackForwardListProxy::forwardListCount): Deleted.
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        (WebKit::WebBackForwardListProxy::create):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_cpuLimit):
        (WebKit::WebPage::restoreSessionInternal):

2018-10-15  Timothy Hatcher  <timothy@apple.com>

        Add support for prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=190499
        rdar://problem/45212025

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_DARK_MODE_CSS.
        * Shared/WebPreferences.yaml: Added DarkModeCSSEnabled as experimental.

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        Remove StorageProcess leftover
        https://bugs.webkit.org/show_bug.cgi?id=190591

        Reviewed by Michael Catanzaro.

        The process was deleted.

        * Shared/ChildProcess.h:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::processStorageClass):
        (WebKit::sandboxDirectory):
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Remove unused parameters of WebPageGroupData
        https://bugs.webkit.org/show_bug.cgi?id=190600

        Reviewed by Chris Dumez.

        visibleToInjectedBundle and visibleToHistoryClient are both always true.
        This removes a mysterious check in the history code.

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode const):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::create):
        (WebKit::pageGroupData):
        (WebKit::WebPageGroup::WebPageGroup):
        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::WebPageGroup):
        (WebKit::WebPageGroup::create):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebKit::WebFrameLoaderClient::setTitle):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::create):
        (WebKit::WebPage::close):
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::create):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebKit::WebPageGroupProxy::pageGroupID const):
        (WebKit::WebPageGroupProxy::isVisibleToInjectedBundle const): Deleted.
        (WebKit::WebPageGroupProxy::isVisibleToHistoryClient const): Deleted.

2018-10-15  Chris Dumez  <cdumez@apple.com>

        Experiment: target=_blank on anchors should imply rel=noopener
        https://bugs.webkit.org/show_bug.cgi?id=190481

        Reviewed by Alex Christensen.

        * Shared/WebPreferences.yaml:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Remove unused parameters from FrameLoaderClient::createFrame
        https://bugs.webkit.org/show_bug.cgi?id=190587

        Reviewed by Chris Dumez.

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

2018-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Can't select text after dismissing the keyboard when changing focus
        https://bugs.webkit.org/show_bug.cgi?id=190563
        <rdar://problem/44613559>

        Reviewed by Tim Horton.

        In r230686, we switched from using UIWKSelectionAssistant to UIWKTextInteractionAssistant for handling selection
        in non-editable content on iOS; as such, when an editable element loses focus, instead of switching from the
        text interaction assistant to the web selection assistant as we've previously done, we now reset our text
        interaction assistant by calling `-[UIWKTextInteractionAssistant setGestureRecognizers]`, which removes all of
        the current text selection gesture recognizers from WKContentView and regenerates them by building up a tree of
        `UITextInteraction`s and adding them to the assistant (see `-[UITextInteractionAssistant
        addGestureRecognizersToView:]`). In particular, `_UITextSelectionForceGesture` is the gesture recognizer used to
        trigger text selection when long pressing.

        After dismissing the keyboard by tapping the "Done" button, the UITextInteractions and gesture recognizers on
        the interaction assistant include:

            <UITextInteraction>
                …
                <UITextIndirectNonEditableInteraction>
                    <_UIKeyboardBasedNonEditableTextSelectionInteraction>
                      ↳ "_UIKeyboardTextSelectionGestureForcePress" → <_UITextSelectionForceGesture>

        However, after the keyboard dismisses due to an editable element losing focus, the UITextInteractions on the
        interaction assistant look like this:

            <UITextInteraction>
                …
                <UITextIndirectNonEditableInteraction>

        Subsequently, the lack of a `_UIKeyboardBasedNonEditableTextSelectionInteraction` makes text selection by long
        pressing impossible, since the `_UITextSelectionForceGesture` is never introduced to `WKContentView`. In UIKit,
        `UITextIndirectNonEditableInteraction` only adds `_UIKeyboardBasedNonEditableTextSelectionInteraction` as a
        child if the text input view — in our case, WKContentView — is missing an input delegate (see `-initWithView:`).
        In the case where the Done button is used to dismiss the keyboard, WKContentView loses first responder, and the
        input delegate of WKContentView is cleared out early on, before we call `-stopAssistingKeyboard`:

            -[WKContentView(WKInteraction) setInputDelegate:]
            -[UIKeyboardImpl setDelegate:force:]
            -[UIPeripheralHost(UIKitInternal) _reloadInputViewsForResponder:]
            -[UIResponder _finishResignFirstResponder]
            -[UIResponder resignFirstResponder]
            -[WKContentView(WKInteraction) resignFirstResponderForWebView]
            -[UIKeyboardImpl dismissKeyboard]

        However, in the case where the focused element is blurred, we end up clearing out the delegate in
        `-_stopAssistingNode`, *after* we've already called `-setGestureRecognizers` on the interaction assistant. This
        means UIKit will skip adding `_UIKeyboardBasedNonEditableTextSelectionInteraction` to the text interaction
        assistant.

            -[WKContentView(WKInteraction) setInputDelegate:]
            -[UIKeyboardImpl setDelegate:force:]
            -[UIPeripheralHost(UIKitInternal) _reloadInputViewsForResponder:]
            -[UIResponder(UIResponderInputViewAdditions) reloadInputViews]
            -[WKContentView(WKInteraction) _stopAssistingNode]

        To fix this, we simply reset our `inputDelegate` earlier in `_stopAssistingKeyboard` instead of waiting until
        we reload input views. This ensures that UIKit sets up the text interaction assistant's gestures when changing
        focus in the same way as we would when the keyboard is dismissed via `-resignFirstResponder` (e.g. when pressing
        the Done button).

        Test: editing/selection/ios/select-text-after-changing-focus.html

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView setUpTextSelectionAssistant]):
        (-[WKContentView _startAssistingKeyboard]):
        (-[WKContentView _stopAssistingKeyboard]):
        (-[WKContentView useSelectionAssistantWithGranularity:]): Deleted.

        Additionally rename this to -setUpTextSelectionAssistant and remove the selection granularity argument. This was
        previously used to switch between web and text interaction assistants.

2018-10-15  Remy Demarest  <rdemarest@apple.com>

        Web Inspector: RDM: Toolbar hidden in when Inspector is docked to side.
        https://bugs.webkit.org/show_bug.cgi?id=190545
        rdar://problem/44674500

        Reviewed by Brian Burg.

        When the inspector is placed next to the web view it uses its _topContentInset and _totalHeightOfBanners
        to lay out the inspector so it does not underlap the window toolbar, but this technique does not work when
        in responsive design mode because of the different attachment view. This patch fixes the issue by using
        -[NSWindow contentLayoutRect] to figure out the height of the inspector instead of relying on the content
        insets of the web view. This requires observing -contentLayoutRect and ensure we only observe its changes
        when the view is actually on the screen.

        * UIProcess/WebInspectorProxy.h:
        Declare helpers to add/remove observer on the attached inspector window.

        * UIProcess/mac/WKInspectorViewController.h:
        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController inspectorWKWebView:willMoveToWindow:]):
        (-[WKInspectorViewController inspectorWKWebViewDidMoveToWindow:]):

        * UIProcess/mac/WKInspectorWKWebView.h:
        * UIProcess/mac/WKInspectorWKWebView.mm:
        (-[WKInspectorWKWebView viewWillMoveToWindow:]):
        (-[WKInspectorWKWebView viewDidMoveToWindow]):

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter observeValueForKeyPath:ofObject:change:context:]): Update inspector layout
        whenever the contentLayoutRect changes. Except when live resizing since the attachment view also sends
        notifications at the same time.
        (-[WKWebInspectorProxyObjCAdapter inspectorViewController:willMoveToWindow:]):
        (-[WKWebInspectorProxyObjCAdapter inspectorViewControllerDidMoveToWindow:]):
        (WebKit::WebInspectorProxy::attachmentWillMoveFromWindow): Remove the observer only if we set it up before.
        (WebKit::WebInspectorProxy::attachmentDidMoveToWindow): Set up the observer and immediately update the frame
        of the inspector since it just moved to its final destination.
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange): Adjust the frame of the attached inspector based
        on the contentLayoutRect of the window rather than the topContentInset of the web view.

2018-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Changing view scale should zoom to initial scale if the page is already at initial scale
        https://bugs.webkit.org/show_bug.cgi?id=190570
        <rdar://problem/45261877>

        Reviewed by Tim Horton.

        r237087 added support for changing the view scale on iOS, by making it possible to let the minimum layout size
        be a factor of the view size; this allows internal clients to change page zoom levels on iOS. Currently,
        changing the page zoom level automatically zooms to the new initial scale only if the user has not manually
        scaled the page before, even if the page is already at initial scale (e.g. after the user double taps to zoom on
        a small element, and double taps again to zoom back out to initial scale).

        This patch makes some minor adjustments to automatically zoom to the new initial scale after changing the view
        scale, as long as the page was at initial scale when changing zoom levels.

        Test: fast/viewport/ios/initial-scale-after-changing-view-scale.html

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

        Move this function further up in the file, so that we can use it in `setViewportConfigurationViewLayoutSize`.

        (WebKit::WebPage::setViewportConfigurationViewLayoutSize):

        If the page is near initial scale and the zoom level changes, zoom to the new initial scale.

        (WebKit::WebPage::viewportConfigurationChanged):

        Make this take a new enum argument that determines whether we want to zoom to initial scale as a result of the
        viewport configuration change (`No` by default).

2018-10-15  Chris Dumez  <cdumez@apple.com>

        Restrict browsing context lookup by name to frames that are related to one another
        https://bugs.webkit.org/show_bug.cgi?id=190475

        Reviewed by Alex Christensen.

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

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Fix assertion after r237102
        https://bugs.webkit.org/show_bug.cgi?id=190459

        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::InjectedBundlePageLoaderClient):
        Shipping Safari still uses shouldGoToBackForwardListItem, so only assert on
        newer platforms like we do in WKPageSetPageLoaderClient.

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Shrink more enum classes
        https://bugs.webkit.org/show_bug.cgi?id=190540

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/Authentication/AuthenticationChallengeDisposition.h:
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/AuthenticationManager.messages.in:
        * Shared/DragControllerAction.h:
        * Shared/LayerTreeContext.h:
        * Shared/UndoOrRedo.h:
        * UIProcess/Authentication/AuthenticationDecisionListener.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/Notifications/WebNotification.h:
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        * UIProcess/PageClient.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/forms/WKAirPlayRoutePicker.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/Storage/WebSWClientConnection.messages.in:
        * WebProcess/UserContent/InjectUserScriptImmediately.h:
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-10-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add new files missing from previous commit.

        * Source/cmake/FindLibseccomp.cmake: Added.

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Implement subprocess sandboxing
        https://bugs.webkit.org/show_bug.cgi?id=188568

        Reviewed by Michael Catanzaro.

        This implements sandboxing of WebKitWebProcesses.

        The sandbox is opt-in at runtime as it is a behavior change.
        See webkit_web_context_set_sandbox_enabled() and the
        WEBKIT_FORCE_SANDBOX env var for developers.

        This is Linux specific using Namespaces, Seccomp, and a DBus proxy service.
        This introduces three new dependencies:

        - bwrap executable
        - libseccomp library
        - xdg-dbus-proxy executable

        The use of xdg-dbus-proxy will ideally be replaced once upstream DBus
        gains the same filtering abilities which is a work in progress.

        Currently the sandbox is not completed and there are a few large holes:

        - Pulseaudio: The Pipewire project will solve this.
        - DRI device access: No immediate solutions planned.
        - Webcam device access: Pipewire will also solve this.
        - Webprocess network access: Will require GStreamer changes.
        - DConf access: Custom proxy planned.
        - X11 access: Wayland solves this.

        That is not an exhaustive list but are the noteworthy ones. Filesystem access
        is still an evolving list as problems are found as is specific DBus name access.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_set_sandbox_enabled):
        (webkit_web_context_get_sandbox_enabled):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitWebContext.h:
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::getLaunchOptions):
        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::platformGetLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp: Added.
        (WebKit::memfd_create):
        (WebKit::argsToFd):
        (WebKit::XDGDBusProxyLauncher::setAddress):
        (WebKit::XDGDBusProxyLauncher::isRunning const):
        (WebKit::XDGDBusProxyLauncher::path const):
        (WebKit::XDGDBusProxyLauncher::proxyPath const):
        (WebKit::XDGDBusProxyLauncher::setPermissions):
        (WebKit::XDGDBusProxyLauncher::launch):
        (WebKit::XDGDBusProxyLauncher::childSetupFunc):
        (WebKit::XDGDBusProxyLauncher::makeProxyPath):
        (WebKit::XDGDBusProxyLauncher::dbusAddressToPath):
        (WebKit::bindIfExists):
        (WebKit::bindDBusSession):
        (WebKit::bindX11):
        (WebKit::bindDconf):
        (WebKit::bindWayland):
        (WebKit::bindPulse):
        (WebKit::bindFonts):
        (WebKit::bindGtkData):
        (WebKit::bindA11y):
        (WebKit::bindPathVar):
        (WebKit::bindGStreamerData):
        (WebKit::bindOpenGL):
        (WebKit::bindV4l):
        (WebKit::bindSymlinksRealPath):
        (WebKit::setupSeccomp):
        (WebKit::bubblewrapSpawn):
        * UIProcess/Launcher/glib/BubblewrapLauncher.h: Added.
        * UIProcess/Launcher/glib/FlatpakLauncher.cpp: Added.
        (WebKit::flatpakSpawn):
        * UIProcess/Launcher/glib/FlatpakLauncher.h: Added.
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::isInsideFlatpak):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getLaunchOptions):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptionsWithAttributes):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptionsWithAttributes):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/glib/WebProcessProxyGLib.cpp: Added.
        (WebKit::WebProcessProxy::platformGetLaunchOptions):

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Add a temporarily off by default preference for doing safe browsing checks
        https://bugs.webkit.org/show_bug.cgi?id=190522

        Reviewed by Chris Dumez.

        Safe browsing development has taken longer than anticipated.
        To prevent the unused possible contacting the safe browsing provider for no benefit, make this off by default for now.
        I'll make it on by default when it's actually used.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setSafeBrowsingEnabled:]):
        (-[WKPreferences _safeBrowsingEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Include EnumTraits.h less
        https://bugs.webkit.org/show_bug.cgi?id=190535

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkSessionCreationParameters.h:
        * Shared/Authentication/AuthenticationChallengeDisposition.h:
        * Shared/CoordinateSystem.h:
        * Shared/LayerTreeContext.h:
        * Shared/UndoOrRedo.h:
        * Shared/WebsiteAutoplayPolicy.h:
        * Shared/WebsitePopUpPolicy.h:
        * UIProcess/API/APIWebsitePolicies.h:
        * WebProcess/UserContent/InjectUserScriptImmediately.h:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Remove InjectedBundle processing of back/forward lists
        https://bugs.webkit.org/show_bug.cgi?id=190459

        Reviewed by Chris Dumez.

        * Shared/API/c/WKDeprecated.h:
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::willGoToBackForwardListItem):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::willGoToBackForwardListItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::shouldGoToBackForwardListItem): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
        (WKBundleBackForwardListItemCopyOriginalURL):
        (WKBundleBackForwardListItemCopyTitle):
        (WKBundleBackForwardListItemIsTargetItem):
        (WKBundleBackForwardListItemIsInPageCache):
        (WKBundleBackForwardListItemHasCachedPageExpired):
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFileHandleRef.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::InjectedBundlePageLoaderClient):
        (WebKit::InjectedBundlePageLoaderClient::shouldGoToBackForwardListItem): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldGoToHistoryItem const):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        WebPageProxy should always have a HistoryClient
        https://bugs.webkit.org/show_bug.cgi?id=190450

        Reviewed by Chris Dumez.

        This will make it so we don't forget to null check it.
        No change in behavior because the default HistoryClient does nothing.

        * UIProcess/API/APIHistoryClient.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createHistoryClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setHistoryClient):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        * UIProcess/WebPageProxy.h:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Use std::optional<size_t> for a WebBackForwardList's current index
        https://bugs.webkit.org/show_bug.cgi?id=190448

        Reviewed by Chris Dumez.

        Also remove m_capacity, which was immutable.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::WebBackForwardList):
        (WebKit::WebBackForwardList::~WebBackForwardList):
        (WebKit::WebBackForwardList::pageClosed):
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        (WebKit::WebBackForwardList::currentItem const):
        (WebKit::WebBackForwardList::backItem const):
        (WebKit::WebBackForwardList::forwardItem const):
        (WebKit::WebBackForwardList::itemAtIndex const):
        (WebKit::WebBackForwardList::backListCount const):
        (WebKit::WebBackForwardList::forwardListCount const):
        (WebKit::WebBackForwardList::backListAsAPIArrayWithLimit const):
        (WebKit::WebBackForwardList::forwardListAsAPIArrayWithLimit const):
        (WebKit::WebBackForwardList::removeAllItems):
        (WebKit::WebBackForwardList::clear):
        (WebKit::WebBackForwardList::backForwardListState const):
        (WebKit::WebBackForwardList::restoreFromState):
        (WebKit::WebBackForwardList::loggingString):
        * UIProcess/WebBackForwardList.h:
        (WebKit::WebBackForwardList::currentIndex const): Deleted.

2018-10-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove Option::useAsyncIterator
        https://bugs.webkit.org/show_bug.cgi?id=190567

        Reviewed by Saam Barati.

        * Configurations/FeatureDefines.xcconfig:

2018-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view
        https://bugs.webkit.org/show_bug.cgi?id=190504
        <rdar://problem/45117760>

        Reviewed by Tim Horton.

        Add support for _setViewScale: and _viewScale on iOS. While similar in concept to macOS, changing this property
        on iOS uses viewport configurations to change the minimum layout size of the document and apply view scaling.
        Setting the view scale on iOS to a value `s` multiplies the minimium layout size by a factor `1 / s`, but also
        multiplies the initial, minimum and maximum scales by a factor of `s`. The net effect of applying this scale
        causes the page to lay out at a larger width and shrink (or a smaller width and expand) to fit the viewport.

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

        Send `viewportConfigurationLayoutSizeScaleFactor` alongside `viewportConfigurationViewLayoutSize`.

        (-[WKWebView _dispatchSetViewLayoutSize:]):
        (-[WKWebView _viewScale]):
        (-[WKWebView _setViewScale:]):

        Provide a different implementation of `_setViewScale:` on iOS, by scaling the effective minimum layout size.
        (See above for more detail).

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Add missing API availability annotations for the _viewScale property.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setViewScale:]):
        * UIProcess/Cocoa/WebViewImpl.mm:

        Both -[WKView _setViewScale:] and -[WKWebView _setViewScale:] throw Objective C exceptions upon receiving a bad
        argument (e.g. scale <= 0). However, logic for throwing this exception is specific to iOS in WKWebView, and
        handled in WebViewImpl on macOS. To make this less confusing, move the exception throwing code out of
        !PLATFORM(MAC) in WKWebView, and move the path for raising this exception in WKView on macOS from WebViewImpl to
        WKView.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::layoutSizeScaleFactor const):

        Tie the notion of "view scale" on iOS to `layoutSizeScaleFactor`. As its name suggests, this is a scale factor
        by which we transform the layout size.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Plumb the layout size scale factor over to the web process, along with the layout size.

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

2018-10-12  Alex Christensen  <achristensen@webkit.org>

        Allow encoding of small enum classes
        https://bugs.webkit.org/show_bug.cgi?id=190531

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkLoadClient.h:
        * Scripts/webkit/messages.py:
        * Scripts/webkit/parser.py:
        (parse_parameters_string):
        * UIProcess/API/APINavigation.h:
        * UIProcess/WebFramePolicyListenerProxy.h:
        * UIProcess/WebNavigationState.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.messages.in:

2018-10-12  Rob Buis  <rbuis@igalia.com>

        Solve the confusion around blankURL() and isBlankURL() in URL
        https://bugs.webkit.org/show_bug.cgi?id=158988

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::clearPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setGrandfathered):
        (WebKit::WebResourceLoadStatisticsStore::isGrandfathered):
        (WebKit::WebResourceLoadStatisticsStore::setSubframeUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectFrom):

2018-10-12  Youenn Fablet  <youenn@apple.com>

        Cache API tests are flaky due to file writing failing from time to time
        https://bugs.webkit.org/show_bug.cgi?id=190321

        Reviewed by Chris Dumez.

        Make NetworkCache::Storage::store callback return an error in case of writing failure.
        Use this to surface this error at Cache API level.

        Minor clean-up to make Storage::clear take a completion handler.

        Make also sure to create the folder before writing the file in CacheStorageEngine.
        As can be seen from some logging, it does happen that writing the 'origin' file sometimes fail with Posix error 9,
        which might mean the folder is not present.

        Changes are covered by current tests, flaky tests like http/wpt/cache-storage/cache-put-keys.https.any.worker.html
        will show a "failed writing data to the file system" error message.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::writeFile):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::storeOrigin):
        (WebKit::CacheStorage::Caches::writeCachesToDisk):
        (WebKit::CacheStorage::Caches::writeRecord):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::WriteOperation::WriteOperation):
        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        (WebKit::NetworkCache::Storage::finishWriteOperation):
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::clear):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::store):

2018-10-11  Youenn Fablet  <youenn@apple.com>

        IOS 12 - Service worker cache not shared when added to homescreen
        https://bugs.webkit.org/show_bug.cgi?id=190269
        <rdar://problem/45009961>

        Reviewed by Alex Christensen.

        NetworkProcessProxy does not always have all its stores in its hash map.
        Make sure to check for the default web process pool store when grabbing cache storage parameters from a given session ID.

        Add a way to remove the default website data for testing.
        This is used in the new API test.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::deleteDefaultDataStoreForTesting):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _deleteDefaultDataStoreForTesting]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):

2018-10-10  Simon Fraser  <simon.fraser@apple.com>

        Hide RenderLayer z-order and normal flow lists behind iterators
        https://bugs.webkit.org/show_bug.cgi?id=190457

        Reviewed by Zalan Bujtas.

        Expose the positive z-order, negative z-order and normal flow lists
        from RenderLayer as iterators rather than vectors of raw pointers.
        
        Use a lambda function to get access to the private constructor, while not having
        to refer to the nested RenderLayer::LayerIterator class in the header.

        * Shared/WebRenderLayer.cpp:
        (WebKit::WebRenderLayer::WebRenderLayer):
        (WebKit::WebRenderLayer::createArrayFromLayerList): Deleted.
        * Shared/WebRenderLayer.h:

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        iOS: Scrolling using the arrow keys doesn't show the scroll indicator like it does on macOS
        https://bugs.webkit.org/show_bug.cgi?id=190478
        <rdar://problem/22194031>

        Reviewed by Megan Gardner.

        * Platform/spi/ios/UIKitSPI.h:
        Add some SPI.

        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollViewAnimator scrollToContentOffset:animated:]):
        Do a persistent flash when scrolling continuously.

        (-[WKKeyboardScrollViewAnimator scrollWithScrollToExtentAnimationTo:]):
        Do a single flash when doing a scroll-to-top/bottom.

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        Clicking on bookmarklet crashes at NavigationState::willRecordNavigationSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=190476
        <rdar://problem/32757191>

        Reviewed by Megan Gardner.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _saveBackForwardSnapshotForItem:]):
        The WKBackForwardListItem can be nil. Then we retrieve a reference from it.
        An Objective-C method that returns a reference is a great way to get
        a null reference. Other code then assumes it's not null and crashes.
        Add a nil check.

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        Hardware keyboard arrow keys/spacebar don't scroll PDFs (works for web content)
        https://bugs.webkit.org/show_bug.cgi?id=190495
        <rdar://problem/22734616>

        Reviewed by Andy Estes.

        Hook up WKKeyboardScrollViewAnimator to the scroll view when
        WKPDFView is installed.

        * Platform/spi/ios/UIKitSPI.h:
        Move _inputFlags to the IPI section so we can remove it
        from WKContentViewInteraction.

        * SourcesCocoa.txt:
        * UIProcess/ios/WKWebEvent.h:
        * UIProcess/ios/WKWebEvent.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView handleKeyEvent:]):
        (-[WKWebEvent dealloc]): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        Move WKWebEvent out of WKContentViewInteraction.
        We tend to prefer one file per class.
        Also, move the code to make a WKWebEvent from a UIEvent into
        -initWithEvent:, instead of being ad-hoc in WKContentViewInteraction.
        Adopt RetainPtr for the WKWebEvent's uiEvent property.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _handleKeyUIEvent:]):
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        Plumb hardware keyboard events to custom content views, if they want them.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView dealloc]):
        (-[WKPDFView web_handleKeyEvent:]):
        (-[WKPDFView web_initWithFrame:webView:mimeType:]):
        Install a WKKeyboardScrollViewAnimator and plumb key events to it.

2018-10-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Allow iOS to also control toggling Web Animations CSS Integration
        https://bugs.webkit.org/show_bug.cgi?id=190489

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setWebAnimationsCSSIntegrationEnabled:]):
        (-[WKPreferences _webAnimationsCSSIntegrationEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-10-11  Keith Rollin  <krollin@apple.com>

        CURRENT_ARCH should not be used in Run Script phase.
        https://bugs.webkit.org/show_bug.cgi?id=190407
        <rdar://problem/45133556>

        Reviewed by Alexey Proskuryakov.

        CURRENT_ARCH is used in a number of Xcode Run Script phases. However,
        CURRENT_ARCH is not well-defined during this phase (and may even have
        the value "undefined") since this phase is run just once per build
        rather than once per supported architecture. Migrate away from
        CURRENT_ARCH in favor of ARCHS, either by iterating over ARCHS and
        performing an operation for each value, or by picking the first entry
        in ARCHS and using that as a representative value.

        * DerivedSources.make: When forming TARGET_TRIPLE_FLAGS, grab the
        first entry in ARCHS rather than use CURRENT_ARCH.

2018-10-11  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): Deal with the drawing area potentially being null under WebChromeClient::contentsSizeChanged()
        https://bugs.webkit.org/show_bug.cgi?id=190474

        Reviewed by Geoffrey Garen.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged const):

2018-10-11  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Add mediaDevices.enumerateDevices support
        https://bugs.webkit.org/show_bug.cgi?id=185761

        Reviewed by Youenn Fablet.

        Implemented the enumerateDevices API using a new WebKit class
        (DeviceIdHashSaltStorage) that generates and stores the device ids
        hash salts per origin, used to avoid fingerprinting in the
        webpages.

        The patch also adds a new type of data for the WebsiteDataStore.
        That way the users can call the WebsiteDataStore to show what
        origins have hash salt generated and remove them at some point.

        For the moment just GTK+ and WPE ports are using this class to
        generate the hash salts. The patch adds code to the
        checkUserMediaPermissionForOrigin API implementation, it was empty
        until now for these ports. In this function we create an instance
        of a new class WebKitDeviceInfoPermissionRequest that implements
        the WebKitPermissionRequestIface interface, that allows the ports
        to use the current permission managers implemented in the
        embedders to handle this new kind of request the way they like
        it. The default implementation is deny.

        The class WebKitDeviceInfoPermissionRequest takes care of
        contacting the DeviceIdHashSaltStorage and request/regenerate the
        hash salts accordingly.

        Persistency is still not implemented, we will add it in a
        future patch.

        * Shared/WebsiteData/WebsiteDataType.h: Added the new type of
        webside data: DeviceIdHashSalt.
        * Sources.txt: Added new files to compilation.
        * SourcesGTK.txt: Ditto.
        * SourcesWPE.txt: Ditto.
        * UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp: Added
        this class to represent a request of permission to access the
        devices information. This is specific for glib ports and implements
        the policies regarding the hash salts when the embedder allows or
        denies the access using the DeviceIdHashSaltStorage class.
        (webkitDeviceInfoPermissionRequestAllow): Get the device hash salt
        when the origin is allowed and set it in the original request.
        (webkitDeviceInfoPermissionRequestDeny): Regenerate the device id
        hash salt when the user does not allow to access the device information.
        (webkit_permission_request_interface_init):
        (webkitDeviceInfoPermissionRequestDispose):
        (webkit_device_info_permission_request_class_init):
        (webkitDeviceInfoPermissionRequestCreate): Create the class using
        the proxy request from the webprocess and a reference to the
        DeviceIdHashSaltStorage.
        * UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:
        Ditto.
        * UIProcess/API/glib/WebKitUIClient.cpp: Added the implementation
        for the checkUserMediaPermissionForOrigin API for the glib ports,
        it creates the device info request and calls the permission
        request API.
        * UIProcess/API/glib/WebKitWebsiteData.cpp:
        (recordContainsSupportedDataTypes): Added the DeviceIdHashSalt
        type.
        (toWebKitWebsiteDataTypes): Added the conversion from the WebKit
        types to the glib types for the WebsiteDataType::DeviceIdHashSalt.
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (toWebsiteDataTypes): Added the conversion from the glib type
        WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT to the WebKit type.
        (webkit_website_data_manager_remove): Make sure we remote the
        DeviceIdHashSalt if the Cookies are selected.
        * UIProcess/API/gtk/WebKitDeviceInfoPermissionRequest.h: Added
        this new class that represents a permission request for the device
        information in the GTK+ port.
        * UIProcess/API/gtk/WebKitWebsiteData.h: Added the new type of
        website that in the GTK+ port:
        WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT.
        * UIProcess/API/wpe/WebKitDeviceInfoPermissionRequest.h: Added
        this new class that represents a permission request for the device
        information in the WPE port.
        * UIProcess/API/wpe/WebKitWebsiteData.h: Added the new type of
        website that in the WPE port:
        WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT.
        * UIProcess/DeviceIdHashSaltStorage.cpp: Added this new class that
        handles how to generate and store the hash salts inside
        WebKit. Persistency is still not implemented, we will add it in a
        future patch.
        (WebKit::DeviceIdHashSaltStorage::create):
        (WebKit::DeviceIdHashSaltStorage::deviceIdentifierHashSaltForOrigin):
        Check the map to get the hash salt for an origin, if there is none
        create a new random one.
        (WebKit::DeviceIdHashSaltStorage::regenerateDeviceIdentifierHashSaltForOrigin):
        Delete the hash salt of an origin if it already exists and create a new one.
        (WebKit::DeviceIdHashSaltStorage::getDeviceIdHashSaltOrigins):
        Returns the list of origins that have a hash salt generated for
        them. It is used in the WebsiteDataStore.
        (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltForOrigins):
        Deletes the hash salts in the map for an origin.
        (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltOriginsModifiedSince):
        Delete the origins that have not been modified since a time.
        * UIProcess/DeviceIdHashSaltStorage.h: Ditto.
        * UIProcess/UserMediaPermissionCheckProxy.h: Remove uneeded class
        definition.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp: Added support to
        return and remove the origins with a generate hash salt used to
        generate the device ids.
        (WebKit::WebsiteDataStore::WebsiteDataStore): Added the new
        reference to the DeviceIdHashSaltStorage class, used to handle the
        hash salts.
        (WebKit::WebsiteDataStore::fetchDataAndApply): Get the list of
        origins with a hash salts in the DeviceIdHashSaltStorage.
        (WebKit::WebsiteDataStore::removeData): Remove the hash salts in
        DeviceIdHashSaltStorage for an origin.
        * UIProcess/WebsiteData/WebsiteDataStore.h: Ditto.
        (WebKit::WebsiteDataStore::deviceIdHashSaltStorage):
        * WebKit.xcodeproj/project.pbxproj: Added the
        DeviceIdHashSaltStorage to the compilation.

2018-10-10  Tim Horton  <timothy_horton@apple.com>

        Safari crashes when attempting to share a YouTube video while in full-screen
        https://bugs.webkit.org/show_bug.cgi?id=190456
        <rdar://problem/45130748>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet presentWithParameters:completionHandler:]):
        Allow the share sheet to present centered, since we don't have enough
        context to put it in a more sensible place.

2018-10-10  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r236935): Layout test fast/events/ios/keyboard-scrolling-distance.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=190444
        <rdar://problem/45110698>

        Reviewed by Simon Fraser.

        There's a race in WKKeyboardScrollingAnimator that's exacerbated by HIDEventGenerator
        being much faster than a human finger. We get our "begin" events from interpretKeyEvent,
        after the Web Content process has had its way with it, but currently the
        back-channel "handle" events (e.g. for key up, which doesn't go to interpretKeyEvent)
        are retrieved from handleKeyWebEvent in the UI process, which is *before*
        the Web Content process has had a swing at it.

        If you lose the race (an insanely short tap like you get from HIDEventGenerator,
        or with a very busy Web Content process), we see handle(keyDown), handle(keyUp), begin(keyDown),
        and get stuck scrolling!

        Instead, retrieve the out-of-band "handle" events from _didHandleKeyEvent,
        so that they're sensibly and strictly ordered with respect to the timing of interpretKeyEvent/"begin".

        Also, hook up didFinishScrolling, so that UIScriptController's callbacks work correctly.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView handleKeyWebEvent:]):
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]):
        (-[WKContentView keyboardScrollViewAnimatorDidFinishScrolling:]):
        * UIProcess/ios/WKKeyboardScrollingAnimator.h:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator handleKeyEvent:]):
        (-[WKKeyboardScrollingAnimator displayLinkFired:]):
        (-[WKKeyboardScrollViewAnimator setDelegate:]):
        (-[WKKeyboardScrollViewAnimator handleKeyEvent:]):
        (-[WKKeyboardScrollViewAnimator didFinishScrolling]):

2018-10-10  Tim Horton  <timothy_horton@apple.com>

        Share more WKShareSheet code between macOS and iOS, and fix a few bugs
        https://bugs.webkit.org/show_bug.cgi?id=190420

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _resolutionForShareSheetImmediateCompletionForTesting]):
        (-[WKWebView _setShareSheetCompletesImmediatelyWithResolutionForTesting:]):
        (-[WKWebView _invokeShareSheetWithResolution:]): Deleted.
        Add a new mechanism to tell the share sheet up-front that it should
        immediately dismiss with a particular resolution, for testing.
        See the Tools ChangeLog for justification.
        We keep the bit on WKWebView instead of WKShareSheet so that it can be
        called prior to invoking the share sheet.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WKShareSheet.h:
        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet initWithView:]):
        (-[WKShareSheet presentWithParameters:completionHandler:]):
        (-[WKShareSheet sharingServicePicker:didChooseSharingService:]):
        (-[WKShareSheet _didCompleteWithSuccess:]):
        (-[WKShareSheet dismiss]):
        (-[WKShareSheet dispatchDidDismiss]):
        (-[WKShareSheet initWithView:initWithView:]): Deleted.
        (-[WKShareSheet _dispatchDidDismiss]): Deleted.
        (-[WKShareSheet _cancel]): Deleted.
        (-[WKShareSheet _dismissDisplayAnimated:]): Deleted.
        (-[WKShareSheet _presentFullscreenViewController:animated:]): Deleted.
        (-[WKShareSheet invokeShareSheetWithResolution:]): Deleted.
        Reduce the number of extraneous members, methods, and #ifdefs.
        Try to share as much of WKShareSheet between the platforms as makes sense.
        The interface is now totally identical on the two platforms.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showShareSheet):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showShareSheet:completionHandler:]):
        (-[WKContentView invokeShareSheetWithResolution:]): Deleted.
        Instead of silently failing (without even calling the completion handler!)
        if we try to present one share sheet on top of another, dismiss the first
        and present the new one. This is important because there are (separately
        filed) bugs on both platforms where the completion handler is not called;
        now, instead of a tab getting stuck forever, we'll reject the promise
        when another share takes place.

2018-10-10  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r236678): Keyboard scrolling with arrow keys doesn't work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=190433
        <rdar://problem/45111986>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
        (-[WKKeyboardScrollingAnimator beginWithEvent:]): Deleted.
        (-[WKKeyboardScrollViewAnimator beginWithEvent:]): Deleted.
        r236678 changes the characters in charactersIgnoringModifiers to match AppKit.
        We similarly need to update WKKeyboardScrollingAnimator's comparison.

2018-10-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=190429

        Reviewed by Saam Barati.

        Use `tryCreate` or new `create`. If we use new `create`, we can use Ref<> and remove null check.

        * Shared/API/c/WKString.cpp:
        (WKStringCopyJSString):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::toJSValue):
        (WebKit::callPropertyFunction):
        (WebKit::WebAutomationSessionProxy::scriptObjectForFrame):
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::runScriptsInPDFDocument):

2018-10-10  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): Assertion hit under WebPageProxy::didNavigateWithNavigationData()
        https://bugs.webkit.org/show_bug.cgi?id=190418
        <rdar://problem/45059769>

        Reviewed by Geoffrey Garen.

        When process swapping and "suspending" the previous WebProcess in a SuspendedPageProxy,
        we need to keep around the main frame's ID that still exists on in this process. This
        is needed so that we can re-create a UI-side WebFrameProxy for the WebFrame that exists
        in the WebProcess, if we ever swap back to this suspended process (see login in
        WebPageProxy::swapToWebProcess()).

        The bug was that the main frame ID was stored on the WebPageProxy via m_mainFrameID instead of the
        SuspendedPageProxy. This means that m_mainFrameID would get overriden when navigating in the new
        WebProcess with the value 1 (because WebFrame identifiers start at 1 and are per-WebProcess).
        This would lead to us constructing a WebFrameProxy with the wrong frame identifier in
        WebPageProxy::swapToWebProcess(), which would override an existing unrelated WebFrame in the
        WebProcessProxy's HashMap of frames. This would lead to crashes later on as the WebFrame
        would not be associated to the WebPageProxy we expect.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/SuspendedPageProxy.h:
        (WebKit::SuspendedPageProxy::mainFrameID const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeCreateSuspendedPage):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::didCreateMainFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::suspendWebPageProxy):
        * UIProcess/WebProcessProxy.h:

2018-10-10  Antti Koivisto  <antti@apple.com>

        Do domain prewarming for processes for new tabs
        https://bugs.webkit.org/show_bug.cgi?id=190425

        Reviewed by Chris Dumez.

        We currently only do domain prewarming for navigation process swaps.

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

        Do domain prewarming when using an existing but so far unused process.

        (WebKit::WebProcessPool::tryPrewarmWithDomainInformation):

        Factor into a function.

        * UIProcess/WebProcessPool.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):

        This didn't usually get invoked.

        (WebKit::WebPage::didReceivePolicyDecision):
        (WebKit::WebPage::didFinishLoad):

        Update prewarm information when a top level load finishes.

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

2018-10-09  Antoine Quint  <graouts@apple.com>

        Remove the frames() timing function
        https://bugs.webkit.org/show_bug.cgi?id=190034
        <rdar://problem/44827544>

        Reviewed by Dean Jackson.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FramesTimingFunction>::encode): Deleted.
        (IPC::ArgumentCoder<FramesTimingFunction>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::Properties::encode const):
        (WebKit::PlatformCAAnimationRemote::Properties::decode):

2018-10-09  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: m_cachesLocks.contains(sessionID) in WebKit::CacheStorageEngineConnection::dereference(PAL::SessionID, unsigned long long)
        https://bugs.webkit.org/show_bug.cgi?id=190373
        <rdar://problem/45106402>

        Reviewed by Alex Christensen.

        This assertion can be hit if:
        - WebProcess has a DOMCache
        - NetworkProcess crashes
        - WebProcess navigates and dereference DOMCache.
        Remove this assertion as it is hit when a test is using testRunner.terminateNetworkProcess().

        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::dereference):

2018-10-09  Jer Noble  <jer.noble@apple.com>

        Crash when closing WKWebView during enter fullscreen animation
        https://bugs.webkit.org/show_bug.cgi?id=190412

        Reviewed by Brian Burg.

        We need a valid _webView if, during -[NSWindow close], we catch a notification saying we failed to enter
        fullscreen and try to replace the placeholder with the actual _webView.

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

2018-10-09  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r231663) loading in hidden WKWebViews stalls because WebProcess is suspended
        https://bugs.webkit.org/show_bug.cgi?id=190417
        <rdar://problem/43391014>

        Reviewed by Chris Dumez.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didChangeIsLoading):
        Revert r321663, but keep the change to TestWKWebView.mm because that made the tests more reliable.

2018-10-09  Chris Dumez  <cdumez@apple.com>

        Allow behavior when the parent process IPC::Connection closes to be overridden by ChildProcess subclasses
        https://bugs.webkit.org/show_bug.cgi?id=190294

        Reviewed by Geoffrey Garen.

        Allow behavior when the parent process IPC::Connection closes to be overridden by ChildProcess subclasses.
        This will be useful to allow the NetworkProcess to not exit if it still has pending downloads.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::callExitSoon):
        (WebKit::NetworkProcess::initializeConnection):
        * NetworkProcess/NetworkProcess.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::callExit):
        (WebKit::PluginProcess::initializeConnection):
        * PluginProcess/PluginProcess.h:
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::didClose):
        (WebKit::ChildProcess::initialize):
        (WebKit::callExitNow): Deleted.
        (WebKit::callExitSoon): Deleted.
        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::shouldCallExitWhenConnectionIsClosed const): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::callExit):
        (WebKit::WebProcess::initializeConnection):

2018-10-09  Jer Noble  <jer.noble@apple.com>

        WebDriver: thrown ObjC exception under -[WKFullScreenWindowController windowDidFailToEnterFullScreen:] when session is terminated
        https://bugs.webkit.org/show_bug.cgi?id=190098
        <rdar://problem/42822671>

        Reviewed by Brian Burg.

        Forcibly exit fullscreen in resetState(), while the VideoFullscreenManagerProxy is still valid.

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

2018-10-09  Daniel Bates  <dabates@apple.com>

        [iOS] Ignore some deprecated declarations
        https://bugs.webkit.org/show_bug.cgi?id=190371

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet init]):
        (-[WKActionSheet presentSheet:]):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant presentSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker initWithView:]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController initWithView:hasGroups:]):

2018-10-09  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Explicitly link against gmodule where used
        https://bugs.webkit.org/show_bug.cgi?id=190398

        Reviewed by Michael Catanzaro.

        * PlatformWPE.cmake:

2018-10-09  Chris Dumez  <cdumez@apple.com>

        PSON: Doing a cross-site navigation via the URL bar does not swap process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=190378
        <rdar://problem/45059466>

        Reviewed by Geoffrey Garen.

        Process swapping was sometimes not happening via URL bar navigation on iOS due to top-hit preloading,
        which would use a new WKWebView for the speculative load and rely on the _relatedWebView SPI to use
        the same WebContent process as the view currently on screen.

        To address the issue, if the source URL is empty and the page has a related page, use the related
        page's URL as source URL when doing the process-swap decision.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::relatedPage const):
        (API::PageConfiguration::relatedPage): Deleted.
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):

2018-10-09  Andy Estes  <aestes@apple.com>

        [iOS] Replace @"UIPreviewDataAttachmentListIsContentManaged" with a UIKit constant
        https://bugs.webkit.org/show_bug.cgi?id=190400
        <rdar://problem/35442879>

        Reviewed by Wenson Hsieh.

        Also fixed the iOS version check in WKContentViewInteraction.mm.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):

2018-10-09  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r232416): Can not scroll after swiping back on quoteunquoteapps.com
        https://bugs.webkit.org/show_bug.cgi?id=190377
        <rdar://problem/45108222>

        Reviewed by Andy Estes.

        Introduce the notion of 'pausing' to SnapshotRemovalTracker.
        Reimplement r232416 in terms of this: the SnapshotRemovalTracker
        starts out paused (not accepting events), and un-pauses when
        we get a provisional load or same-document navigation.
        This way, we don't lose the watchdog timer in cases where we get
        no provisional load, same-document navigation, or main frame load
        (which is the separate root cause for this bug -- this just papers
        over it with a timeout).

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame):
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame):
        Resume the snapshot removal tracker.

        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        If we didn't see a provisional load or same document navigation,
        but somehow got to the terminal load state, immediately remove the snapshot.
        
        (WebKit::ViewGestureController::SnapshotRemovalTracker::resume):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::start):
        Start the SnapshotRemovalTracker out in the paused state; it will be
        resumed in the same places we previously would call the
        provisionalOrSameDocumentLoadCallback.

        (WebKit::ViewGestureController::SnapshotRemovalTracker::stopWaitingForEvent):
        Ignore (but debug log) incoming events while paused.

        * UIProcess/Cocoa/ViewGestureController.h:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::pause):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::isPaused const):
        Add the pausing bit.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        Remove m_provisionalOrSameDocumentLoadCallback.

2018-10-09  Antti Koivisto  <antti@apple.com>

        Prewarm FontDatabase on process swap
        https://bugs.webkit.org/show_bug.cgi?id=190312

        Reviewed by Chris Dumez.

        Add mechanism for caching prewarm information per domain on UI process side. This information
        is then passed to newly initialized web processes that are being used for the same domain.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):

        Pass prewarm information on process swap to the new process.

        (WebKit::WebProcessPool::didCollectPrewarmInformation):

        UI process side cache.

        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didCollectPrewarmInformation):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::didReceivePolicyDecision):

        Collect and cache prewarm information for the previous process on process swap.

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

        Renamed for clarity.

        (WebKit::WebProcess::prewarmWithDomainInformation):
        (WebKit::WebProcess::sendPrewarmInformation):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WK2] Add support for text alignment and text lists in font attributes
        https://bugs.webkit.org/show_bug.cgi?id=190342
        <rdar://problem/44767118>

        Reviewed by Tim Horton.

        Add encoding and decoding for text alignment and text lists in FontAttributes.

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

2018-10-08  Justin Fan  <justin_fan@apple.com>

        WebGPU: Rename old WebGPU prototype to WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190325
        <rdar://problem/44990443>

        Reviewed by Dean Jackson.

        Rename WebGPU prototype files to WebMetal in preparation for implementing the new (Oct 2018) WebGPU interface.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r236942: Make input type=color an internal feature
        https://bugs.webkit.org/show_bug.cgi?id=189162

        Rubber-stamped by Dean Jackson.

        I've learned from Dean that an internal feature is more suitable than an experimental feature in this scenario.

        * Shared/WebPreferences.yaml:

2018-10-08  Aditya Keerthi  <akeerthi@apple.com>

        Make <input type=color> a runtime enabled (on-by-default) feature
        https://bugs.webkit.org/show_bug.cgi?id=189162

        Reviewed by Wenson Hsieh and Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:

        Add an experimental feature flag for input type=color.

        * UIProcess/mac/WebColorPickerMac.mm:
        (-[WKPopoverColorWell webDelegate]):
        (-[WKPopoverColorWell setWebDelegate:]):

2018-10-08  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build

        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:

2018-10-08  Brian Burg  <bburg@apple.com>

        [Mac] Web Automation: some keyboard interactions don't generate events, causing event simulation to stall
        https://bugs.webkit.org/show_bug.cgi?id=190316
        <rdar://problem/42833290>

        Reviewed by Tim Horton.

        Some users have reported that Cmd-A for Select All no longer works in safaridriver.
        Instead, this hangs the session. This happens because the WebAutomationSession class
        assumes that each call to simulateKeyboardInteraction causes keyboard events to be processed,
        but in corner cases like Cmd-A, some events that we simulate are swallowed by AppKit and
        never make it back to WebKit. Because the session never gets the "keyboard events flushed"
        callback, it assumes the interaction is still ongoing, and never returns, causing a hang.

        This patch consists of two parts:
         - Add logging of important state changes and events when simulating user input.
         - Make code more robust when simulating key actions that generate no events on macOS.

        This change progresses WPT test key_shortcuts.py::test_mod_a_and_backspace_deletes_all_text on Mac.

        * Platform/Logging.h: Add a logging channel.
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::keyFrameTransitionDurationTimerFired):
        (WebKit::SimulatedInputDispatcher::transitionBetweenKeyFrames):
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        (WebKit::SimulatedInputDispatcher::run):
        (WebKit::SimulatedInputDispatcher::finishDispatching):
        Add a bunch of logging so its easier to figure out where things get stuck.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::simulateKeyboardInteraction):
        In some cases, no keyboard events need to be processed for the simulated interaction.
        When that happens, early exit rather than waiting for keyboard events to be flushed.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage): Logging.
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        On Mac, if you tap a character key while Command is held down, only a KeyDown event
        is forwarded to the first responder by AppKit, even if you send a KeyUp event too.
        In this case don't send an NSEvent since it won't ever be delivered back to WebKit.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isProcessingKeyboardEvents const): Expose this state for keyboard
        events too.

2018-10-08  Youenn Fablet  <youenn@apple.com>

        NetworkCache::Storage should be WTF::DestructionThread::Main
        https://bugs.webkit.org/show_bug.cgi?id=190324

        Reviewed by Alex Christensen.

        Use WTF::DestructionThread::Main to make sure that Storage is destroyed in the main thread.
        Remove the code that was making sure that any ref was destroyed in the main thread.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp: Make sure the completion handler is not null.
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::TraverseOperation::TraverseOperation): Make it clear that a ref is taken.
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::synchronize): Protect 'this' when dispatching back to the main thread.
        Move the code that was after dispatch before dispatch to allow moving protectedThis in the dispatch lambda.
        (WebKit::NetworkCache::Storage::remove):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        (WebKit::NetworkCache::Storage::deleteOldVersions):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2018-10-08  Tim Horton  <timothy_horton@apple.com>

        Adjust keyboard scrolling animator to springy and semiphysical
        https://bugs.webkit.org/show_bug.cgi?id=190345
        <rdar://problem/43494393>

        Reviewed by Simon Fraser.

        Introduce WKKeyboardScrollViewAnimator, which wraps WKKeyboardScrollingAnimator
        and provides a reasonable set of default behaviors for UIScrollView.
        This is the first step on the way to WKKeyboardScrollingAnimator
        being platform- and toolkit-agnostic, and helps avoid adding a whole
        bunch of code to WKContentView.

        Adopt UIKit's scroll-to-top animation curve for whole-document scrolls.

        Adjust WKKeyboardScrollingAnimator's physics; it now simulates a spring
        attached to the page when decelerating. When a key is pressed, it applies
        a constant force to the page (up to some maximum velocity). When released,
        the spring causes the page to decelerate smoothly.

        Add rubber-banding to keyboard scrolling, based on the same spring that
        decelerates the page.

        Remove the initial bounce on keydown before starting the smooth scroll.

        Remove arrow key commands from WKContentView; this avoids double-processing
        incoming arrow key events, makes the event stream make more sense, and was
        entirely unnecessary.

        * Platform/spi/ios/UIKitSPI.h:
        Add a wide variety of useful SPI.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Remove _scrollByContentOffset:animated: because it's only used by
        the keyboard scrolling mechanism.

        Remove _arrowKey because we're removing the arrow key commands.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        Create a WKKeyboardScrollViewAnimator (which knows how to directly
        manipulate a UIScrollView) instead of a WKKeyboardScrollingAnimator
        (which requires its clients to implement everything in terms of an
        abstract interface.

        (-[WKContentView scrollViewWillStartPanOrPinchGesture]):
        Inform the keyboard scrolling animator that the user is going to start
        an interactive gesture that needs control of the scroll view, so it
        can stop its current animated scroll.

        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView keyCommands]):
        (-[WKContentView _arrowKeyForWebView:]): Deleted.
        Remove arrow key commands.

        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]):
        Scale from content to WKWebView coordinate space; the keyboard scrolling
        animator operates in WKWebView coordinates. This was broken before.

        (-[WKContentView keyboardScrollViewAnimatorWillScroll:]):
        (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]):
        (-[WKContentView isKeyboardScrollable]): Deleted.
        (-[WKContentView distanceForScrollingIncrement:]): Deleted.
        (-[WKContentView scrollByContentOffset:animated:]): Deleted.
        Reimplement these as keyboardScrollViewAnimator delegate methods.

        * UIProcess/ios/WKKeyboardScrollingAnimator.h:
        Add WKKeyboardScrollViewAnimator, hide the interface for
        WKKeyboardScrollingAnimator itself in the implementation file.

        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator initWithScrollable:]):
        (-[WKKeyboardScrollingAnimator parameters]):
        (-[WKKeyboardScrollingAnimator invalidate]):
        (unitVector):
        Return a unit vector in the given direction.

        (perpendicularAbsoluteUnitVector):
        Return a positive unit vector perpendicular to the axis of the given direction.
        Useful for multiplying with another vector to remove the component in the
        axis of the given direction.

        (boxSide):
        Convert ScrollingDirection to WebCore::PhysicalBoxSide, for use with RectEdges.

        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
        Instead of just returning the desired increment, compute everything we'll need
        for the lifetime of the scroll (including the force applied, maximum
        velocity, etc.) and return them together.

        (-[WKKeyboardScrollingAnimator beginWithEvent:]):
        Use the scrollable's native scroll-to-extent animation (e.g. UIScrollView's
        scroll-to-top curve) for whole-document scrolls.

        Remove the first discrete scroll; start the smooth scroll immediately.

        (-[WKKeyboardScrollingAnimator handleKeyEvent:]):
        (farthestPointInDirection):
        (-[WKKeyboardScrollingAnimator stopAnimatedScroll]):
        Stop the current scroll. Let the spring coast to its natural stopping
        point given the system's current energy, unless that stopping point is
        less than one increment from the starting point. In that case, we attach
        the spring to /that/ point and let it run.

        (-[WKKeyboardScrollingAnimator startDisplayLinkIfNeeded]):
        (-[WKKeyboardScrollingAnimator stopDisplayLink]):
        (-[WKKeyboardScrollingAnimator willStartInteractiveScroll]):
        Immediately stop all motion if the user touches the screen to scroll
        or zoom with fingers.

        (-[WKKeyboardScrollingAnimator displayLinkFired:]):
        Update the position of the scrollable based on the applied force and spring.
        See the comments in this function for more details.

        (-[WKKeyboardScrollViewAnimator init]):
        (-[WKKeyboardScrollViewAnimator initWithScrollView:]):
        (-[WKKeyboardScrollViewAnimator dealloc]):
        (-[WKKeyboardScrollViewAnimator invalidate]):
        (-[WKKeyboardScrollViewAnimator setDelegate:]):
        (-[WKKeyboardScrollViewAnimator willStartInteractiveScroll]):
        (-[WKKeyboardScrollViewAnimator beginWithEvent:]):
        (-[WKKeyboardScrollViewAnimator handleKeyEvent:]):
        (-[WKKeyboardScrollViewAnimator isKeyboardScrollable]):
        (-[WKKeyboardScrollViewAnimator distanceForIncrement:]):
        (-[WKKeyboardScrollViewAnimator scrollToContentOffset:animated:]):
        (-[WKKeyboardScrollViewAnimator scrollWithScrollToExtentAnimationTo:]):
        (-[WKKeyboardScrollViewAnimator contentOffset]):
        (-[WKKeyboardScrollViewAnimator boundedContentOffset:]):
        (-[WKKeyboardScrollViewAnimator interactiveScrollVelocity]):
        (-[WKKeyboardScrollViewAnimator scrollableDirectionsFromOffset:]):
        (-[WKKeyboardScrollViewAnimator rubberbandableDirections]):
        Add WKKeyboardScrollViewAnimator, which wraps WKKeyboardScrollingAnimator
        and provides animated keyboard scrolling for a UIScrollView without much
        additional plumbing work. It contains reasonable default behaviors,
        with a few optional delegate methods for customization.

        (-[WKKeyboardScrollingAnimator _scrollOffsetForEvent:]): Deleted.
        (-[WKKeyboardScrollingAnimator startAnimatedScroll]): Deleted.

2018-10-08  Jeremy Jones  <jeremyj@apple.com>

        Remove dead code: VideoFullscreenModel::isVisible()
        https://bugs.webkit.org/show_bug.cgi?id=190356

        Reviewed by Jon Lee.

        Remove isVisible since it is no longer used.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::isVisible const): Deleted.
        (WebKit::VideoFullscreenManagerProxy::isVisible const): Deleted.

2018-10-08  Jeremy Jones  <jeremyj@apple.com>

        Remove dead code: resetMediaState.
        https://bugs.webkit.org/show_bug.cgi?id=190355

        Reviewed by Jon Lee.

        Remove resetMediaState since it is no longer used.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::resetMediaState): Deleted.
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionInterfaceContext::resetMediaState): Deleted.

2018-10-08  Jeremy Jones  <jeremyj@apple.com>

        Use MediaPlayerEnums::VideoGravity in VideoFullscreenModel.
        https://bugs.webkit.org/show_bug.cgi?id=190357

        Reviewed by Jon Lee.

        Use MediaPlayerEnums::VideoGravity instead of creating another identical enum in VideoFullscreenModel.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::setVideoLayerGravity):
        (WebKit::VideoFullscreenManagerProxy::setVideoLayerGravity):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::setVideoLayerGravityEnum):

2018-10-08  Alex Christensen  <achristensen@webkit.org>

        Remove WKBundleFileHandleRef
        https://bugs.webkit.org/show_bug.cgi?id=190360

        Reviewed by Tim Horton.

        WKBundleFrameGetJavaScriptWrapperForFileForWorld and WKBundleFileHandleCreateWithPath were only used in Mail
        and were removed in rdar://problem/44955158
        I need to remove them for rdar://problem/24576194

        * Shared/API/APIObject.h:
        * Shared/API/c/WKDeprecated.h:
        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKBundleFrameGetJavaScriptWrapperForFileForWorld):
        (WKBundleFileHandleCreateWithPath):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFileHandleRef.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundleFileHandleRef.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetJavaScriptWrapperForFileForWorld): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleFileHandle.cpp: Removed.
        * WebProcess/InjectedBundle/DOM/InjectedBundleFileHandle.h: Removed.
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebFrame.h:

2018-10-08  Konstantin Tokarev  <annulen@yandex.ru>

        Validation in Connection::readBytesFromSocket() is too aggressive
        https://bugs.webkit.org/show_bug.cgi?id=190281

        Reviewed by Michael Catanzaro.

        Since r217206 Connection::readBytesFromSocket() validates size of
        control message. However, it compares cmsg_len with attachmentMaxAmount,
        while Connection::sendOutgoingMessage() computes it as
        CMSG_LEN(sizeof(int) * attachmentFDBufferLength) where
        attachmentFDBufferLength <= attachmentMaxAmount. This mismatch between
        sender and receiver leads to possibility of assertion failure with large
        number of attachments, e.g. here 62 attachments have cmsg_length == 264.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::readBytesFromSocket):

2018-10-08  Chris Dumez  <cdumez@apple.com>

        Have DOMWindowProperty get is frame from its associated DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=190341

        Reviewed by Alex Christensen.

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

2018-10-07  Dan Bernstein  <mitz@apple.com>

        Tried to fix HAVE(LINK_PREVIEW) iOS builds.

        * UIProcess/WKImagePreviewViewController.mm:
        (-[WKImagePreviewViewController previewActions]):

2018-10-06  Dan Bernstein  <mitz@apple.com>

        Tried to fix the macOS Mojave build.

        * UIProcess/API/Cocoa/LegacyBundleForClass.mm:

2018-10-06  Dan Bernstein  <mitz@apple.com>

        WebKit part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Andy Estes.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS, CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and
          CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

        * WebKit.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
        * UIProcess/API/Cocoa/WKConnection.mm:
        * UIProcess/API/Cocoa/WKNavigationData.mm:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        * UIProcess/API/Cocoa/WKTypeRefWrapper.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        * UIProcess/API/mac/WKView.mm:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:

          Suppressed -Wdeprecated-implementations around some class, category and method
          implementations the above files.

2018-10-05  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r236154) Page loads are not drawn when loaded in shipped Safari11/12
        https://bugs.webkit.org/show_bug.cgi?id=190202

        Reviewed by Youenn Fablet.

        Safari11/12 had a WKPageLoaderClient and a WKPageNavigationClient.
        It did not actually draw the page until its WKPageNavigationClient.renderingProgressDidChange was called.
        r236154 made it so we only call WKPageLoaderClient.didLayout if an application has both clients.
        This fixes open source WebKit running with shipped Safari.

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

2018-10-05  Chris Dumez  <cdumez@apple.com>

        [PSON] Drop snapshotting workaround introduced in r235898
        https://bugs.webkit.org/show_bug.cgi?id=190314

        Reviewed by Geoffrey Garen.

        Drop snapshotting workaround introduced in r235898 as it is no longer needed now
        that the flashing bug has been fixed.

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

2018-10-05  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] RealtimeMediaSource should be able to vend hashed IDs
        https://bugs.webkit.org/show_bug.cgi?id=190142
        <rdar://problem/44911109>

        Reviewed by Youenn Fablet.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MediaConstraints>::encode):
        (IPC::ArgumentCoder<MediaConstraints>::decode):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::Source):
        (WebKit::UserMediaCaptureManager::createCaptureSource):
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2018-10-03  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

        Add a new preference to control the visibility of displayCompositedVideoFrames in the VideoPlaybackQualityObject.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setVideoQualityIncludesDisplayCompositingEnabled:]):
        (-[WKPreferences _videoQualityIncludesDisplayCompositingEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-10-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236866.

        Breaks internal builds.

        Reverted changeset:

        "Add support for reporting "display composited video frames"
        through the VideoPlaybackQuality object."
        https://bugs.webkit.org/show_bug.cgi?id=190266
        https://trac.webkit.org/changeset/236866

2018-10-05  Zach Li  <zachli@apple.com>

        Expose whether WKWebProcessPlugInNodeHandle is a select element to clients
        https://bugs.webkit.org/show_bug.cgi?id=190302
        <rdar://problem/45031469>

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        Introduce a new property `isSelectElement`.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle isSelectElement]):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isSelectElement const):
        Check whether the node is a select element.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WK2] Expose some more editing SPI on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190232
        <rdar://problem/44963368>

        Reviewed by Tim Horton.

        Exposes a few additional editing commands as SPI on WKWebView, by defining a new extension on WKWebView that
        also conforms to <UIResponderStandardEditActions>. This patch implements nearly all of the remaining
        unimplemented methods on UIResponderStandardEditActions, and the new extension augments this set of editing
        methods by adding additional editing helpers that don't currently exist on iOS (e.g. toggleStrikeThrough and
        insertUnorderedList). The names of these new methods have been largely been borrowed from their counterparts on
        macOS (see: `NSResponder.h`).

        The new edit actions are added in this patch on iOS are:

        ```
        - (void)alignCenter:(id)sender;
        - (void)alignJustified:(id)sender;
        - (void)alignLeft:(id)sender;
        - (void)alignRight:(id)sender;
        - (void)indent:(id)sender;
        - (void)insertOrderedList:(id)sender;
        - (void)insertUnorderedList:(id)sender;
        - (void)outdent:(id)sender;
        - (void)toggleStrikeThrough:(id)sender;
        - (void)setFont:(UIFont *)font sender:(id)sender;
        - (void)setFontSize:(CGFloat)fontSize sender:(id)sender;
        - (void)setTextColor:(UIColor *)color sender:(id)sender;
        ```

        Tests:  WKWebViewEditActions.ListInsertion
                WKWebViewEditActions.ChangeIndentation
                WKWebViewEditActions.SetAlignment
                WKWebViewEditActions.ToggleStrikeThrough
                WKWebViewEditActions.ChangeFontSize
                WKWebViewEditActions.SetTextColor
                WKWebViewEditActions.SetFontFamily

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView canPerformAction:withSender:]):

        Update this to handle the new editing actions. For now, we simply treat all of the new edit actions in the same
        way as we currently treat bold, italic and underline: that is, they are enabled only when the user is in a
        richly contenteditable element.

        (-[WKWebView setFont:sender:]):
        (-[WKWebView setFontSize:sender:]):

        Construct and send a set of FontChanges.

        (-[WKWebView setTextColor:sender:]):

        Invoke "ForeColor" with the serialized color representation. This allows us to handle `rgba()` color values,
        which hex format would not permit.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Add the new SPI.

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

        Pull logic for applying font and font attribute style changes out of macOS-specific code, and into
        platform-agnostic code in WebPage and WebPageProxy.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:

        Add the new supported editing commands as supported actions in WKWebView. The only new editing commands that
        aren't present in this list are -setFont:sender:, -setColor:sender:, and -setFontSize:sender: which are manually
        handled in places where the `FOR_EACH_WKCONTENTVIEW_ACTION` macro is otherwise used. In a followup, we could
        consider augmenting `FOR_EACH_WKCONTENTVIEW_ACTION` to handle actions with multiple arguments.

        * UIProcess/ios/WKContentViewInteraction.mm:

        Define a new helper macro here to define boilerplate implementations of the -…ForWebView edit command
        implementations that turn around and invoke `_page->executeEditCommand` with no additional arguments, and an
        edit command name matching that of the WebCore edit command.

        (-[WKContentView toggleStrikeThroughForWebView:]):
        (-[WKContentView increaseSizeForWebView:]):
        (-[WKContentView decreaseSizeForWebView:]):
        (-[WKContentView setFontForWebView:sender:]):
        (-[WKContentView setFontSizeForWebView:sender:]):
        (-[WKContentView setTextColorForWebView:sender:]):
        (-[WKContentView canPerformActionForWebView:sender:]):

        Add …ForWebView plumbing for the new editing actions, so they turn around and call into WKContentView by
        default, but behavior may be overridden in WKWebView.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::changeFontAttributes): Deleted.
        (WebKit::WebPageProxy::changeFont): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::changeFontAttributes):
        (WebKit::WebPage::changeFont):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::changeFontAttributes): Deleted.
        (WebKit::WebPage::changeFont): Deleted.

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

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

        Add a new preference to control the visibility of displayCompositedVideoFrames in the VideoPlaybackQualityObject.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setVideoQualityIncludesDisplayCompositingEnabled:]):
        (-[WKPreferences _videoQualityIncludesDisplayCompositingEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add SPI to expose typing attributes at the current selection on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190119
        <rdar://problem/44767062>

        Reviewed by Tim Horton.

        Add support for new WebKit2 SPI to notify the UI delegate about font attributes when the editor state changes
        (e.g. due to selection changes, or executing an edit command). See below for more detail.

        Test: FontAttributes.FontAttributesAfterChangingSelection

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:

        Add a new optional `FontAttributes` member to EditorState's post-layout data. FontAttributes are computed and
        sent over IPC only if the UI delegate implements the new delegate hook which requires information about font
        attributes.

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

        Add a new flag for the UI process to let a new web page know whether it should additionally compute font
        attributes when computing editor state.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::needsFontAttributes const):
        (API::UIClient::didChangeFontAttributes):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didChangeEditorState]):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didChangeFontAttributes):

        Call out to the UI delegate with a font attribute dictionary, created via FontAttributes on EditorState's
        post-layout data.

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

        Update whether or not the UI process needs to know about font attributes. The UI process only requires font
        attribute information if the UI delegate implements `-_webView:didChangeFontAttributes:`.

        (WebKit::WebPageProxy::setNeedsFontAttributes):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::editorStateChanged):

        Update the cached font attributes in the UI process when receiving a new editor state update.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_cpuLimit):
        (WebKit::WebPage::editorState const):
        (WebKit::WebPage::setNeedsFontAttributes):

        Add a new IPC hook to update whether or not the page should additionally compute font attributes. In the case
        where the UI delegate changes from something that does not require font attributes to one that does, we
        additionally schedule an editor state update.

        (WebKit::WebPage::updateFontAttributesAfterEditorStateChange):

        Private helper function to plumb FontAttributes to the UI client after an editor state change.

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

2018-10-04  Jeremy Jones  <jeremyj@apple.com>

        Unify implementation in VideoFullscreenInterfaceAVKit
        https://bugs.webkit.org/show_bug.cgi?id=190091
        rdar://problem/44734523

        Reviewed by Jer Noble.

        Unified code in VideoFullscreenInterfaceAVKit now that new code path is proven and include
        any changes that had been made in the old path.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::supportsVideoFullscreenStandby const):
        (WebKit::VideoFullscreenManager::didSetupFullscreen):
        (WebKit::VideoFullscreenManager::didExitFullscreen):

2018-10-04  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r236730.

        This caused a consistent crash in test http/tests/media/media-
        stream/get-display-media-prompt.html.

        Reverted changeset:

        "[MediaStream] RealtimeMediaSource should be able to vend
        hashed IDs"
        https://bugs.webkit.org/show_bug.cgi?id=190142
        https://trac.webkit.org/changeset/236730

2018-10-04  Brian Burg  <bburg@apple.com>

        Web Automation: clear pending callbacks when the session terminates
        https://bugs.webkit.org/show_bug.cgi?id=190259
        <rdar://problem/44958352>

        Reviewed by Joseph Pecoraro.

        WebAutomationSession::terminate() can be called at any time to nuke the session.
        However, it's possible that the session is in the midst of simulating keyboard/mouse
        events. While in that state, there are some CompletionHandler objects waiting
        for key/mouse events to be flushed. We need to empty out callback maps with
        CompletionHandler instances so that they do not assert because they were never called.

        I was able to test this manually by running a test that erroneously hangs
        while waiting for keyboard input. While the test was hung, I killed the NetworkProcess
        manually to trigger WebAutomationSession::terminate(). From there, I saw that the
        Perform Actions REST API call gets cancelled with the appropriate error code.

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

2018-10-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Move time out control from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=189642
        <rdar://problem/44476765>

        Reviewed by Chris Dumez.

        Besides adding a time out timer in the AuthenticatorManager, this patch also adds a new
        option in MockWebAuthenticationConfiguration to turn on silent failure which is the
        default policy of treating authenticators' error as suggested by spec.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManagerInternal::collectTransports):
        (WebKit::AuthenticatorManager::makeCredential):
        (WebKit::AuthenticatorManager::getAssertion):
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        (WebKit::AuthenticatorManager::requestTimeOutTimer):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::respondReceivedInternal):
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h:

2018-10-04  Yuhan Wu  <yuhan_wu@apple.com>

        runtime flag and IDL for MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=190018

        Reviewed by Youenn Fablet and Chris Dumez.

        * Shared/WebPreferences.yaml:

2018-10-03  Dan Bernstein  <mitz@apple.com>

        Tried to fix non-Cocoa, ENABLE(ATTACHMENT_ELEMENT) builds after r236822.

        * UIProcess/PageClient.h:

2018-10-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Let clients specify an NSFileWrapper subclassed to be used for _WKAttachment
        https://bugs.webkit.org/show_bug.cgi?id=190270

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]): Copy new _attachmentFileWrapperClass ivar.
        (-[WKWebViewConfiguration _attachmentFileWrapperClass]): Added this getter.
        (-[WKWebViewConfiguration _setAttachmentFileWrapperClass:]): Added this setter, which raises
          an exception if the argument is not an NSFileWrapper subclass.

        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Declared new property.

        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::allocFileWrapperInstance): Added. Allocates an instance of
          the class specified in the configuration, or NSFileWrapper if no custom class is specified.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::platformRegisterAttachment): Use PageClient::allocFileWrapperInstance
          instead of allocating an NSFileWrapper instance.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::allocFileWrapperInstance): Defined new function. The default
          implementation returns nil.

2018-10-03  Youenn Fablet  <youenn@apple.com>

        Add VP8 support to WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=189976

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2018-10-03  Zamiul Haque  <zhaque@apple.com>

        Search does not cancel after number of matching terms exceed set max limit
        https://bugs.webkit.org/show_bug.cgi?id=190020
        <rdar://problem/39585214>

        Reviewed by Andy Estes.

        When searching a PDF document on MobileSafari, the maximum number of matching
        terms are limited to a set constant. Beyond this limit, a PDF document should not
        be searched, since the UI will not be updated correspondingly. To this effect,
        a new SPI was made to cancel a search when the maximum limit of matching terms
        is reached. This is done without clearing the highlighting for the all the terms
        that were found under the limit. This bug was a result of not having implemented 
        the new SPI in WKPDFView.

        This will be tested in a follow-up patch, after re-enabling WKPDFView tests
        on iOS 12.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView pdfHostViewController:findStringUpdate:done:]):

2018-10-03  Brian Burg  <bburg@apple.com>

        [Cocoa] REGRESSION: web content process paused in debugger is considered to be unresponsive if WebKit client is sandboxed
        https://bugs.webkit.org/show_bug.cgi?id=190256
        <rdar://problem/44957921>

        Reviewed by Alexey Proskuryakov.

        Instead of giving up when the client is sandboxed, check whether it has the
        exception that's necessary to get process information. If it is possible,
        proceed to check whether the web content process has a debugger attached.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::platformIsBeingDebugged const):
        Check 'process-info-pidinfo' to see if the sysctl call would be allowed.

2018-10-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Enable MSE by default
        https://bugs.webkit.org/show_bug.cgi?id=190243

        Reviewed by Xabier Rodriguez-Calvar.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init):

2018-10-02  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKConnection
        https://bugs.webkit.org/show_bug.cgi?id=190147

        Reviewed by Andy Estes.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKConnection.h:
        * UIProcess/API/Cocoa/WKConnection.mm:
        (didReceiveMessage):
        (didClose):
        * UIProcess/API/Cocoa/WKConnectionInternal.h:
        * UIProcess/API/Cocoa/WKProcessGroup.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:

2018-10-01  Dean Jackson  <dino@apple.com>

        [macOS] Switching to discrete GPU should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=189361
        <rdar://problem/43949622>

        Reviewed by Simon Fraser.

        Implement the UI-side process for triggering a GPU mux.

        * Platform/Logging.h: Add a WebGL logging channel.

        * SourcesCocoa.txt: Add the new files: WebSwitchingGPUClient and HighPerformanceGPUManager.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm: UI process calls that use HighPerformanceGPUManager
        to keep track of whether or not this process needs the high-performance GPU.
        (WebKit::WebProcessProxy::requestHighPerformanceGPU):
        (WebKit::WebProcessProxy::releaseHighPerformanceGPU):

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy): Make sure to unregister with the HighPerformanceGPUManager
        as the process disappears without manually removing itself (e.g. crashes).
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in: New messages.

        * UIProcess/mac/HighPerformanceGPUManager.cpp: New class that copies most of what used
        to live in GraphicsContext3DManager. It creates a CGLPixelFormat object when it sees
        that at least one process needs the high-performance GPU.
        (WebKit::HighPerformanceGPUManager::singleton):
        (WebKit::HighPerformanceGPUManager::addProcessRequiringHighPerformance):
        (WebKit::HighPerformanceGPUManager::removeProcessRequiringHighPerformance):
        (WebKit::HighPerformanceGPUManager::updateState):
        * UIProcess/mac/HighPerformanceGPUManager.h: Added.

        * WebKit.xcodeproj/project.pbxproj: Add new files.

        * WebProcess/WebCoreSupport/mac/WebSwitchingGPUClient.cpp: Implementation of the SwitchingGPUClient for
        WebCore, which sends messages to the UI process.
        (WebKit::WebSwitchingGPUClient::singleton):
        (WebKit::WebSwitchingGPUClient::requestHighPerformanceGPU):
        (WebKit::WebSwitchingGPUClient::releaseHighPerformanceGPU):
        * WebProcess/WebCoreSupport/mac/WebSwitchingGPUClient.h: Added.

        * WebProcess/cocoa/WebProcessCocoa.mm: Register the GPUClient.
        (WebKit::WebProcess::platformInitializeProcess):

2018-10-02  Sihui Liu  <sihui_liu@apple.com>

        Fix a potential crash in NetworkProcess::deleteWebsiteDataForOrigins
        https://bugs.webkit.org/show_bug.cgi?id=190220

        Reviewed by Chris Dumez.

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

2018-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit2] Format > Bold and Format > Italic don't toggle between bold and italic style
        https://bugs.webkit.org/show_bug.cgi?id=179787
        <rdar://problem/35593389>

        Reviewed by Tim Horton.

        Fixes the bug by relaxing our policy in WebViewImpl::updateFontManagerIfNeeded. Instead of updating only when
        the font panel is visible, update when either the font panel is visible, or the selection is in a richly
        editable area. In the latter case, an up-to-date NSFontManager state is needed in order for certain font
        formatting menu items, such as bold and italic, to correctly toggle state.

        Test: FontManagerTests.ToggleBoldAndItalicWithMenuItems

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKWindowVisibilityObserver observeValueForKeyPath:ofObject:change:context:]):
        (WebKit::WebViewImpl::selectionDidChange):
        (WebKit::WebViewImpl::updateFontManagerIfNeeded):

        Rename updateFontPanelIfNeeded to updateFontManagerIfNeeded, to reflect the new behavior.

        (WebKit::WebViewImpl::changeFontAttributesFromSender):
        (WebKit::WebViewImpl::changeFontFromFontManager):
        (WebKit::WebViewImpl::updateFontPanelIfNeeded): Deleted.

2018-10-02  Alex Christensen  <achristensen@webkit.org>

        Remove ParsedURLString
        https://bugs.webkit.org/show_bug.cgi?id=190154

        Reviewed by Chris Dumez.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::writeBlobToFilePath):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::streamWillSendRequest):
        (WebKit::PluginControllerProxy::streamDidReceiveResponse):
        (WebKit::PluginControllerProxy::manualStreamDidReceiveResponse):
        * Shared/API/APIUserContentURLPattern.h:
        (API::UserContentURLPattern::matchesURL const):
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::itemIsInSameDocument const):
        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        (WebKit::RemoteInspectorProtocolHandler::handleRequest):
        (WebKit::RemoteInspectorProtocolHandler::targetListChanged):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::openURL):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::processDidTerminate):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::addProcessToOriginCacheSet):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createShareMenuItem):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addUserScript):
        (WebKit::InjectedBundle::addUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScript):
        (WebKit::InjectedBundle::removeUserStyleSheet):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::decode):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::url):
        (WebKit::WebPlatformStrategies::readURLFromPasteboard):

2018-10-01  Dean Jackson  <dino@apple.com>

        Remove CSS Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=190175
        <rdar://problem/44925626>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2018-10-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r236662): Fix -Wformat warnings in CacheStorageEngineCaches.cpp
        https://bugs.webkit.org/show_bug.cgi?id=190205

        Reviewed by Chris Dumez.

        Passing enums to %d is not kosher, at least not according to GCC's -Wformat. Avoid it.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::initialize):
        (WebKit::CacheStorage::Caches::readCachesFromDisk):
        (WebKit::CacheStorage::Caches::writeCachesToDisk):

2018-10-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236624 and r236671.
        https://bugs.webkit.org/show_bug.cgi?id=190207

        The change in r236624 introduced crashes on the bots
        (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Refactoring: eliminate raw pointer usage in Fullscreen code"
        https://bugs.webkit.org/show_bug.cgi?id=188747
        https://trac.webkit.org/changeset/236624

        "Unify implementation in VideoFullscreenInterfaceAVKit"
        https://bugs.webkit.org/show_bug.cgi?id=190091
        https://trac.webkit.org/changeset/236671

2018-10-02  Antti Koivisto  <antti@apple.com>

        WebPageProxy::reattachToWebProcess cleanups
        https://bugs.webkit.org/show_bug.cgi?id=189881

        Reviewed by Chris Dumez.

        Change the factoring to separate swap and crash code paths into different functions.

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

        Separate function for the swap case.

        (WebKit::WebPageProxy::finishAttachingToWebProcess):

        Factor the common parts here.

        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:

2018-10-02  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Theming of authentication dialog breaks with themes other than Adwaita
        https://bugs.webkit.org/show_bug.cgi?id=190117

        Reviewed by Michael Catanzaro.

        Adds the missing GTK_STYLE_CLASS_BACKGROUND to the WebKitWebViewDialog
        widget, which was missing for GTK+ 3.20 or newer, and set the widget
        as app-paintable to avoid the base class paint method to add an opaque
        background.

        Thanks to Benjamin Otte for the guidance to debug the theming issues.

        * UIProcess/API/gtk/WebKitWebViewDialog.cpp:
        (webkitWebViewDialogDraw): Remove the style context save/restore, it
        is unneeded because the style classes are set at widget construction
        time and not changed ever after.
        (webkitWebViewDialogConstructed): Mark the widget as app-paintable to
        avoid the base widget paint operation to fill the whole background,
        because the dialog widget paints the translucent overlay itself; and
        also add the missing GTK_STYLE_CLASS_BACKGROUND class at construction
        when building against GTK+ 3.20 or newer.

2018-10-02  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] RealtimeMediaSource should be able to vend hashed IDs
        https://bugs.webkit.org/show_bug.cgi?id=190142
        <rdar://problem/44911109>

        Reviewed by Youenn Fablet.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MediaConstraints>::encode):
        (IPC::ArgumentCoder<MediaConstraints>::decode):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::Source):
        (WebKit::UserMediaCaptureManager::createCaptureSource):
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2018-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Implement a way for the UI process to request typing attributes at the current selection
        https://bugs.webkit.org/show_bug.cgi?id=189983
        <rdar://problem/44648705>

        Reviewed by Ryosuke Niwa.

        Implements `-[WKWebView typingAttributesWithCompletionHandler:]`, which asynchronously retrieves an NSDictionary
        containing the typing attributes at the start of the current selection. This is a new asynchronous text input
        client hook on macOS that is needed in order to support NSInspectorBar on WKWebView.

        At a high level, this patch builds on top of refactoring done in r236445 to make it possible to send typing
        attributes from the web process to the UI process, and then adds plumbing in the WebKit2 client layer to surface
        typing attributes to WKWebView on macOS.

        Tests:  FontManagerTests.TypingAttributesAfterSubscriptAndSuperscript
                FontManagerTests.ChangeTypingAttributesWithInspectorBar
                FontManagerTests.ChangeAttributesWithFontEffectsBox

        * Platform/spi/mac/AppKitSPI.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FontAttributes>::encode):
        (IPC::ArgumentCoder<FontAttributes>::decode):

        Implement IPC coding support for FontAttributes.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/ArgumentCodersMac.h:
        * Shared/mac/ArgumentCodersMac.mm:
        (IPC::encode):
        (IPC::decode):

        Add the ability to encode and decode UIFont. This allows Cocoa platforms to send `FontAttributes.font` over IPC
        with a single call to IPC::encode/IPC::decode.

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

        Add plumbing to WebViewImpl.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::selectionDidChange):

        Update the NSInspectorBar on selection change, but only if it is present and visible, and WKWebView is currently
        first responder.

        (WebKit::WebViewImpl::typingAttributesWithCompletionHandler):

        Call into WebPageProxy to retrieve FontAttributes from the web process, and invoke the callback with an
        NSDictionary constructed from the retrieved FontAttributes.

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

        Add plumbing to retrieve FontAttributes from the web process at the current selection. Additionally, cache the
        font attributes to avoid doing extra work during subsequent requests.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::cachedFontAttributesAtSelectionStart const):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::editorStateChanged):

        Invalidate cached font attributes.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestFontAttributesAtSelectionStart):

        Use the currently focused frame's Editor to compute FontAttributes at the current selection, and send the
        computed FontAttributes back to the UI process.

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

2018-10-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove analyzer manager
        https://bugs.webkit.org/show_bug.cgi?id=190162

        Reviewed by Joseph Pecoraro.

        * InspectorGResources.cmake:
        Remove eslint.

2018-09-30  Ryosuke Niwa  <rniwa@webkit.org>

        Add a new variant of serializePreservingVisualAppearance which takes VisibleSelection
        https://bugs.webkit.org/show_bug.cgi?id=190108

        Reviewed by Wenson Hsieh.

        Adopt the new variant which directly takes VisibleSelection.

        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection):

2018-10-01  Andy Estes  <aestes@apple.com>

        [watchOS] Adopt NSURLSessionCompanionProxyPreference
        https://bugs.webkit.org/show_bug.cgi?id=190177
        <rdar://problem/43402114>

        Reviewed by Wenson Hsieh.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

2018-10-01  Chris Dumez  <cdumez@apple.com>

        [Mac] The UIProcess should listen to memory pressure signals
        https://bugs.webkit.org/show_bug.cgi?id=190166

        Reviewed by Simon Fraser.

        The UIProcess should listen to memory pressure signals on Mac in order to free memory, similarly to what we already
        do on iOS. The memory pressure handler currently discards view snapshots and prewarmed processes.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebMemoryPressureHandlerCocoa.h: Renamed from Source/WebKit/UIProcess/ios/WebMemoryPressureHandlerIOS.h.
        * UIProcess/Cocoa/WebMemoryPressureHandlerCocoa.mm: Renamed from Source/WebKit/UIProcess/ios/WebMemoryPressureHandlerIOS.mm.
        (WebKit::installMemoryPressureHandler):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize):
        * WebKit.xcodeproj/project.pbxproj:

2018-10-01  Sihui Liu  <sihui_liu@apple.com>

        Fix Internal iOS Build after r236690
        https://bugs.webkit.org/show_bug.cgi?id=190171

        Reviewed by Alex Christensen.

        * Platform/ExtraPrivateSymbolsForTAPI.h:

2018-10-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add SPI to customize the input accessory view when focusing an element
        https://bugs.webkit.org/show_bug.cgi?id=190152
        <rdar://problem/42754975>

        Reviewed by Dan Bernstein.

        Adds SPI on WKFormInputSession to customize the input accessory view, alongside the input view. See below for
        more details.

        Test: KeyboardInputTests.CustomInputViewAndInputAccessoryView

        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession customInputAccessoryView]):
        (-[WKFormInputSession setCustomInputAccessoryView:]):

        Reload input views when the custom input accessory view changes.

        (-[WKContentView requiresAccessoryView]):

        If a custom input accessory view is specified, return YES.

        (-[WKContentView inputAccessoryView]):

        Return the custom input accessory view if present, and fall back to the default web form accessory view.

2018-10-01  Sihui Liu  <sihui_liu@apple.com>

        Remove StorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=189975

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * Configurations/Storage-OSX-sandbox.entitlements: Removed.
        * Configurations/StorageService.xcconfig: Removed.
        * Configurations/WebKit.xcconfig:
        * DerivedSources.make:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * Shared/ProcessExecutablePath.h:
        * Shared/Storage/StorageProcessCreationParameters.cpp: Removed.
        * Shared/Storage/StorageProcessCreationParameters.h: Removed.
        * Shared/glib/ProcessExecutablePathGLib.cpp:
        (WebKit::executablePathOfStorageProcess): Deleted.
        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * StorageProcess/EntryPoint/mac/XPCService/StorageService/Info.plist: Removed.
        * StorageProcess/EntryPoint/mac/XPCService/StorageServiceEntryPoint.mm: Removed.
        * StorageProcess/EntryPoint/unix/StorageProcessMain.cpp: Removed.
        * StorageProcess/EntryPoint/win/StorageProcessMain.cpp: Removed.
        * StorageProcess/StorageProcess.cpp: Removed.
        * StorageProcess/StorageProcess.h: Removed.
        * StorageProcess/StorageProcess.messages.in: Removed.
        * StorageProcess/StorageToWebProcessConnection.cpp: Removed.
        * StorageProcess/StorageToWebProcessConnection.h: Removed.
        * StorageProcess/StorageToWebProcessConnection.messages.in: Removed.
        * StorageProcess/glib/StorageProcessMainGLib.cpp: Removed.
        * StorageProcess/ios/StorageProcessIOS.mm: Removed.
        * StorageProcess/mac/StorageProcessMac.mm: Removed.
        * StorageProcess/mac/com.apple.WebKit.Storage.sb.in: Removed.
        * StorageProcess/unix/StorageProcessMainUnix.h: Removed.
        * StorageProcess/win/StorageProcessMainWin.cpp: Removed.
        * StorageProcess/win/StorageProcessMainWin.h: Removed.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextTerminateStorageProcess): Deleted.
        (WKContextGetDatabaseProcessIdentifier): Deleted.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _terminateStorageProcess]): Deleted.
        (-[WKProcessPool _storageProcessIdentifier]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::processName):
        * UIProcess/Storage/StorageProcessProxy.cpp: Removed.
        * UIProcess/Storage/StorageProcessProxy.h: Removed.
        * UIProcess/Storage/StorageProcessProxy.messages.in: Removed.
        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::storageProcessDidCrash): Deleted.
        * UIProcess/WebContextClient.h:
        * UIProcess/WebContextSupplement.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendMemoryPressureEvent):
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore): Deleted.
        (WebKit::WebProcessPool::getStorageProcessConnection): Deleted.
        (WebKit::WebProcessPool::storageProcessCrashed): Deleted.
        (WebKit::WebProcessPool::storageProcessIdentifier): Deleted.
        (WebKit::WebProcessPool::terminateStorageProcessForTesting): Deleted.
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToStorageProcess): Deleted.
        (WebKit::WebProcessPool::sendToStorageProcessRelaunchingIfNecessary): Deleted.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getStorageProcessConnection): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        (WebKit::WebsiteDataStore::storageProcessParameters): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        * WebProcess/Storage/WebToStorageProcessConnection.cpp: Removed.
        * WebProcess/Storage/WebToStorageProcessConnection.h: Removed.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcess::webToStorageProcessConnectionClosed): Deleted.
        (WebKit::WebProcess::ensureWebToStorageProcessConnection): Deleted.
        * WebProcess/WebProcess.h:
        * webkitglib-symbols.map:

2018-10-01  David Quesada  <david_quesada@apple.com>

        Add missing Objective-C versions of downloads SPI
        https://bugs.webkit.org/show_bug.cgi?id=190149
        rdar://problem/44915592

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _downloadURLRequest:]):
        (-[WKProcessPool _resumeDownloadFromData:path:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload resumeData]):
        * UIProcess/API/Cocoa/_WKDownloadInternal.h:
        * UIProcess/Cocoa/DownloadClient.mm:
            Move the DownloadProxy's WrapperTraits out of DownloadClient, and into the internal
            header so it can be used from other classes (i.e. WKProcessPool here).

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        Fix internal build after r236665
        https://bugs.webkit.org/show_bug.cgi?id=189850

        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-10-01  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import a JS CBOR coder
        https://bugs.webkit.org/show_bug.cgi?id=189877
        <rdar://problem/44701124>

        Reviewed by Chris Dumez.

        Update MockWebAuthenticationConfiguration to have userCertificateBase64 and intermediateCACertificateBase64
        as Local's memeber such that tests can pass those certificates to MockLocalConnection instead of letting it
        holds some static ones.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        (WebKit::MockLocalConnection::getAttestation const):
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h:

2018-10-01  Chris Dumez  <cdumez@apple.com>

        Regression(r236512): http/tests/navigation/keyboard-events-during-provisional-navigation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190052

        Reviewed by Ryosuke Niwa.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendMessage):
        * Platform/IPC/Connection.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePagePostMessageIgnoringFullySynchronousMode):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postMessageIgnoringFullySynchronousMode):
        * WebProcess/WebPage/WebPage.h:

2018-10-01  Daniel Bates  <dabates@apple.com>

        [iOS] Special keys are misidentified in DOM keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=189974

        Reviewed by Wenson Hsieh.

        Take the key code of WebEvent to be the key code for the new WebKeyboardEvent verbatim
        now that we normalize the character strings of the WebEvent to account for the special
        UIKit input strings.

        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebKeyboardEvent):

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        Fix an internal build after r236665
        https://bugs.webkit.org/show_bug.cgi?id=189850

        * WebKit.xcodeproj/project.pbxproj:
        Make WKNSURLAuthenticationChallenge.h a private header.

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        URL should not use TextEncoding internally
        https://bugs.webkit.org/show_bug.cgi?id=190111

        Reviewed by Andy Estes.

        * UIProcess/WebInspectorProxy.cpp:

2018-10-01  Jeremy Jones  <jeremyj@apple.com>

        Unify implementation in VideoFullscreenInterfaceAVKit
        https://bugs.webkit.org/show_bug.cgi?id=190091
        rdar://problem/44734523

        Reviewed by Jer Noble.

        Unified code in VideoFullscreenInterfaceAVKit now that new code path is proven and include
        any changes that had been made in the old path.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::supportsVideoFullscreenStandby const):
        (WebKit::VideoFullscreenManager::didSetupFullscreen):
        (WebKit::VideoFullscreenManager::didExitFullscreen):

2018-10-01  Daniel Bates  <dabates@apple.com>

        [iOS] Wrong key event may be sent to UIKit
        https://bugs.webkit.org/show_bug.cgi?id=189992

        Reviewed by Simon Fraser.

        Retain a clone of a received UIEvent if it is for a hardware key event so as to ensure that we
        notify the UIKit keyboard code of the correct keyboard event.

        Currently the UIProcess retains the UIEvent associated with a keyboard event so as to defer
        notifying the UIKit keyboard code (via -_handleKeyUIEvent) about a received keyboard event until
        after the WebProcess has processed the raw key event. If this UIEvent is for a hardware keyboard
        event then it is not sufficient to retain it to preserve its value because UIKit uses a singleton
        UIEvent for all hardware keyboard events ;=> its value will be clobbered as each hardware keyboard
        event is received. Instead we need to explicitly clone a UIEvent for a hardware key event before
        retaining it.

        * Platform/spi/ios/UIKitSPI.h: Forward declare SPI.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView handleKeyEvent:]): Clone the UIEvent if it is for a hardware key event.

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        Deprecate ObjC SPI in Deprecated Xcode group
        https://bugs.webkit.org/show_bug.cgi?id=189850

        Reviewed by Andy Estes.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::typeFromObject):
        (WebKit::ObjCObjectGraph::encode):
        (WebKit::ObjCObjectGraph::decode):
        * UIProcess/API/Cocoa/WKBrowsingContextController.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (didStartProvisionalNavigation):
        (didReceiveServerRedirectForProvisionalNavigation):
        (didFailProvisionalNavigation):
        (didCommitNavigation):
        (didFinishNavigation):
        (didFailNavigation):
        (canAuthenticateAgainstProtectionSpace):
        (didReceiveAuthenticationChallenge):
        (processDidCrash):
        (setUpPagePolicyClient):
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.h:
        * UIProcess/API/Cocoa/WKBrowsingContextGroupInternal.h:
        * UIProcess/API/Cocoa/WKBrowsingContextHistoryDelegate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextLoadDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:
        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.h:
        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
        (-[WKNSURLAuthenticationChallengeSender cancelAuthenticationChallenge:]):
        (-[WKNSURLAuthenticationChallengeSender continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WKNSURLAuthenticationChallengeSender useCredential:forAuthenticationChallenge:]):
        (-[WKNSURLAuthenticationChallengeSender performDefaultHandlingForAuthenticationChallenge:]):
        (-[WKNSURLAuthenticationChallengeSender rejectProtectionSpaceAndContinueWithChallenge:]):
        * UIProcess/API/Cocoa/WKNavigationData.h:
        * UIProcess/API/Cocoa/WKNavigationDataInternal.h:
        * UIProcess/API/Cocoa/WKProcessGroup.h:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (didCreateConnection):
        (getInjectedBundleInitializationUserData):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        * UIProcess/API/Cocoa/WKTypeRefWrapper.h:
        * UIProcess/API/Cocoa/WKView.h:
        (WK_CLASS_DEPRECATED_WITH_REPLACEMENT):
        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/Gamepad/mac/UIGamepadProviderMac.mm:
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):

2018-10-01  Youenn Fablet  <youenn@apple.com>

        [macOS Sierra] Layout Test http/wpt/cache-storage/cache-put-keys.https.any.worker.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=184204

        Reviewed by Chris Dumez.

        NetworkCache::Storage by default limits the length to read to 1500 milliseconds.
        This is good for the HTTP cache since networking might be faster.
        It does not work for DOM cache which needs to get these resources even if it takes a long time.

        Since this is disabled by a Mode::Testing option, use it for DOMCache after renaming it to Mode::AvoidRandomness.

        Add a bunch of release logging to help debugging error cases.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::retrieveOriginFromDirectory):
        (WebKit::CacheStorage::Caches::initialize):
        (WebKit::CacheStorage::Caches::writeCachesToDisk):
        (WebKit::CacheStorage::Caches::readRecord):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::open):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::Storage::shrinkIfNeeded):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2018-10-01  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] Remove WebKit2InspectorGResourceBundle.xml
        https://bugs.webkit.org/show_bug.cgi?id=190132

        Reviewed by Michael Catanzaro.

        * UIProcess/API/wpe/WebKit2InspectorGResourceBundle.xml: Removed.
        This is unused since legacy INSPECTOR_SERVER implementation has
        been removed in r217924.

2018-09-30  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clean up RealtimeMediaSource settings change handling
        https://bugs.webkit.org/show_bug.cgi?id=189998
        <rdar://problem/44797884>

        Reviewed by Youenn Fablet.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::setSettings):

2018-09-30  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Use display-specific capture factories
        https://bugs.webkit.org/show_bug.cgi?id=190043
        <rdar://problem/44834412>

        Reviewed by Youenn Fablet.

        * WebProcess/cocoa/UserMediaCaptureManager.h:

2018-09-29  Commit Queue  <commit-queue@webkit.org>

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

        Caused various eventSender tests, including fast/css/pseudo-
        active-style-sharing*, to fail (Requested by smfr on #webkit).

        Reverted changeset:

        "Regression(r236512): http/tests/navigation/keyboard-events-
        during-provisional-navigation.html is flaky"
        https://bugs.webkit.org/show_bug.cgi?id=190052
        https://trac.webkit.org/changeset/236631

2018-09-29  Chris Dumez  <cdumez@apple.com>

        [PSON] Deal with the drawing area potentially being null in WebFrameLoaderClient::transitionToCommittedForNewPage()
        https://bugs.webkit.org/show_bug.cgi?id=190084
        <rdar://problem/44844561>

        Reviewed by Antti Koivisto.

        Deal with the drawing area potentially being null in WebFrameLoaderClient::transitionToCommittedForNewPage(), as a
        result of calling WebPage::tearDownDrawingAreaForSuspend().

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):

2018-09-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        No DOM API to instantiate an attachment for an img element
        https://bugs.webkit.org/show_bug.cgi?id=189934
        <rdar://problem/44743222>

        Reviewed by Ryosuke Niwa.

        Makes some adjustments to support using _WKAttachment's file wrapper to change the contents of any image element
        hosting the attachment in its shadow root. To do this, we add some plumbing to allow the UI process to update an
        attachment element's enclosing image with data from its file wrapper.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::isEmpty const):
        (API::Attachment::enclosingImageData const):

        Helper method that creates a SharedBuffer representing image data for the attachment. Only returns a non-null
        value for attachment elements that are enclosed within an image.

        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::enclosingImageData const):
        (API::Attachment::isEmpty const):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _attachmentForIdentifier:]):

        Add new SPI to request a _WKAttachment for a given unique identifier. Currently, this is only used for testing.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::platformRegisterAttachment):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateAttachmentAttributes):
        (WebKit::WebPageProxy::registerAttachmentIdentifier):
        (WebKit::WebPageProxy::didInsertAttachmentWithIdentifier):

        Plumb whether or not the attachment is enclosed by an image from the web process to the UI process.

        (WebKit::WebPageProxy::didRemoveAttachmentWithIdentifier):
        (WebKit::WebPageProxy::didInsertAttachment): Deleted.
        (WebKit::WebPageProxy::didRemoveAttachment):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerAttachmentIdentifier):
        (WebKit::WebEditorClient::didInsertAttachmentWithIdentifier):

        Update attachment attributes after inserting an attachment. This ensures that an attachment that was created and
        later inserted via script into the document will be synced with state in the UI process, if the client has
        changed the contents of the attachment.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateAttachmentAttributes):

        Plumb attachment data from the UI process to the web process.

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

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Regression(r236512): http/tests/navigation/keyboard-events-during-provisional-navigation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190052

        Reviewed by Ryosuke Niwa.

        Introduce a new IPC::SendOption indicating that the IPC should always be sent asynchronously,
        even if the connection is in fully synchronous mode. This is used by WebKitTestRunner for
        all text outputting (e.g. console.log) is asynchronous, and thus in order.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendMessage):
        * Platform/IPC/Connection.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePagePostMessageIgnoringFullySynchronousMode):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postMessageIgnoringFullySynchronousMode):
        * WebProcess/WebPage/WebPage.h:

2018-09-28  John Wilander  <wilander@apple.com>

        Skip debug assertion in ResourceLoadStatisticsMemoryStore::recursivelyGetAllDomainsThatHaveRedirectedToThisDomain()
        https://bugs.webkit.org/show_bug.cgi?id=190097
        <rdar://problem/44877080>

        Reviewed by Chris Dumez.

        The change in https://bugs.webkit.org/show_bug.cgi?id=190055 causes a
        re-classification that may trigger a debug assertion in
        ResourceLoadStatisticsMemoryStore::recursivelyGetAllDomainsThatHaveRedirectedToThisDomain().
        We should skip the assertion for statistics model version 14 to avoid
        this.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::recursivelyGetAllDomainsThatHaveRedirectedToThisDomain const):

2018-09-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: crash in InspectorNetworkAgent::didReceiveResponse when loading denied x-frame resources
        https://bugs.webkit.org/show_bug.cgi?id=190046

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        Send the sanitized `ResourceResponse` with the message so WebInspector is able to access it.

        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Network/WebResourceLoader.messages.in:
        (WebKit::WebResourceLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):

2018-09-28  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Polish WebAuthN auto-test environment
        https://bugs.webkit.org/show_bug.cgi?id=189283
        <rdar://problem/44117828>

        Reviewed by Chris Dumez.

        This patch changes MockWebAuthenticationConfiguration.local to optional such that tests can express
        absence of local authenticators.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        (WebKit::MockLocalConnection::getUserConsent const):
        (WebKit::MockLocalConnection::getAttestation const):
        * UIProcess/WebAuthentication/Mock/MockLocalService.cpp:
        (WebKit::MockLocalService::platformStartDiscovery const):
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h:

2018-09-28  Jer Noble  <jer.noble@apple.com>

        Refactoring: eliminate raw pointer usage in Fullscreen code
        https://bugs.webkit.org/show_bug.cgi?id=188747
        <rdar://problem/43541164>

        Reviewed by Alex Christensen.

        Adopt those Ref and WeakPtr changes made in WebCore.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionModelContext::addClient):
        (WebKit::PlaybackSessionModelContext::removeClient):
        (WebKit::PlaybackSessionModelContext::durationChanged):
        (WebKit::PlaybackSessionModelContext::currentTimeChanged):
        (WebKit::PlaybackSessionModelContext::bufferedTimeChanged):
        (WebKit::PlaybackSessionModelContext::rateChanged):
        (WebKit::PlaybackSessionModelContext::seekableRangesChanged):
        (WebKit::PlaybackSessionModelContext::canPlayFastReverseChanged):
        (WebKit::PlaybackSessionModelContext::audioMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionModelContext::legibleMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionModelContext::audioMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionModelContext::legibleMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionModelContext::externalPlaybackChanged):
        (WebKit::PlaybackSessionModelContext::wirelessVideoPlaybackDisabledChanged):
        (WebKit::PlaybackSessionModelContext::mutedChanged):
        (WebKit::PlaybackSessionModelContext::volumeChanged):
        (WebKit::PlaybackSessionModelContext::pictureInPictureActiveChanged):
        (WebKit::PlaybackSessionManagerProxy::invalidate):
        (WebKit::PlaybackSessionManagerProxy::createModelAndInterface):
        (WebKit::PlaybackSessionManagerProxy::removeClientForContext):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::create):
        (WebKit::VideoFullscreenModelContext::VideoFullscreenModelContext):
        (WebKit::VideoFullscreenModelContext::addClient):
        (WebKit::VideoFullscreenModelContext::removeClient):
        (WebKit::VideoFullscreenModelContext::willEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::didEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::failedToEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::willExitPictureInPicture):
        (WebKit::VideoFullscreenModelContext::didExitPictureInPicture):
        (WebKit::VideoFullscreenManagerProxy::invalidate):
        (WebKit::VideoFullscreenManagerProxy::createModelAndInterface):
        (WebKit::VideoFullscreenManagerProxy::removeClientForContext):
        (WebKit::VideoFullscreenModelContext::~VideoFullscreenModelContext): Deleted.
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface):
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController _togglePiPAction:]):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (WebKit::WKFullScreenWindowControllerVideoFullscreenModelClient::setInterface):
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionInterfaceContext::PlaybackSessionInterfaceContext):
        (WebKit::PlaybackSessionManager::~PlaybackSessionManager):
        (WebKit::PlaybackSessionManager::createModelAndInterface):
        (WebKit::PlaybackSessionManager::removeContext):
        (WebKit::PlaybackSessionInterfaceContext::~PlaybackSessionInterfaceContext): Deleted.
        * WebProcess/cocoa/VideoFullscreenManager.h:
        (WebKit::VideoFullscreenInterfaceContext::create):
        (WebKit::VideoFullscreenInterfaceContext::createWeakPtr):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenInterfaceContext::VideoFullscreenInterfaceContext):
        (WebKit::VideoFullscreenManager::~VideoFullscreenManager):
        (WebKit::VideoFullscreenManager::createModelAndInterface):
        (WebKit::VideoFullscreenManager::removeContext):

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Drop support for cross-origin-window-policy header
        https://bugs.webkit.org/show_bug.cgi?id=190081

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::frameBecameRemote):

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Do not do automatic process prewarming while under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=190082
        <rdar://problem/39771424>

        Reviewed by Geoffrey Garen.

        Do not do automatic process prewarming while under memory pressure and
        also terminate any prewarmed process when receiving a memory warning.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::prewarmProcess):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        (WebKit::WebProcessPool::handleMemoryPressureWarning):
        * UIProcess/WebProcessPool.h:
        * UIProcess/ios/WebMemoryPressureHandlerIOS.mm:
        (WebKit::installMemoryPressureHandler):

2018-09-28  Daniel Bates  <dabates@apple.com>

        [iOS] Allow programmatic focus when hardware keyboard is attached
        https://bugs.webkit.org/show_bug.cgi?id=190017
        <rdar://problem/42270463>

        Reviewed by Wenson Hsieh.

        Make the experience of using iOS with a hardware keyboard more desktop-like by allowing
        programmatic focusing of editable elements.

        * Platform/spi/ios/UIKitSPI.h: Forward declare SPI.
        * Shared/NativeWebKeyboardEvent.h:
        * Shared/ios/NativeWebKeyboardEventIOS.mm:
        (WebKit::isInHardwareKeyboardMode): Returns whether we are in hardware keyboard mode. In DumpRenderTree
        and WebKitTestRunner this function always returns false to keep test results deterministic.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        Allow starting an input session if we are in hardware keyboard mode.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const): Send the full editor state if we are in hardware
        keyboard mode regardless of whether layout has been performed so that UIProcess can update UI,
        including the position of the caret, immediately.

2018-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Rename createMarkup to serializePreservingVisualAppearance
        https://bugs.webkit.org/show_bug.cgi?id=190086

        Reviewed by Wenson Hsieh.

        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection):

2018-09-28  Commit Queue  <commit-queue@webkit.org>

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

        caused three API test timeouts (Requested by jernoble on
        #webkit).

        Reverted changeset:

        "Refactoring: eliminate raw pointer usage in Fullscreen code"
        https://bugs.webkit.org/show_bug.cgi?id=188747
        https://trac.webkit.org/changeset/236605

2018-09-28  Jer Noble  <jer.noble@apple.com>

        Refactoring: eliminate raw pointer usage in Fullscreen code
        https://bugs.webkit.org/show_bug.cgi?id=188747
        <rdar://problem/43541164>

        Reviewed by Alex Christensen.

        Adopt those Ref and WeakPtr changes made in WebCore.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionModelContext::addClient):
        (WebKit::PlaybackSessionModelContext::removeClient):
        (WebKit::PlaybackSessionModelContext::durationChanged):
        (WebKit::PlaybackSessionModelContext::currentTimeChanged):
        (WebKit::PlaybackSessionModelContext::bufferedTimeChanged):
        (WebKit::PlaybackSessionModelContext::rateChanged):
        (WebKit::PlaybackSessionModelContext::seekableRangesChanged):
        (WebKit::PlaybackSessionModelContext::canPlayFastReverseChanged):
        (WebKit::PlaybackSessionModelContext::audioMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionModelContext::legibleMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionModelContext::audioMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionModelContext::legibleMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionModelContext::externalPlaybackChanged):
        (WebKit::PlaybackSessionModelContext::wirelessVideoPlaybackDisabledChanged):
        (WebKit::PlaybackSessionModelContext::mutedChanged):
        (WebKit::PlaybackSessionModelContext::volumeChanged):
        (WebKit::PlaybackSessionModelContext::pictureInPictureActiveChanged):
        (WebKit::PlaybackSessionManagerProxy::invalidate):
        (WebKit::PlaybackSessionManagerProxy::createModelAndInterface):
        (WebKit::PlaybackSessionManagerProxy::removeClientForContext):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::create):
        (WebKit::VideoFullscreenModelContext::VideoFullscreenModelContext):
        (WebKit::VideoFullscreenModelContext::addClient):
        (WebKit::VideoFullscreenModelContext::removeClient):
        (WebKit::VideoFullscreenModelContext::willEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::didEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::failedToEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::willExitPictureInPicture):
        (WebKit::VideoFullscreenModelContext::didExitPictureInPicture):
        (WebKit::VideoFullscreenManagerProxy::invalidate):
        (WebKit::VideoFullscreenManagerProxy::createModelAndInterface):
        (WebKit::VideoFullscreenManagerProxy::removeClientForContext):
        (WebKit::VideoFullscreenModelContext::~VideoFullscreenModelContext): Deleted.
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface):
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController _togglePiPAction:]):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (WebKit::WKFullScreenWindowControllerVideoFullscreenModelClient::setInterface):
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionInterfaceContext::PlaybackSessionInterfaceContext):
        (WebKit::PlaybackSessionManager::~PlaybackSessionManager):
        (WebKit::PlaybackSessionManager::createModelAndInterface):
        (WebKit::PlaybackSessionManager::removeContext):
        (WebKit::PlaybackSessionInterfaceContext::~PlaybackSessionInterfaceContext): Deleted.
        * WebProcess/cocoa/VideoFullscreenManager.h:
        (WebKit::VideoFullscreenInterfaceContext::create):
        (WebKit::VideoFullscreenInterfaceContext::createWeakPtr):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenInterfaceContext::VideoFullscreenInterfaceContext):
        (WebKit::VideoFullscreenManager::~VideoFullscreenManager):
        (WebKit::VideoFullscreenManager::createModelAndInterface):
        (WebKit::VideoFullscreenManager::removeContext):

2018-09-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] error C2027: use of undefined type 'WTF::EnumTraits<E>' while compiling AuthenticationChallengeProxy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=190071

        Unreviewed build fix for WinCairo port.

        AuthenticationChallengeDisposition was not defined in this file.

        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp: Include "AuthenticationChallengeDisposition.h".

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Use enum class in createMarkup arguments
        https://bugs.webkit.org/show_bug.cgi?id=190028

        Reviewed by Wenson Hsieh.

        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection):

2018-09-27  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Non-redirected top frame navigation should not get captured in statistics
        https://bugs.webkit.org/show_bug.cgi?id=190055
        <rdar://problem/44843460>

        Reviewed by Chris Dumez.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
            Bumped the statisticsModelVersion to 14 to be able to
            correct legacy statistics.
        (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation):
            Now skips capture if it's the main frame.

2018-09-27  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Allow access to VoiceServices features needed for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=190019
        <rdar://problem/43621111>

        Reviewed by Chris Fleizach.

        Revise the sandbox to allow access to relevant WebSpeech features.

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

2018-09-27  Sihui Liu  <sihui_liu@apple.com>

        Fix IOSMAC build
        https://bugs.webkit.org/show_bug.cgi?id=190021

        Reviewed by Alex Christensen.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::parentProcessHasServiceWorkerEntitlement const):

2018-09-27  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove temporary compatibility fix for auto-dismiss popups
        https://bugs.webkit.org/show_bug.cgi?id=189980
        <rdar://problem/44780645>

        Reviewed by Alex Christensen.

        The change in https://bugs.webkit.org/show_bug.cgi?id=183620 was a temporary
        compatibility fix as explained in:
        https://webkit.org/blog/8311/intelligent-tracking-prevention-2-0/. We should
        remove it.

        These changes remove the parameter isTriggeredByUserGesture since it's no longer needed.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236557.

        Really roll out r236557 this time because it breaks internal
        builds.

        Reverted changeset:

        "Add VP8 support to WebRTC"
        https://bugs.webkit.org/show_bug.cgi?id=189976
        https://trac.webkit.org/changeset/236557

2018-09-27  Youenn Fablet  <youenn@apple.com>

        Add VP8 support to WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=189976

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2018-09-27  Chris Dumez  <cdumez@apple.com>

        The WebContent process should not process incoming IPC while waiting for a sync IPC reply
        https://bugs.webkit.org/show_bug.cgi?id=184183
        <rdar://problem/36800576>

        Reviewed by Ryosuke Niwa.

        In recent years, we have experienced re-entrancy bugs/crashes in WebCore due to the WebContent process
        processing unrelated incoming synchronous IPC when waiting for a reply to one of its synchronous IPC
        to another process. In order to deal with this, we introduced a DoNotProcessIncomingMessagesWhenWaitingForSyncReply
        IPC::SendOption which we used on sendSync() calls where we knew re-entering would be unsafe. However,
        it turns out to be needed for a lot of the WebProcess's sync IPC and it is error-prone. In order to
        address the issue, we've decided to update the WebContent process behavior so that it processes all its
        IPC in order (not matter if synchronous or not) and thus so that we never dispatch unrelated synchronous
        IPC while waiting for a synchronous IPC reply, expect in cases where it would cause a deadlock.

        As a result, this patch also drops support for the DoNotProcessIncomingMessagesWhenWaitingForSyncReply
        IPC::SendOption which is no longer needed and has some code complexity.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::waitForSyncReply):
        * Platform/IPC/Connection.h:
        (IPC::Connection::sendSync):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::WebProcessConnection):
        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::StorageToWebProcessConnection):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::responseFromResourceLoadIdentifier):
        (WebKit::WebLoaderStrategy::intermediateLoadInformationFromResourceLoadIdentifier):
        (WebKit::WebLoaderStrategy::networkMetricsFromResourceLoadIdentifier):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::destroy):
        (WebKit::PluginProxy::supportsSnapshotting const):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::populatePluginCache):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::savePlatformDataToCachedFrame):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::rootViewToScreen):
        * WebProcess/WebProcess.cpp:
        (WebKit::getNetworkProcessConnection):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-09-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2018-09-26  James Savage  <james.savage@apple.com>

        Allow override of viewport configuration.
        https://bugs.webkit.org/show_bug.cgi?id=188772.
        <rdar://problem/43538892>.

        Reviewed by Simon Fraser.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setShouldIgnoreMetaViewport:]):
        (-[WKPreferences _shouldIgnoreMetaViewport]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::viewportPropertiesDidChange): If we are ignoring the
        <meta> viewport, short circuit calling setViewportArguments() and do not
        do any updates.
        (WebKit::WebPage::didCommitLoad): Ditto.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetViewportDefaultConfiguration): Select the default
        configuration based on UIProcess setting.

2018-09-26  Chris Dumez  <cdumez@apple.com>

        Regression(r236512): WKWebViewCandidateTests.SoftSpaceReplacementAfterCandidateInsertionWithoutReplacement API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=190007

        Reviewed by Alex Christensen.

        Drop DispatchMessageEvenWhenWaitingForSyncReply SendOption from EditorStateChanged IPC calls to restore
        pre-r236512 behavior. Before r236512, this option had no effect on IPC from the WebContent to the UIProcess
        because the m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage flag was set
        on that IPC::Connection. However, after r236512, m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage
        is no longer set on the connection, and the DispatchMessageEvenWhenWaitingForSyncReply SendOption was
        causing this message to get processed out of order with regards to other async IPC, thus causing the
        API test failure.

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

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        Fix UAF after r236463
        https://bugs.webkit.org/show_bug.cgi?id=190011

        Reviewed by Chris Dumez.

        I had removed an early return in NetworkResourceLoader::continueDidReceiveResponse.
        Reading the (probably) null m_responseCompletionHandler was reading after the object had been destroyed.

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

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Selection should work across shadow boundary when initiated by a mouse drag
        https://bugs.webkit.org/show_bug.cgi?id=151380
        <rdar://problem/24363872>

        Reviewed by Antti Koivisto.

        Added SelectionAcrossShadowBoundariesEnabled as an internal debug feature,
        and moved CSSCustomPropertiesAndValuesEnabled to where other experimental features are located.

        * Shared/WebPreferences.yaml:

2018-09-26  Chris Dumez  <cdumez@apple.com>

        Unreviewed, apply post-landing review comments after r236512.

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

2018-09-26  Chris Dumez  <cdumez@apple.com>

        UIProcess should process incoming sync IPC from WebProcess when waiting for a sync IPC reply from it
        https://bugs.webkit.org/show_bug.cgi?id=189927

        Reviewed by Geoffrey Garen.

        UIProcess should process incoming sync IPC from WebProcess when waiting for a sync IPC reply from it
        in order to avoid deadlocks. This is not an issue currently because the WebProcess does process
        incoming sync IPC when waiting for a sync IPC reply. However, we plan to change this in the future
        in order to avoid bugs caused by re-entering WebCore at unsafe times.

        The reason the UIProcess previously did not do out of order sync IPC process was to avoid processing
        a synchronous policy decision IPC for a frameID it did not know about yet, due to the DidCreateMainFrame /
        DidCreateSubframe IPC messages being asynchronous. To address this issue, the decidePolicyForNavigationActionSync
        IPC handler now calls didCreateMainFrame() / didCreateSubframe() as needed if it does not know about
        the frame yet. Note that synchronous policy decisions are rare and are currently only needed by initial
        about:blank and fragment navigations.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame):
        (WebKit::WebFrame::createSubframe):
        Drop DispatchMessageEvenWhenWaitingForSyncReply SendOption when sending the
        DidCreateMainFrame / DidCreateSubframe IPC. Previously, this SendOption has
        no effect because the IPC::Connection would have the
        m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage
        flag set to true. However, now that we stop setting this flag on the IPC
        connection from the WebProcess to the UIProcess, it would lead to those
        IPC messages getting processed out of order with regards to the
        DecidePolicyForNavigationAsync asynchronous IPC. DidCreateMainFrame would
        sometimes get processed *after* the DecidePolicyForNavigationAsync IPC
        and we would not know about the frameID yet.

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

2018-09-26  Antti Koivisto  <antti@apple.com>

        REGRESSION (PSON): White or Black flash occurs when process swapping on navigation on iOS
        https://bugs.webkit.org/show_bug.cgi?id=189695
        <rdar://problem/44551146>

        Reviewed by Simon Fraser.

        Freeze the layers on UI process side during process swap.

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

        Shared work of _processWillSwap and _processDidExit.

        (-[WKWebView _processWillSwap]):
        (-[WKWebView _processDidExit]):

        Split into two functions. Don't reset scroll position and similar when doing navigation swap.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::detachRemoteLayerTreeHost):

        Add to way to detach RemoteLayerTreeHost from the drawing area. Inert RemoteLayerTreeHost will host
        the frozen layers.

        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::hideContentUntilPendingUpdate):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::hideContentUntilAnyUpdate):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::prepareForAppSuspension):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::hasVisibleContent const):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::layerWithIDForTesting const):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::RemoteLayerTreeHost):
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::animationDidStart):
        (WebKit::RemoteLayerTreeHost::animationDidEnd):
        (WebKit::RemoteLayerTreeHost::detachFromDrawingArea):

        Clear the DrawingArea backpointer.

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

        Detach and save the current RemoteLayerTreeHost on navigation swap.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::processWillSwap):

        Avoid reseting the scroll position.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer):

        Drop the frozen layers after setting the new root layer.

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

        For completeness do this also on Mac (where remote layers are currently not used).

2018-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        Make frame flattening an internal debug feature
        https://bugs.webkit.org/show_bug.cgi?id=189984

        Reviewed by Simon Fraser.

        Made frame flattening a runtime switchable from internal debug menu.

        To avoid having to enumerate three distinct values in the settings, made it a boolean flag in WKPreference.
        That's what's exposd as an API anyway.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetFrameFlatteningEnabled):
        (WKPreferencesGetFrameFlatteningEnabled):
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_get_enable_frame_flattening):
        (webkit_settings_set_enable_frame_flattening):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2018-09-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add Mac window capture source
        https://bugs.webkit.org/show_bug.cgi?id=189958
        <rdar://problem/44767616>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::beginMonitoringCaptureDevices): Sync with webcore prefs before listening
        to device changes so we listen on the correct devices.

2018-09-25  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r236471 and r236480.

        Seems to be causing some flaky crashes

        Reverted changesets:

        "UIProcess should process incoming sync IPC from WebProcess
        when waiting for a sync IPC reply from it"
        https://bugs.webkit.org/show_bug.cgi?id=189927
        https://trac.webkit.org/changeset/236471

        "Revert some of the changes in r236471"
        https://bugs.webkit.org/show_bug.cgi?id=189973
        https://trac.webkit.org/changeset/236480

2018-09-25  Conrad Shultz  <conrad_shultz@apple.com>

        Enable customization of the file upload panel
        https://bugs.webkit.org/show_bug.cgi?id=189970

        Reviewed by Wenson Hsieh.

        With this change, platform implementations can override, or implement in a category,
        +[WKContentView _fileUploadPanelClass] as needed.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showRunOpenPanel:resultListener:]):

2018-09-25  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r236420 and r236458.

        This change is not fully correct

        Reverted changesets:

        "Do not do early processing of incoming sync IPC unless we're
        waiting for a sync IPC reply"
        https://bugs.webkit.org/show_bug.cgi?id=186941
        https://trac.webkit.org/changeset/236420

        "Unreviewed, update bug number of http/tests/misc/blob-
        size.html crash on Windows"
        https://trac.webkit.org/changeset/236458

2018-09-25  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a quick fix after r236481.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setMockWebAuthenticationConfiguration):
        Add an early return, so we don't end up with setting MockWebAuthenticationConfiguration twice.

2018-09-25  John Wilander  <wilander@apple.com>

        Change from HAVE(CFNETWORK_STORAGE_PARTITIONING) to ENABLE(RESOURCE_LOAD_STATISTICS)
        https://bugs.webkit.org/show_bug.cgi?id=189959
        <rdar://problem/44767642>

        Reviewed by Chris Dumez.

        We no longer make use of CFNetwork's cookie partitioning so we should
        change the compile-time flag to something that makes sense. This should
        also make it easier/cleaner for other ports.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForFrame):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applyCookieBlockingPolicy):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        (WebKit::WebResourceLoadStatisticsStore::callRemoveDomainsHandler):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::networkProcessDidCrash):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchWillChangeDocument):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-09-25  Philippe Normand  <pnormand@igalia.com>

        [WPE] Export jsc_ symbols
        https://bugs.webkit.org/show_bug.cgi?id=189964

        Reviewed by Michael Catanzaro.

        * webkitglib-symbols.map: Keep jsc_* symbols as visible so they
        can be used by applications depending on WPE.

2018-09-25  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Make AuthenticatorManager
        https://bugs.webkit.org/show_bug.cgi?id=189279
        <rdar://problem/44116792>

        Reviewed by Chris Dumez.

        This patch introduces AuthenticatorManager which is the central of WebAuthentication that 1) handles
        web requests, 2) discovers authenticators, 3) manages authetnicators and 4) in the future interacts with UI.
        The lifetime of the AuthenticatorManager is managed by WebsiteDataStore such that it is almost a singleton
        per UI Process.

        1) Requests come from WebAuthenticatorCoordinatorProxy and then cached in AuthenticatorManager which will
        then distribute requests whenever a new authenticator is discovered.

        2) An ABC AuthenticatorTransportService is provided as an interface for AuthenticatorManager to invoke
        startDiscovery. Actual work will be done in corresponding derived classes, say, LocalService. LocalService
        is the one that discover attached platform authenticators, for example, TouchID or FaceID.

        Eache service is unique per AuthetnicatorManager, which means we will have at most 4 services, Local, USB,
        NFC, and BLE. The latter three will be implemented soon. Also, AuthenticatorManager serves as an observer to
        *Service, so the latter can inform the former whenever an authenticator is added or removed.

        When a new authenticator is discovered, the corresponding service will create an Authetnicator object that
        binds to the physical authenticator device through a *Connection object. There is no ABC for connection for
        now as I forsee every *Connection will be quite different. The *Connection object is the one that send/receive
        messages from the physicla device. So far, a LocalConnection is provided even though normally local authenticators
        are attached. This class is provided solely for separating UI and network traffic from LocalAuthenticator's
        request handling process. So we can override them in a mock test environment. I will talk about this in the
        next section.

        3) An ABC Authenticator is provided as an interface for AuthenticatorManager to distribute requests on. Requests
        will then be handled by the derived classes, say, LocalAuthenticator. Each authenticator object is a FSM that
        works asynchronously.

        For LocalAuthenticator, it has 4 states for MakeCredential: Init => RequestReceived => UserConsented => Attested => End,
        and 3 states for GetAssertion: Init => RequestReceived => UserConsented => End. In the transit from RequestReceived to
        UserConsented, it will invoke LocalConnection to talk to LocalAuthentication.framework that prompt users for TouchID
        or FaceID. And then the transit from UserConsented => Attested, it will invoke LocalConnection to talk to
        DeviceIdentity.framework that does Apple attestation. Most of the work are from the original LocalAuthenticator
        implementation, and this patch converts it to a FSM and simplify the callback and threading model.

        When a respond is ready, each authenticator will notify their observer which is the AuthenticatorManager.
        AuthenticatorManager will only reply to Web Process whenever there is a valid respond or a terminating error. Otherwise,
        the request will time out. I will explore the time out mechanism in a more detailed manner in Bug 189642.

        The above is a briefing of the AuthetnicatorManager architecture in functional. The asynchronous model is explained here:
        1) Since most discovery and request handling processes are asynchronous, I enforced them to be executed asyncrhonous in
        the interface of the ABC.
        2) There is no dedicated secondary threads here. However, underlying framework might decide to perform works on a dedicated
        thread and then execute the provided callback. Whenever such situation happens, the policy here is to wrap the actual callback
        into a callback that will post the actual callback back to the main thread and pass the wrapping callback to the APIs. Hence,
        weak pointers in the actual callback are guaranteed to work.
        3) Callbacks are used only if it is one way, and they are CompletionHandlers.
        4) Potential multi ways asynchronous operations are encapsulated in regarding Observer interfaces.

        Finally, let me explain how the mock test works:
        1) Mock testing is done in WebKitTestRunner instead of Internals because a considerable large portion of work is in UIProcess
        instead of WebProcess, says, the AuthenticatorManager.
        2) The basic idea is to override functionality of *Connection classes and then make them thin such that we can get the best
        possible coverage in auto tests.
        3) In order to enable layout tests to configure the Mock*Connection classes, a MockWebAuthenticationConfiguration struct is
        provided. A corresponding JS dictionary will be created by each test and passed from the TestRunner to the connection object.
        4) To bridge the above tunnel, a MockAuthenticatorManager is constructed. It is instrumented to return every error.
        5) Also, Mock*Service classes are made to mock the discovery process as well.
        6) Noted, every mock overrided methods are made thin.

        * CMakeLists.txt:
        * Configurations/WebKit.xcconfig:
        * Platform/spi/Cocoa/DeviceIdentitySPI.h: Copied from Source/WebCore/PAL/pal/spi/cocoa/DeviceIdentitySPI.h.
        * SourcesCocoa.txt:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebAuthentication/Authenticator.cpp: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        (WebKit::Authenticator::handleRequest):
        (WebKit::Authenticator::receiveRespond const):
        * UIProcess/WebAuthentication/Authenticator.h: Renamed from Source/WebCore/Modules/webauthn/cocoa/LocalAuthenticator.h.
        (WebKit::Authenticator::setObserver):
        (WebKit::Authenticator::observer const):
        (WebKit::Authenticator::requestData const):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp: Added.
        (WebKit::AuthenticatorManagerInternal::collectTransports):
        (WebKit::AuthenticatorManager::makeCredential):
        (WebKit::AuthenticatorManager::getAssertion):
        (WebKit::AuthenticatorManager::clearState):
        (WebKit::AuthenticatorManager::authenticatorAdded):
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::createService const):
        (WebKit::AuthenticatorManager::respondReceivedInternal):
        (WebKit::AuthenticatorManager::startDiscovery):
        * UIProcess/WebAuthentication/AuthenticatorManager.h: Added.
        (WebKit::AuthenticatorManager::pendingCompletionHandler):
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp: Copied from Source/WebCore/PAL/pal/spi/cocoa/DeviceIdentitySPI.h.
        (WebKit::AuthenticatorTransportService::create):
        (WebKit::AuthenticatorTransportService::createMock):
        (WebKit::AuthenticatorTransportService::AuthenticatorTransportService):
        (WebKit::AuthenticatorTransportService::startDiscovery const):
        * UIProcess/WebAuthentication/AuthenticatorTransportService.h: Copied from Source/WebCore/PAL/pal/spi/cocoa/DeviceIdentitySPI.h.
        (WebKit::AuthenticatorTransportService::observer const):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticationSoftLink.h: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.h: Copied from Source/WebCore/PAL/pal/spi/cocoa/DeviceIdentitySPI.h.
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm: Added.
        (WebKit::LocalAuthenticatorInternal::buildAuthData):
        (WebKit::LocalAuthenticatorInternal::transportsContain):
        (WebKit::LocalAuthenticatorInternal::produceHashSet):
        (WebKit::LocalAuthenticatorInternal::toVector):
        (WebKit::LocalAuthenticator::LocalAuthenticator):
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserConsented):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserConsented):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.h: Copied from Source/WebCore/PAL/pal/spi/cocoa/DeviceIdentitySPI.h.
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm: Added.
        (WebKit::LocalConnection::getUserConsent const):
        (WebKit::LocalConnection::getAttestation const):
        * UIProcess/WebAuthentication/Cocoa/LocalService.h: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        * UIProcess/WebAuthentication/Cocoa/LocalService.mm: Renamed from Source/WebCore/PAL/pal/spi/cocoa/DeviceIdentitySPI.h.
        (WebKit::LocalService::LocalService):
        (WebKit::LocalService::isAvailable):
        (WebKit::LocalService::startDiscoveryInternal const):
        (WebKit::LocalService::platformStartDiscovery const):
        (WebKit::LocalService::createLocalConnection const):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        (WebKit::MockAuthenticatorManager::MockAuthenticatorManager):
        (WebKit::MockAuthenticatorManager::createService const):
        (WebKit::MockAuthenticatorManager::respondReceivedInternal):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.h: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.h: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm: Added.
        (WebKit::MockLocalConnection::MockLocalConnection):
        (WebKit::MockLocalConnection::getUserConsent const):
        (WebKit::MockLocalConnection::getAttestation const):
        * UIProcess/WebAuthentication/Mock/MockLocalService.cpp: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        (WebKit::MockLocalService::MockLocalService):
        (WebKit::MockLocalService::platformStartDiscovery const):
        (WebKit::MockLocalService::createLocalConnection const):
        * UIProcess/WebAuthentication/Mock/MockLocalService.h: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h: Copied from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h: Renamed from Source/WebCore/platform/cocoa/LocalAuthenticationSoftLink.h.
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::WebAuthenticatorCoordinatorProxy):
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        (WebKit::WebAuthenticatorCoordinatorProxy::isUserVerifyingPlatformAuthenticatorAvailable):
        (WebKit::WebAuthenticatorCoordinatorProxy::isUserVerifyingPlatformAuthenticatorAvailableReply): Deleted.
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::setMockWebAuthenticationConfiguration):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::authenticatorManager):
        * WebKit.xcodeproj/project.pbxproj:

2018-09-25  Chris Dumez  <cdumez@apple.com>

        Revert some of the changes in r236471
        https://bugs.webkit.org/show_bug.cgi?id=189973

        Reviewed by Alex Christensen.

        Revert some of the changes in r236471 as they should not be needed. In particular,
        it should not be possible for the DecidePolicyForNavigationActionSync IPC to get
        processed *before* the DidCreateMainFrame / DidCreateSubframe ones because those
        use IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply. They are thus
        processed early when necessary, the same way as synchronous IPC messages.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame):
        (WebKit::WebFrame::createSubframe):

2018-09-25  Sihui Liu  <sihui_liu@apple.com>

        Move Service Worker Management from Storage Process to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189422

        Reviewed by Youenn Fablet.

        After r236035, this is another piece to move functionality of storage process to network process. When 
        we enable Service Workers, network process instead of storage process will be launched. 
        This patch will not change the behavior of Service Worker.

        * CMakeLists.txt:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::unregisterSWConnections):
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::connectionToContextProcessFromIPCConnection):
        (WebKit::NetworkProcess::connectionToContextProcessWasClosed):
        (WebKit::NetworkProcess::needsServerToContextConnectionForOrigin const):
        (WebKit::NetworkProcess::swServerForSession):
        (WebKit::NetworkProcess::swOriginStoreForSession):
        (WebKit::NetworkProcess::existingSWOriginStoreForSession const):
        (WebKit::NetworkProcess::serverToContextConnectionForOrigin):
        (WebKit::NetworkProcess::createServerToContextConnection):
        (WebKit::NetworkProcess::didFailFetch):
        (WebKit::NetworkProcess::didNotHandleFetch):
        (WebKit::NetworkProcess::didReceiveFetchResponse):
        (WebKit::NetworkProcess::didReceiveFetchData):
        (WebKit::NetworkProcess::didReceiveFetchFormData):
        (WebKit::NetworkProcess::didFinishFetch):
        (WebKit::NetworkProcess::postMessageToServiceWorkerClient):
        (WebKit::NetworkProcess::postMessageToServiceWorker):
        (WebKit::NetworkProcess::registerSWServerConnection):
        (WebKit::NetworkProcess::unregisterSWServerConnection):
        (WebKit::NetworkProcess::swContextConnectionMayNoLongerBeNeeded):
        (WebKit::NetworkProcess::disableServiceWorkerProcessTerminationDelay):
        (WebKit::NetworkProcess::addServiceWorkerSession):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::parentProcessHasServiceWorkerEntitlement const):
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/ServiceWorker/WebSWOriginStore.cpp: Renamed from Source/WebKit/StorageProcess/ServiceWorker/WebSWOriginStore.cpp.
        (WebKit::WebSWOriginStore::WebSWOriginStore):
        (WebKit::WebSWOriginStore::addToStore):
        (WebKit::WebSWOriginStore::removeFromStore):
        (WebKit::WebSWOriginStore::clearStore):
        (WebKit::WebSWOriginStore::importComplete):
        (WebKit::WebSWOriginStore::registerSWServerConnection):
        (WebKit::WebSWOriginStore::unregisterSWServerConnection):
        (WebKit::WebSWOriginStore::sendStoreHandle):
        (WebKit::WebSWOriginStore::didInvalidateSharedMemory):
        * NetworkProcess/ServiceWorker/WebSWOriginStore.h: Renamed from Source/WebKit/StorageProcess/ServiceWorker/WebSWOriginStore.h.
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: Renamed from Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp.
        (WebKit::WebSWServerConnection::WebSWServerConnection):
        (WebKit::WebSWServerConnection::~WebSWServerConnection):
        (WebKit::WebSWServerConnection::rejectJobInClient):
        (WebKit::WebSWServerConnection::resolveRegistrationJobInClient):
        (WebKit::WebSWServerConnection::resolveUnregistrationJobInClient):
        (WebKit::WebSWServerConnection::startScriptFetchInClient):
        (WebKit::WebSWServerConnection::updateRegistrationStateInClient):
        (WebKit::WebSWServerConnection::fireUpdateFoundEvent):
        (WebKit::WebSWServerConnection::setRegistrationLastUpdateTime):
        (WebKit::WebSWServerConnection::setRegistrationUpdateViaCache):
        (WebKit::WebSWServerConnection::notifyClientsOfControllerChange):
        (WebKit::WebSWServerConnection::updateWorkerStateInClient):
        (WebKit::WebSWServerConnection::cancelFetch):
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        (WebKit::WebSWServerConnection::didReceiveFetchResponse):
        (WebKit::WebSWServerConnection::didReceiveFetchData):
        (WebKit::WebSWServerConnection::didReceiveFetchFormData):
        (WebKit::WebSWServerConnection::didFinishFetch):
        (WebKit::WebSWServerConnection::didFailFetch):
        (WebKit::WebSWServerConnection::didNotHandleFetch):
        (WebKit::WebSWServerConnection::postMessageToServiceWorkerClient):
        (WebKit::WebSWServerConnection::matchRegistration):
        (WebKit::WebSWServerConnection::registrationReady):
        (WebKit::WebSWServerConnection::getRegistrations):
        (WebKit::WebSWServerConnection::registerServiceWorkerClient):
        (WebKit::WebSWServerConnection::unregisterServiceWorkerClient):
        (WebKit::WebSWServerConnection::sendToContextProcess):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h: Renamed from Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h.
        (WebKit::WebSWServerConnection::ipcConnection const):
        (WebKit::WebSWServerConnection::sessionID const):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in: Renamed from Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in.
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp: Renamed from Source/WebKit/StorageProcess/ServiceWorker/WebSWServerToContextConnection.cpp.
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::messageSenderConnection):
        (WebKit::WebSWServerToContextConnection::messageSenderDestinationID):
        (WebKit::WebSWServerToContextConnection::connectionClosed):
        (WebKit::WebSWServerToContextConnection::installServiceWorkerContext):
        (WebKit::WebSWServerToContextConnection::fireInstallEvent):
        (WebKit::WebSWServerToContextConnection::fireActivateEvent):
        (WebKit::WebSWServerToContextConnection::terminateWorker):
        (WebKit::WebSWServerToContextConnection::syncTerminateWorker):
        (WebKit::WebSWServerToContextConnection::findClientByIdentifierCompleted):
        (WebKit::WebSWServerToContextConnection::matchAllCompleted):
        (WebKit::WebSWServerToContextConnection::claimCompleted):
        (WebKit::WebSWServerToContextConnection::didFinishSkipWaiting):
        (WebKit::WebSWServerToContextConnection::connectionMayNoLongerBeNeeded):
        (WebKit::WebSWServerToContextConnection::terminate):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h: Renamed from Source/WebKit/StorageProcess/ServiceWorker/WebSWServerToContextConnection.h.
        (WebKit::WebSWServerToContextConnection::create):
        (WebKit::WebSWServerToContextConnection::ipcConnection const):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in: Renamed from Source/WebKit/StorageProcess/ServiceWorker/WebSWServerToContextConnection.messages.in.
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::parentProcessHasServiceWorkerEntitlement const):
        * Shared/Storage/StorageProcessCreationParameters.cpp:
        (WebKit::StorageProcessCreationParameters::encode const):
        (WebKit::StorageProcessCreationParameters::decode):
        * Shared/Storage/StorageProcessCreationParameters.h:
        (): Deleted.
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * Shared/WebsiteDataStoreParameters.h:
        * Sources.txt:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::didReceiveMessage):
        (WebKit::StorageProcess::initializeWebsiteDataStore):
        (WebKit::StorageProcess::createStorageToWebProcessConnection):
        (WebKit::StorageProcess::destroySession):
        (WebKit::StorageProcess::fetchWebsiteData):
        (WebKit::StorageProcess::deleteWebsiteData):
        (WebKit::StorageProcess::deleteWebsiteDataForOrigins):
        (WebKit::StorageProcess::connectionToContextProcessFromIPCConnection): Deleted.
        (WebKit::StorageProcess::connectionToContextProcessWasClosed): Deleted.
        (WebKit::StorageProcess::needsServerToContextConnectionForOrigin const): Deleted.
        (WebKit::StorageProcess::swServerForSession): Deleted.
        (WebKit::StorageProcess::swOriginStoreForSession): Deleted.
        (WebKit::StorageProcess::existingSWOriginStoreForSession const): Deleted.
        (WebKit::StorageProcess::serverToContextConnectionForOrigin): Deleted.
        (WebKit::StorageProcess::createServerToContextConnection): Deleted.
        (WebKit::StorageProcess::didFailFetch): Deleted.
        (WebKit::StorageProcess::didNotHandleFetch): Deleted.
        (WebKit::StorageProcess::didReceiveFetchResponse): Deleted.
        (WebKit::StorageProcess::didReceiveFetchData): Deleted.
        (WebKit::StorageProcess::didReceiveFetchFormData): Deleted.
        (WebKit::StorageProcess::didFinishFetch): Deleted.
        (WebKit::StorageProcess::postMessageToServiceWorkerClient): Deleted.
        (WebKit::StorageProcess::postMessageToServiceWorker): Deleted.
        (WebKit::StorageProcess::registerSWServerConnection): Deleted.
        (WebKit::StorageProcess::unregisterSWServerConnection): Deleted.
        (WebKit::StorageProcess::swContextConnectionMayNoLongerBeNeeded): Deleted.
        (WebKit::StorageProcess::disableServiceWorkerProcessTerminationDelay): Deleted.
        * StorageProcess/StorageProcess.h:
        (WebKit::StorageProcess::parentProcessHasServiceWorkerEntitlement const): Deleted.
        (): Deleted.
        * StorageProcess/StorageProcess.messages.in:
        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::~StorageToWebProcessConnection):
        (WebKit::StorageToWebProcessConnection::didReceiveMessage):
        (WebKit::StorageToWebProcessConnection::didReceiveSyncMessage):
        (WebKit::StorageToWebProcessConnection::didClose):
        (WebKit::StorageToWebProcessConnection::unregisterSWConnections): Deleted.
        (WebKit::StorageToWebProcessConnection::establishSWServerConnection): Deleted.
        * StorageProcess/StorageToWebProcessConnection.h:
        * StorageProcess/StorageToWebProcessConnection.messages.in:
        * StorageProcess/ios/StorageProcessIOS.mm:
        (WebKit::StorageProcess::parentProcessHasServiceWorkerEntitlement const): Deleted.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::networkProcessCrashed):
        (WebKit::NetworkProcessProxy::didCreateNetworkConnectionToWebProcess):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcessForExplicitSession):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::start):
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::getStorageProcessConnection):
        (WebKit::StorageProcessProxy::establishWorkerContextConnectionToStorageProcess): Deleted.
        (WebKit::StorageProcessProxy::establishWorkerContextConnectionToStorageProcessForExplicitSession): Deleted.
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::networkProcessCrashed):
        (WebKit::WebProcessPool::getNetworkProcessConnection):
        (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::disableServiceWorkerProcessTerminationDelay):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::registerURLSchemeServiceWorkersCanHandle):
        (WebKit::WebProcessPool::postMessageToServiceWorkerClient):
        (WebKit::WebProcessPool::postMessageToServiceWorker):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataFetch):
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::storageProcessParameters):
        (WebKit::WebsiteDataStore::parameters):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::serviceWorkerConnectionForSession):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::existingServiceWorkerConnectionForSession):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::WebSWContextManagerConnection::serviceWorkerStartedWithMessage):
        (WebKit::WebSWContextManagerConnection::startFetch):
        (WebKit::WebSWContextManagerConnection::didFinishInstall):
        (WebKit::WebSWContextManagerConnection::didFinishActivation):
        (WebKit::WebSWContextManagerConnection::setServiceWorkerHasPendingEvents):
        (WebKit::WebSWContextManagerConnection::skipWaiting):
        (WebKit::WebSWContextManagerConnection::setScriptResource):
        (WebKit::WebSWContextManagerConnection::workerTerminated):
        (WebKit::WebSWContextManagerConnection::findClientByIdentifier):
        (WebKit::WebSWContextManagerConnection::matchAll):
        (WebKit::WebSWContextManagerConnection::claim):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveResponse):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinish):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveBlobChunk):
        (WebKit::WebServiceWorkerFetchTaskClient::didFail):
        (WebKit::WebServiceWorkerFetchTaskClient::didFinish):
        (WebKit::WebServiceWorkerFetchTaskClient::didNotHandle):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::serviceWorkerConnectionForSession):
        (WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession):
        (WebKit::WebServiceWorkerProvider::handleFetch):
        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
        (WebKit::WebToStorageProcessConnection::didReceiveMessage):
        (WebKit::WebToStorageProcessConnection::didReceiveSyncMessage):
        (WebKit::WebToStorageProcessConnection::didClose):
        (WebKit::WebToStorageProcessConnection::serviceWorkerConnectionForSession): Deleted.
        * WebProcess/Storage/WebToStorageProcessConnection.h:
        (WebKit::WebToStorageProcessConnection::existingServiceWorkerConnectionForSession): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::webToStorageProcessConnectionClosed):
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcess::establishWorkerContextConnectionToStorageProcess): Deleted.
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::existingNetworkProcessConnection):
        (WebKit::WebProcess::existingWebToStorageProcessConnection): Deleted.
        * WebProcess/WebProcess.messages.in:

2018-09-25  Chris Dumez  <cdumez@apple.com>

        UIProcess should process incoming sync IPC from WebProcess when waiting for a sync IPC reply from it
        https://bugs.webkit.org/show_bug.cgi?id=189927

        Reviewed by Alex Christensen.

        UIProcess should process incoming sync IPC from WebProcess when waiting for a sync IPC reply from it
        in order to avoid deadlocks. This is not an issue currently because the WebProcess does process
        incoming sync IPC when waiting for a sync IPC reply. However, we plan to change this in the future
        in order to avoid bugs caused by re-entering WebCore at unsafe times.

        The reason the UIProcess previously did not do out of order sync IPC process was to avoid processing
        a synchronous policy decision IPC for a frameID it did not know about yet, due to the DidCreateMainFrame /
        DidCreateSubframe IPC messages being asynchronous. To address this issue, the decidePolicyForNavigationActionSync
        IPC handler now calls didCreateMainFrame() / didCreateSubframe() as needed if it does not know about
        the frame yet. Note that synchronous policy decisions are rare and are currently only needed by initial
        about:blank and fragment navigations.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):

2018-09-25  Chris Dumez  <cdumez@apple.com>

        Extending the lifetime of a NetworkProcessProxy / StorageProcessProxy may cause it to have a stale WebProcessPool pointer
        https://bugs.webkit.org/show_bug.cgi?id=189851
        <rdar://problem/44696263>

        Reviewed by Alex Christensen.

        Extending the lifetime of a NetworkProcessProxy / StorageProcessProxy may cause it to have a stale WebProcessPool pointer:
        - NetworkProcessProxy::m_processPool
        - StorageProcessProxy::m_processPool

        Those data members are C++ references because it is expected that the WebProcessPool owns the NetworkProcessProxy and
        StorageProcessProxy. However, since NetworkProcessProxy / StorageProcessProxy are refcounted, it has happened that code
        extends the lifetime of those past their process pool, leading to stale prrocess pool usage. The fix for these crashes
        so far as been to ref the WebProcessPool instead of the NetworkProcessProxy / StorageProcessProxy. However, it is very
        tempting for people to simply ref the NetworkProcessProxy / StorageProcessProxy given that they are refcounted.
        For this reason, this patch updates NetworkProcessProxy / StorageProcessProxy so that they are no longer RefCounted
        and so that the WebProcessPool truly owns them via std::unique_ptr<>.

        * UIProcess/ChildProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessCrashed):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::create): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        (WebKit::NetworkProcessProxy::throttler): Deleted.
        (WebKit::NetworkProcessProxy::processPool): Deleted.
        * UIProcess/Plugins/PluginProcessProxy.h:
        (WebKit::PluginProcessProxy::pluginProcessAttributes const): Deleted.
        (WebKit::PluginProcessProxy::pluginProcessToken const): Deleted.
        (WebKit::PluginProcessProxy::isValid const): Deleted.
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::create): Deleted.
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.h:

2018-09-25  Alex Christensen  <achristensen@webkit.org>

        NetworkLoad::didReceiveResponse should pass its completion handler to its client
        https://bugs.webkit.org/show_bug.cgi?id=188701

        Reviewed by Michael Catanzaro.

        Right now we have a confusing enum ShouldContinueDidReceiveResponse and a complicated flow
        that involves many objects and implicitly using NetworkLoad's destructor as part of the
        loading flow.  This makes the responsibilities of the objects clear.

        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::didReceiveResponse):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveResponse):
        (WebKit::NetworkCORSPreflightChecker::didReceiveResponseNetworkSession): Deleted.
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::didReceiveResponse):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::didReceiveResponse):
        (WebKit::NetworkLoad::notifyDidReceiveResponse):
        (WebKit::NetworkLoad::continueDidReceiveResponse): Deleted.
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession): Deleted.
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::didReceiveResponse):
        (WebKit::PingLoad::didReceiveResponseNetworkSession): Deleted.
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::didReceiveResponse):
        * NetworkProcess/PreconnectTask.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveResponse):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/capture/NetworkDataTaskReplay.cpp:
        (WebKit::NetworkCapture::NetworkDataTaskReplay::didReceiveResponse):

2018-09-24  Alex Christensen  <achristensen@webkit.org>

        Build fix.
        https://bugs.webkit.org/show_bug.cgi?id=189929

        * WebProcess/InjectedBundle/API/c/WKBundleFileHandleRef.h:

2018-09-24  Alex Christensen  <achristensen@webkit.org>

        Prepare to replace WKBundleFileHandleCreateWithPath with a version that takes a WKBundlePageRef
        https://bugs.webkit.org/show_bug.cgi?id=189929

        Reviewed by Andy Estes.

        This will be needed for rdar://problem/24576194

        * WebProcess/InjectedBundle/API/c/WKBundleFileHandleRef.cpp:
        (WKBundleFileHandleCreateWithPathForPage):
        * WebProcess/InjectedBundle/API/c/WKBundleFileHandleRef.h:

2018-09-24  Alex Christensen  <achristensen@webkit.org>

        Begin deprecating C API
        https://bugs.webkit.org/show_bug.cgi?id=189810

        Reviewed by Andy Estes.

        * Shared/API/c/WKDeprecated.h: Added.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (setUpPagePolicyClient):
        (-[WKBrowsingContextController setPolicyDelegate:]):
        * WebKit.xcodeproj/project.pbxproj:

2018-09-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r236368.

        Caused WebKit.NetworkProcessCrashWithPendingConnection API
        test to crash (Bug 189926)

        Reverted changeset:

        "Extending the lifetime of a NetworkProcessProxy /
        StorageProcessProxy may cause it to have a stale
        WebProcessPool pointer"
        https://bugs.webkit.org/show_bug.cgi?id=189851
        https://trac.webkit.org/changeset/236368

2018-09-21  Simon Fraser  <simon.fraser@apple.com>

        Remove the old "AcceleratedCompositingForOverflowScroll" code
        https://bugs.webkit.org/show_bug.cgi?id=189870

        Reviewed by Zalan Bujtas.

        The "AcceleratedCompositingForOverflowScroll" code was added to allow overflow:scroll to use
        composited scrolling if an overflow:scroll could be made a stacking context without affecting
        z-order. We need overflow:scroll to be accelerated always, so a different approach is needed.
        Remove this old code (unused by any platform?) to make working on new code easier.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAcceleratedCompositingForOverflowScrollEnabled): Deleted.
        (WKPreferencesGetAcceleratedCompositingForOverflowScrollEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2018-09-24  Chris Dumez  <cdumez@apple.com>

        Do not do early processing of incoming sync IPC unless we're waiting for a sync IPC reply
        https://bugs.webkit.org/show_bug.cgi?id=186941

        Reviewed by Alex Christensen.

        The comment was claiming we were processing incoming sync messages while waiting for a
        sync IPC reply to prevent deadlocks. However, the code was failing to check if we were
        waiting for a sync IPC reply. As a result, incoming sync IPC messages would get processed
        early no matter what, jumping the line. This was the source of the flakiness in the blob
        tests since the IPC to register the blob in the network process was async and the follow-up
        IPC to ask the network process for the blob size was sync. The sync message to get the blob
        size would jump the line and get processed before the async message to register the blob.
        As a result, the network process would not know about the blob yet and return size 0. Of
        course, this could happen if the network process was sending sync IPC at the time. However,
        the network process never sends any sync IPC and therefore, should never process incoming
        IPC messages out of order.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::processIncomingMessage):

2018-09-24  Daniel Bates  <dabates@apple.com>

        [iOS] Key code is 0 for many hardware keyboard keys
        https://bugs.webkit.org/show_bug.cgi?id=189604

        Reviewed by Wenson Hsieh.

        For a hardware keyboard-generated event (an event with a non-nill event._hidEvent) pass
        the key code for the event. Otherwise, do what we do now and pass 0 as the event is likely
        a software keyboard-generated event.

        * Platform/spi/ios/UIKitSPI.h: Add some more SPI.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView handleKeyEvent:]):

2018-09-24  Brian Burg  <bburg@apple.com>

        Web Inspector: topContentInset is not accounted for when inspecting a WKWebView and docked to side
        https://bugs.webkit.org/show_bug.cgi?id=189859

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        Add special cases for inspecting a WKWebView. We already special-case for WKView.

2018-09-24  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Compositing indicators are not working
        https://bugs.webkit.org/show_bug.cgi?id=189915

        Reviewed by Žan Doberšek.

        Pass the debugBorder and repaintCount parameters to the TextureMapperLayer when required.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::updateSceneState):

2018-09-21  Dean Jackson  <dino@apple.com>

        Add PointerEvent, plus feature flag, plus Web Platform Tests
        https://bugs.webkit.org/show_bug.cgi?id=189867
        <rdar://problem/44697384>

        Reviewed by Simon Fraser.

        Add PointerEvents as an experimental feature.

        * Shared/WebPreferences.yaml:

2018-09-21  Brian Burg  <bburg@apple.com>

        Web Inspector: dock buttons disappear if Web Inspector goes fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=189865
        <rdar://problem/42600534>

        Reviewed by Matt Baker.

        When a fullscreen Safari tab has a docked Inspector, and the "detach" button
        is clicked, Inspector goes into its own fullscreen window. In that window,
        there are no buttons for docking to side or bottom.

        It turns out that we always send setDockingUnavailable(true) if the inspector
        window is fullscreen. This eventually causes the inspector to reflect that
        by hiding the docking-related buttons.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCanAttach):
        This early exit does not seem to serve any purpose, so remove it.

2018-09-21  Chris Dumez  <cdumez@apple.com>

        Extending the lifetime of a NetworkProcessProxy / StorageProcessProxy may cause it to have a stale WebProcessPool pointer
        https://bugs.webkit.org/show_bug.cgi?id=189851

        Reviewed by Alex Christensen.

        Extending the lifetime of a NetworkProcessProxy / StorageProcessProxy may cause it to have a stale WebProcessPool pointer:
        - NetworkProcessProxy::m_processPool
        - StorageProcessProxy::m_processPool

        Those data members are C++ references because it is expected that the WebProcessPool owns the NetworkProcessProxy and
        StorageProcessProxy. However, since NetworkProcessProxy / StorageProcessProxy are refcounted, it has happened that code
        extends the lifetime of those past their process pool, leading to stale prrocess pool usage. The fix for these crashes
        so far as been to ref the WebProcessPool instead of the NetworkProcessProxy / StorageProcessProxy. However, given how
        error-prone this is, this patch updates NetworkProcessProxy / StorageProcessProxy so that they forward their refcounting
        to the WebProcessPool.

        * UIProcess/ChildProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::ref):
        (WebKit::NetworkProcessProxy::deref):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcessProxy::create): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::ref):
        (WebKit::StorageProcessProxy::deref):
        (WebKit::StorageProcessProxy::create): Deleted.
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.h:

2018-09-21  Alex Christensen  <achristensen@webkit.org>

        Use a Variant for FormDataElement
        https://bugs.webkit.org/show_bug.cgi?id=189777

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * NetworkProcess/NetworkResourceLoader.cpp:
        * Shared/SessionState.h:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toHTTPBody):

2018-09-21  Alex Christensen  <achristensen@webkit.org>

        Simply authentication code even more!
        https://bugs.webkit.org/show_bug.cgi?id=189719

        Reviewed by Andy Estes.

        Just when you thought it couldn't get simpler and more elegant, it can!

        * NetworkProcess/Downloads/Download.cpp:
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        * NetworkProcess/NetworkLoad.cpp:
        * NetworkProcess/PingLoad.cpp:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * Shared/Authentication/AuthenticationChallengeDisposition.h: Added.
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::completeAuthenticationChallenge):
        (WebKit::AuthenticationManager::useCredentialForChallenge): Deleted.
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge): Deleted.
        (WebKit::AuthenticationManager::continueWithoutCredentialForChallenge): Deleted.
        (WebKit::AuthenticationManager::continueWithoutCredentialForSingleChallenge): Deleted.
        (WebKit::AuthenticationManager::cancelChallenge): Deleted.
        (WebKit::AuthenticationManager::cancelSingleChallenge): Deleted.
        (WebKit::AuthenticationManager::performDefaultHandling): Deleted.
        (WebKit::AuthenticationManager::performDefaultHandlingForSingleChallenge): Deleted.
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinue): Deleted.
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinueForSingleChallenge): Deleted.
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/AuthenticationManager.messages.in:
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::initializeConnection):
        * UIProcess/API/C/WKAuthenticationDecisionListener.cpp:
        (WKAuthenticationDecisionListenerUseCredential):
        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
        (-[WKNSURLAuthenticationChallengeSender continueWithoutCredentialForAuthenticationChallenge:]):
        * UIProcess/API/glib/WebKitAuthenticationRequest.cpp:
        (webkit_authentication_request_authenticate):
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        * UIProcess/Authentication/AuthenticationDecisionListener.cpp:
        (WebKit::AuthenticationDecisionListener::AuthenticationDecisionListener):
        (WebKit::AuthenticationDecisionListener::~AuthenticationDecisionListener):
        (WebKit::AuthenticationDecisionListener::useCredential):
        (WebKit::AuthenticationDecisionListener::cancel):
        (WebKit::AuthenticationDecisionListener::performDefaultHandling):
        (WebKit::AuthenticationDecisionListener::rejectProtectionSpaceAndContinue):
        * UIProcess/Authentication/AuthenticationDecisionListener.h:
        (WebKit::AuthenticationDecisionListener::create):
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didReceiveAuthenticationChallenge):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):
        * WebKit.xcodeproj/project.pbxproj:

2018-09-21  Chris Dumez  <cdumez@apple.com>

        Regression(Mojave): Resuming a WK2 download crashes
        https://bugs.webkit.org/show_bug.cgi?id=189838
        <rdar://problem/44618538>

        Reviewed by Alex Christensen.

        Update our workaround to tweak the download resume data to include the actual download path so that
        it works on macOS Mojave and up. Unfortunately, the resume data internal representation has changed,
        causing our previous workaround to fail.

        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):

2018-09-21  Youenn Fablet  <youenn@apple.com>

        Whitelist two additional plugins
        https://bugs.webkit.org/show_bug.cgi?id=189832
        <rdar://problem/44628127>

        Reviewed by Brent Fulgham.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldAllowPluginToRunUnsandboxed):

2018-09-21  Woodrow Wang  <woodrow_wang@apple.com>

        Clear persistent storage between tests for resourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=189684
        <rdar://problem/44540099>

        Reviewed by Chris Dumez.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToBlockCookiesFor):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):

        Remove function only called in testing for resetting statistics to consistent
        state. 

        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemory): Deleted.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::WebsiteDataStore::removeAllStorageAccessHandler):

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236289.

        Caused 8 TestWebKitAPI.ContentFiltering test failures.

        Reverted changeset:

        "InjectedBundle parameters often need initialization function
        called before unarchiving"
        https://bugs.webkit.org/show_bug.cgi?id=189709
        https://trac.webkit.org/changeset/236289

2018-09-20  Youenn Fablet  <youenn@apple.com>

        Allow additional plug-ins to run unsandboxed
        https://bugs.webkit.org/show_bug.cgi?id=189791
        <rdar://problem/44628127>

        Reviewed by Brent Fulgham.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldAllowPluginToRunUnsandboxed):

2018-09-20  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Chris Dumez.

        Handle the case where the InjectedBundle parameters do not successfully decode because they contain
        an unexpected class from the embedding program. If this happens, try decoding the bundle parameters
        after the bundle initialiation function runs, which gives the embedding program the opportunity to
        register additional classes that are safe for serialization.
        
        Create a new 'decodeBundleParameters' method that contains the logic that used to live in 'initialize'.
        This new method returns 'true' if the serialization was successful, otherwise it returns false.

        Revise 'initialize' to call this new method and check the return value. If it fails, try decoding the
        bundle parameters after the bundle's initialization function is called.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize): Use the new method.
        (WebKit::InjectedBundle::decodeBundleParameters): Added.
        (WebKit::InjectedBundle::setBundleParameters): Use 'decodeObjectOfClasses' with the more complete
        'classesForCoder' method to unarchive the passed bundle parameters, rather than the
        NSDictionary-specific method, since InjectedBundles often encode other types of objects, and the
        NSDictionary object may itself hold other kinds of objects.

2018-09-20  Jer Noble  <jer.noble@apple.com>

        Enable Modern EME by default
        https://bugs.webkit.org/show_bug.cgi?id=189794

        Reviewed by Jon Lee.

        * Shared/WebPreferences.yaml:

2018-09-20  Thibault Saunier  <tsaunier@igalia.com>

        [GTK][WPE] Make sure MediaDeviceEnabled and PeerConnectionEnabled are always synced with enable-media-stream
        https://bugs.webkit.org/show_bug.cgi?id=188704

        By default m_isMediaDevicesEnabled and m_isScreenCaptureEnabled are false but
        m_isMediaStreamEnabled is true meaning that in the WPE minibrowser getUserMedia
        was disabled even if we explicitly set `"enable-media-stream", TRUE`.

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsConstructed):

2018-09-20  Justin Michaud  <justin_michaud@apple.com>

        Implement CSS Custom Properties and Values Skeleton
        https://bugs.webkit.org/show_bug.cgi?id=189694

        Reviewed by Simon Fraser.

        Add feature flag for CSS custom properties and values api

        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-09-19  Dean Jackson  <dino@apple.com>

        Temporarily move fullscreen back to experimental features
        https://bugs.webkit.org/show_bug.cgi?id=189770
        <rdar://problem/44619282>

        Revert this change now that there is a commit to cherry-pick.

        * Shared/WebPreferences.yaml:

2018-09-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed crash fix after r236226.

        We need to protect |this| in WebProcessProxy::requestTermination().

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):

2018-09-20  Antti Koivisto  <antti@apple.com>

        REGRESSION (PSON): White or Black flash occurs when process swapping on navigation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=189663
        <rdar://problem/44184955>

        Reviewed by Geoff Garen and Chris Dumez.

        We need to keep the layer tree of the previous page alive and visible until we have something
        to render on the new page. With PSON on Mac this means that we should keep displaying the
        layer tree from the previus process.

        This patch moves the management of 'attaching' the drawing area (Mac only concept) from web process
        to UI process. This is when we parent the layer tree to the view root layer. It also ensures that
        the layer tree is not deleted too early on process swap and that it still eventually gets deleted.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::attachInWebProcess):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::messageNamesToIgnoreWhileSuspended):
        (WebKit::SuspendedPageProxy::tearDownDrawingAreaInWebProcess):

        We no longer tear down drawing area (layer tree) for suspended pages automatically. Send an explicit
        message for it.

        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCompletePageTransition):

        Attach the drawing area if appropriate.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):

        Call PageClien::processWillSwap instead of processDidExit when appropriate.

        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):

        This is called when we have switched to the new layer tree.
        Tear down the drawing area in the previus process.

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

        On iOS this just call processDidExit for now.

        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::processWillSwap):
        (WebKit::PageClientImpl::processDidExit):

        Add processWillSwap separately from processDidExit. They are currently the same
        except processWillSwap doesn't clear the root layer.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::attachInWebProcess):

        Send a message to the web process to attach the drawing area.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::attach):
        (WebKit::DrawingArea::attachDrawingArea): Deleted.

        Rename to be less redundant.

        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):

        Don't attach drawing area automatically. It will be done by a message from UI process.

        (WebKit::WebPage::setLayerTreeStateIsFrozen):

        Layer tree is always frozen in a suspended process (if it exists).

        (WebKit::WebPage::didReceivePolicyDecision):

        Suspend immediately when receiving policy decision to avoid flash on 'about:blank' loading.

        (WebKit::WebPage::didStartPageTransition):
        (WebKit::WebPage::didCompletePageTransition):

        Notify UI process of transition completion.

        (WebKit::WebPage::setIsSuspended):
        (WebKit::WebPage::tearDownDrawingAreaForSuspend):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

        Don't attach drawing area automatically. It will be done by a message from UI process.

        (WebKit::TiledCoreAnimationDrawingArea::attach):
        (WebKit::TiledCoreAnimationDrawingArea::attachDrawingArea): Deleted.

2018-09-20  Tomas Popela  <tpopela@redhat.com>

        [GTK] Always prints in portrait when landscape is requested
        https://bugs.webkit.org/show_bug.cgi?id=189543

        Reviewed by Michael Catanzaro.

        We have to change the surface size based on the requested orientation.
        Otherwise only portrait will be printed as it's hardcoded.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:

2018-09-19  Dean Jackson  <dino@grorg.org>

        Temporarily move fullscreen back to experimental features
        https://bugs.webkit.org/show_bug.cgi?id=189770
        <rdar://problem/44619282>

        Reviewed by Simon Fraser.

        Make fullscreen an experimental feature again.

        * Shared/WebPreferences.yaml:

2018-09-19  Dawei Fenton  <realdawei@apple.com>

        Unreviewed, rolling out r236229.

        caused API timouts on mac and ios

        Reverted changeset:

        "Clear persistent storage between tests for
        resourceLoadStatistics"
        https://bugs.webkit.org/show_bug.cgi?id=189684
        https://trac.webkit.org/changeset/236229

2018-09-19  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(236154) C API clients not using WKPageSetPageNavigationClient couldn't complete HTTPS requests
        https://bugs.webkit.org/show_bug.cgi?id=189771

        Reviewed by Tim Horton.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didReceiveAuthenticationChallenge):
        Perform default behavior if there's an authentication challenge but we're using the default navigation client.
        I wish we had infrastructure to test this but WebKitTestRunner uses WKPageSetNavigationClient
        and we don't have the ability to do networking from API tests.  This is a growing problem I intend to solve.

2018-09-19  Woodrow Wang  <woodrow_wang@apple.com>

        Clear persistent storage between tests for resourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=189684
        <rdar://problem/44540099>

        Reviewed by Chris Dumez.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):

        Remove function only called in testing for resetting statistics to consistent
        state. 
        
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemory): Deleted.

2018-09-19  Chris Dumez  <cdumez@apple.com>

        Crash under WebPageProxy::decidePolicyForNavigationAction()
        https://bugs.webkit.org/show_bug.cgi?id=189763
        <rdar://problem/44597111>

        Reviewed by Alex Christensen.

        Update WebNavigationState::navigation() / WebNavigationState::takeNavigation()
        to return a pointer instead of a reference as we have evidence that they can
        return null. I kept the debug assertions to try and catch the cases where we
        return null but at least we stop crashing in release builds.

        * UIProcess/WebNavigationState.cpp:
        (WebKit::WebNavigationState::navigation):
        (WebKit::WebNavigationState::takeNavigation):
        * UIProcess/WebNavigationState.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):

2018-09-19  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessProxy::suspendedPageWasDestroyed(WebKit::SuspendedPageProxy&)
        https://bugs.webkit.org/show_bug.cgi?id=189721
        <rdar://problem/44359788>

        Reviewed by Geoffrey Garen.

        Fix crash when destroying a SuspendedPageProxy whose WebProcessProxy was already
        destroyed.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        * UIProcess/SuspendedPageProxy.h:
        (WebKit::SuspendedPageProxy::process const):
        Update SuspendedPageProxy::m_process to be a RefPtr<> instead of a raw pointer, similarly
        to what we do in WebPageProxy. Relying on the WebProcessProxy to not get destroyed is
        risky as this crash demonstrates.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):
        When a WebProcessProxy is terminated (by client or WebKit due to memory / cpu usage), call
        webProcessDidClose() on all SuspendedPages, similarly to what we do in case of a crash in
        processDidTerminateOrFailedToLaunch(). Failing to do so means that the SuspendedPageProxy
        may still have a pointer to this WebProcessProxy, even though WebProcessProxy::shutDown()
        has been called (which may destroy the WebProcessProxy).

2018-09-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add optional cap on partitioned cache max age
        https://bugs.webkit.org/show_bug.cgi?id=189711
        <rdar://problem/39246837>

        Reviewed by Antti Koivisto and Chris Dumez.

        These changes add the capability to set a max age cap for prevalent resources
        and consults it when retrieving cache entries. If an entry is capped and found
        to be too old, it will not be used but instead removed from the cache.

        This functionality is off by default because no cap is set by default.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcess::resetCacheMaxAgeCapForPrevalentResources):
            Infrastructure for testing.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
            Now sends in the session ID in the retrieve call.
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::hasReachedPrevalentResourceAgeCap):
            Static convenience function.
        (WebKit::NetworkCache::makeUseDecision):
            Now receives an optional maxAge parameter and checks
            hasReachedPrevalentResourceAgeCap() first.
        (WebKit::NetworkCache::Cache::retrieve):
            Now takes a session ID.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::cachedEntryReuseFailureToDiagnosticKey):
            Added UseDecision::NoDueToPrevalentResourceAgeCap which causes a
            return of WebCore::DiagnosticLoggingKeys::otherKey().
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsCacheMaxAgeCap):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
            Infrastructure for testing.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm:
        (WebKit::ResourceLoadStatisticsMemoryStore::registerUserDefaultsIfNeeded):
            Now supports a user default ResourceLoadStatisticsCacheMaxAgeCap.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::hasStorageAccessForFrame):
        (WebKit::NetworkProcessProxy::grantStorageAccess):
        (WebKit::NetworkProcessProxy::removeAllStorageAccess):
        (WebKit::NetworkProcessProxy::getAllStorageAccessEntries):
        (WebKit::NetworkProcessProxy::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcessProxy::didSetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcessProxy::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcessProxy::didResetCacheMaxAgeCapForPrevalentResources):
        (WebKit::nextRequestStorageAccessContextId): Deleted.
            Deleted this to make all code use the generic generateCallbackID().
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
            Used to transfer the setting from the UI process to the network process. 
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::setCacheMaxAgeCap):
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-09-18  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Allow WebContent process to check the "Protocol Characteristics" of files to which it has access
        https://bugs.webkit.org/show_bug.cgi?id=189712
        <rdar://problem/44386429>

        Reviewed by Alex Christensen.

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

2018-09-18  Chris Dumez  <cdumez@apple.com>

        [iOS] Crash under WebPageProxy::navigationGestureSnapshotWasRemoved()
        https://bugs.webkit.org/show_bug.cgi?id=189714
        <rdar://problem/32839498>

        Reviewed by Tim Horton.

        The ViewGestureController::removeSwipeSnapshot() implementation for iOS calls
        navigationGestureSnapshotWasRemoved() on m_webPageProxyForBackForwardListForCurrentSwipe.
        m_webPageProxyForBackForwardListForCurrentSwipe can differ from m_webPageProxy, and
        is a RefPtr<>. This means that this WebPageProxy's WKWebView might have been deallocated,
        in which case we'll crash when trying to use the pageClient in
        WebPageProxy::navigationGestureSnapshotWasRemoved(). To address the issue, we now return
        early in WebPageProxy::navigationGestureSnapshotWasRemoved() if m_isClosed is true,
        after resetting m_isShowingNavigationGestureSnapshot to false but *before* trying to use
        the pageClient. When a WKWebView is deallocated, it calls WebPageProxy::close(), which
        sets m_isClosed to true.

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

2018-09-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Limit capturing extra metrics for Web Inspector when not required.
        https://bugs.webkit.org/show_bug.cgi?id=189520

        Reviewed by Alex Christensen.

        Respect the value of NetworkDataTask::shouldCaptureExtraNetworkLoadMetrics() to reduce the process
        time when they are not needed.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::createCurlRequest):

2018-09-18  Alex Christensen  <achristensen@webkit.org>

        Make WebPageProxy always have a API::NavigationClient instead of always having a API::LoaderClient and API::PolicyClient
        https://bugs.webkit.org/show_bug.cgi?id=189012

        Reviewed by Andy Estes.

        When WebKit2 was being developed, we initially made the C API WKPageSetPagePolicyClient and WKPageSetPageLoaderClient.
        When we released WKWebView, it was using WKNavigationDelegate, equivalent to WKPageSetPageNavigationClient.
        To support one or the other, we would use the navigation client if it was present, but if not we would fall back to the
        loader or policy client.  Since the loader and policy clients are now being minimally supported only until legacy
        software migrates to the navigation client, we are adding new functionality to the navigation client.
        Making the navigation client the default and using the loader or policy client only if they are present supports
        the legacy software and makes us have fewer forgotten null checks when adding new functionality to the navigation client.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createNavigationClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setNavigationClient):
        (WebKit::WebPageProxy::setLoaderClient):
        (WebKit::WebPageProxy::setPolicyClient):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didChangeBackForwardList):
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        (WebKit::WebPageProxy::didCancelClientRedirectForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReachLayoutMilestone):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::contentRuleListNotification):
        (WebKit::WebPageProxy::webGLPolicyForURL):
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        (WebKit::WebPageProxy::wrapCryptoKey):
        (WebKit::WebPageProxy::unwrapCryptoKey):
        (WebKit::WebPageProxy::signedPublicKeyAndChallengeString):
        (WebKit::WebPageProxy::navigationGestureDidBegin):
        (WebKit::WebPageProxy::navigationGestureWillEnd):
        (WebKit::WebPageProxy::navigationGestureDidEnd):
        (WebKit::WebPageProxy::navigationGestureSnapshotWasRemoved):
        * UIProcess/WebPageProxy.h:

2018-09-18  Alex Christensen  <achristensen@webkit.org>

        Clean up AuthenticationChallengeProxy
        https://bugs.webkit.org/show_bug.cgi?id=189668

        Reviewed by Youenn Fablet.

        At its core, it's a CompletionHandler with some information.
        Make it more elegant and simple with no change in behavior and reduce the complexity of this security-sensitive object.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNSURLSessionAuthChallengeDisposition):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinueForSingleChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * UIProcess/API/C/WKAuthenticationChallenge.cpp:
        (WKAuthenticationChallengeGetDecisionListener):
        (WKAuthenticationChallengeGetProtectionSpace):
        (WKAuthenticationChallengeGetProposedCredential):
        (WKAuthenticationChallengeGetPreviousFailureCount):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
        (-[WKNSURLAuthenticationChallengeSender cancelAuthenticationChallenge:]):
        (-[WKNSURLAuthenticationChallengeSender continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WKNSURLAuthenticationChallengeSender useCredential:forAuthenticationChallenge:]):
        (-[WKNSURLAuthenticationChallengeSender performDefaultHandlingForAuthenticationChallenge:]):
        (-[WKNSURLAuthenticationChallengeSender rejectProtectionSpaceAndContinueWithChallenge:]):
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::~AuthenticationChallengeProxy): Deleted.
        (WebKit::AuthenticationChallengeProxy::useCredential): Deleted.
        (WebKit::AuthenticationChallengeProxy::cancel): Deleted.
        (WebKit::AuthenticationChallengeProxy::performDefaultHandling): Deleted.
        (WebKit::AuthenticationChallengeProxy::rejectProtectionSpaceAndContinue): Deleted.
        (WebKit::AuthenticationChallengeProxy::proposedCredential const): Deleted.
        (WebKit::AuthenticationChallengeProxy::protectionSpace const): Deleted.
        (WebKit::AuthenticationChallengeProxy::setSecKeyProxyStore): Deleted.
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::create):
        (WebKit::AuthenticationChallengeProxy::listener const):
        (WebKit::AuthenticationChallengeProxy::previousFailureCount const): Deleted.
        * UIProcess/Authentication/AuthenticationDecisionListener.cpp:
        (WebKit::AuthenticationDecisionListener::AuthenticationDecisionListener):
        (WebKit::AuthenticationDecisionListener::~AuthenticationDecisionListener):
        (WebKit::AuthenticationDecisionListener::useCredential):
        (WebKit::AuthenticationDecisionListener::cancel):
        (WebKit::AuthenticationDecisionListener::performDefaultHandling):
        (WebKit::AuthenticationDecisionListener::rejectProtectionSpaceAndContinue):
        (WebKit::AuthenticationDecisionListener::detachChallenge): Deleted.
        * UIProcess/Authentication/AuthenticationDecisionListener.h:
        (WebKit::AuthenticationDecisionListener::create):
        * UIProcess/Authentication/cocoa/AuthenticationChallengeProxyCocoa.mm:
        (WebKit::AuthenticationChallengeProxy::sendClientCertificateCredentialOverXpc):
        (WebKit::AuthenticationChallengeProxy::sendClientCertificateCredentialOverXpc const): Deleted.
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didReceiveAuthenticationChallenge):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::secKeyProxyStore):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        * UIProcess/WebPageProxy.h:

2018-09-18  Ben Richards  <benton_richards@apple.com>

        Add script to generate WebContent service resource files and change XPC service main SPI to have it's own header
        https://bugs.webkit.org/show_bug.cgi?id=188601

        Reviewed by Dan Bernstein.

        Added a script to the process entitlements build phase of the WebContent service that copies resource
        files to WebKit.framework/PrivateHeaders/CustomWebContentResources. These resource files are to
        be used by clients who would like to make a custom WebContent service.

        * Scripts/copy-webcontent-resources-to-private-headers.sh: Added.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/API/Cocoa/WKWebProcess.h: Drive-by fix to make this header compileable alone.

2018-09-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236138.

        Caused API test and layout test failures on iOS.

        Reverted changeset:

        "REGRESSION (PSON): White or Black flash occurs when process
        swapping on navigation on Mac"
        https://bugs.webkit.org/show_bug.cgi?id=189663
        https://trac.webkit.org/changeset/236138

2018-09-18  Eric Carlson  <eric.carlson@apple.com>

        Always log when granting/revoking capture sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=189701
        <rdar://problem/44564029>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream): Always log.
        (WebKit::UserMediaProcessManager::endedCaptureSession): Ditto.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::grantUserMediaDeviceSandboxExtensions): Ditto.
        (WebKit::UserMediaPermissionRequestManager::revokeUserMediaDeviceSandboxExtensions): Ditto.

2018-09-18  Youenn Fablet  <youenn@apple.com>

        Enable Unified Plan by default
        https://bugs.webkit.org/show_bug.cgi?id=189675

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2018-09-18  Antti Koivisto  <antti@apple.com>

        REGRESSION (PSON): White or Black flash occurs when process swapping on navigation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=189663
        <rdar://problem/44184955>

        Reviewed by Geoff Garen.

        We need to keep the layer tree of the previous page alive and visible until we have something
        to render on the new page. With PSON on Mac this means that we should keep displaying the
        layer tree from the previus process.

        This patch moves the management of 'attaching' the drawing area (Mac only concept) from web process
        to UI process. This is when we parent the layer tree to the view root layer. It also ensures that
        the layer tree is not deleted too early on process swap and that it still eventually gets deleted.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::attachInWebProcess):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::messageNamesToIgnoreWhileSuspended):
        (WebKit::SuspendedPageProxy::tearDownDrawingAreaInWebProcess):

        We no longer tear down drawing area (layer tree) for suspended pages automatically. Send an explicit
        message for it.

        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):

        Only call didRelaunchProcess when process actually relaunched (not navigation process launch) to
        match not calling processDidExit in resetStateAfterProcessExited.

        (WebKit::WebPageProxy::didCompletePageTransition):

        Attach the drawing area if appropriate.

        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

        Send suspend message to WebPage immediately instead waiting for the runloop callback. This is needed so we
        can avoid flashing the initial empty document load when the new Page object is created.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):

        Don't call processDidExit when suspending, not exiting the process (this function needs a new name or rafactoring).
        This avoids clearing the drawing area and flashing to black.

        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):

        This is called when we have switched to the new layer tree.
        Tear down the drawing area in the previus process.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::attachInWebProcess):

        Send a message to the web process to attach the drawing area.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::attach):
        (WebKit::DrawingArea::attachDrawingArea): Deleted.

        Rename to be less redundant.

        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):

        Don't attach drawing area automatically. It will be done by a message from UI process.

        (WebKit::WebPage::setLayerTreeStateIsFrozen):

        Layer tree is always frozen in a suspended process (if it exists).

        (WebKit::WebPage::didStartPageTransition):
        (WebKit::WebPage::didCompletePageTransition):

        Notify UI process of transition completion.

        (WebKit::WebPage::setIsSuspended):
        (WebKit::WebPage::tearDownDrawingAreaForSuspend):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

        Don't attach drawing area automatically. It will be done by a message from UI process.

        (WebKit::TiledCoreAnimationDrawingArea::attach):
        (WebKit::TiledCoreAnimationDrawingArea::attachDrawingArea): Deleted.

2018-09-18  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Implement mouse event modifiers
        https://bugs.webkit.org/show_bug.cgi?id=189697

        Reviewed by Carlos Garcia Campos.

        Only "CapsLocks" is missing, as WPE doesn't support that modifier.
        * Shared/wpe/WebEventFactory.cpp:
        (WebKit::modifiersForEventModifiers):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::modifiersForEvent): Deleted.

2018-09-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix after r236101.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        Correct a BinarySemaphore::wait() call which now accepts no arguments.

2018-09-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use Semaphore and BinarySemaphore instead of dispatch_semaphore_t
        https://bugs.webkit.org/show_bug.cgi?id=185339

        Reviewed by Mark Lam.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::wait):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):
        Use BinarySemaphore.

        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::finishAllPendingWorkSynchronously):
        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::applicationWillTerminate):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (appLinkForURL):
        Use BinarySemaphore to wait for async completion handler. We also fix memory leak
        since the old code does not call dispatch_release for the used semaphore.

2018-09-17  Simon Fraser  <simon.fraser@apple.com>

        Many modern media control tests leak documents in testing
        https://bugs.webkit.org/show_bug.cgi?id=189437

        Reviewed by Darin Adler.

        In order to accurately detect leaks in media controls tests which use lots of
        SVGImages, we have to:
        - Fire a zero-delay timer after the postTask, in order for ImagesLoader's m_derefElementTimer
          to clear references to elements.
        - Have releaseCriticalMemory() call CachedResourceLoader's garbageCollectDocumentResources()
          to drop the last handle to the CachedResource for an SVGImage.
        - Call WKBundleReleaseMemory() after the GC and timer, since we need garbageCollectDocumentResources()
          to run again after that timer has fired.
        
        This should fix most of the spurious leak reports involving SVGImage documents.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCallAfterTasksAndTimers):
        (WKBundlePagePostTask): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2018-09-17  Dan Bernstein  <mitz@apple.com>

        Try to fix Apple internal builds with the iOS 12.0 SDK.

        * Configurations/WebKit.xcconfig: Disable framework header postprocessing for iOS 12.0.

2018-09-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236092 because it breaks internal builds. Also,  remove stray '+' character from ChangeLog file.

        * Scripts/copy-webcontent-resources-to-private-headers.sh: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2018-08-17  Ben Richards  <benton_richards@apple.com>

        Add script to generate WebContent service resource files and change XPC service main SPI to have it's own header
        https://bugs.webkit.org/show_bug.cgi?id=188601

        Reviewed by Dan Bernstein.

        Added a script to the process entitlements build phase of the WebContent service that copies resource
        files to WebKit.framework/PrivateHeaders/CustomWebContentResources. These resource files are to
        be used by clients who would like to make a custom WebContent service.

        * Scripts/copy-webcontent-resources-to-private-headers.sh: Added.
        * WebKit.xcodeproj/project.pbxproj:


2018-09-17  Simon Fraser  <simon.fraser@apple.com>

        Add more Fullscreen logging
        https://bugs.webkit.org/show_bug.cgi?id=189656

        Reviewed by Jer Noble.

        Add some fullscreen logging so I can tell whether WebFullScreenManager ever releases
        the fullscreen element.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::WebFullScreenManager):
        (WebKit::WebFullScreenManager::videoControlsManagerDidChange):
        (WebKit::WebFullScreenManager::setPIPStandbyElement):
        (WebKit::WebFullScreenManager::enterFullScreenForElement):
        (WebKit::WebFullScreenManager::exitFullScreenForElement):
        (WebKit::WebFullScreenManager::willEnterFullScreen):
        (WebKit::WebFullScreenManager::didEnterFullScreen):
        (WebKit::WebFullScreenManager::willExitFullScreen):
        (WebKit::WebFullScreenManager::didExitFullScreen):
        (WebKit::WebFullScreenManager::close):
        * WebProcess/FullScreen/WebFullScreenManager.h:

2018-09-17  Tim Horton  <timothy_horton@apple.com>

        Swipe snapshot can get stuck if swiping is disabled while it is visible
        https://bugs.webkit.org/show_bug.cgi?id=189667
        <rdar://problem/40367780>

        Reviewed by Simon Fraser.

        If navigation gestures are disabled while a swipe snapshot is visible,
        WKWebView will tear down the ViewGestureController, which means that
        the SnapshotRemovalTracker will no longer be around to ever remove
        the snapshot.

        It's currently very hard to write a test for this because we have
        yet to come up with a good mechanism for testing swiping on iOS.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        Instead of tearing down the ViewGestureController when navigation
        gestures are disabled, just set a bit on it that disables gestures.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::canSwipeInDirection const):
        * UIProcess/Cocoa/ViewGestureController.h:
        (WebKit::ViewGestureController::setSwipeGestureEnabled):
        (WebKit::ViewGestureController::isSwipeGestureEnabled):
        Add a bit to ViewGestureController that makes starting new gestures
        always fail, but allows e.g. snapshots from existing swipes to continue
        their usual behavior.

2018-09-17  Alex Christensen  <achristensen@webkit.org>

        Expose WKWebProcess.h as a private header
        https://bugs.webkit.org/show_bug.cgi?id=189636

        * WebKit.xcodeproj/project.pbxproj:

2018-09-17  Alex Christensen  <achristensen@webkit.org>

        Expose XPCServiceMain in a WebProcess header rather than WKProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=189636

        Reviewed by Dan Bernstein.

        Fix a few build failures along the way.

        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::windowAndViewFramesChanged):
        (WebKit::PluginControllerProxy::updateLayerHostingContext):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::replacedNSWorkspace_launchApplicationAtURL_options_configuration_error):
        (WebKit::PluginProcess::platformInitializeProcess):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        (main):
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _webContentProcessXPCMain]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/API: Added.
        * WebProcess/API/Cocoa: Added.
        * WebProcess/API/Cocoa/WKWebProcess.cpp: Added.
        (WKWebProcessMain):
        * WebProcess/API/Cocoa/WKWebProcess.h: Added.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject convertScreenPointToRootView:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2018-09-17  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Respond with requested authentication scheme for authentication challenge.
        https://bugs.webkit.org/show_bug.cgi?id=189318

        Reviewed by Alex Christensen.

        Curl port depends on libcurl's authentication handling by enabling CURLAUTH_ANY. With this
        mode, the round-trip communication between the client and the server is handled by libcurl
        internally. That's okay for many cases. But when initial request has a credentials
        (i.e. XMLHttpRequest), there's no valid chance to store credential to the storage because
        the returned response is not 401.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl):
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCurl::tryHttpAuthentication):
        (WebKit::NetworkDataTaskCurl::tryProxyAuthentication):
        (WebKit::NetworkDataTaskCurl::restartWithCredential):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:

2018-09-17  Woodrow Wang  <woodrow_wang@apple.com>

        Clear pending resource load statistics' writes after tests
        https://bugs.webkit.org/show_bug.cgi?id=189632
        <rdar://problem/44469275>

        Reviewed by Chris Dumez.

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

2018-09-17  Chris Dumez  <cdumez@apple.com>

        PSON: window.open() with 'noopener' should only process-swap cross-site, not cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=189602
        <rdar://problem/44430549>

        Reviewed by Geoff Garen.

        The following fixes were made to our process swap on navigation logic:
        - Browsing contexts opened via window.open() with 'noopener' option now only same if
          they are cross-site, instead of doing a stricter cross-origin check.
        - Support process swapping when opening a new window via <a target="_blank" rel="noopener">
          that is cross-site.

        In order to support this, the following changes were made:
        - Stop passing a 'isCrossOriginWindowOpenNavigation' flag to the UIProcess when navigating because:
          - This is specific to window.open() and does not apply to other windows opened by DOM
          - This forces the origin check to happens on WebContent process side instead of relying on the
            one in WebProcessPool in the UIProcess
        - Pass the origin of the requester to the UIProcess when navigating, so that the WebProcessPool
          can use the requester's host for the cross-site check for the initial navigation in a new window
          created by DOM.
        - Add 2 flags to WebPageProxy which indicate if the page was created by the DOM and if any provisional
          loads have been committed. The WebProcessPool uses theses flags to recognize initial loads in
          new windows created by the DOM, so that it uses the requester's origin for the cross-site check.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/API/APINavigation.h:
        (API::Navigation::setRequesterOrigin):
        (API::Navigation::requesterOrigin const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setOpenedByDOM):
        (WebKit::WebPageProxy::openedByDOM const):
        (WebKit::WebPageProxy::hasCommittedAnyProvisionalLoads const):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::shouldUseSameProcessBasedOnURLs):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-09-17  Alexey Proskuryakov  <ap@apple.com>

        Revert https://trac.webkit.org/r235910, because the new test times out.
        Crash under PlatformPopupMenuData::encode when interacting with a select menu that has variable fonts
        https://bugs.webkit.org/show_bug.cgi?id=188008

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode):
        (IPC::decode):

2018-09-17  Alex Christensen  <achristensen@webkit.org>

        Refactoring related to Safe Browsing
        https://bugs.webkit.org/show_bug.cgi?id=189631

        Reviewed by Tim Horton.

        Make SafeBrowsingResult RefCounted.
        Move logic from an unnamed lambda to WebPageProxy::receivedNavigationPolicyDecision.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrame): Deleted.
        (WebKit::WebPageProxy::addPlatformLoadParameters): Deleted.
        (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): Deleted.
        (WebKit::WebPageProxy::startDrag): Deleted.
        (WebKit::WebPageProxy::setPromisedDataForImage): Deleted.
        (WebKit::WebPageProxy::setDragCaretRect): Deleted.
        (WebKit::WebPageProxy::platformRegisterAttachment): Deleted.
        (WebKit::WebPageProxy::platformCloneAttachment): Deleted.
        * UIProcess/SafeBrowsingResult.h:
        (WebKit::SafeBrowsingResult::create):
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
        * UIProcess/WebFramePolicyListenerProxy.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:

2018-09-17  Darin Adler  <darin@apple.com>

        Use OpaqueJSString rather than JSRetainPtr inside WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189652

        Reviewed by Saam Barati.

        * Shared/API/c/WKString.cpp: Removed unneeded include of JSStringRef.h.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp: Removed unneeded
        include of JSRetainPtr.
        (WebKit::toJSString): Deleted.
        (WebKit::toJSValue): Use OpaqueJSString::create.
        (WebKit::callPropertyFunction): Ditto.
        (WebKit::evaluate): Use adoptRef.
        (WebKit::evaluateJavaScriptCallback): Ditto.
        (WebKit::WebAutomationSessionProxy::scriptObjectForFrame):
        Use OpaqueJSString::create.
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction): Use
        String rather than JSStringRef.

        * WebProcess/Plugins/PDF/PDFPlugin.mm: Removed unneeded includes.
        (WebKit::PDFPlugin::runScriptsInPDFDocument): Use OpaqueJSString::create.

2018-09-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix incorrect WPE build fix made in r236009

        This isn't the right place to add the typedef. I failed to notice that the WebKitWebView
        type is not actually used anywhere in this header. Actually, the problematic function is no
        longer declared or used anywhere and was just missed when WebKitScriptDialog was refactored,
        so remove it.

        * UIProcess/API/wpe/WebKitScriptDialog.h:
        * UIProcess/API/wpe/WebKitScriptDialogWPE.cpp:
        (webkitScriptDialogRun): Deleted.

2018-09-17  Sihui Liu  <sihui_liu@apple.com>

        Move IndexedDB to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189415
        <rdar://problem/44396973>

        Reviewed by Chris Dumez.

        We are going to eliminate storage process and move its functionality to network process. 
        The reasons why we want to do this:
        1. Lower resource usage of having an additional process for storage operations, especially
        memory. Single storage process takes about 5MB memory on macOS.
        2. Reduce latency of Service Workers. After enabling Service Workers, we've seen
        regression in app launch. The launch time of storage process is partly attributed to this:
        Service Workers delay page loading until receiving response from storage process.
        3. We choose network process because UI process may have broader access in file system
        that we don't want the storage operations to have.

        This patch is the first piece towards the goal. It mainly moves indexedDB from storage process
        to corresponding components of network process. Moving of Service Worker and stopping to 
        launch storage process will be done in following patches.

        We expect to see the higher cpu and memory usage of network process as it is taking more work,
        but the overall gain in memory and latency after we completely remove storage process should be 
        positive.

        * CMakeLists.txt:
        * DerivedSources.make:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.cpp.
        (WebKit::WebIDBConnectionToClient::create):
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess):
        (WebKit::WebIDBConnectionToClient::messageSenderConnection):
        (WebKit::WebIDBConnectionToClient::connectionToClient):
        (WebKit::WebIDBConnectionToClient::didDeleteDatabase):
        (WebKit::WebIDBConnectionToClient::didOpenDatabase):
        (WebKit::WebIDBConnectionToClient::didAbortTransaction):
        (WebKit::WebIDBConnectionToClient::didCommitTransaction):
        (WebKit::WebIDBConnectionToClient::didCreateObjectStore):
        (WebKit::WebIDBConnectionToClient::didDeleteObjectStore):
        (WebKit::WebIDBConnectionToClient::didRenameObjectStore):
        (WebKit::WebIDBConnectionToClient::didClearObjectStore):
        (WebKit::WebIDBConnectionToClient::didCreateIndex):
        (WebKit::WebIDBConnectionToClient::didDeleteIndex):
        (WebKit::WebIDBConnectionToClient::didRenameIndex):
        (WebKit::WebIDBConnectionToClient::didPutOrAdd):
        (WebKit::WebIDBConnectionToClient::handleGetResult):
        (WebKit::WebIDBConnectionToClient::didGetRecord):
        (WebKit::WebIDBConnectionToClient::didGetAllRecords):
        (WebKit::WebIDBConnectionToClient::didGetCount):
        (WebKit::WebIDBConnectionToClient::didDeleteRecord):
        (WebKit::WebIDBConnectionToClient::didOpenCursor):
        (WebKit::WebIDBConnectionToClient::didIterateCursor):
        (WebKit::WebIDBConnectionToClient::fireVersionChangeEvent):
        (WebKit::WebIDBConnectionToClient::didStartTransaction):
        (WebKit::WebIDBConnectionToClient::didCloseFromServer):
        (WebKit::WebIDBConnectionToClient::notifyOpenDBRequestBlocked):
        (WebKit::WebIDBConnectionToClient::didGetAllDatabaseNames):
        (WebKit::WebIDBConnectionToClient::deleteDatabase):
        (WebKit::WebIDBConnectionToClient::openDatabase):
        (WebKit::WebIDBConnectionToClient::abortTransaction):
        (WebKit::WebIDBConnectionToClient::commitTransaction):
        (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToClient::createObjectStore):
        (WebKit::WebIDBConnectionToClient::deleteObjectStore):
        (WebKit::WebIDBConnectionToClient::renameObjectStore):
        (WebKit::WebIDBConnectionToClient::clearObjectStore):
        (WebKit::WebIDBConnectionToClient::createIndex):
        (WebKit::WebIDBConnectionToClient::deleteIndex):
        (WebKit::WebIDBConnectionToClient::renameIndex):
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        (WebKit::WebIDBConnectionToClient::getRecord):
        (WebKit::WebIDBConnectionToClient::getAllRecords):
        (WebKit::WebIDBConnectionToClient::getCount):
        (WebKit::WebIDBConnectionToClient::deleteRecord):
        (WebKit::WebIDBConnectionToClient::openCursor):
        (WebKit::WebIDBConnectionToClient::iterateCursor):
        (WebKit::WebIDBConnectionToClient::establishTransaction):
        (WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose):
        (WebKit::WebIDBConnectionToClient::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent):
        (WebKit::WebIDBConnectionToClient::openDBRequestCancelled):
        (WebKit::WebIDBConnectionToClient::confirmDidCloseFromServer):
        (WebKit::WebIDBConnectionToClient::getAllDatabaseNames):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.h.
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.messages.in.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):

        Code moved from StorageToWebProcessConnection::didReceiveMessage.

        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):

        Network process receives and stores sandbox extension of temporary files for later indexedDB
        use.

        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        (WebKit::generateIDBConnectionToServerIdentifier):
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        (WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::idbServer):
        (WebKit::NetworkProcess::ensurePathExists):
        (WebKit::NetworkProcess::postStorageTask):
        (WebKit::NetworkProcess::performNextStorageTask):
        (WebKit::NetworkProcess::prepareForAccessToTemporaryFile):
        (WebKit::NetworkProcess::accessToTemporaryFileComplete):
        (WebKit::NetworkProcess::indexedDatabaseOrigins):
        (WebKit::NetworkProcess::addIndexedDatabaseSession):
        (WebKit::NetworkProcess::getSandboxExtensionsForBlobFiles):

        Instead of asking UI process to grant sandbox extension to storage process, now network 
        process just asks for sandbox extension fot itself.

        (WebKit::NetworkProcess::didGetSandboxExtensionsForBlobFiles):
        (WebKit::NetworkProcess::updateTemporaryFileSandboxExtensions):
        (WebKit::NetworkProcess::grantSandboxExtensionsToStorageProcessForBlobs): Deleted.
        (WebKit::NetworkProcess::didGrantSandboxExtensionsToStorageProcessForBlobs): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * Shared/Storage/StorageProcessCreationParameters.cpp:
        (WebKit::StorageProcessCreationParameters::encode const):
        (WebKit::StorageProcessCreationParameters::decode):
        * Shared/Storage/StorageProcessCreationParameters.h:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * Shared/WebsiteDataStoreParameters.h:
        * Sources.txt:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::initializeWebsiteDataStore):
        (WebKit::StorageProcess::fetchWebsiteData):
        (WebKit::StorageProcess::deleteWebsiteData):
        (WebKit::StorageProcess::deleteWebsiteDataForOrigins):
        (WebKit::StorageProcess::idbServer): Deleted.
        (WebKit::StorageProcess::grantSandboxExtensionsForBlobs): Deleted.
        (WebKit::StorageProcess::prepareForAccessToTemporaryFile): Deleted.
        (WebKit::StorageProcess::accessToTemporaryFileComplete): Deleted.
        (WebKit::StorageProcess::indexedDatabaseOrigins): Deleted.
        (WebKit::StorageProcess::getSandboxExtensionsForBlobFiles): Deleted.
        (WebKit::StorageProcess::didGetSandboxExtensionsForBlobFiles): Deleted.
        * StorageProcess/StorageProcess.h:
        (WebKit::StorageProcess::queue): Deleted.
        * StorageProcess/StorageProcess.messages.in:
        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::didReceiveMessage):
        (WebKit::StorageToWebProcessConnection::didClose):
        (WebKit::generateIDBConnectionToServerIdentifier): Deleted.
        (WebKit::StorageToWebProcessConnection::establishIDBConnectionToServer): Deleted.
        (WebKit::StorageToWebProcessConnection::removeIDBConnectionToServer): Deleted.
        * StorageProcess/StorageToWebProcessConnection.h:
        * StorageProcess/StorageToWebProcessConnection.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getSandboxExtensionsForBlobFiles):
        (WebKit::NetworkProcessProxy::grantSandboxExtensionsToStorageProcessForBlobs): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::getSandboxExtensionsForBlobFiles): Deleted.
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataFetch):
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::storageProcessParameters):
        (WebKit::WebsiteDataStore::parameters):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        (WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):
        (WebKit::WebIDBConnectionToServer::messageSenderConnection):
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::idbConnectionToServerForSession):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::existingIDBConnectionToServerForIdentifier const):
        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
        (WebKit::WebToStorageProcessConnection::didReceiveMessage):
        (WebKit::WebToStorageProcessConnection::didClose):
        (WebKit::WebToStorageProcessConnection::idbConnectionToServerForSession): Deleted.
        * WebProcess/Storage/WebToStorageProcessConnection.h:
        (WebKit::WebToStorageProcessConnection::existingIDBConnectionToServerForIdentifier): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::webToStorageProcessConnectionClosed):

2018-09-08  Darin Adler  <darin@apple.com>

        Streamline JSRetainPtr, fix leaks of JSString and JSGlobalContext
        https://bugs.webkit.org/show_bug.cgi?id=189455

        Reviewed by Keith Miller.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::toJSString): Use adopt function instead of adopt construuctor.
        (WebKit::evaluate): Ditto.
        (WebKit::evaluateJavaScriptCallback): Ditto.
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction): Ditto.

2018-09-14  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r236020.

        This caused an api failure on High Sierra

        Reverted changeset:

        "Refactoring related to Safe Browsing"
        https://bugs.webkit.org/show_bug.cgi?id=189631
        https://trac.webkit.org/changeset/236020

2018-09-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Bug fix on some inaccurate values in NetworkLoadMetrics.
        https://bugs.webkit.org/show_bug.cgi?id=189530

        Reviewed by Alex Christensen.

        Curl port uses the start time libcurl provided. But there's a lug between main thread and Curl thread.
        Record the start time of request instead of libcurl's start timing and use it to measure the metrics.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl):
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCurl::restartWithCredential):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:

2018-09-14  Alex Christensen  <achristensen@webkit.org>

        Refactoring related to Safe Browsing
        https://bugs.webkit.org/show_bug.cgi?id=189631

        Reviewed by Tim Horton.

        Make SafeBrowsingResult RefCounted.
        Move logic from an unnamed lambda to WebPageProxy::receivedNavigationPolicyDecision.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrame): Deleted.
        (WebKit::WebPageProxy::addPlatformLoadParameters): Deleted.
        (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): Deleted.
        (WebKit::WebPageProxy::startDrag): Deleted.
        (WebKit::WebPageProxy::setPromisedDataForImage): Deleted.
        (WebKit::WebPageProxy::setDragCaretRect): Deleted.
        (WebKit::WebPageProxy::platformRegisterAttachment): Deleted.
        (WebKit::WebPageProxy::platformCloneAttachment): Deleted.
        * UIProcess/SafeBrowsingResult.h:
        (WebKit::SafeBrowsingResult::create):
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
        * UIProcess/WebFramePolicyListenerProxy.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:

2018-09-14  Geoffrey Garen  <ggaren@apple.com>

        Clarify the configuration used by WKUIDelegate's createWebViewWithConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=189634

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKUIDelegate.h:

2018-09-11  Simon Fraser  <simon.fraser@apple.com>

        Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings
        https://bugs.webkit.org/show_bug.cgi?id=189521

        Reviewed by Tim Horton.

        Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>.
        
        RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>.
        
        Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree,
        clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton
        empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting,
        and removed some unnecessary parent checks, and redundant unparenting.
        
        Other changes are just to adapt to the new ownership patterns.
        
        I verified that no GraphicsLayers were leaked or abandoned after this change.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::~WebInspectorClient):
        (WebKit::WebInspectorClient::showPaintRect):
        (WebKit::WebInspectorClient::animationEndedForLayer):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::createGraphicsLayer):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2018-09-14  Eric Carlson  <eric.carlson@apple.com>

        Support arbitrary video resolution in getUserMedia API
        https://bugs.webkit.org/show_bug.cgi?id=178109
        <rdar://problem/35083128>

        Reviewed by Youenn Fablet.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:

2018-09-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl][WebKit] Bug fix for continuously retrying with empty credentials.
        https://bugs.webkit.org/show_bug.cgi?id=189601

        Reviewed by Alex Christensen.

        Added stop condition for empty credentials passed by client.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::curlDidReceiveResponse):
        (WebKit::NetworkDataTaskCurl::invokeDidReceiveResponse):
        (WebKit::NetworkDataTaskCurl::tryHttpAuthentication):
        (WebKit::NetworkDataTaskCurl::tryProxyAuthentication):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:

2018-09-14  Jer Noble  <jer.noble@apple.com>

        Turn SourceBufferChangeTypeEnabled on by default
        https://bugs.webkit.org/show_bug.cgi?id=189527

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2018-09-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, speculative WPE build fix after r236004
        https://bugs.webkit.org/show_bug.cgi?id=189545

        * UIProcess/API/wpe/WebKitScriptDialog.h:

2018-09-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make script dialogs modal to the current web view only
        https://bugs.webkit.org/show_bug.cgi?id=189545

        Reviewed by Michael Catanzaro.

        Change the default implementation of script dialogs to use an embedded window, like the HTTP auth dialog,
        instead of a GtkMessageDialog. This patch adds a base class WebKitWebViewDialog shared by
        WebKitAuthenticationDialog and the new WebKitScriptDialogImpl.

        * SourcesGTK.txt: Add new files to compilation.
        * UIProcess/API/glib/WebKitScriptDialogPrivate.h:
        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (webkitAuthenticationDialogInitialize): Do not use a frame and use a better styled title.
        (webkit_authentication_dialog_class_init): Remove implementation of vfuncs that are now implemented by the
        parent.
        * UIProcess/API/gtk/WebKitAuthenticationDialog.h:
        * UIProcess/API/gtk/WebKitScriptDialogGtk.cpp:
        (webkitScriptDialogAccept): Use WebKitScriptDialogImpl API.
        (webkitScriptDialogDismiss): Ditto.
        (webkitScriptDialogSetUserInput): Ditto.
        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp: Added.
        (webkitScriptDialogImplClose):
        (webkitScriptDialogImplKeyPressEvent):
        (webkitScriptDialogImplMap):
        (webkitScriptDialogImplConstructed):
        (webkitScriptDialogImplDispose):
        (webkit_script_dialog_impl_class_init):
        (webkitScriptDialogImplAddButton):
        (webkitScriptDialogImplNew):
        (webkitScriptDialogImplCancel):
        (webkitScriptDialogImplConfirm):
        (webkitScriptDialogImplSetEntryText):
        * UIProcess/API/gtk/WebKitScriptDialogImpl.h: Added.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewChildIsInternalWidget): Rename authenticationDialog as just dialog.
        (webkitWebViewBaseAddDialog): Ditto.
        (webkitWebViewBaseContainerRemove): Ditto.
        (webkitWebViewBaseContainerForall): Ditto.
        (webkitWebViewBaseConstructed): Ditto.
        (webkitWebViewBaseSizeAllocate): Ditto.
        (webkitWebViewBaseKeyPressEvent): Ditto.
        (webkitWebViewBaseHandleMouseEvent): Ditto.
        (webkitWebViewBaseButtonPressEvent): Ditto.
        (webkitWebViewBaseButtonReleaseEvent): Ditto.
        (webkitWebViewBaseHandleWheelEvent): Ditto.
        (webkitWebViewBaseScrollEvent): Ditto.
        (webkitWebViewBaseMotionNotifyEvent): Ditto.
        (webkitWebViewBaseCrossingNotifyEvent): Ditto.
        (webkitWebViewBaseTouchEvent): Ditto.
        (webkitWebViewBaseFocus): Ditto.
        (webkitWebViewBaseDestroy): Ditto.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWebViewDialog.cpp: Added.
        (webkitWebViewDialogDraw):
        (webkitWebViewDialogSizeAllocate):
        (webkitWebViewDialogConstructed):
        (webkit_web_view_dialog_class_init):
        * UIProcess/API/gtk/WebKitWebViewDialog.h: Added.
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkitWebViewAuthenticate):
        (webkitWebViewScriptDialog):

2018-09-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235954.

        Breaks the watchOS build.

        Reverted changeset:

        "Move IndexedDB to Network Process"
        https://bugs.webkit.org/show_bug.cgi?id=189415
        https://trac.webkit.org/changeset/235954

2018-09-13  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): setting window.opener to null allows process swapping in cases that are not web-compatible
        https://bugs.webkit.org/show_bug.cgi?id=189590
        <rdar://problem/44422725>

        Reviewed by Geoffrey Garen.

        If script calls window.open() without 'noopener' and the newly navigated window gets navigated cross-site,
        we are currently unable to process-swap because the opener has a WindowProxy handle to this new Window and
        may interact with it (which we currently do not support cross-process). We were dealing with this by not
        process-swapping if window.opener is not null. This works most of the time but is not sufficient because the
        opener may get nulled out, while the opener still has a valid WindowProxy handle to its openee.

        Therefore, we now also check for a flag indicating if the frame was opened via window.open() without
        'nooopener'. We still need to check if the browsing context has an opener for browsing context created
        via <a target="_blank"> for example (the opener does not have a handle to the new window but the openee
        has access to its opener).

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/API/APINavigation.h:
        (API::Navigation::openedViaWindowOpenWithOpener const):
        (API::Navigation::setOpenedViaWindowOpenWithOpener):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-09-13  Dean Jackson  <dino@grorg.org>

        Generate warnings for Preferences files
        https://bugs.webkit.org/show_bug.cgi?id=189573

        Reviewed by Sam Weinig.

        Generate the "DO NOT EDIT" warnings, rather than have
        them in the template (which was confusing).

        While here, simplify some of the templating generation code
        to avoid duplication.

        * Scripts/GeneratePreferences.rb:
        * Scripts/PreferencesTemplates/WebPageUpdatePreferences.cpp.erb:
        * Scripts/PreferencesTemplates/WebPreferencesDefinitions.h.erb:
        * Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb:
        * Scripts/PreferencesTemplates/WebPreferencesInternalDebugFeatures.cpp.erb:
        * Scripts/PreferencesTemplates/WebPreferencesKeys.cpp.erb:
        * Scripts/PreferencesTemplates/WebPreferencesKeys.h.erb:
        * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb:

2018-09-13  Keith Rollin  <krollin@apple.com>

        WebPageProxy::reportPageLoadResult can crash on some code paths
        https://bugs.webkit.org/show_bug.cgi?id=189568

        Reviewed by Chris Dumez.

        WebPageProxy::reportPageLoadResult (which is called from
        WebPageProxy::didFinishLoadForFrame) can sometimes crash when
        accessing m_pageLoadStart (a std::optional) in its unloaded state.
        Normally, m_pageLoadStart is initialized in
        WebPageProxy::didStartProvisionalLoadForFrame, which one would expect
        would be called before WebPageProxy::didFinishLoadForFrame. But that
        turns out to not always be the case. It's not apparent under what
        conditions didStartProvisionalLoadForFrame will not be called, but
        it's happening in the wild, leading to crashes now that std::optional
        asserts in release builds on bad accesses (see
        https://bugs.webkit.org/show_bug.cgi?id=189568).

        Fix this by checking m_pageLoadState on entry to reportPageLoadResult.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::reportPageLoadResult):

2018-09-13  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.BackWithoutSuspendedPage API test hits assertion under WebPageProxy::didCreateMainFrame()
        https://bugs.webkit.org/show_bug.cgi?id=189599

        Reviewed by Geoffrey Garen.

        The code in WebPageProxy::reattachToWebProcess() was re-initializing m_mainFrame unconditionally in case
        of a HistoryNavigation. The reason we need to initialize m_mainFrame in reattachToWebProcess() is if the
        process we're reattaching to already has a WebPage (with a main frame), in which case
        WebPageProxy::didCreateMainFrame() would not get called to initialize WebPageProxy::m_mainFrame.

        The process we're reattaching to can be in such a state only if it comes from a SuspendedPageProxy (we
        detached the WebProcessProxy from the WebPageProxy but kept the WebPage in the "suspended" WebProcess).
        It is true that we're only reattaching to a SuspendedPageProxy's process in the event of history
        navigations. However, it is not true that all history navigations will use a SuspendedPageProxy's process.
        For example, no SuspendedPageProxy may be available for the history navigation because the history
        was restored to a new view from disk, or because the WebBackForwardListItem no longer has a
        SuspendedPageProxy (we currently only keep a single SuspendedPageProxy for the last HistoryItem).

        Therefore, unconditionally initializating m_mainFrame in reattachToWebProcess() for history navigations
        is incorrect and we should instead check if we're reattaching to a SuspendedPage's process.

        Change is covered by ProcessSwap.BackWithoutSuspendedPage API test which is no longer crashes and
        existing Back/Forward PSON API tests which are still passing.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:

2018-09-13  Chris Dumez  <cdumez@apple.com>

        Add release logging to help debug PSON issues
        https://bugs.webkit.org/show_bug.cgi?id=189562

        Reviewed by Ryosuke Niwa.

        Add release logging to help debug issues related to process swap on navigation.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:

2018-09-13  Chris Dumez  <cdumez@apple.com>

        Add null check for drawing area in WebPage::didCompletePageTransition() after r235867
        https://bugs.webkit.org/show_bug.cgi?id=189587

        Reviewed by Geoffrey Garen.

        Add null check for drawing area in WebPage::didCompletePageTransition() after r235867
        as this is causing crashes on the bots.

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

2018-09-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235953.

        Caused layout test crashes under GuardMalloc.

        Reverted changeset:

        "Make GraphicsLayers ref-counted, so their tree can persist
        when disconnected from RenderLayerBackings"
        https://bugs.webkit.org/show_bug.cgi?id=189521
        https://trac.webkit.org/changeset/235953

2018-09-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Allow to run script dialogs asynchronously in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=189544

        Reviewed by Michael Catanzaro.

        Script dialogs are sync in the WebProcess, but we don't need to block the UI process while they are running. Our
        current API doesn't allow it, because it always expects the dialog to be closed in the signal handler. API
        changes are backwards compatible.

        * UIProcess/API/glib/WebKitScriptDialog.cpp:
        (webkitScriptDialogCreate): Added to heap allocate a WebKitScriptDialog.
        (webkitScriptDialogIsRunning): Common implementation here, a script dialog is considered to be running if it has
        a competion handler pending.
        (webkit_script_dialog_ref): WebKitScriptDialog is now refcounted.
        (webkit_script_dialog_unref): Ditto.
        (webkit_script_dialog_close): New method to notify that we are done with the dialog.
        * UIProcess/API/glib/WebKitScriptDialogPrivate.h:
        (_WebKitScriptDialog::_WebKitScriptDialog): Use a single constructor and keep the completion handler.
        * UIProcess/API/glib/WebKitUIClient.cpp: Do not call the completion handler, pass it to the web view.
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewDispose): Close the current script dialog if there's any.
        (webkit_web_view_class_init): Document how to handle dialogs asynchronously.
        (webkitWebViewRunJavaScriptAlert): Do not stack allocate the WebKitScriptDialog, create it with
        webkitScriptDialogCreate() passing the completion handler.
        (webkitWebViewRunJavaScriptConfirm): Ditto.
        (webkitWebViewRunJavaScriptPrompt): Ditto.
        (webkitWebViewRunJavaScriptBeforeUnloadConfirm): Ditto.
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitScriptDialog.h:
        * UIProcess/API/gtk/WebKitScriptDialogGtk.cpp:
        (scriptDialogResponseCallback): Hnadle the response callback.
        (webkitScriptDialogRun): Do not use gtk_dialog_run(), connect to response signal and show the dialogs instead.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/wpe/WebKitScriptDialogWPE.cpp:

2018-09-12  Dan Bernstein  <mitz@apple.com>

        Update availability annotations to match the macOS and iOS SDKs in the Xcode 10 GM seed
        https://bugs.webkit.org/show_bug.cgi?id=189561

        Reviewed by Tim Horton.

        Changed WK_MAC_TBA and WK_IOS_TBA to 10.14 and 12.0, respectively, in all declarations that
        appear in the GM seed SDKs.

        * Shared/API/Cocoa/_WKRenderingProgressEvents.h:
        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAutomationDelegate.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        * UIProcess/API/Cocoa/_WKLinkIconParameters.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInEditingDelegate.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:

2018-09-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Complete support for Paste as Quotation
        https://bugs.webkit.org/show_bug.cgi?id=189504

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView canPerformAction:withSender:]): Handle _pasteAsQuotation:. It’s not included
          in FOR_EACH_WKCONTENTVIEW_ACTION, because it’s declared and implemented in the WKPrivate
          category. If we add more actions in the category, it could make sense to fold them into
          a new FOR_EACH_PRIVATE_WKCONTENTVIEW_ACTION.
        (-[WKWebView targetForAction:withSender:]): Handle _pasteAsQuotation:.
        (-[WKWebView _pasteAsQuotation:]): Send to the WebViewImpl or the WKContentView.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared a new _pasteAsQuotation: action.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::selectorExceptionMap): Added a custom mapping from the new selector to the
          PasteAsQuotation command.

        * UIProcess/ios/WKContentViewInteraction.h: Declare methods for the new action.
        * UIProcess/ios/WKContentViewInteraction.mm:
          Forward _pasteAsQuotation: to the WKWebView so that clients get a chance to override its
          behavior.
        (-[WKContentView _pasteAsQuotationForWebView:]): Send the command to the page.

2018-09-12  Sihui Liu  <sihui_liu@apple.com>

        Move IndexedDB to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189415

        Reviewed by Geoffrey Garen.

        We are going to eliminate storage process and move its functionality to network process. 
        The reasons why we want to do this:
        1. Lower resource usage of having an additional process for storage operations, especially
        memory. Single storage process takes about 5MB memory on macOS.
        2. Reduce latency of Service Workers. After enabling Service Workers, we've seen
        regression in app launch. The launch time of storage process is partly attributed to this:
        Service Workers delay page loading until receiving response from storage process.
        3. We choose network process because UI process may have broader access in file system
        that we don't want the storage operations to have.

        This patch is the first piece towards the goal. It mainly moves indexedDB from storage process
        to corresponding components of network process. Moving of Service Worker and stopping to 
        launch storage process will be done in following patches.

        We expect to see the higher cpu and memory usage of network process as it is taking more work,
        but the overall gain in memory and latency after we completely remove storage process should be 
        positive.


        * CMakeLists.txt:
        * DerivedSources.make:

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.cpp.
        (WebKit::WebIDBConnectionToClient::create):
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess):
        (WebKit::WebIDBConnectionToClient::messageSenderConnection):
        (WebKit::WebIDBConnectionToClient::connectionToClient):
        (WebKit::WebIDBConnectionToClient::didDeleteDatabase):
        (WebKit::WebIDBConnectionToClient::didOpenDatabase):
        (WebKit::WebIDBConnectionToClient::didAbortTransaction):
        (WebKit::WebIDBConnectionToClient::didCommitTransaction):
        (WebKit::WebIDBConnectionToClient::didCreateObjectStore):
        (WebKit::WebIDBConnectionToClient::didDeleteObjectStore):
        (WebKit::WebIDBConnectionToClient::didRenameObjectStore):
        (WebKit::WebIDBConnectionToClient::didClearObjectStore):
        (WebKit::WebIDBConnectionToClient::didCreateIndex):
        (WebKit::WebIDBConnectionToClient::didDeleteIndex):
        (WebKit::WebIDBConnectionToClient::didRenameIndex):
        (WebKit::WebIDBConnectionToClient::didPutOrAdd):
        (WebKit::WebIDBConnectionToClient::handleGetResult):
        (WebKit::WebIDBConnectionToClient::didGetRecord):
        (WebKit::WebIDBConnectionToClient::didGetAllRecords):
        (WebKit::WebIDBConnectionToClient::didGetCount):
        (WebKit::WebIDBConnectionToClient::didDeleteRecord):
        (WebKit::WebIDBConnectionToClient::didOpenCursor):
        (WebKit::WebIDBConnectionToClient::didIterateCursor):
        (WebKit::WebIDBConnectionToClient::fireVersionChangeEvent):
        (WebKit::WebIDBConnectionToClient::didStartTransaction):
        (WebKit::WebIDBConnectionToClient::didCloseFromServer):
        (WebKit::WebIDBConnectionToClient::notifyOpenDBRequestBlocked):
        (WebKit::WebIDBConnectionToClient::didGetAllDatabaseNames):
        (WebKit::WebIDBConnectionToClient::deleteDatabase):
        (WebKit::WebIDBConnectionToClient::openDatabase):
        (WebKit::WebIDBConnectionToClient::abortTransaction):
        (WebKit::WebIDBConnectionToClient::commitTransaction):
        (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToClient::createObjectStore):
        (WebKit::WebIDBConnectionToClient::deleteObjectStore):
        (WebKit::WebIDBConnectionToClient::renameObjectStore):
        (WebKit::WebIDBConnectionToClient::clearObjectStore):
        (WebKit::WebIDBConnectionToClient::createIndex):
        (WebKit::WebIDBConnectionToClient::deleteIndex):
        (WebKit::WebIDBConnectionToClient::renameIndex):
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        (WebKit::WebIDBConnectionToClient::getRecord):
        (WebKit::WebIDBConnectionToClient::getAllRecords):
        (WebKit::WebIDBConnectionToClient::getCount):
        (WebKit::WebIDBConnectionToClient::deleteRecord):
        (WebKit::WebIDBConnectionToClient::openCursor):
        (WebKit::WebIDBConnectionToClient::iterateCursor):
        (WebKit::WebIDBConnectionToClient::establishTransaction):
        (WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose):
        (WebKit::WebIDBConnectionToClient::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent):
        (WebKit::WebIDBConnectionToClient::openDBRequestCancelled):
        (WebKit::WebIDBConnectionToClient::confirmDidCloseFromServer):
        (WebKit::WebIDBConnectionToClient::getAllDatabaseNames):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.h.
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.messages.in.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):

        Code moved from StorageToWebProcessConnection::didReceiveMessage.

        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):

        Network process receives and stores sandbox extension of temporary files for later indexedDB
        use.

        (WebKit::generateIDBConnectionToServerIdentifier):
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        (WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::idbServer):
        (WebKit::NetworkProcess::ensurePathExists):
        (WebKit::NetworkProcess::postStorageTask):
        (WebKit::NetworkProcess::performNextStorageTask):
        (WebKit::NetworkProcess::prepareForAccessToTemporaryFile):
        (WebKit::NetworkProcess::accessToTemporaryFileComplete):
        (WebKit::NetworkProcess::indexedDatabaseOrigins):
        (WebKit::NetworkProcess::addIndexedDatabaseSession):
        (WebKit::NetworkProcess::getSandboxExtensionsForBlobFiles):

        Instead of asking UI process to grant sandbox extension to storage process, now network 
        process just asks for sandbox extension fot itself.

        (WebKit::NetworkProcess::didGetSandboxExtensionsForBlobFiles):
        (WebKit::NetworkProcess::updateTemporaryFileSandboxExtensions):
        (WebKit::NetworkProcess::grantSandboxExtensionsToStorageProcessForBlobs): Deleted.
        (WebKit::NetworkProcess::didGrantSandboxExtensionsToStorageProcessForBlobs): Deleted.
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::queue):
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * Shared/Storage/StorageProcessCreationParameters.cpp:
        (WebKit::StorageProcessCreationParameters::encode const):
        (WebKit::StorageProcessCreationParameters::decode):
        * Shared/Storage/StorageProcessCreationParameters.h:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * Shared/WebsiteDataStoreParameters.h:
        * Sources.txt:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::initializeWebsiteDataStore):
        (WebKit::StorageProcess::fetchWebsiteData):
        (WebKit::StorageProcess::deleteWebsiteData):
        (WebKit::StorageProcess::deleteWebsiteDataForOrigins):
        (WebKit::StorageProcess::idbServer): Deleted.
        (WebKit::StorageProcess::grantSandboxExtensionsForBlobs): Deleted.
        (WebKit::StorageProcess::prepareForAccessToTemporaryFile): Deleted.
        (WebKit::StorageProcess::accessToTemporaryFileComplete): Deleted.
        (WebKit::StorageProcess::indexedDatabaseOrigins): Deleted.
        (WebKit::StorageProcess::getSandboxExtensionsForBlobFiles): Deleted.
        (WebKit::StorageProcess::didGetSandboxExtensionsForBlobFiles): Deleted.
        * StorageProcess/StorageProcess.h:
        (WebKit::StorageProcess::queue): Deleted.
        * StorageProcess/StorageProcess.messages.in:
        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::didReceiveMessage):
        (WebKit::StorageToWebProcessConnection::didClose):
        (WebKit::generateIDBConnectionToServerIdentifier): Deleted.
        (WebKit::StorageToWebProcessConnection::establishIDBConnectionToServer): Deleted.
        (WebKit::StorageToWebProcessConnection::removeIDBConnectionToServer): Deleted.
        * StorageProcess/StorageToWebProcessConnection.h:
        * StorageProcess/StorageToWebProcessConnection.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getSandboxExtensionsForBlobFiles):
        (WebKit::NetworkProcessProxy::grantSandboxExtensionsToStorageProcessForBlobs): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::getSandboxExtensionsForBlobFiles): Deleted.
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataFetch):
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::storageProcessParameters):
        (WebKit::WebsiteDataStore::parameters):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        (WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):
        (WebKit::WebIDBConnectionToServer::messageSenderConnection):
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::idbConnectionToServerForSession):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::existingIDBConnectionToServerForIdentifier):
        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
        (WebKit::WebToStorageProcessConnection::didReceiveMessage):

        Code moved from WebToStorageProcessConnection::didReceiveMessage.

        (WebKit::WebToStorageProcessConnection::didClose):
        (WebKit::WebToStorageProcessConnection::idbConnectionToServerForSession): Deleted.
        * WebProcess/Storage/WebToStorageProcessConnection.h:
        (WebKit::WebToStorageProcessConnection::existingIDBConnectionToServerForIdentifier): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::webToStorageProcessConnectionClosed):

2018-09-11  Simon Fraser  <simon.fraser@apple.com>

        Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings
        https://bugs.webkit.org/show_bug.cgi?id=189521

        Reviewed by Tim Horton.

        Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>.
        
        RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>.
        
        All the other changes are just to adapt to the new ownership patterns.
        
        I verified that no GraphicsLayers were leaked or abandoned after this change.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::~WebInspectorClient):
        (WebKit::WebInspectorClient::showPaintRect):
        (WebKit::WebInspectorClient::animationEndedForLayer):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::createGraphicsLayer):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2018-09-12  Chris Dumez  <cdumez@apple.com>

        PSON: No process swap on back navigation after URL bar navigation
        https://bugs.webkit.org/show_bug.cgi?id=189557
        <rdar://problem/44353108>

        Reviewed by Alex Christensen.

        Our logic in WebProcessPool::processForNavigationInternal() was wrongly using
        WebBackForwardList::currentItem() as source item of the navigation, instead of
        using Navigation::fromItem(). In case of back navigation, by the time
        processForNavigation() is called, the WebBackForwardList's currentItem has already
        been updated to be the target item, via a Sync IPC from the WebProcess. As a result,
        the source and target items would be the same in the following check:
        ` if (currentItem->itemID().processIdentifier == backForwardListItem->itemID().processIdentifier)`

        This would cause us to reuse the same process incorrectly. Our existing API test coverage
        did not catch this because our target HistoryItem usually has a SuspendedPage and we decide
        to use the SuspendedPage's process a few lines above in WebProcessPool::processForNavigationInternal().

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

2018-09-12  Alex Christensen  <achristensen@webkit.org>

        Make IPC::SharedBufferDataReference a type that decodes into but does not inherit from IPC::DataReference
        https://bugs.webkit.org/show_bug.cgi?id=189519

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        (WebKit::NetworkResourceLoader::sendBuffer):
        * Platform/IPC/DataReference.cpp:
        (IPC::SharedBufferDataReference::encode const): Deleted.
        * Platform/IPC/DataReference.h:
        (IPC::SharedBufferDataReference::SharedBufferDataReference): Deleted.
        * Platform/IPC/HandleMessage.h:
        * Platform/IPC/SharedBufferDataReference.h: Added.
        (IPC::SharedBufferDataReference::SharedBufferDataReference):
        (IPC::SharedBufferDataReference::encode const):
        * Scripts/webkit/messages.py:
        * Shared/API/APIData.h:
        * StorageProcess/StorageProcess.messages.in:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didReceiveData):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::storeDerivedDataToCache):
        * WebProcess/Network/WebResourceLoader.messages.in:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveBlobChunk):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerAttachmentIdentifier):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getContentsAsMHTMLData):
        (WebKit::WebPage::getSelectionAsWebArchiveData):
        (WebKit::WebPage::getMainResourceDataOfFrame):
        (WebKit::WebPage::getResourceDataFromFrame):
        (WebKit::WebPage::getWebArchiveOfFrame):
        (WebKit::WebPage::drawPagesToPDF):
        * WebProcess/WebPage/WebPage.messages.in:

2018-09-11  Dean Jackson  <dino@apple.com>

        Header parsing for experimental and internal debug features
        https://bugs.webkit.org/show_bug.cgi?id=189486
        <rdar://problem/44320618>

        Reviewed by Tim Horton.

        Provide key-based (string) access to experimental and internal features.

        * Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb:
        * Scripts/PreferencesTemplates/WebPreferencesInternalDebugFeatures.cpp.erb:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetExperimentalFeatureForKey):
        (WKPreferencesResetAllInternalDebugFeatures):
        (WKPreferencesSetInternalDebugFeatureForKey):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/WebPreferences.h:

2018-09-10  Matt Rajca  <mrajca@apple.com>

        Expose a few WebPlaybackControlsManager-driven PIP APIs to clients
        https://bugs.webkit.org/show_bug.cgi?id=189478
        <rdar://problem/44312650>

        Reviewed by Eric Carlson.

        This patch exposes APIs necessary to toggle PIP and query its status from clients of WKWebView.
        The existing PIP test has been updated to use the new APIs instead of simulating mouse clicks.
        I also increased the size of the video element in the test page so it gets picked up by the
        main content heuristics.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateMediaPlaybackControlsManager]): Create a media playback controls manager if necessary.
        (-[WKWebView _isPictureInPictureActive]): Return true if the "active" media element is in PIP.
        (-[WKWebView _togglePictureInPicture]): Toggle PIP on the "active" media element.
        (-[WKWebView _canTogglePictureInPicture]): Renamed from...
        (-[WKWebView _canTogglePictureInPictureForTesting]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::isPictureInPictureActive): Return true if the "active" media element is in PIP.
        (WebKit::WebViewImpl::togglePictureInPicture): Toggle PIP on the "active" media element.
        (WebKit::WebViewImpl::updateMediaPlaybackControlsManager): Let clients create a playback
         controls manager even when there is no Touch Bar present.
        (WebKit::WebViewImpl::updateMediaTouchBar): Extract some code into a helper method.
        (WebKit::WebViewImpl::canTogglePictureInPicture): Renamed from...
        (WebKit::WebViewImpl::canTogglePictureInPictureForTesting):

2018-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] error: non-constant-expression cannot be narrowed from type 'int' to 'SHORT'
        https://bugs.webkit.org/show_bug.cgi?id=189542

        Reviewed by Alex Christensen.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformCreateFrontendPage): Narrowed initialWindowWidth and initialWindowHeight by using static_cast.

2018-09-12  Chris Dumez  <cdumez@apple.com>

        Clean up SuspendedPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=189517

        Reviewed by Alex Christensen.

        Clean up SuspendedPageProxy:
        1. SuspendedPageProxy does not need to be RefCounted. It is even dangerous given that WebPageProxy
           owns the SuspendedPageProxy and SuspendedPageProxy has a WebPageProxy& data member. We definitely
           do not want it to outlive its WebPageProxy.
        2. The SuspendedPageProxy destructor does not need to be virtual.
        3. Have WebBackForwardListItem keep a WeakPtr<SuspendedPageProxy> instead of a SuspendedPageProxy*.
           This is safer and avoid having to explicitly clear the pointer.
        4. m_finishedSuspending data member does not need a getter and is only needed if !LOG_DISABLED.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::setSuspendedPage):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::suspendedPage const):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::webProcessDidClose):
        (WebKit::SuspendedPageProxy::didFinishLoad):
        * UIProcess/SuspendedPageProxy.h:
        (WebKit::SuspendedPageProxy::process const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeCreateSuspendedPage):
        (WebKit::WebPageProxy::reattachToWebProcess):
        * UIProcess/WebPageProxy.h:

2018-09-12  Guillaume Emont  <guijemont@igalia.com>

        Add IGNORE_WARNING_.* macros
        https://bugs.webkit.org/show_bug.cgi?id=188996

        Reviewed by Michael Catanzaro.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::statelessCookieStorage):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformSyncAllCookies):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::beginModal):
        * PluginProcess/mac/PluginProcessShim.mm:
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::compileAndApplySandboxSlowCase):
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::decode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _web_superAccessibilityAttributeValue:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewRunAsModal):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _web_superAccessibilityAttributeValue:]):
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::decideDestinationWithSuggestedFilename):
        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.mm:
        (-[WKCustomProtocolLoader initWithLegacyCustomProtocolManagerProxy:customProtocolID:request:]):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKTextListTouchBarViewController initWithWebViewImpl:]):
        (WebKit::WebViewImpl::updateWindowAndViewFrames):
        (WebKit::WebViewImpl::sendDragEndToPage):
        (WebKit::WebViewImpl::startDrag):
        (WebKit::WebViewImpl::characterIndexForPoint):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::getPluginProcessSerialNumber):
        (WebKit::PluginProcessProxy::makePluginProcessTheFrontProcess):
        (WebKit::PluginProcessProxy::makeUIProcessTheFrontProcess):
        (WebKit::PluginProcessProxy::exitFullscreen):
        * UIProcess/ios/SmartMagnificationController.mm:
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        * UIProcess/ios/WKLegacyPDFView.mm:
        * UIProcess/ios/WKPDFPageNumberIndicator.mm:
        (-[WKPDFPageNumberIndicator _makeRoundedCorners]):
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _presentPopoverWithContentViewController:animated:]):
        * UIProcess/ios/forms/WKFormColorControl.mm:
        (-[WKColorPopover initWithView:]):
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKDateTimePopover initWithView:datePickerMode:]):
        * UIProcess/ios/forms/WKFormPopover.h:
        * UIProcess/ios/forms/WKFormPopover.mm:
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::screenToRootView):
        (WebKit::PageClientImpl::rootViewToScreen):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _setAutodisplay:]):
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]):
        (-[WKPrintingView _drawPreview:]):
        (-[WKPrintingView drawRect:]):
        * UIProcess/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel _interpretKeyEvent:usingLegacyCocoaTextInput:string:]):
        (-[WKTextInputPanel _hasMarkedText]):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::initializeEventRecord):
        (WebKit::NetscapePlugin::sendComplexTextInput):
        (WebKit::makeCGLPresentLayerOpaque):
        (WebKit::NetscapePlugin::nullEventTimerFired):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFPluginAccessibilityObject accessibilityFocusedUIElement]):
        (-[WKPDFLayerControllerDelegate writeItemsToPasteboard:withTypes:]):
        (WebKit::PDFPlugin::handleEditingCommand):
        (WebKit::PDFPlugin::setActiveAnnotation):
        (WebKit:: const):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.h:
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.h:
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement):
        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::drawPDFPage):

2018-09-11  Olivia Barnett  <obarnett@apple.com>

        Implement the Web Share API for mac
        https://bugs.webkit.org/show_bug.cgi?id=189443

        Reviewed by Tim Horton.

        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView shareSheetDidDismiss:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView shareSheetDidDismiss:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showShareSheet):
        (WebKit::WebViewImpl::shareSheetDidDismiss):
        Implemented function for WKShareSheetDelegate.

        * UIProcess/Cocoa/WKShareSheet.h:
        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet initWithView:initWithView:]):
        (-[WKShareSheet presentWithParameters:completionHandler:]):
        (-[WKShareSheet sharingServicePicker:didChooseSharingService:]):
        (-[WKShareSheet _cancel]):
        (-[WKShareSheet dismiss]):
        (-[WKShareSheet _dismissDisplayAnimated:]):
        (-[WKShareSheet invokeShareSheetWithResolution:]):
        (-[WKShareSheet initWithView:]): Deleted.
        Added mac platform checks and share sheet functionality.

        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::showShareSheet):
        Allows macos to invoke the system share sheet.

2018-09-07  Dean Jackson  <dino@apple.com>

        Add and expose Internal features from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189442
        <rdar://problem/44243404>

        Reviewed by Simon Fraser.

        Experimental features have become a mess. People are using them for
        anything that they want to be easily toggled from a host app (e.g.
        Safari), which means the user-facing menu has become large and
        confusing.

        Introduce the idea of Internal features, that will be exposed in a way
        that end-users are not expected to ever see (unless they really want
        to).

        * CMakeLists.txt: Add new files.
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

        * DerivedSources.make: Add new generated files.
        * Scripts/GeneratePreferences.rb: Generate the preferences stuff for Internal Debug features.
        * Scripts/PreferencesTemplates/WebPreferencesDefinitions.h.erb:
        * Scripts/PreferencesTemplates/WebPreferencesInternalDebugFeatures.cpp.erb: Added.

        * Shared/API/APIObject.h: New API object for InternalDebugFeature.
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):

        * Shared/WebPreferences.yaml: Change some of the existing experimental features to "internal".

        * UIProcess/API/APIInternalDebugFeature.cpp: New API type - just like APIExperimentalFeature.
        (API::InternalDebugFeature::create):
        (API::InternalDebugFeature::InternalDebugFeature):
        (API::InternalDebugFeature::~InternalDebugFeature):
        * UIProcess/API/APIInternalDebugFeature.h:
        * UIProcess/API/C/WKAPICast.h:

        * UIProcess/API/Cocoa/WKPreferences.mm: Change the naming of the experimental feature API so that it
        won't clash with internal debug features. We can remove the old API once Safari has adopted.
        (+[WKPreferences _internalDebugFeatures]):
        (-[WKPreferences _isEnabledForInternalDebugFeature:]):
        (-[WKPreferences _setEnabled:forInternalDebugFeature:]):
        (-[WKPreferences _isEnabledForFeature:]):
        (-[WKPreferences _setEnabled:forFeature:]):
        (-[WKPreferences _isEnabledForExperimentalFeature:]):
        (-[WKPreferences _setEnabled:forExperimentalFeature:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

        * UIProcess/API/Cocoa/_WKInternalDebugFeature.h: New object - same as _WKExperimentalFeature.
        * UIProcess/API/Cocoa/_WKInternalDebugFeature.mm:
        (-[_WKInternalDebugFeature dealloc]):
        (-[_WKInternalDebugFeature description]):
        (-[_WKInternalDebugFeature name]):
        (-[_WKInternalDebugFeature key]):
        (-[_WKInternalDebugFeature details]):
        (-[_WKInternalDebugFeature defaultValue]):
        (-[_WKInternalDebugFeature isHidden]):
        (-[_WKInternalDebugFeature _apiObject]):
        * UIProcess/API/Cocoa/_WKInternalDebugFeatureInternal.h:

        * UIProcess/WebPreferences.cpp: Add support for Internal Debug features.
        (WebKit::WebPreferences::updateBoolValueForInternalDebugFeatureKey):
        (WebKit::WebPreferences::updateBoolValueForExperimentalFeatureKey):
        * UIProcess/WebPreferences.h:

        * UIProcess/WebProcessPool.cpp: Change a comment now that it is an internal feature.
        (WebKit::WebProcessPool::createWebPage):

2018-09-11  Eric Carlson  <eric.carlson@apple.com>

        WebPage::close should clear UserMediaPermissionRequestManager
        https://bugs.webkit.org/show_bug.cgi?id=189369
        <rdar://problem/44196724>

        Reviewed by Youenn Fablet.

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

2018-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] Support changing foreground colors via color panel
        https://bugs.webkit.org/show_bug.cgi?id=189382
        <rdar://problem/44227311>

        Reviewed by Ryosuke Niwa.

        Adds support for changing font color in a richly editable element in WebKit2 via NSColorPanel. See below for
        more detail, as well as the WebCore ChangeLog.

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

        Implement this selector; AppKit calls into this when changing font color using NSColorPanel.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::changeFontColorFromSender):

        Creates and populates new FontAttributeChanges, with only the foreground color determined by asking the sender
        object for its -color.

        * WebProcess/WebPage/mac/WebPageMac.mm:

        Use the relevant EditAction for the incoming FontAttributeChanges, instead of always specifying
        EditAction::ChangeAttributes.

        (WebKit::WebPage::changeFontAttributes):

2018-09-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash under PlatformPopupMenuData::encode when interacting with a select menu that has variable fonts
        https://bugs.webkit.org/show_bug.cgi?id=188008

        Reviewed by Alex Christensen.

        This patch is a follow-up to https://bugs.webkit.org/show_bug.cgi?id=180307.
        Variable fonts have CFDictionaries with non-string keys. We need to support that in our IPC code.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode):
        (IPC::decode):

2018-09-11  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] API documentation is unclear about how to modify requests before sending them
        https://bugs.webkit.org/show_bug.cgi?id=189505

        Reviewed by Michael Catanzaro.

        Add notes to the API documentation to make explicit where modification
        of WebKitURIRequest instances affects the request data sent over the
        network.

        * UIProcess/API/glib/WebKitNavigationAction.cpp: Clarify that
        modifications to the associated WebKitURIRequest do not affect the
        actual request. Point to WebKitPage::send-request instead.
        * UIProcess/API/glib/WebKitResponsePolicyDecision.cpp: Ditto.
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_class_init): Ditto for the description of the
        WebKitWebView::decide-policy signal. Also fix the syntax of example.
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (webkit_web_page_class_init): Indicate that modifications to the
        WebKitURIRequest will change the actual network request data.

2018-09-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, attempt to fix Apple builds after r235903
        https://bugs.webkit.org/show_bug.cgi?id=188872

        If it really needs to be inlined, it will need to move to the header....

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

2018-09-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix build after r235903
        https://bugs.webkit.org/show_bug.cgi?id=188872

        This broke all ports except GTK. Need to add a missing header.

        * UIProcess/PageClient.h:

2018-09-11  Pablo Saavedra  <psaavedra@igalia.com>

        Add missing #if ENABLE(VIDEO) WebProcess/FullScreen/WebFullScreenManager.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189506

        Reviewed by Tim Horton.

        m_pipStandbyElement is only defined in
        WebKit/WebProcess/FullScreen/WebFullScreenManager.h
        only when ENABLE(VIDEO) (see
        https://bugs.webkit.org/show_bug.cgi?id=181338)

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::setPIPStandbyElement):

2018-09-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        WebPageProxy should hold a WeakPtr to its PageClient
        https://bugs.webkit.org/show_bug.cgi?id=188872

        Reviewed by Ryosuke Niwa.

        This ensures the PageClient reference is always valid when used.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::startDrag):
        (WebKit::WebPageProxy::setDragCaretRect):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::PageClientProtector::PageClientProtector):
        (WebKit::PageClientProtector::~PageClientProtector):
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::pageClient const):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didChangeBackForwardList):
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::shouldKeepCurrentBackForwardListItemInList):
        (WebKit::WebPageProxy::setViewNeedsDisplay):
        (WebKit::WebPageProxy::requestScroll):
        (WebKit::WebPageProxy::viewScrollPosition const):
        (WebKit::WebPageProxy::updateActivityState):
        (WebKit::WebPageProxy::activityStateDidChange):
        (WebKit::WebPageProxy::viewDidEnterWindow):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        (WebKit::WebPageProxy::viewSize const):
        (WebKit::WebPageProxy::startDrag):
        (WebKit::WebPageProxy::didPerformDragOperation):
        (WebKit::WebPageProxy::processNextQueuedMouseEvent):
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::preferencesDidChange):
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::didStartProgress):
        (WebKit::WebPageProxy::didChangeProgress):
        (WebKit::WebPageProxy::didFinishProgress):
        (WebKit::WebPageProxy::didDestroyNavigation):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        (WebKit::WebPageProxy::didCancelClientRedirectForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didReachLayoutMilestone):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        (WebKit::WebPageProxy::closePage):
        (WebKit::WebPageProxy::setWindowFrame):
        (WebKit::WebPageProxy::getWindowFrame):
        (WebKit::WebPageProxy::getWindowFrameWithCallback):
        (WebKit::WebPageProxy::screenToRootView):
        (WebKit::WebPageProxy::rootViewToScreen):
        (WebKit::WebPageProxy::syncRootViewToScreen):
        (WebKit::WebPageProxy::accessibilityScreenToRootView):
        (WebKit::WebPageProxy::rootViewToAccessibilityScreen):
        (WebKit::WebPageProxy::didChangeViewportProperties):
        (WebKit::WebPageProxy::runOpenPanel):
        (WebKit::WebPageProxy::showShareSheet):
        (WebKit::WebPageProxy::handleDownloadRequest):
        (WebKit::WebPageProxy::didChangeContentSize):
        (WebKit::WebPageProxy::showColorPicker):
        (WebKit::WebPageProxy::showDataListSuggestions):
        (WebKit::WebPageProxy::compositionWasCanceled):
        (WebKit::WebPageProxy::registerInsertionUndoGrouping):
        (WebKit::WebPageProxy::canUndoRedo):
        (WebKit::WebPageProxy::executeUndoRedo):
        (WebKit::WebPageProxy::clearAllEditCommands):
        (WebKit::WebPageProxy::setTextIndicator):
        (WebKit::WebPageProxy::clearTextIndicator):
        (WebKit::WebPageProxy::setTextIndicatorAnimationProgress):
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::registerEditCommand):
        (WebKit::WebPageProxy::canUndo):
        (WebKit::WebPageProxy::canRedo):
        (WebKit::WebPageProxy::setToolTip):
        (WebKit::WebPageProxy::setCursor):
        (WebKit::WebPageProxy::setCursorHiddenUntilMouseMoves):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):
        (WebKit::WebPageProxy::exitAcceleratedCompositingMode):
        (WebKit::WebPageProxy::updateAcceleratedCompositingMode):
        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
        (WebKit::WebPageProxy::recommendedScrollbarStyleDidChange):
        (WebKit::WebPageProxy::didChangeScrollOffsetPinningForMainFrame):
        (WebKit::WebPageProxy::didFinishLoadingDataForCustomContentProvider):
        (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
        (WebKit::WebPageProxy::showCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanelSoon):
        (WebKit::WebPageProxy::recordAutocorrectionResponse):
        (WebKit::WebPageProxy::useDarkAppearance const):
        (WebKit::WebPageProxy::showDictationAlternativeUI):
        (WebKit::WebPageProxy::removeDictationAlternatives):
        (WebKit::WebPageProxy::dictationAlternatives):
        (WebKit::WebPageProxy::setEditableElementIsFocused):
        (WebKit::WebPageProxy::takeViewSnapshot):
        (WebKit::WebPageProxy::wrapCryptoKey):
        (WebKit::WebPageProxy::unwrapCryptoKey):
        (WebKit::WebPageProxy::signedPublicKeyAndChallengeString):
        (WebKit::WebPageProxy::navigationGestureDidBegin):
        (WebKit::WebPageProxy::navigationGestureWillEnd):
        (WebKit::WebPageProxy::navigationGestureDidEnd):
        (WebKit::WebPageProxy::willRecordNavigationSnapshot):
        (WebKit::WebPageProxy::navigationGestureSnapshotWasRemoved):
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        (WebKit::WebPageProxy::videoControlsManagerDidChange):
        (WebKit::WebPageProxy::handleControlledElementIDResponse const):
        (WebKit::WebPageProxy::didPerformImmediateActionHitTest):
        (WebKit::WebPageProxy::immediateActionAnimationControllerForHitTestResult):
        (WebKit::WebPageProxy::didHandleAcceptedCandidate):
        (WebKit::WebPageProxy::addPlaybackTargetPickerClient):
        (WebKit::WebPageProxy::removePlaybackTargetPickerClient):
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange):
        (WebKit::WebPageProxy::setMockMediaPlaybackTargetPickerEnabled):
        (WebKit::WebPageProxy::setMockMediaPlaybackTargetPickerState):
        (WebKit::WebPageProxy::didChangeBackgroundColor):
        (WebKit::WebPageProxy::didRestoreScrollPosition):
        (WebKit::WebPageProxy::userInterfaceLayoutDirection):
        (WebKit::WebPageProxy::didInsertAttachment):
        (WebKit::WebPageProxy::didRemoveAttachment):
        * UIProcess/WebPageProxy.h:
        * UIProcess/gstreamer/WebPageProxyGStreamer.cpp:
        (WebKit::WebPageProxy::requestInstallMissingMediaPlugins):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::viewWidget):
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect const):
        (WebKit::WebPageProxy::overflowScrollViewWillStartPanGesture):
        (WebKit::WebPageProxy::overflowScrollViewDidScroll):
        (WebKit::WebPageProxy::overflowScrollWillStartScroll):
        (WebKit::WebPageProxy::overflowScrollDidEndScroll):
        (WebKit::WebPageProxy::didCommitLayerTree):
        (WebKit::WebPageProxy::layerTreeCommitComplete):
        (WebKit::WebPageProxy::didReceivePositionInformation):
        (WebKit::WebPageProxy::saveImageToLibrary):
        (WebKit::WebPageProxy::interpretKeyEvent):
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::WebPageProxy::couldNotRestorePageState):
        (WebKit::WebPageProxy::restorePageState):
        (WebKit::WebPageProxy::restorePageCenterAndScale):
        (WebKit::WebPageProxy::didGetTapHighlightGeometries):
        (WebKit::WebPageProxy::startAssistingNode):
        (WebKit::WebPageProxy::stopAssistingNode):
        (WebKit::WebPageProxy::showInspectorHighlight):
        (WebKit::WebPageProxy::hideInspectorHighlight):
        (WebKit::WebPageProxy::showInspectorIndication):
        (WebKit::WebPageProxy::hideInspectorIndication):
        (WebKit::WebPageProxy::enableInspectorNodeSearch):
        (WebKit::WebPageProxy::disableInspectorNodeSearch):
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer):
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::commitPotentialTapFailed):
        (WebKit::WebPageProxy::didNotHandleTapAsClick):
        (WebKit::WebPageProxy::didCompleteSyntheticClick):
        (WebKit::WebPageProxy::disableDoubleTapGesturesDuringTapIfNecessary):
        (WebKit::WebPageProxy::editorStateChanged):
        (WebKit::WebPageProxy::showValidationMessage):
        (WebKit::WebPageProxy::didHandleStartDataInteractionRequest):
        (WebKit::WebPageProxy::didHandleAdditionalDragItemsRequest):
        (WebKit::WebPageProxy::didConcludeEditDataInteraction):
        (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        (WebKit::WebPageProxy::setPromisedDataForImage):
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::WebPageProxy::makeFirstResponder):
        (WebKit::WebPageProxy::assistiveTechnologyMakeFirstResponder):
        (WebKit::WebPageProxy::colorSpace):
        (WebKit::WebPageProxy::pluginFocusOrWindowFocusChanged):
        (WebKit::WebPageProxy::setPluginComplexTextInputState):
        (WebKit::WebPageProxy::executeSavedCommandBySelector):
        (WebKit::WebPageProxy::intrinsicContentSizeDidChange):
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer):
        (WebKit::WebPageProxy::acceleratedCompositingRootLayer const):
        (WebKit::WebPageProxy::showPDFContextMenu):
        (WebKit::WebPageProxy::showTelephoneNumberMenu):
        (WebKit::WebPageProxy::boundsOfLayerInLayerBackedWindowCoordinates const):
        (WebKit::WebPageProxy::editorStateChanged):
        (WebKit::WebPageProxy::startWindowDrag):
        (WebKit::WebPageProxy::platformWindow):
        (WebKit::WebPageProxy::rootViewToWindow):
        (WebKit::WebPageProxy::showValidationMessage):
        (WebKit::WebPageProxy::inspectorAttachmentView):
        (WebKit::WebPageProxy::remoteObjectRegistry):
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::viewWidget):
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::viewBackend):

2018-09-11  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): "Swipe back" snapshot is missing when navigating back cross-process
        https://bugs.webkit.org/show_bug.cgi?id=189482
        <rdar://problem/44317222>

        Reviewed by Geoffrey Garen.

        The issue was that when we swap process on navigation, we:
        1. Call processDidTerminate() which calls resetState() and clears the displayed content
        2. Reattach the WebPageProxy to a new WebProcess
        3. Trigger the navigation
        4. Take the navigation snapshot

        When the navigation snapshot occurs at step 4, the view is already blank in the case of
        process swap. To avoid the issue, we take the navigation snapshot earlier, before calling
        processDidTerminate() and we suppress the next navigation snapshot as it would be blank.

        At some point, we will likely want to display the previous' WebProcess content longer,
        until the new WebProcess has something interesting to display. Once this is implemented,
        we'll likely be able to drop the early snapshotting logic.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::recordAutomaticNavigationSnapshot):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::suppressNextAutomaticNavigationSnapshot):

2018-09-11  Woodrow Wang  <woodrow_wang@apple.com>

        Add Web API Statistics Collection
        https://bugs.webkit.org/show_bug.cgi?id=187773
        <rdar://problem/44155162>

        Reviewed by Brent Fulgham.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:

== Rolled over to ChangeLog-2018-09-11 ==
