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

        [WK2][iOS] UIProcess may get killed because it is taking too long to release its background task after expiration
        https://bugs.webkit.org/show_bug.cgi?id=197893
        <rdar://problem/50234105>

        Reviewed by Alex Christensen.

        The UIProcess may get killed because it is taking too long to release its background task after its expiration handler
        was called. The reason is that the background task's expiration handler was sequentially sending a ProcessWillSuspendImminently
        synchronous IPC to each of its child processes and only then ends the background task. By the time we receive the response from
        all child processes, it may be too late and we get killed.

        To address the issue, we now:
        1. Send the ProcessWillSuspendImminently asynchronously so that all processes can do their processing in parallel
        2. After 2 seconds, the UIProcess releases the background task (We get killed after ~5 seconds)

        Also, to make sure that the UIProcess supends promptly, we now make sure we never start a new background task *after*
        the app has been backgrounded. The intention of our background task is too finish critical work (like releasing locked
        files) after the app gets backgrounded, not to start new work and delay process suspension.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::processWillSuspendImminently):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendProcessWillSuspendImminently):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendProcessWillSuspendImminently):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager init]):
        (-[WKProcessAssertionBackgroundTaskManager _scheduleReleaseTask]):
        (-[WKProcessAssertionBackgroundTaskManager _cancelPendingReleaseTask]):
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::processWillSuspendImminently):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

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

        [WebAuthN] Make WebAuthN default on
        https://bugs.webkit.org/show_bug.cgi?id=197805
        <rdar://problem/50683699>

        Reviewed by Darin Adler.

        * Shared/WebPreferences.yaml:

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

        Reuse existing WebPageProxy quota handler for NetworkProcessProxy quota requests
        https://bugs.webkit.org/show_bug.cgi?id=197463
        <rdar://problem/47403621>

        Reviewed by Alex Christensen.

        Add a getter to know whether websitedatastore client implements the quota delegate.
        If not, find the most visible page that is the same origin as the quota request
        and reuse the existing exceededDatabasQuota delegate.
        This approach allows to call the delegate even if the quota request comes from a service worker.
        If no such page is found, the quota will not be increased.

        Refactoring to make sure we are calling the delegate once a previous call to that delegate is completed.
        Covered by API test.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::requestStorageSpace):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::StorageRequests::add):
        (WebKit::StorageRequests::processNext):
        (WebKit::StorageRequests::areBeingProcessed const):
        (WebKit::StorageRequests::setAreBeingProcessed):
        (WebKit::StorageRequests::StorageRequests):
        (WebKit::StorageRequests::~StorageRequests):
        (WebKit::StorageRequests::singleton):
        (WebKit::WebPageProxy::forMostVisibleWebPageIfAny):
        (WebKit::WebPageProxy::didChangeMainDocument):
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::requestStorageSpace):
        (WebKit::WebPageProxy::makeStorageSpaceRequest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::forWebPages):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStoreClient.h:
        (WebKit::WebsiteDataStoreClient::implementsRequestStorageSpaceHandler const):

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 ==
