2018-09-11  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Polish AuthenticatorManager and rename it to AuthenticatorCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=189277
        <rdar://problem/44115936>

        Reviewed by Chris Dumez.

        * DerivedSources.make:
        * SourcesCocoa.txt:
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.cpp: Removed.
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp: Added.
        (WebKit::WebAuthenticatorCoordinatorProxy::WebAuthenticatorCoordinatorProxy):
        (WebKit::WebAuthenticatorCoordinatorProxy::~WebAuthenticatorCoordinatorProxy):
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        (WebKit::WebAuthenticatorCoordinatorProxy::isUserVerifyingPlatformAuthenticatorAvailable):
        (WebKit::WebAuthenticatorCoordinatorProxy::requestReply):
        (WebKit::WebAuthenticatorCoordinatorProxy::isUserVerifyingPlatformAuthenticatorAvailableReply):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h: Renamed from Source/WebKit/UIProcess/CredentialManagement/WebCredentialsMessengerProxy.h.
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.messages.in: Renamed from Source/WebKit/UIProcess/CredentialManagement/WebCredentialsMessengerProxy.messages.in.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::reattachToWebProcess):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/CredentialManagement/WebCredentialsMessenger.cpp: Removed.
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp: Added.
        (WebKit::WebAuthenticatorCoordinator::WebAuthenticatorCoordinator):
        (WebKit::WebAuthenticatorCoordinator::~WebAuthenticatorCoordinator):
        (WebKit::WebAuthenticatorCoordinator::makeCredential):
        (WebKit::WebAuthenticatorCoordinator::getAssertion):
        (WebKit::WebAuthenticatorCoordinator::isUserVerifyingPlatformAuthenticatorAvailable):
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.h: Renamed from Source/WebKit/WebProcess/CredentialManagement/WebCredentialsMessenger.h.
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.messages.in: Renamed from Source/WebKit/WebProcess/CredentialManagement/WebCredentialsMessenger.messages.in.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_cpuLimit):
        (WebKit::m_credentialsMessenger): Deleted.
        * WebProcess/WebPage/WebPage.h:

2018-09-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix ProcessSwap API tests after r235867.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::exitAcceleratedCompositingMode):
        Add null-check for drawing area.

2018-09-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unable to change the value of select elements while preserving focus state
        https://bugs.webkit.org/show_bug.cgi?id=189475
        <rdar://problem/41125764>

        Reviewed by Tim Horton.

        With UITextInputMultiDocument support in WebKit (r226911), WKContentView may enter a state where the user is
        able to interact with web content, but focus state is being preserved on WKWebView. This prevents keyboard and
        input view dismissal from blurring the focused element (which, in turn, means that the value of certain form
        controls, such as select elements, cannot be changed). This can happen in the following scenario:

        1. Suppose we have a web view embedded inside of a view controller (let's call it `A`).
        2. Another view controller (let's call this one `B`) is modally presented over `A`.
        3. The web view is removed from `A`'s view hierarchy and reparented under `B`'s view.
        4. The user taps a form control in the web view, interacts with the keyboard, and taps the Done button.

        After step 2, WKContentView gets a call to `-_preserveFocusWithToken:destructively:`, which increments its focus
        retain count to 1. Thus, in step 3, resigning first responder using the Done button fails to blur the element.
        To fix this, we split the existing `_activeFocusedStateRetainCount` into two values: `_focusPreservationCount`,
        which is safe to reset and resets to 0 when changing the focused element, and `_activeFocusedStateRetainCount`,
        which always increments and decrements, and only does so when using `-_retainActiveFocusedState`.

        This also fixes a bug wherein `-_restoreFocusWithToken:` is implemented as returning `void` in WebKit, even
        though its declaration in UIKit returns a `BOOL`. UIKit currently calls this selector on WKContentView and
        stores the result within a `BOOL`; this results in the return value of `-_restoreFocusWithToken:` effectively
        becoming the last byte of the most recent value stored in `$rax` when exiting `-_restoreFocusWithToken:`. From
        debugging a release build of WebKit, this turns out to just be 0x0, becoming NO, which is correct given that
        WKContentView does not attempt to become first responder within `_restoreFocusWithToken:`.

        Tests:  FocusPreservationTests.PreserveAndRestoreFocus
                FocusPreservationTests.ChangingFocusedNodeResetsFocusPreservationState

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _incrementFocusPreservationCount]):
        (-[WKWebView _decrementFocusPreservationCount]):
        (-[WKWebView _resetFocusPreservationCount]):
        (-[WKWebView _isRetainingActiveFocusedState]):

        Active focus state is retained if either the focus preservation count or active focus state count is non-zero.
        Splitting this into two variables ensures that SPI clients of `-_retainActiveFocusedState` won't have active
        focus state reset from underneath them, and additionally prevents WKContentView from retaining active focus due
        to UITextInputMultiDocument protocol methods while the user is still interacting with it.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:

        Move _activeFocusedStateRetainCount to the implementation of WKContentView; instead of directly manipulating the
        variable, add helper methods to increment, decrement, or reset the focus preservation count.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

        Reset the focus preservation count.

        (-[WKContentView addFocusedFormControlOverlay]):
        (-[WKContentView removeFocusedFormControlOverlay]):

        Use `-_retainActiveFocusedState` instead of incrementing and decrementing the counter directly.

        (-[WKContentView _restoreFocusWithToken:]):
        (-[WKContentView _preserveFocusWithToken:destructively:]):

        Use `_incrementFocusPreservationCount` and `_decrementFocusPreservationCount` instead of manipulating counter
        variables directly.

2018-09-10  James Savage  <james.savage@apple.com>

        Long press on picture/link show menu obscured by keyboard.
        https://bugs.webkit.org/show_bug.cgi?id=189114.

        Reviewed by Megan Gardner.

        Use the visible bounds of the window, not the full bounds, when deciding if
        an element's rect takes up too much screen space to present from. This factors
        in occlusion of the window by the keyboard, bars, and other overlapping content.

        If possible, it would be nice to only account for overlapping geometry which a
        popover would avoid, but that information is not available. This approach will
        produce some false positives in favor of the "from touch" style, but those are
        still better than getting an unusably small action sheet.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]): Use new helper method for style.
        (-[WKActionSheetAssistant showLinkSheet]): Ditto.
        (-[WKActionSheetAssistant _presentationStyleForPositionInfo:elementInfo:]):
        Query new delegate method to figure out the unobscured rect of the window. This
        information only exists on WKScrollView, so we have to ask for it. If this method
        is not implemented, fall back to the current approach of assuming the full window
        bounds are available.
        (presentationStyleForView): Deleted. Replaced by instance method.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView unoccludedWindowBoundsForActionSheetAssistant:]):
        Calculate the unoccluded rect using -[UIScrollView adjustedContentInset], which
        factors in client specified insets and system insets (such as the keyboard).

2018-09-10  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): WebView is blank when navigating back cross-process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=189481
        <rdar://problem/44315010>

        Reviewed by Tim Horton.

        When process swapping on navigation, the WebPageProxy would detach from the old WebProcess and destroy
        its RemoteLayerTreeDrawingAreaProxy. It would then create a new process and a new RemoteLayerTreeDrawingAreaProxy
        to listen for IPC from this new process. When navigating back to the original process, we would do the
        same in the opposite direction. However, the issue was that the old WebProcess's WebPage would not destroy its
        drawing area and some state would persist and cause issues. For example, the DrawingArea would send a
        CommitLayerTree IPC to the UIProcess and set m_waitingForBackingStoreSwap to true. It normally resets
        m_waitingForBackingStoreSwap to false when getting the DidUpdate IPC from the UIProcess. However, when the
        WebPage is detached from its WebPageProxy (i.e. suspended due to PSON), the UIProcess would not respond to
        IPC from the old WebProcess and m_waitingForBackingStoreSwap would never get reset.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        Make sure we send the SetIsSuspended IPC to the WebProcess with false value when
        the SuspendedPageProxy gets destroyed, so that the WebProcess can update its
        m_isSuspended flag. Previous, it was set to true when constructing the
        SuspendedPageProxy but never reset to false.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsAndRootView):
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
        Add null checks for the drawing area now that it can be null while suspended.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        When a WebPage gets reattached to a WebPageProxy, this method is called. Since we now
        destroy the drawing area upon suspension (WebPage gets detached from WebPageProxy), we
        need to make sure we recreate the drawing area when reattaching.

        (WebKit::WebPage::setIsSuspended):
        Destroy the drawing area when the WebPage is suspended, meaning that this WebPage
        is no longer associated with a WebPageProxy.

2018-09-10  Daniel Bates  <dabates@apple.com>

        [iOS] Arrow keys do not dispatch DOM events to non-editable elements
        https://bugs.webkit.org/show_bug.cgi?id=189389

        Reviewed by Simon Fraser.

        Use WebCore::keyCodeForEvent() to retrieve the key code for a WebEvent instead of querying
        the key code from the WebEvent directly. The function WebCore::keyCodeForEvent() knows how
        to compute the key code for an event that represents an arrow key.

        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebKeyboardEvent):

2018-09-10  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOSMac build
        https://bugs.webkit.org/show_bug.cgi?id=189469

        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextSetPluginLoadClientPolicy):
        (WKContextClearPluginClientPolicies):
        (WKContextCopyPlugInInfoForBundleIdentifier):
        (WKContextGetInfoForInstalledPlugIns):
        (WKContextResetHSTSHosts):
        (WKContextResetHSTSHostsAddedAfterDate):
        (WKContextRegisterSchemeForCustomProtocol):
        (WKContextUnregisterSchemeForCustomProtocol):
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (-[WKObservablePageState initWithPage:]):
        (WKPageCreateObservableState):
        (WKPageGetObjectRegistry):
        (WKPageIsURLKnownHSTSHost):
        (WKPageLoadURLRequestReturningNavigation):
        (WKPageLoadFileReturningNavigation):
        (WKPageIsPlayingVideoInEnhancedFullscreen):
        (WKPageSetFullscreenDelegate):
        (WKPageGetFullscreenDelegate):
        * UIProcess/API/C/mac/WKProtectionSpaceNS.mm:
        (WKProtectionSpaceCopyNSURLProtectionSpace):

2018-09-10  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build after r235850

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:

2018-09-10  Simon Fraser  <simon.fraser@apple.com>

        Before tracking Document leaks, clear all caches
        https://bugs.webkit.org/show_bug.cgi?id=189459

        Reviewed by Sam Weinig.
        
        It's not enough to clear the page and memory caches; font caches can reference Documents (for SVG fonts),
        so just call WebCore::releaseMemory(), which empties caches including the page and memory caches, and
        does the GC that we need to happen.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleReleaseMemory):
        (WKBundleClearPageCache): Deleted.
        (WKBundleClearMemoryCache): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:

2018-09-07  Matt Rajca  <mrajca@apple.com>

        Touch Bar displays an active PIP button for audio elements (and it doesn't do anything)
        https://bugs.webkit.org/show_bug.cgi?id=189433
        <rdar://problem/44186498> Touch Bar displays an active PIP button for audio elements (and it doesn't do anything)

        Reviewed by Eric Carlson.

        When playing an audio element, the media Touch Bar displays an active PIP button even though only
        videos are PIP-able. Pressing it does not do anything. The issue is canTogglePictureInPicture is set
        to YES unconditionally on the WebPlaybackControlsManager. It is then only updated based on whether or
        not external playback is enabled.

        This patch extends that logic such that the picture-in-picture Touch Bar button will be disabled for
        audio elements. Since PlaybackSessionModelMediaElement today does not know whether we're dealing
        with an audio or video element, a new isPictureInPictureSupported flag has been added (as well as
        the plumbing necessary to get the state over from the web process).

        An API test has been added that checks the value of the canTogglePictureInPicture and ensures it
        is NO when audio elements are playing. To expose it to tests, a _canTogglePictureInPictureForTesting
        property has been added to the WKTesting category.

        Source/WebKit:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _canTogglePictureInPictureForTesting]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionModelContext::pictureInPictureSupportedChanged):
        (WebKit::PlaybackSessionManagerProxy::pictureInPictureSupportedChanged):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateMediaTouchBar):
        (WebKit::WebViewImpl::canTogglePictureInPictureForTesting):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionInterfaceContext::isPictureInPictureSupportedChanged):
        (WebKit::PlaybackSessionManager::isPictureInPictureSupportedChanged):

2018-09-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MSVC] X86Assembler.h(108): error C2666: 'WebCore::operator -': 7 overloads have similar conversions
        https://bugs.webkit.org/show_bug.cgi?id=189467

        Unreviewed build fix for WinCairo port.

        MSVC reports compilation errors if certain JSC header files are
        included after "using namespace" statements.

        * Sources.txt: Added @no-unify to InjectedBundleNodeHandle.cpp and InjectedBundleRangeHandle.cpp temporarily.
        * WebKit.xcodeproj/project.pbxproj: Compile InjectedBundleNodeHandle.cpp and InjectedBundleRangeHandle.cpp.

2018-09-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r235839.

        Which breaks all Xcode based ports

        Reverted changeset:

        "[MSVC] X86Assembler.h(108): error C2666: 'WebCore::operator
        -': 7 overloads have similar conversions"
        https://bugs.webkit.org/show_bug.cgi?id=189467
        https://trac.webkit.org/changeset/235839

2018-09-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add specialized template declarations of HashTraits and DefaultHash to detect misuse
        https://bugs.webkit.org/show_bug.cgi?id=189044

        Reviewed by Yusuke Suzuki.

        * WebProcess/WebPage/WebPage.h: Added #include <WebCore/IntPointHash.h> to instantiate HashMap<std::pair<IntSize, double>, IntPoint>.

2018-09-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MSVC] X86Assembler.h(108): error C2666: 'WebCore::operator -': 7 overloads have similar conversions
        https://bugs.webkit.org/show_bug.cgi?id=189467

        Unreviewed build fix for WinCairo port.

        MSVC reports compilation errors if certain JSC header files are
        included after "using namespace" statements.

        * Sources.txt: Added @no-unify to InjectedBundleNodeHandle.cpp and InjectedBundleRangeHandle.cpp temporarily.

2018-09-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r235153): [iOS] Can't move selection start grabber when selecting text in a subframe
        https://bugs.webkit.org/show_bug.cgi?id=189454
        <rdar://problem/44265956>

        Reviewed by Darin Adler.

        rangeForPointInRootViewCoordinates is responsible for taking a user gesture location representing the location
        of the selection start or end handle (given in root view coordinates) and computing a Range representing an
        updated selection. r235153 introduced a mechanism here to clamp the y offset of this user gesture location to
        a max or min value determined by computing the bounds of the other selection handle, which more closely matches
        platform behavior elsewhere in iOS.

        However, this clamping logic would cause the user gesture location in root view coordinates to incorrectly clamp
        in cases where the user selects text within an iframe that is offset from the top of the main document, since it
        compares content coordinates (i.e. the caret bounds) against root view coordinates (i.e. the gesture location).
        This makes it impossible to use selection handles to select text in some iframes.

        We fix this by first converting the gesture location to document coordinates, and then clamping.

        Test: editing/selection/ios/selection-handle-clamping-in-iframe.html

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

        Also reuse `selectionStart` and `selectionEnd` when computing absolute caret bounds, instead of creating new
        VisiblePositions.

2018-09-08  Tim Horton  <timothy_horton@apple.com>

        Unify most of the WebKit Objective-C API sources
        https://bugs.webkit.org/show_bug.cgi?id=189447

        Reviewed by Andy Estes.

        Unify and fix errors.

        * Shared/API/Cocoa/_WKFrameHandle.mm:
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:
        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
        * UIProcess/API/Cocoa/WKConnection.mm:
        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
        * UIProcess/API/Cocoa/WKNavigationData.mm:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        * UIProcess/API/Cocoa/WKURLSchemeTask.mm:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        * UIProcess/API/Cocoa/_WKAttachment.mm:
        * UIProcess/API/Cocoa/_WKGeolocationPosition.mm:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        * UIProcess/API/mac/WKView.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:

2018-09-07  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build

        * Shared/mac/SandboxExtensionMac.mm:

2018-09-07  Tim Horton  <timothy_horton@apple.com>

        Unify most of the WebKit C API sources
        https://bugs.webkit.org/show_bug.cgi?id=189400

        Reviewed by Alex Christensen.

        Unify and fix errors (mostly API:String vs. WTF::String mismatches).

        * Shared/APIWebArchiveResource.h:
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::constructedPathPrefix):
        (API::constructedPathFilter):
        (API::constructedPath):
        (API::encodeContentRuleListMetaData):
        (API::decodeContentRuleListMetaData):
        (API::openAndMapContentRuleList):
        (API::writeDataToFile):
        (API::compiledToFile):
        (API::createExtension):
        (API::ContentRuleListStore::lookupContentRuleList):
        (API::ContentRuleListStore::getAvailableContentRuleListIdentifiers):
        (API::ContentRuleListStore::compileContentRuleList):
        (API::ContentRuleListStore::getContentRuleListSource):
        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::loggingString const):
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultMediaCacheDirectory):
        (API::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        (API::WebsiteDataStore::defaultCacheStorageDirectory):
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        (API::WebsiteDataStore::defaultMediaCacheDirectory):
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        (API::WebsiteDataStore::defaultLocalStorageDirectory):
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):
        (API::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        (API::WebsiteDataStore::tempDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        (API::WebsiteDataStore::defaultCacheStorageDirectory):
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        (API::WebsiteDataStore::defaultLocalStorageDirectory):
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        * WebKit.xcodeproj/project.pbxproj:

2018-09-07  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Stop sending request with credential if no authorization requested.
        https://bugs.webkit.org/show_bug.cgi?id=189057

        Reviewed by Alex Christensen.

        When 401 response returns without 'www-authenticate' header, suppress another request with credential.
        Same fix for proxy authentication.

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

2018-09-07  Brent Fulgham  <bfulgham@apple.com>

        Allow WebContent access to AVCSupported IOKit property in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=189429
        <rdar://problem/43612229>

        Reviewed by Eric Carlson.

        Allow access to the IOKit properties AVCSupported and HEVCSupported to allow the WebContent process
        to check for efficient video codecs.

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

2018-09-07  Frederic Wang  <fwang@igalia.com>

        [CSSOM View] Handle the scrollingElement in Element::scroll(Left/Top/Width/Height/To)
        https://bugs.webkit.org/show_bug.cgi?id=182230

        Reviewed by Simon Fraser.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentGtk.cpp:
        (webkit_dom_document_get_scrolling_element): Use the new name.

2018-09-07  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Remove unused XPC service from sandbox
        https://bugs.webkit.org/show_bug.cgi?id=189406
        <rdar://problem/43015423>

        Reviewed by Youenn Fablet.

        The API surface exposed by "com.apple.systemstats.analysis" is no longer used by the
        WebContent process. Since there is no need for this sandbox opening, we should remove it.

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

2018-09-07  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed syntax fix after r235781

        Don't use hash-quote syntax for these non-regex inputs.

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

2018-09-07  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Move default mach-lookup deny to after common.sb is imported
        https://bugs.webkit.org/show_bug.cgi?id=189385
        <rdar://problem/43624193>

        Reviewed by Eric Carlson.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Move the 'deny mach-lookup' call later in the file.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Storage.sb: Ditto.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Ditto.

2018-09-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor WebCore::EditAction to be an 8-bit enum class
        https://bugs.webkit.org/show_bug.cgi?id=189383

        Reviewed by Dan Bernstein.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::changeFontAttributes):
        (WebKit::WebPage::changeFont):

2018-09-06  Megan Gardner  <megan_gardner@apple.com>

        Add Support for Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=189329
        <rdar://problem/21444701>

        Reviewed by Simon Fraser.

        Connect up web preferences to allow conic gradients to be turned on in the
        experimental features menu.

        * Shared/WebPreferences.yaml:

2018-09-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] Support changing attributes for selected text (text shadow, underline, strike-through)
        https://bugs.webkit.org/show_bug.cgi?id=189356
        <rdar://problem/44185674>

        Reviewed by Tim Horton.

        Implement -[WKWebView changeAttributes:], so that WKWebView can carry out more types of font style changes via
        NSFontPanel. This patch makes it possible to (1) change text shadow, (2) add or remove strike-through, and (3)
        add or remove underlines from selected text using the font panel.

        This builds on the mechanisms introduced in r235748 to compute font attribute changes in the UI process and
        propagate this information to the web process, where we're able to create and apply an EditingStyle to the
        current selection.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView changeAttributes:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::changeFontAttributesFromSender):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::changeFontAttributes):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Add boilerplate IPC support.

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

2018-09-06  Antti Koivisto  <antti@apple.com>

        Actively prewarm processes created for prewarm pool
        https://bugs.webkit.org/show_bug.cgi?id=189364

        Reviewed by Chris Dumez.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::prewarm):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-09-06  Jer Noble  <jer.noble@apple.com>

        Don't pause playback when locking screen if video is being displayed on second screen.
        https://bugs.webkit.org/show_bug.cgi?id=189321

        Reviewed by Eric Carlson.

        Pass the "isPlayingOnSecondScreen" value across the process boundary.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionModelContext::setPlayingOnSecondScreen):
        (WebKit::PlaybackSessionManagerProxy::setPlayingOnSecondScreen):
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.messages.in:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionManager::setPlayingOnSecondScreen):

2018-09-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Cannot change font size at selection until font panel is shown
        https://bugs.webkit.org/show_bug.cgi?id=189295
        <rdar://problem/35593389>

        Reviewed by Ryosuke Niwa.

        Refactors NSFontManager support in WebKit2. See WebCore ChangeLog for more details.

        * Scripts/webkit/messages.py:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView changeFont:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView changeFont:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::changeFontFromFontManager):
        (WebKit::WebViewImpl::changeFontFromFontPanel): Deleted.

        Renamed this from changeFontFromFontPanel to changeFontFromFontManager. This new name is more accurate in the
        case where a menu item is used to alter the font, which doesn't involve NSFontPanel at all.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::changeFont):
        (WebKit::WebPageProxy::setFont): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::changeFont):
        (WebKit::WebPage::setFont): Deleted.

2018-09-06  Frederic Wang  <fwang@igalia.com>

        Use more generic names than "overflow" for functions that can be used for subframes
        https://bugs.webkit.org/show_bug.cgi?id=179125

        Reviewed by Simon Fraser..

        Some functions will be used by subframes when iframe scrolling is implemented on iOS (see
        bug 149264). Currently they are only used for "overflow" nodes. This patch renames them to
        use a more generic "scrolling node" name.

        * UIProcess/PageClient.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeWillStartPanGesture):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeWillStartScroll):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidEndScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::scrollingNodeScrollViewWillStartPanGesture):
        (WebKit::PageClientImpl::scrollingNodeScrollViewDidScroll):
        (WebKit::PageClientImpl::scrollingNodeScrollWillStartScroll):
        (WebKit::PageClientImpl::scrollingNodeScrollDidEndScroll):
        (WebKit::PageClientImpl::overflowScrollViewWillStartPanGesture): Deleted.
        (WebKit::PageClientImpl::overflowScrollViewDidScroll): Deleted.
        (WebKit::PageClientImpl::overflowScrollWillStartScroll): Deleted.
        (WebKit::PageClientImpl::overflowScrollDidEndScroll): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _scrollingNodeScrollingWillBegin]):
        (-[WKContentView _scrollingNodeScrollingDidEnd]):
        (-[WKContentView _overflowScrollingWillBegin]): Deleted.
        (-[WKContentView _overflowScrollingDidEnd]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::scrollingNodeScrollViewWillStartPanGesture):
        (WebKit::WebPageProxy::scrollingNodeScrollViewDidScroll):
        (WebKit::WebPageProxy::scrollingNodeScrollWillStartScroll):
        (WebKit::WebPageProxy::scrollingNodeScrollDidEndScroll):
        (WebKit::WebPageProxy::overflowScrollViewWillStartPanGesture): Deleted.
        (WebKit::WebPageProxy::overflowScrollViewDidScroll): Deleted.
        (WebKit::WebPageProxy::overflowScrollWillStartScroll): Deleted.
        (WebKit::WebPageProxy::overflowScrollDidEndScroll): Deleted.
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::didStartOverflowScroll):
        (WebKit::WebChromeClient::didEndOverflowScroll):

2018-09-06  Chris Dumez  <cdumez@apple.com>

        WebKit/Platform/IPC/mac/ConnectionMac.mm:222: _dispatch_bug_kevent_vanished
        https://bugs.webkit.org/show_bug.cgi?id=189314
        <rdar://problem/41248286>

        Reviewed by Anders Carlsson.

        There is a short period in time when m_isServer is true, after open() has been
        called, but before we've receive the InitializeConnection IPC, where m_receiveSource
        has been initialized but m_isConnected is still false. If platformInvalidate() gets
        called during this period of time, we would fail to cancel / release m_receiveSource
        and we would forcefully deallocate m_receivePort, leading to the libdispatch simulated
        crashes.

        To address the issue, platformInvalidate() now properly cancels / releases
        m_receiveSource if present, and only deallocates m_receivePort manually if m_receiveSource
        has not been initialized (i.e. open() has not been called yet).

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::clearReceiveSource):

2018-09-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r235489): WKSharingServicePickerDelegate.mm accidentally added back to Sources in WebKit project

        * WebKit.xcodeproj/project.pbxproj:
        (WKSharingServicePickerDelegate.mm): Let Xcode have its way with
        the WebKit project file by removing this file from Sources.
        It's already included in a UnifedSource file, so it should not
        have been added back to Sources during merge conflict resolution
        for r235489.

2018-09-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r204222): UIProces/Gamepad/mac is missing in WebKit Xcode project

        Found using `tidy-Xcode-project-file --missing` (see Bug
        188754). Fixes applied manually.

        * WebKit.xcodeproj/project.pbxproj:
        (UIProces/Gamepad/mac): Fix path to "mac" directory, then remove
        its now-redundant name.
        (UIGamepadProviderMac.mm): Change path to be relative to its
        group after the above change.

2018-09-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r143543): PluginProcess/EntryPoint/XPCService/PluginService is missing in WebKit Xcode project

        Found using `tidy-Xcode-project-file --missing` (see Bug
        188754). Fixes applied manually.

        * WebKit.xcodeproj/project.pbxproj:
        (PluginProcess/EntryPoint/XPCService/PluginService): Remove path
        to PluginService.64 directory, which was removed in r143543, so
        that this becomes a virtual folder that inherits its path from
        its parent.
        (PluginService.32-64.Info.plist): Change path to be relative to
        its group after the above change.  Delete redundant name value.

2018-09-05  Woodrow Wang  <woodrow_wang@apple.com>

        Add infrastructure to dump resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=189213

        Reviewed by Daniel Bates.

        The dumping functionality is not currently used, but will be included in tests for
        <https://bugs.webkit.org/show_bug.cgi?id=187773>.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreDumpResourceLoadStatistics):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::dumpResourceLoadStatistics const):
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::dumpResourceLoadStatistics):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-09-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r235006): Let Xcode have its way with the WebKit project

        * WebKit.xcodeproj/project.pbxproj: Let Xcode remove empty
        settings.

2018-09-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r110214): Remove deleted WebProcess/Fullscreen/mac folder from WebKit Xcode project

        Found using `tidy-Xcode-project-file --missing` (see Bug
        188754). Folder removed via Xcode.

        * WebKit.xcodeproj/project.pbxproj:
        (WebProcess/Fullscreen/mac): Remove empty folder.  Directory no
        longer exists.  WebFullScreenManagerMac.{h,mm} files were
        removed in r110214.

2018-09-05  Woodrow Wang  <woodrow_wang@apple.com>

        Added runtime feature flag for web API statistics
        https://bugs.webkit.org/show_bug.cgi?id=189211

        Reviewed by Daniel Bates.

        Added functionality to set the runtime flag with a JavaScript exposed function
        for testing.

        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-09-05  Jer Noble  <jer.noble@apple.com>

        Add MediaCapabilities as an Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=189209

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2018-09-05  Jeremy Jones  <jeremyj@apple.com>

        Cancelled fullscreen exit gesture leaves bad state for next exit request.
        https://bugs.webkit.org/show_bug.cgi?id=189278

        Reviewed by Jer Noble.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _dismissFullscreenViewController]):

2018-09-05  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Simplify logic when changing RealtimeMediaSource settings
        https://bugs.webkit.org/show_bug.cgi?id=189284
        <rdar://problem/44117948>

        Reviewed by Youenn Fablet.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::setSettings):

2018-09-04  Frederic Wang  <fwang@igalia.com>

        Add basic support for ScrollIntoViewOptions
        https://bugs.webkit.org/show_bug.cgi?id=189258

        Reviewed by Simon Fraser.

        * DOM/DOMElement.mm: Add ScrollIntoViewOptions
        header so that this file can build despite the new scrollIntoView function.

2018-09-04  Chris Dumez  <cdumez@apple.com>

        Rename experimental feature for process swap on navigation
        https://bugs.webkit.org/show_bug.cgi?id=189280

        Reviewed by Antti Koivisto.

        The "process swap on navigation" experimental feature on macOS Mojave does not work due to missing
        browser changes, resulting in frequent load hangs. When enabling the experimental feature in WebKit
        ToT or Safari Technology Preview for testing, it enables it as well for Mojave's system Safari which
        is annoying.

        This patch renames the experimental feature so that the feature stays disabled in Mojave's system
        Safari even when enabled in WebKit ToT / STP.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetProcessSwapOnNavigationEnabled):
        (WKPreferencesGetProcessSwapOnNavigationEnabled):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateBoolValueForExperimentalFeatureKey):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):

2018-09-04  Dean Jackson  <dino@apple.com>

        Post review Weinig fix-ups
        https://bugs.webkit.org/show_bug.cgi?id=189288

        Reviewed by Sam Weinig.

        Fix-ups from https://bugs.webkit.org/show_bug.cgi?id=189252

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        (getUTIForMIMEType): Deleted.
        * UIProcess/ios/WKSystemPreviewView.mm:
        (getUTIForSystemPreviewMIMEType):
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]):
        (getUTIForMIMEType): Deleted.

2018-09-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Populate "text/uri-list" with multiple URLs when the pasteboard contains multiple URLs
        https://bugs.webkit.org/show_bug.cgi?id=188890
        <rdar://problem/43648605>

        Reviewed by Tim Horton.

        Add some plumbing through pasteboard classes to support `Pasteboard::readAllStrings`. See WebCore ChangeLog for
        more detail.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardStringsForType):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::allStringsForType):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-09-04  Youenn Fablet  <youenn@apple.com>

        Disable WebRTC unified plan runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=189264

        Reviewed by Jer Noble.

        * Shared/WebPreferences.yaml:
        Disable unified plan flag by default.

2018-09-04  Chris Dumez  <cdumez@apple.com>

        Add process pool configuration flag to turn on automatic process pre-warming
        https://bugs.webkit.org/show_bug.cgi?id=189263
        <rdar://problem/44101941>

        Reviewed by Antti Koivisto.

        Add process pool configuration flag to turn on automatic process pre-warming and disassociate
        it from the warmInitialProcess() SPI.

        For now, turning on "process swap on navigation" via experimental features also turns on
        automatic process pre-warming.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetPrewarmsProcessesAutomatically):
        (WKContextWarmInitialProcess):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _warmInitialProcess]):
        (-[WKProcessPool _hasPrewarmedWebProcess]):
        (-[WKProcessPool _webProcessCountIgnoringPrewarmed]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setPrewarmsProcessesAutomatically:]):
        (-[_WKProcessPoolConfiguration prewarmsProcessesAutomatically]):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setMaximumNumberOfProcesses):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::prewarmProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToOneProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::m_isInPrewarmedPool):
        * UIProcess/WebProcessProxy.h:

2018-09-03  Dean Jackson  <dino@apple.com>

        Move SystemPreview code from WebKitAdditions to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189252
        <rdar://problem/44080245>

        Reviewed by Wenson Hsieh.

        Move the WebKitAdditions code into WebKit/WebCore.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (getUTIForMIMEType): Helper to get the system UTI for USDZ files.
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: Use the new methods
        in MIMETypeRegistry.
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):

        * UIProcess/SystemPreviewController.cpp: Ditto.
        (WebKit::SystemPreviewController::canPreview const):

        * UIProcess/ios/WKSystemPreviewView.mm:
        (getUTIForMIMEType): Similar helper to above.
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]):

2018-09-04  Frederic Wang  <fwang@igalia.com>

        Bug 189190 - REGRESSION(r235398) ASSERTION failure !m_client.didFinishDocumentLoadForFrame
        https://bugs.webkit.org/show_bug.cgi?id=189190

        Reviewed by Alex Christensen.

        Assertions to prevent use of the deprecated WKPageSetPageLoaderClient class are hit when
        running system Safari with the current macOS/iOS releases, making impossible to launch it.
        This patch conditionally skips these assertions so that they are only verified for
        macOS > 10.14 or other platforms.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient): Only assert on future OS releases.

2018-09-04  Alex Christensen  <achristensen@webkit.org>

        Clean up WebGL policy getting code path
        https://bugs.webkit.org/show_bug.cgi?id=189003

        Reviewed by Darin Adler.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::webGLLoadPolicy const):
        (API::NavigationClient::resolveWebGLLoadPolicy const):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::webGLLoadPolicy const):
        (WebKit::NavigationState::NavigationClient::resolveWebGLLoadPolicy const):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::webGLPolicyForURL): Deleted.
        (WebKit::WebPage::resolveWebGLPolicyForURL): Deleted.

2018-09-04  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r235165): [GStreamer] Major video performance regression
        https://bugs.webkit.org/show_bug.cgi?id=189224

        Reviewed by Michael Catanzaro.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::updateSceneState): Drop the early
        return used when the scene state wasn't updated through a layer flush,
        and instead always run through layer changes and backings. This way we
        won't miss proxy objects that need swapping even if none of the layer
        states were changed. Reducing the amount of work done here when scene
        hasn't been updated might be possible, but it's not a huge bottleneck.

2018-09-01  Darin Adler  <darin@apple.com>

        [CFNetwork] Update CFNetwork SPI use to use CFNetworkSPI.h more consistently
        https://bugs.webkit.org/show_bug.cgi?id=189072

        Reviewed by Dan Bernstein.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: Removed NSURLSessionTask
        method declarations from this file, they are in CFNetworkSPI.h.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm: Removed NSURLSessionConfiguration
        method declarations from this file, they are in CFNetworkSPI.h.

2018-09-01  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Crash using KVO for 'serverTrust' property of WKWebView - "this class is not key value coding-compliant for the key serverTrust"
        https://bugs.webkit.org/show_bug.cgi?id=189222
        <rdar://problem/33283179>

        Reviewed by Sam Weinig.

        Test: TestWebKitAPI/Tests/WebKitCocoa/WKWebViewServerTrustKVC.mm

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView valueForUndefinedKey:]): Override to handle the "serverTrust" key, which is not
          handled automatically by the KVC machinery since the getter’s return type is not an
          Objective-C type.

2018-08-31  John Wilander  <wilander@apple.com>

        Storage Access API: Maintain access through same-site navigations
        https://bugs.webkit.org/show_bug.cgi?id=188564
        <rdar://problem/43445160>

        Reviewed by Alex Christensen.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillChangeDocument):
            Now takes the current URL and the new URL as parameters
            and only clears out storage access if the navigation is
            cross-site, i.e. with differing eTLD+1s.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2018-08-31  Chris Dumez  <cdumez@apple.com>

        Assertion hit in ~CompletionHandler() from ~WebFrame()
        https://bugs.webkit.org/show_bug.cgi?id=189199
        <rdar://problem/42657233>

        Reviewed by Youenn Fablet.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::~WebFrame):
        (WebKit::WebFrame::setUpWillSubmitFormListener):
        (WebKit::WebFrame::invalidatePolicyListener):
        * WebProcess/WebPage/WebFrame.h:

2018-08-31  Antti Koivisto  <antti@apple.com>

        Replace OptionSet |= and -= operators with add() and remove() functions
        https://bugs.webkit.org/show_bug.cgi?id=189169

        Reviewed by Anders Carlsson.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::notePropertiesChanged):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):
        (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageReload):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (toWebsiteDataTypes):
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesSetAllowedAutoplayQuirks):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView reload]):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setAllowedAutoplayQuirks:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityState):
        (WebKit::WebPageProxy::activityStateDidChange):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::add):
        (WebKit::WebsiteDataRecord::addCookieHostName):
        (WebKit::WebsiteDataRecord::addPluginDataHostName):
        (WebKit::WebsiteDataRecord::addHSTSCacheHostname):
        (WebKit::WebsiteDataRecord::addOriginWithCredential):
        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController inspectorWKWebViewReload:]):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::core):
        (WebKit::FindController::findString):

2018-08-31  Chris Dumez  <cdumez@apple.com>

        Rename ShouldProcessSwapIfPossible to ProcessSwapRequestedByClient for clarity
        https://bugs.webkit.org/show_bug.cgi?id=189195

        Reviewed by Alex Christensen.

        Rename ShouldProcessSwapIfPossible to ProcessSwapRequestedByClient for clarity, since it indicates the client
        requested a process swap via its navigation policy decision.

        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerUseInNewProcess):
        (useWithPolicies):
        (WKFramePolicyListenerUseWithPolicies):
        (WKFramePolicyListenerUseInNewProcessWithPolicies):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (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::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:

2018-08-31  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist][iOS] Add suggestions UI for TextFieldInputTypes
        https://bugs.webkit.org/show_bug.cgi?id=186714

        Reviewed by Wenson Hsieh.

        On iOS, we have less space to display suggestions from a datalist element compared
        to macOS. Furthermore, iPhones and iPads have different form factors, leading to a
        different approach on each device. The commonalities of the two implementations
        can be found in WKDataListSuggestionsControl. This class is subclassed by the
        device specific implementations.

        On iPhone, we display the suggestions in a UIPickerView. This view is accessible
        only after tapping on the datalist button element to the side of the input field.
        This approach was chosen in order to avoid tricking the user into thinking that
        the values displayed in the picker are the only accepted values.
        WKDataListSuggestionsPicker is responsible for managing the interface shown on
        iPhones.

        On iPad, we display the suggestions in a popover, that is visible alongside the
        keyboard. The suggestions in the popover update as the user types.
        WKDataListSuggestionsPopover is responsible for managing the interface shown on
        iPads.

        Both devices display predictive text suggestions, taking the first three values
        from the filtered suggestions list. In order to prevent other clients from
        overwriting the suggestions provided by the datalist element, we prevent writing
        to the predictive text bar if an input with the list attribute is the currently
        assisted node.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode const):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * SourcesCocoa.txt:
        * UIProcess/WebDataListSuggestionsDropdownIOS.h: Added.
        * UIProcess/WebDataListSuggestionsDropdownIOS.mm: Added.
        (WebKit::WebDataListSuggestionsDropdownIOS::create):
        (WebKit::WebDataListSuggestionsDropdownIOS::WebDataListSuggestionsDropdownIOS):
        (WebKit::WebDataListSuggestionsDropdownIOS::show):
        (WebKit::WebDataListSuggestionsDropdownIOS::handleKeydownWithIdentifier):
        (WebKit::WebDataListSuggestionsDropdownIOS::close):
        (WebKit::WebDataListSuggestionsDropdownIOS::didSelectOption):
        (-[WKDataListSuggestionsControl initWithInformation:inView:]):
        (-[WKDataListSuggestionsControl updateWithInformation:]):
        (-[WKDataListSuggestionsControl showSuggestionsDropdown:activationType:]):
        (-[WKDataListSuggestionsControl didSelectOptionAtIndex:]):
        (-[WKDataListSuggestionsControl invalidate]):
        (-[WKDataListSuggestionsControl textSuggestions]):
        (-[WKDataListSuggestionsControl suggestionsCount]):
        (-[WKDataListSuggestionsControl suggestionAtIndex:]):
        (-[WKDataListSuggestionsControl textAlignment]):
        (-[WKDataListSuggestionsPicker initWithInformation:inView:]):
        (-[WKDataListSuggestionsPicker updateWithInformation:]):
        (-[WKDataListSuggestionsPicker showSuggestionsDropdown:activationType:]):
        (-[WKDataListSuggestionsPicker numberOfComponentsInPickerView:]):
        (-[WKDataListSuggestionsPicker pickerView:numberOfRowsInComponent:]):
        (-[WKDataListSuggestionsPicker pickerView:titleForRow:forComponent:]):
        (-[WKDataListSuggestionsPicker invalidate]):
        (-[WKDataListSuggestionsPickerView controlView]):
        (-[WKDataListSuggestionsPickerView controlBeginEditing]):
        (-[WKDataListSuggestionsPickerView controlEndEditing]):
        (-[WKDataListSuggestionsPopover initWithInformation:inView:]):
        (-[WKDataListSuggestionsPopover updateWithInformation:]):
        (-[WKDataListSuggestionsPopover showSuggestionsDropdown:activationType:]):
        (-[WKDataListSuggestionsPopover invalidate]):
        (-[WKDataListSuggestionsPopover didSelectOptionAtIndex:]):
        (-[WKDataListSuggestionsViewController reloadData]):
        (-[WKDataListSuggestionsViewController tableView:numberOfRowsInSection:]):
        (-[WKDataListSuggestionsViewController tableView:cellForRowAtIndexPath:]):
        (-[WKDataListSuggestionsViewController tableView:didSelectRowAtIndexPath:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidScroll):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createDataListSuggestionsDropdown):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession endEditing]):
        (-[WKFormInputSession setSuggestions:]):
        (-[WKContentView _formInputSession]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView accessoryTab:]):
        (-[WKContentView insertTextSuggestion:]):
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.h:
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (WebKit::WebDataListSuggestionsDropdownMac::didSelectOption):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCloseSuggestions):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        (WebKit::WebPage::getAssistedNodeInformation):

2018-08-31  Frederic Wang  <fwang@igalia.com>

        REGRESSION(r235484) _WKPreferencesGetWebRTCLegacyAPIEnabled symbol not found when running Safari with external SDK build
        https://bugs.webkit.org/show_bug.cgi?id=189188

        Reviewed by Youenn Fablet.

        WebRTCLegacyAPI preference has been removed in r235484. However, the API is still used by
        Safari when running external SDK builds. Hence we restore some dummy getter/setter for now.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebRTCLegacyAPIEnabled): no-op.
        (WKPreferencesGetWebRTCLegacyAPIEnabled): Always return false.
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _webRTCLegacyAPIEnabled]): Always return false.
        (-[WKPreferences _setWebRTCLegacyAPIEnabled:]): no-op.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-08-31  Frederic Wang  <fwang@igalia.com>

        Bug 182053 - [CSSOM View] Implement standard behavior for scrollingElement
        https://bugs.webkit.org/show_bug.cgi?id=182053

        Reviewed by Simon Fraser.

        Add developer flag to use standard behavior for scrolling* attributes.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCSSOMViewScrollingAPIEnabled):
        (WKPreferencesGetCSSOMViewScrollingAPIEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2018-08-30  Tim Horton  <timothy_horton@apple.com>

        One more build fix

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shareSheetDidDismiss:]):
        Actually tested this time.

2018-08-30  Chris Dumez  <cdumez@apple.com>

        Add WKPageLoadFile SPI variant which returns a navigation object
        https://bugs.webkit.org/show_bug.cgi?id=189168
        <rdar://problem/43899330>

        Reviewed by Alex Christensen.

        Add WKPageLoadFile SPI variant which returns a navigation object, similarly to WKPageLoadURLRequestReturningNavigation().
        This is needed in order to implement <rdar://problem/40309266>.

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageLoadFileReturningNavigation):

2018-08-30  Tim Horton  <timothy_horton@apple.com>

        Try to fix the watchOS and tvOS build

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

2018-08-30  Justin Michaud  <justin@justinmichaud.com>

        [GTK] Touchscreen pinch to zoom should scale the page like other platforms
        https://bugs.webkit.org/show_bug.cgi?id=188746

        Changes the pinch-to-zoom gesture to magnify/scale the page, rather than zooming in. Also resets this magnification when the zoom level is changed.

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_set_zoom_level):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::zoom): Deleted.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::ZoomGesture::handleZoom):
        (WebKit::GestureController::ZoomGesture::scaleChanged):
        * UIProcess/gtk/GestureController.h:

2018-08-30  Tim Horton  <timothy_horton@apple.com>

        Bundle unified sources more tightly in projects with deep directory structures
        https://bugs.webkit.org/show_bug.cgi?id=189009

        Reviewed by Simon Fraser.

        Fix a variety of unification errors due to reshuffling the bundles.

        * Shared/APIWebArchive.mm:
        * Shared/APIWebArchiveResource.mm:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        * Shared/Plugins/Netscape/mac/PluginInformationMac.mm:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::sessionIdentifier const):
        (API::AutomationSessionClient::messageOfCurrentJavaScriptDialogOnPage):
        (API::AutomationSessionClient::setUserInputForCurrentJavaScriptPromptOnPage):
        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.mm:
        (-[WKCustomProtocolLoader initWithLegacyCustomProtocolManagerProxy:customProtocolID:request:]):
        (-[WKCustomProtocolLoader connection:didFailWithError:]):
        (-[WKCustomProtocolLoader connection:didReceiveResponse:]):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::generatePluginProcessCallbackID):
        (WebKit::PluginProcessProxy::fetchWebsiteData):
        (WebKit::PluginProcessProxy::deleteWebsiteData):
        (WebKit::PluginProcessProxy::deleteWebsiteDataForHostNames):
        (WebKit::generateCallbackID): Deleted.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::generateStorageProcessCallbackID):
        (WebKit::StorageProcessProxy::fetchWebsiteData):
        (WebKit::StorageProcessProxy::deleteWebsiteData):
        (WebKit::StorageProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::generateCallbackID): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFPluginAccessibilityObject accessibilityPerformAction:]):
        (-[WKPDFPluginAccessibilityObject accessibilityFocusedUIElement]):
        (-[WKPDFPluginAccessibilityObject accessibilityAssociatedControlForAnnotation:]):
        (-[WKPDFPluginAccessibilityObject accessibilityHitTest:]):
        (-[WKPDFLayerControllerDelegate updateScrollPosition:]):
        (WebKit::PDFPlugin::updateCursor):
        (WebKit::coreCursor):
        (appendValuesInPDFNameSubtreeToVector): Deleted.
        (getAllValuesInPDFNameTree): Deleted.
        (getAllScriptsInPDFDocument): Deleted.

2018-08-30  Tim Horton  <timothy_horton@apple.com>

        Fix the watchOS and tvOS build

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

2018-08-30  Eric Carlson  <eric.carlson@apple.com>

        Mock video devices should only support discrete sizes
        https://bugs.webkit.org/show_bug.cgi?id=189000
        <rdar://problem/43766551>

        Reviewed by Youenn Fablet.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::resetMockMediaDevices):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::resetMockMediaDevices):

2018-08-30  Olivia Barnett  <obarnett@apple.com>

        Web Share API compatible with AppleTV and WatchOS
        https://bugs.webkit.org/show_bug.cgi?id=189157

        Reviewed by Tim Horton.

        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView fileUploadPanelDidDismiss:]):
        * UIProcess/ios/forms/WKShareSheet.h:
        * UIProcess/ios/forms/WKShareSheet.mm:
        (-[WKShareSheet invokeShareSheetWithResolution:]):
        Added platform checks.

2018-08-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r235413 and r235444.
        https://bugs.webkit.org/show_bug.cgi?id=189163

        Causes crashes when running layout tests under GuardMalloc
        (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "NetworkLoad::didReceiveResponse should pass its completion
        handler to its client"
        https://bugs.webkit.org/show_bug.cgi?id=188701
        https://trac.webkit.org/changeset/235413

        "Remove assertion introduced in r235413"
        https://bugs.webkit.org/show_bug.cgi?id=188701
        https://trac.webkit.org/changeset/235444

2018-08-30  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl][WebKit] Bugfix on redirect.
        https://bugs.webkit.org/show_bug.cgi?id=189056

        Reviewed by Alex Christensen.

        Forget to call updateFromDelegatePreservingOldProperties in continueWillSendRequest like other ports do.

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

2018-08-30  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Color picker layout is broken if suggested colors are specified
        https://bugs.webkit.org/show_bug.cgi?id=189117

        Reviewed by Tim Horton.

        NSPopoverColorWell recently changed the size of its swatches. We need to update
        the width of the swatches we provide to match the width of the other swatches,
        in order to avoid breaking the layout.

        While such a solution is not a good precedent, we do not have fully-functional SPI
        to customize the suggested colors. A FIXME has been added for this reason.
        However, even once we obtain SPI, we will need to find a way to support older
        clients, making conditional compilation a potential necessity.

        * UIProcess/mac/WebColorPickerMac.mm:

2018-08-30  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Whitelist Network process features for VPN
        https://bugs.webkit.org/show_bug.cgi?id=189023
        <rdar://problem/43310000>

        Reviewed by Eric Carlson.

        CFNetwork needs access to some VPN preference files to configure networking, and
        need to be allowed to communicate with the VPN process from the Network Process
        sandbox.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2018-08-30  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [ConnectionUnix] Shrink sizeof AttachmentInfo by reordering members
        https://bugs.webkit.org/show_bug.cgi?id=189149

        Reviewed by Michael Catanzaro.

        Reorder members to shrink the size of AttachmentInfo so that
        we can attach more attachments. 

        * Platform/IPC/unix/ConnectionUnix.cpp:

2018-08-29  Chris Dumez  <cdumez@apple.com>

        Avoid code duplication in ResourceLoadStatisticsMemoryStore::processStatisticsAndDataRecords()
        https://bugs.webkit.org/show_bug.cgi?id=189130

        Reviewed by Youenn Fablet.

        Move if check inside the lambda instead of outside to avoid code duplication.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::processStatisticsAndDataRecords):

2018-08-29  Alex Christensen  <achristensen@webkit.org>

        Revert some of r235398
        https://bugs.webkit.org/show_bug.cgi?id=189133

        Reviewed by Tim Horton.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::processDidCrash):
        (API::LoaderClient::didChangeBackForwardList):
        (API::LoaderClient::didCommitLoadForFrame):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeBackForwardList):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):

2018-08-29  Olivia Barnett  <obarnett@apple.com>

        Implement the Web Share API
        https://bugs.webkit.org/show_bug.cgi?id=171100
        <rdar://problem/31751734>

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h:
        Added NSURL _title property as in the WebCore UIKitSPI.

        * Scripts/webkit/messages.py:
        ShareDataWithParsedURL special case for header for type.
        
        * Shared/ShareSheetCallbackID.h:
        Added a typedef for a share sheet callback id.       

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ShareData>::encode):
        (IPC::ArgumentCoder<ShareData>::decode):
        (IPC::ArgumentCoder<ShareDataWithParsedURL>::encode):
        (IPC::ArgumentCoder<ShareDataWithParsedURL>::decode):
        * Shared/WebCoreArgumentCoders.h:
        Added encoding and decoding functionality for new structs.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebShareEnabled):
        (WKPreferencesGetWebShareEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        Added switch for RuntimeEnabledFeature.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Added hook for share sheet testing.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::showShareSheet):
        Page client call to invoke share sheet.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showShareSheet):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Web page proxy handling of call to invoke share sheet.
        Creates completion handler to send to WKShareSheet.mm
        Completion handler sends message to WebPage with message id.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showShareSheet):
        Page client implementation call to invoke share sheet. 

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _showShareSheet:completionHandler:]):
        (-[WKContentView shareSheetDidDismiss:]):
        (-[WKContentView invokeShareSheetWithResolution:resolved):
        Call to WKShareSheet to invoke the share sheet and callback.
        Hook for share sheet resolution testing.

        * UIProcess/ios/forms/WKShareSheet.h: Added.
        * UIProcess/ios/forms/WKShareSheet.mm: Added.
        (-[WKShareSheet initWithView:]):
        (-[WKShareSheet presentWithParameters:completionHandler:]):
        (-[WKShareSheet _dispatchDidDismiss]):
        (-[WKShareSheet _cancel]):
        (-[WKShareSheet dismiss]):
        (-[WKShareSheet _dismissDisplayAnimated:]):
        (-[WKShareSheet _presentFullscreenViewController:animated:]):
        (-[WKShareSheet invokeShareSheetWithResolution:resolved:]):
        Completion handler call and creation of share sheet with parameters.
        Hook that force resolves the share sheet completion handler for testing. 

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::showShareSheet):
        Call to page to invoke share sheet.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::nextShareSheetContextId):
        (WebKit::WebPage::showShareSheet):
        (WebKit::WebPage::showShareSheetResponse):
        WebPage calls proxy and saves context id for promise.        

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Callback for completed response.

2018-08-29  Chris Dumez  <cdumez@apple.com>

        Crash under WebKit: WTF::Function<void ()>::CallableWrapper<WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords(WTF::CompletionHandler<void ()>&&)::$_1>::call()
        https://bugs.webkit.org/show_bug.cgi?id=189098
        <rdar://problem/43179891>

        Reviewed by Youenn Fablet.

        The crash was caused by implicitly using |this| on the main thread by accessing member variables, even though
        |this| gets destroyed on the statistics queue. To address the issue, capture what we need on the statistics
        queue, *before* dispatching to the main thread.

        Also stop capturing |this| in the lambdas to make this less error prone.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::grandfatherExistingWebsiteData):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):

2018-08-29  Youenn Fablet  <youenn@apple.com>

        Remove WebRTC legacy API implementation
        https://bugs.webkit.org/show_bug.cgi?id=189040

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebRTCLegacyAPIEnabled): Deleted.
        (WKPreferencesGetWebRTCLegacyAPIEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _webRTCLegacyAPIEnabled]): Deleted.
        (-[WKPreferences _setWebRTCLegacyAPIEnabled:]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-08-29  Chris Dumez  <cdumez@apple.com>

        [PSON] We should only process-swap when eTLD+1 changes on navigation
        https://bugs.webkit.org/show_bug.cgi?id=189090
        <rdar://problem/43799225>

        Reviewed by Geoffrey Garen.

        When navigating cross-origin, only process swap when the eTLD+1 (aka "Registrable
        domain") changes, instead of considering the full security origin.

        This has performance benefits and is also needed to keep document.domain origin
        relaxation working.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::addProcessToOriginCacheSet):
        (WebKit::WebProcessPool::removeProcessFromOriginCacheSet):
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:

2018-08-29  Youenn Fablet  <youenn@apple.com>

        Add a runtime flag for WebRTC unified plan
        https://bugs.webkit.org/show_bug.cgi?id=189068

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-08-29  Aditya Keerthi  <akeerthi@apple.com>

        Followup (r235427): Use the null string instead of std::nullopt when no suggestion is selected
        https://bugs.webkit.org/show_bug.cgi?id=189095

        Reviewed by Tim Horton.

        Followup to r235427 as per Darin's comment.

        We can avoid unnecessary use of std::optional by taking advantage of the fact that
        WTF::String already has a null value distinct from the empty value.

        No change in behavior.

        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (WebKit::WebDataListSuggestionsDropdownMac::selectOption):
        (-[WKDataListSuggestionsView currentSelectedString]):

2018-08-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Use the null string instead of std::nullopt for missing attachment file names and content types
        https://bugs.webkit.org/show_bug.cgi?id=189080

        Reviewed by Tim Horton.

        Replace instances of std::optional<String> with just String instead, and use the null string to represent a
        missing value instead of std::nullopt. No change in behavior.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateAttachmentAttributes):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateAttachmentAttributes):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-08-28  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use CMake's FindFreetype
        https://bugs.webkit.org/show_bug.cgi?id=189071

        Reviewed by Michael Catanzaro.

        * PlatformWPE.cmake:

2018-08-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Work towards: [iOS] Consolidate the implementations of readString, stringForType, and readURL in PlatformPasteboardIOS.mm
        https://bugs.webkit.org/show_bug.cgi?id=189054

        Reviewed by Andy Estes.

        Remove the pasteboard type argument from readURLFromPasteboard.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::readURLFromPasteboard):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::readURLFromPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-08-28  Alex Christensen  <achristensen@webkit.org>

        Remove assertion introduced in r235413
        https://bugs.webkit.org/show_bug.cgi?id=188701

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
        r235413 did not change behavior. The assertion was invalid.

2018-08-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove references to "APIAttachmentCocoa.h" in WebKit.xcodeproj
        Follow-up to https://bugs.webkit.org/show_bug.cgi?id=188933

        Rubber-stamped by David Kilzer.

        This header was not removed from the Xcode project file after being deleted.

        * WebKit.xcodeproj/project.pbxproj:

2018-08-28  Sihui Liu  <sihui_liu@apple.com>

        Add error information to help debug test failure in WKNavigation.ProcessCrashDuringCallback
        https://bugs.webkit.org/show_bug.cgi?id=189037

        Reviewed by Chris Dumez.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _getMainResourceDataWithCompletionHandler:]):
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView _getContentsAsStringWithCompletionHandler:]):

2018-08-28  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix issue that extra cookie is added when redirect happens.
        https://bugs.webkit.org/show_bug.cgi?id=187874

        Reviewed by Alex Christensen.

        When initial request has cookie set and redirect happens, it add extra Cookie header to that
        abd request was broken. Just stop modifying the original request by passing a value.

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

2018-08-28  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Color wells should appear rounded and textured
        https://bugs.webkit.org/show_bug.cgi?id=189039

        Reviewed by Tim Horton.

        * UIProcess/mac/WebColorPickerMac.mm: Build fix.

2018-08-28  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Pressing enter without a selected option shouldn't change the input
        https://bugs.webkit.org/show_bug.cgi?id=189010

        Reviewed by Tim Horton.

        Currently, the value of an input field gets cleared if there is no selected
        datalist suggestion when the enter key is pressed. The correct behavior is to
        leave the value of the input as-is.

        The incorrect behavior is a consequence of the fact that an empty string is
        returned by [WKDataListSuggestionsView currentSelectedString] if there is no
        selection. To fix the behavior, the method now returns an std::optional instead
        of an empty string. If std::nullopt is returned, we do not make any modification
        to the value of the input. This ensures that we can still change the value of
        an input field to an empty string in the case that an empty string is part of
        the suggestions.

        Augmented test: fast/forms/datalist/datalist-textinput-keydown.html

        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (WebKit::WebDataListSuggestionsDropdownMac::selectOption):
        (-[WKDataListSuggestionCell drawRect:]): Quick fix. The mouseover color was incorrect.
        (-[WKDataListSuggestionsView currentSelectedString]):

2018-08-28  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Support inputmode=none
        https://bugs.webkit.org/show_bug.cgi?id=188896

        Reviewed by Tim Horton.

        inputmode=none is used by content that renders its own keyboard control.
        Consequently, we should not display the virtual keyboard when a user interacts
        with an element that has the inputmode attribute set to the "none" value.

        In order to achieve this behavior, we return a UIView with a bounds of CGRectZero
        as the inputView of the WKContentView when inputmode=none is present. Furthermore,
        we do not provide an accessory view in this case.

        Updated the logic that zooms and scrolls to a control when it gains focus, as that
        behavior currently relies on an accessory view being present.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView inputView]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView textInputTraits]):

2018-08-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Enable Proxy Authentication on WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=188998

        Reviewed by Alex Christensen.

        Add support for proxy authentication to curl backend running on WebKit.
        This is follow up implementation of legacy implementation:
        - https://bugs.webkit.org/show_bug.cgi?id=185266

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::curlDidReceiveResponse):
        (WebKit::NetworkDataTaskCurl::tryProxyAuthentication):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        * PlatformWin.cmake:

2018-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Remove WebCore::AttachmentDisplayOptions and friends
        https://bugs.webkit.org/show_bug.cgi?id=189004

        Reviewed by Dan Bernstein.

        Removes all usage of WebCore::AttachmentDisplayOptions, and deletes an SPI method that isn't being used by any
        internal clients. Removal of _WKAttachmentDisplayOptions itself is still blocked on the submission of
        <rdar://problem/43357281>.

        * Scripts/webkit/messages.py:
        * Shared/WebCoreArgumentCoders.cpp:
        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::setDisplayOptions): Deleted.
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _insertAttachmentWithFilename:contentType:data:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:completion:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Deprecate -_insertAttachmentWithFileWrapper:contentType:options:completion:, in favor of
        -_insertAttachmentWithFileWrapper:contentType:completion:.

        * UIProcess/API/Cocoa/_WKAttachment.h:

        Remove -setDisplayOptions:completion:, since it is a now a noop, and also isn't used by any internal clients.

        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachmentDisplayOptions coreDisplayOptions]): Deleted.
        (-[_WKAttachment setDisplayOptions:completion:]): Deleted.
        * UIProcess/API/Cocoa/_WKAttachmentInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::insertAttachment):
        (WebKit::WebPageProxy::setAttachmentDisplayOptions): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertAttachment):
        (WebKit::WebPage::setAttachmentDisplayOptions): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-08-27  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-08-27  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix -- disable LTO for production builds

        * Configurations/Base.xcconfig:

2018-08-27  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Block CoreServices in sandbox.
        https://bugs.webkit.org/show_bug.cgi?id=189005
        <rdar://problem/35369091>

        Reviewed by Brent Fulgham.

        The sandbox for the WebContent process should block CoreServices.

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

2018-08-27  Simon Fraser  <simon.fraser@apple.com>

        Teach WebKitTestRunner and DumpRenderTree about detecting world leaks
        https://bugs.webkit.org/show_bug.cgi?id=188994

        Reviewed by Tim Horton.

        This patch adds the notion of a "control command" in the protocol between webkitpy and 
        WebKitTestRunner/DumpRenderTree. A command is simply an input string starting with a #
        that is checked for before trying to parse the input as test URL. For now, just one
        commmand is supported, which is "#CHECK FOR WORLD LEAKS".
        
        In response to the command, the tool dumps an output block in the usual pseudo-MIME-style,
        with a trailing "#EOF". Future patches will add support to webkitpy to parse this output.
        
        DumpRenderTree stubs out the command, returning an empty block.
        
        WebKitTestRunner responds to the command by dumping the list of live documents, if it was
        run with the --check-for-world-leaks option.
        
        When run with --check-for-world-leaks, WebKitTestRunner gets the list of live documents via
        WKBundleGetLiveDocumentURLs() after every test (this allows it to detect the first test
        that leaked a document), and keeps them in a map of document identifier to test and live document URL.
        Then when it receives the "#CHECK FOR WORLD LEAKS" command, it calls into the bundle to
        clear the page and memory caches, runs a GC, then posts a task (in the Document::postTaks() sense)
        after which it requests the list of live documents for a final time, excluding any that are loaded
        in live Frames (thus omitting the about:blank that will be loaded at this point). Documents in this
        list are therefore leaked (or abandoned).
        
        Future patches will hook up webkitpy reporting for leaked documents.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleGetLiveDocumentURLs):
        (WKBundleClearPageCache):
        (WKBundleClearMemoryCache):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePagePostTask):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::liveDocumentURLs):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2018-08-27  Alex Christensen  <achristensen@webkit.org>

        Fix plug-ins after r235398
        https://bugs.webkit.org/show_bug.cgi?id=188997

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

2018-08-27  Aditya Keerthi  <akeerthi@apple.com>

        Consolidate ENABLE_INPUT_TYPE_COLOR and ENABLE_INPUT_TYPE_COLOR_POPOVER
        https://bugs.webkit.org/show_bug.cgi?id=188931

        Reviewed by Wenson Hsieh.

        A popover is the preferred interface for <input type=color> on macOS. The color
        panel is still accessible through a button on the popover, for fine-grained
        color selection. We can consolidate the two build flags, so that a popover is
        always displayed in the ENABLE(INPUT_TYPE_COLOR) build.

        * Configurations/FeatureDefines.xcconfig: Removed ENABLE_INPUT_TYPE_COLOR_POPOVER.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showColorPicker):
        (WebKit::WebPageProxy::closeOverlayedViews):
        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::WebColorPickerMac):
        (WebKit::WebColorPickerMac::showColorPicker):

2018-08-27  Alex Christensen  <achristensen@webkit.org>

        Pass webPageID and webFrameID to NetworkLoad for speculative loads
        https://bugs.webkit.org/show_bug.cgi?id=188682

        Reviewed by Youenn Fablet.

        This also removes an authentication shortcut I introduced in r234941

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveResponse):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):

2018-08-27  Alex Christensen  <achristensen@webkit.org>

        Remove most of LoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=188997

        Reviewed by Tim Horton.

        We still have a few clients using basic functionality that are transitioning to WKPageNavigationClient,
        but most of it can be removed.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::~LoaderClient):
        (API::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (API::LoaderClient::didFailLoadWithErrorForFrame):
        (API::LoaderClient::didFirstVisuallyNonEmptyLayoutForFrame):
        (API::LoaderClient::didReachLayoutMilestone):
        (API::LoaderClient::shouldKeepCurrentBackForwardListItemInList):
        (API::LoaderClient::didCommitLoadForFrame): Deleted.
        (API::LoaderClient::didFinishDocumentLoadForFrame): Deleted.
        (API::LoaderClient::didSameDocumentNavigationForFrame): Deleted.
        (API::LoaderClient::didReceiveTitleForFrame): Deleted.
        (API::LoaderClient::didFirstLayoutForFrame): Deleted.
        (API::LoaderClient::didDisplayInsecureContentForFrame): Deleted.
        (API::LoaderClient::didRunInsecureContentForFrame): Deleted.
        (API::LoaderClient::didDetectXSSForFrame): Deleted.
        (API::LoaderClient::didReceiveAuthenticationChallengeInFrame): Deleted.
        (API::LoaderClient::didStartProgress): Deleted.
        (API::LoaderClient::didChangeProgress): Deleted.
        (API::LoaderClient::didFinishProgress): Deleted.
        (API::LoaderClient::processDidBecomeUnresponsive): Deleted.
        (API::LoaderClient::processDidBecomeResponsive): Deleted.
        (API::LoaderClient::processDidCrash): Deleted.
        (API::LoaderClient::didChangeBackForwardList): Deleted.
        (API::LoaderClient::willGoToBackForwardListItem): Deleted.
        (API::LoaderClient::didNavigateWithNavigationData): Deleted.
        (API::LoaderClient::didPerformClientRedirect): Deleted.
        (API::LoaderClient::didPerformServerRedirect): Deleted.
        (API::LoaderClient::didUpdateHistoryTitle): Deleted.
        (API::LoaderClient::navigationGestureDidBegin): Deleted.
        (API::LoaderClient::navigationGestureWillEnd): Deleted.
        (API::LoaderClient::navigationGestureDidEnd): Deleted.
        (API::LoaderClient::pluginLoadPolicy): Deleted.
        (API::LoaderClient::didFailToInitializePlugin): Deleted.
        (API::LoaderClient::didBlockInsecurePluginVersion): Deleted.
        (API::LoaderClient::webGLLoadPolicy const): Deleted.
        (API::LoaderClient::resolveWebGLLoadPolicy const): Deleted.
        (API::LoaderClient::didStartLoadForQuickLookDocumentInMainFrame): Deleted.
        (API::LoaderClient::didFinishLoadForQuickLookDocumentInMainFrame): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeBackForwardList):
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::didStartProgress):
        (WebKit::WebPageProxy::didChangeProgress):
        (WebKit::WebPageProxy::didFinishProgress):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::didDetectXSSForFrame):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        (WebKit::WebPageProxy::webGLPolicyForURL):
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        (WebKit::WebPageProxy::navigationGestureDidBegin):
        (WebKit::WebPageProxy::navigationGestureWillEnd):
        (WebKit::WebPageProxy::navigationGestureDidEnd):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didStartLoadForQuickLookDocumentInMainFrame):
        (WebKit::WebPageProxy::didFinishLoadForQuickLookDocumentInMainFrame):

2018-08-27  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r234985/r234989) WKPageLoadHTMLString with a 16-bit String has the wrong encoding
        https://bugs.webkit.org/show_bug.cgi?id=189002

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (encodingOf):

2018-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Exception (fileType 'dyn.agq8u' is not a valid UTI) raised when dragging an attachment whose file wrapper is a directory
        https://bugs.webkit.org/show_bug.cgi?id=188903
        <rdar://problem/43702993>

        Reviewed by Tim Horton.

        Fixes the bug by supporting NSFileWrappers of type directory, as well as NSFileWrappers with file that do not
        map to concrete type identifiers. Among other things, this patch ensures that:
        -       Inserting a directory file wrapper (or using -setFileWrapper:…: to change an existing _WKAttachment's
                file wrapper to a directory) does not cause the attachment element to show "0 bytes" as the subtitle.
        -       In the above scenario, we also won't end up with a missing "type" attribute for the attachment element,
                as well as a corresponding API::Attachment::contentType() that's an empty string.
        -       Dropping or pasting attachments backed by paths on disk also doesn't trigger these problems, if the path
                is a directory or of unknown file type.

        Changes are verified by 2 new API tests.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::updateAttributes):
        (API::Attachment::fileSizeForDisplay const):
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::setFileWrapperAndUpdateContentType):

        Add a helper that sets the file wrapper to the given NSFileWrapper, and either sets the content type to the
        given content type if it's specified, or infers it from the file extension of the new NSFileWrapper. Invoked
        whenever an NSFileWrapper and content type combination is set on an API attachment via WebKit SPI.

        (API::Attachment::fileSizeForDisplay const):

        Returns a file size to be displayed in the attachment element's subtitle. This returns an optional file size,
        where `std::nullopt` indicates that there should not be a file size shown. For now, this returns `std::nullopt`
        for directory file wrappers, though in the future, this should be done only in cases where we don't immediately
        have a size estimate for the file wrapper.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:options:completion:]):

        Use API::Attachment::setFileWrapperAndUpdateContentType() instead of trying to come up with a fallback UTI.

        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachment setFileWrapper:contentType:completion:]):

        Use API::Attachment::setFileWrapperAndUpdateContentType() instead of trying to come up with a fallback UTI.

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

        Remove the separate arguments for file size, content type, and file name, and instead get them from the given
        API Attachment object.

        (WebKit::WebPageProxy::updateAttachmentAttributes):

        Remove separate arguments for file size, content type and file name and just take an API::Attachment instead.
        These separate pieces of information can simply be asked from the Attachment itself.

        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertAttachment):
        (WebKit::WebPage::updateAttachmentAttributes):

        Adjust some interfaces here to allow the displayed file size to be optional.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-08-27  Alex Christensen  <achristensen@webkit.org>

        Fix internal builds after r235368

        * UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h:
        At least the ios macros need an introductory version.

2018-08-27  Keith Rollin  <krollin@apple.com>

        Build system support for LTO
        https://bugs.webkit.org/show_bug.cgi?id=187785
        <rdar://problem/42353132>

        Reviewed by Dan Bernstein.

        Update Base.xcconfig and DebugRelease.xcconfig to optionally enable
        LTO.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2018-08-27  Daniel Bates  <dabates@apple.com>

        Remove extern variable and simplify state initialization in TextCheckerMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=188820

        Reviewed by Simon Fraser.

        Use the same approach to initializing the TextCheckerState in TextCheckerMac.mm as we did in
        TextCheckerIOS.mm. Make use of a static, non-member, file-local function and NeverDestroyed
        to initialize a TextCheckerState object once and provide access to it from other implementation
        functions.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::mutableState):
        (WebKit::TextChecker::state):
        (WebKit::TextChecker::setTestingMode):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::setAutomaticSpellingCorrectionEnabled):
        (WebKit::TextChecker::setAutomaticQuoteSubstitutionEnabled):
        (WebKit::TextChecker::setAutomaticDashSubstitutionEnabled):
        (WebKit::TextChecker::setAutomaticLinkDetectionEnabled):
        (WebKit::TextChecker::setAutomaticTextReplacementEnabled):
        (WebKit::TextChecker::didChangeAutomaticTextReplacementEnabled):
        (WebKit::TextChecker::didChangeAutomaticSpellingCorrectionEnabled):
        (WebKit::TextChecker::didChangeAutomaticQuoteSubstitutionEnabled):
        (WebKit::TextChecker::didChangeAutomaticDashSubstitutionEnabled):
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        (WebKit::initializeState): Deleted.

2018-08-27  Sihui Liu  <sihui_liu@apple.com>

        Don't launch network process in WebCookieManagerProxy::setHTTPCookieAcceptPolicy
        https://bugs.webkit.org/show_bug.cgi?id=188906
        <rdar://problem/42875795>

        Reviewed by Ryosuke Niwa.

        Add callback in early return.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):

2018-08-27  Alex Christensen  <achristensen@webkit.org>

        Transition WKBrowsingContextController from WKPageLoaderClient to WKPageNavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=188942

        Reviewed by Andy Estes.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (didStartProvisionalNavigation):
        (didReceiveServerRedirectForProvisionalNavigation):
        (didFailProvisionalNavigation):
        (didCommitNavigation):
        (didFinishNavigation):
        (didFailNavigation):
        (canAuthenticateAgainstProtectionSpace):
        (didReceiveAuthenticationChallenge):
        (setUpPageLoaderClient):
        (-[WKBrowsingContextController setLoadDelegate:]):
        (didStartProvisionalLoadForFrame): Deleted.
        (didReceiveServerRedirectForProvisionalLoadForFrame): Deleted.
        (didFailProvisionalLoadWithErrorForFrame): Deleted.
        (didCommitLoadForFrame): Deleted.
        (didFinishLoadForFrame): Deleted.
        (didFailLoadWithErrorForFrame): Deleted.
        (canAuthenticateAgainstProtectionSpaceInFrame): Deleted.
        (didReceiveAuthenticationChallengeInFrame): Deleted.
        (didStartProgress): Deleted.
        (didChangeProgress): Deleted.
        (didFinishProgress): Deleted.
        (didChangeBackForwardList): Deleted.
        * UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h:

2018-08-26  Darin Adler  <darin@apple.com>

        [Cocoa] Adapt more WebKit code to be ARC-compatible
        https://bugs.webkit.org/show_bug.cgi?id=188955

        Reviewed by Anders Carlsson.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Use __strong for an in/out argument.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
        Use __strong for a in/out argument.
        (WebKit::NetworkDataTaskCocoa::applyCookieBlockingPolicy): Call a NSURLSessionTask
        method using an explicit category declaration rather than by using performSelector:
        since ARC is unable to correctly compile a call when it doesn't know argument and
        result types.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeCocoaOverrides): Add some __bridge casts.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm: Use HashSet<CFTypeRef> instead of
        HashSet<Class> since Class ia an ARC-managed type and WTF hash tables can't
        currently handle those as key types.
        (-[WKRemoteObjectDecoder decodeValueOfObjCType:at:]): Changed types and added casts
        to adapt to the above.
        (decodeObjectFromObjectStream): Ditto.
        (checkIfClassIsAllowed): Ditto.
        (decodeInvocationArguments): Ditto.
        (decodeObject): Ditto.
        (-[WKRemoteObjectDecoder decodeObjectOfClasses:forKey:]): Ditto.
        (-[WKRemoteObjectDecoder allowedClasses]): Ditto.
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (propertyListClasses): Ditto.
        (initializeMethod): Ditto.
        (-[_WKRemoteObjectInterface debugDescription]): Ditto.
        (classesForSelectorArgument): Ditto.
        (-[_WKRemoteObjectInterface classesForSelector:argumentIndex:ofReply:]): Ditto.
        (-[_WKRemoteObjectInterface setClasses:forSelector:argumentIndex:ofReply:]): Ditto.
        (-[_WKRemoteObjectInterface _allowedArgumentClassesForSelector:]): Ditto.
        (-[_WKRemoteObjectInterface _allowedArgumentClassesForReplyBlockOfSelector:]): Ditto.
        * Shared/API/Cocoa/_WKRemoteObjectInterfaceInternal.h: Ditto.

        * Shared/API/c/cf/WKStringCF.mm:
        (WKStringCreateWithCFString): Use CFRetain instead of -[NSObject retain]. Also use
        a __bridge cast.
        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCreateWithCFURL): Ditto.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::ref): Added a __bridge cast.
        (API::Object::deref): Ditto.
        (API::allocateWKObject): Use class_createInstance instead of NSAllocateObject.
        (API::Object::wrap): Use a __bridge cast.
        (API::Object::unwrap): Ditto.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h: Use CFTypeRef for layers
        or views in the RelatedLayerMap since we don't want the items retained, and can't
        use __unsafe_uretained because the header is used in non-Objective-C contexts.
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties): Added __bridge casts,
        needed because of the above change.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (WebKit::browsingContextControllerMap): Use __unsafe_unretained.

        * UIProcess/API/Cocoa/WKConnection.mm:
        (didReceiveMessage): Use a __bridge cast.

        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (-[WKContentRuleListStore compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]):
        Use a retain here so we don't have to have a "releasesArgument:" boolean. The cost of a single
        retain/release pair should be infinitesmal compared to the entire process of compiling.
        (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]):
        Moved the code for the "releases argument" version here since the private method is now the
        actual method that does the work. The public method now simply calls this private one after
        doing a retain. The optimization of releasing the argument at the correct moment should be intact.

        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm: Use CFTypeRef for the key to the _observers
        HashMap since the WTF collections can't yet handle ARC types for keys.
        (-[WKHTTPCookieStore addObserver:]): Added __bridge cast for compatibility with the above.
        (-[WKHTTPCookieStore removeObserver:]): Ditto.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (setUpConnectionClient): Added a __bridge cast.
        (setUpHistoryClient): Ditto.

        * UIProcess/API/Cocoa/WKViewPrivate.h: Added a declaration of the
        -[WKView _shouldLoadIconWithParameters:completionHandler:] method. This peculiar idiom
        should be removed, but I didn't bother doing that since the entire WKView class is already
        deprecated and so will eventually be removed.

        * UIProcess/API/Cocoa/WKWebView.mm: Use __unsafe_unretained for the keys in the page to
        view map.
        (accessibilityEventsEnabledChangedCallback): Use a __bridge cast.
        (-[WKWebView _certificateChain]): Ditto.
        (-[WKWebView certificateChain]): Ditto.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView maybeInstallIconLoadingClient]): Call the method
        _shouldLoadIconWithParameters:completionHandler: in a normal way rather than using
        performSelector:withObject:withObject: since ARC is unable to correctly compile a call
        when it doesn't know argument and result types.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::webCryptoMasterKey): Use the overload
        of API::Data::createWithoutCopying that knows how to work with an NSData rather than
        re-implementing it here.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Ditto. Also removed unneeded
        use of RetainPtr.

        * UIProcess/Cocoa/WebViewImpl.h: Use NSObject * as the result type of
        immediateActionAnimationControllerForHitTestResult. Our techniques for defining such
        functions in headers while remaining compatible with non-Objective-C will still work
        fine given how we use this, and converting to and from void* rather than NSObject *
        would be difficult to do correctly under ARC.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::acceptsFirstMouse): Use CFRetain/CFAutorelease instead of
        retain/autorelease.
        (WebKit::WebViewImpl::shouldDelayWindowOrderingForEvent): Ditto.
        (WebKit::WebViewImpl::immediateActionAnimationControllerForHitTestResult):
        Updated return type to NSObject *.
        (WebKit::WebViewImpl::performKeyEquivalent): Use CFRetain/CFAutorelease.

        * UIProcess/PageClient.h: Use NSObject * as the result type, as above.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree): Use __bridge casts to be compatible
        with the changes to the RelatedLayerMap types.
        (WebKit::recursivelyMapIOSurfaceBackingStore): Use __bridge cast.

        * Source/WebKit/UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::immediateActionAnimationControllerForHitTestResult):
        Use NSObject * as the result type, as above.
        * Source/WebKit/UIProcess/WebPageProxy.h: Ditto.

        * UIProcess/mac/PageClientImplMac.h: Use NSObject * as the result type, as above.
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::immediateActionAnimationControllerForHitTestResult):
        Ditto.
        (WebKit::PageClientImpl::refView): Use __bridge cast.
        (WebKit::PageClientImpl::derefView): Ditto.

        * UIProcess/mac/ServicesController.mm:
        (WebKit::ServicesController::refreshExistingServices): Removed unnecessary use
        of NeverDestroyed for Objective-C object pointers. Simpler and more efficient
        both with and without ARC.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _updateImmediateActionItem]): Removed unneeded
        cast now that immediateActionAnimationControllerForHitTestResult has a more
        accurate return type.

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView dealloc]): Use a more direct approach to making sure we do the
        non-thread-safe actions on the main thread with a call to callOnMainThread.
        The old solution, WebCoreObjCScheduleDeallocateOnMainThread, may not be possible
        in an ARC-compatible way, but this one should work fine.
        (linkDestinationName): Changed to return an NSString * to make sure we get the
        object lifetimes correct under ARC.
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]): Added __bridge casts.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h: Use __unsafe_unretained
        for the value types in DOM caches.
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::toWKDOMNode): Updated for the above.
        (WebKit::toWKDOMRange): Ditto.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPreInitialize): Rewrote the class_replaceMethod
        call to sidestep the rules about not using @selector(release) under ARC.
        (WebKit::NetscapePlugin::updatePluginLayer): Use __bridge casts.

        * WebProcess/Plugins/PDF/PDFPlugin.mm: Added an include of
        WebAccessibilityObjectWrapperMac.h, without which this code doesn't compile
        under ARC.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::changeWordCase): Use a function rather than a selector, since ARC is unable
        to correctly compile a method call when it doesn't know argument and result types.
        (WebKit::WebEditorClient::uppercaseWord): Updated to use a function rather than a selector.
        (WebKit::WebEditorClient::lowercaseWord): Ditto.
        (WebKit::WebEditorClient::capitalizeWord): Ditto.

        * WebProcess/cocoa/WebProcessCocoa.mm: Added an include of
        WebAccessibilityObjectWrapperIOS/Mac.h, without which this code doesn't compile
        under ARC.

2018-08-27  Alex Christensen  <achristensen@webkit.org>

        Fix authentication for clients of WKPageLoaderClient after r234941
        https://bugs.webkit.org/show_bug.cgi?id=188939

        Reviewed by Youenn Fablet.

        I simplified the authentication code path elegantly for clients of WKPageNavigationClient/WKNavigationDelegate,
        but clients of WKPageLoaderClient that do not implement didReceiveAuthenticationChallengeInFrame would hang.
        This fixes that.  I've also made the performDefaultHandling (when delegates are not implemented) and rejectProtectionSpaceAndContinue
        (when canAuthenticationAgainstProtectionSpace returns false) behave correctly.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didReachLayoutMilestone):
        (API::LoaderClient::canAuthenticateAgainstProtectionSpaceInFrame): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        (WKPageSetPageNavigationClient):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):

2018-08-26  Sam Weinig  <sam@webkit.org>

        Using _WKRemoteObjectInterface with a protocol that inherits from a non-NSObject protocol crashes
        https://bugs.webkit.org/show_bug.cgi?id=188958

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (initializeMethods):
        Fix infinite recursion by using the passed in protocol rather
        than always using the one from the initial interface. 

2018-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Dropping and pasting images should insert inline image elements with _WKAttachments
        https://bugs.webkit.org/show_bug.cgi?id=188933
        <rdar://problem/43699724>

        Reviewed by Darin Adler.

        Support the ability to drop and paste images as image elements, with attachment elements, only if attachment
        elements are enabled. See changes below for more detail.

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

        Rename "filename" to "fileName", for consistency with WKContentView and WebViewImpl.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::mimeType const):
        (API::Attachment::fileName const):
        * UIProcess/API/APIAttachment.h:

        Push getters for MIME type, UTI, and the file name down from _WKAttachment to API::Attachment. This allows
        WKContentView and WebViewImpl to ask an API::Attachment questions about its UTI and file name without
        additionally creating a wrapper object.

        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm: Added.
        (API::mimeTypeInferredFromFileExtension):
        (API::isDeclaredOrDynamicTypeIdentifier):
        (API::Attachment::mimeType const):
        (API::Attachment::utiType const):
        (API::Attachment::fileName const):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        Add a private delegate hook to notify the UI delegate when a drop has been performed. This is used by tests to
        know when a drop with file promises has been processed by the page.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _web_didPerformDragOperation:]):
        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachmentInfo initWithFileWrapper:filePath:mimeType:utiType:]):
        (-[_WKAttachmentInfo fileWrapper]):
        (-[_WKAttachmentInfo contentType]):
        (-[_WKAttachment info]):
        (-[_WKAttachmentInfo initWithFileWrapper:filePath:contentType:]): Deleted.
        (isDeclaredOrDynamicTypeIdentifier): Deleted.
        (-[_WKAttachmentInfo _typeIdentifierFromPathExtension]): Deleted.
        (-[_WKAttachmentInfo mimeType]): Deleted.
        (-[_WKAttachmentInfo utiType]): Deleted.

        Moved to APIAttachmentCocoa.mm.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _web_didPerformDragOperation:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKPromisedAttachmentContext initWithIdentifier:blobURL:fileName:]):

        Adjust this constructor to take each piece of data separately. This is because, in the case where our
        PromisedAttachmentInfo contains an attachment identifier, we determine the UTI and file name from the associated
        file wrapper.

        (-[WKPromisedAttachmentContext fileName]):
        (WebKit::WebViewImpl::fileNameForFilePromiseProvider):
        (WebKit::WebViewImpl::didPerformDragOperation):
        (WebKit::WebViewImpl::startDrag):

        Determine UTI and file name from the attachment element corresponding to the attachment identifier when
        dragging. This is because the attachment element in the web process shouldn't need to have type and title
        attributes set when starting a drag if it already has an identifier that maps to attachment data in the UI
        process. An example of this is in inline images backed by attachments, for which we don't need to bother keeping
        specifying display attributes, since they are never visible.

        (-[WKPromisedAttachmentContext initWithAttachmentInfo:]): Deleted.
        (-[WKPromisedAttachmentContext filename]): Deleted.
        * UIProcess/PageClient.h:
        (WebKit::PageClient::didPerformDragOperation):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformDragOperation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Rename DidPerformDataInteractionControllerOperation to DidPerformDragOperation, and make it cross-platform (this
        was previously only sent on iOS). Add plumbing through PageClient and friends on macOS to notify the UI
        delegate when a drop is handled by the web process.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didPerformDragOperation):
        (WebKit::PageClientImpl::didPerformDataInteractionControllerOperation): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didPerformDragOperation:]):
        (-[WKContentView _prepareToDragPromisedAttachment:]):

        Just like in WebViewImpl::startDrag, infer content type and file name from the API attachment object.

        (-[WKContentView _didPerformDataInteractionControllerOperation:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didPerformDataInteractionControllerOperation): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didPerformDragOperation):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

2018-08-23  Jeff Miller  <jeffm@apple.com>

        Remove -[WKNavigationDelegate _webView:decidePolicyForPluginLoadWithCurrentPolicy:pluginInfo:unavailabilityDescription:]
        https://bugs.webkit.org/show_bug.cgi?id=188889

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        Remove obsolete method.

        * UIProcess/Cocoa/NavigationState.h:
        Remove obsolete flag.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        Remove obsolete flag.

        (WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad):
        Remove support for obsolete delegate method.

2018-08-24  Ryosuke Niwa  <rniwa@webkit.org>

        Pass in IsComposed flag to Event constructors
        https://bugs.webkit.org/show_bug.cgi?id=188720
        <rdar://problem/43580387>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::navigateToPDFLinkWithSimulatedClick): A trusted click event is composed regardless of
        whether it's simulated or not.

2018-08-24  Alex Christensen  <achristensen@webkit.org>

        Add WKWebView._mainFrame SPI
        https://bugs.webkit.org/show_bug.cgi?id=188925

        Reviewed by Brian Burg.

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

2018-08-24  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Match the interface used in NetworkDataTask and ResourceHandle.
        https://bugs.webkit.org/show_bug.cgi?id=188922

        Reviewed by Alex Christensen.

        The interfaces for NetworkDataTask and ResourceHandle are diverged.
        It should be same for the same purpose because they do same thing.

        No change in behavior.

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

2018-08-24  Alex Christensen  <achristensen@webkit.org>

        Follow up to r235323
        https://bugs.webkit.org/show_bug.cgi?id=188923
        <rdar://problem/34657861>

        * UIProcess/API/C/mac/WKInspectorPrivateMac.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter inspector]):
        A _WKInspector * accessor in the WKWebInspectorProxyObjCAdapter is nice, too.

2018-08-24  Alex Christensen  <achristensen@webkit.org>

        Introduce _WKInspector
        https://bugs.webkit.org/show_bug.cgi?id=188923
        <rdar://problem/34657861>

        Reviewed by Brian Burg.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _inspector]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKInspector.h: Added.
        * UIProcess/API/Cocoa/_WKInspector.mm: Added.
        (-[_WKInspector webView]):
        (-[_WKInspector isConnected]):
        (-[_WKInspector isVisible]):
        (-[_WKInspector isFront]):
        (-[_WKInspector isProfilingPage]):
        (-[_WKInspector isElementSelectionActive]):
        (-[_WKInspector connect]):
        (-[_WKInspector show]):
        (-[_WKInspector hide]):
        (-[_WKInspector close]):
        (-[_WKInspector showConsole]):
        (-[_WKInspector showResources]):
        (-[_WKInspector showMainResourceForFrame:]):
        (-[_WKInspector attach]):
        (-[_WKInspector detach]):
        (-[_WKInspector showTimelines]):
        (-[_WKInspector togglePageProfiling]):
        (-[_WKInspector toggleElementSelection]):
        (-[_WKInspector printErrorToConsole:]):
        (-[_WKInspector _apiObject]):
        * UIProcess/API/Cocoa/_WKInspectorInternal.h: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-08-24  Sihui Liu  <sihui_liu@apple.com>

        Don't launch network process in WebCookieManagerProxy::setHTTPCookieAcceptPolicy
        https://bugs.webkit.org/show_bug.cgi?id=188906
        <rdar://problem/43539661>

        Reviewed by Geoffrey Garen.

        In WebCookieManagerProxy::setHTTPCookieAcceptPolicy, we persist the cookieAcceptPolicy of 
        sharedCookieStorage. When we launch the network process later, we pass the 
        identifier of sharedCookieStorage to network process, so network process has the correct 
        cookieAcceptPolicy. Therefore, we don't have to launch the network process and send the 
        setting message if the network process is not launched.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):

2018-08-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to inject/register user content in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=188883

        Reviewed by Michael Catanzaro.

        Add new API to create user scripts/stylesheets for a given script world and to register/unregister user script
        messages in a given script world.

        * UIProcess/API/glib/WebKitUserContent.cpp:
        (webkitUserContentWorld):
        (_WebKitUserStyleSheet::_WebKitUserStyleSheet):
        (webkit_user_style_sheet_new):
        (webkit_user_style_sheet_new_for_world):
        (_WebKitUserScript::_WebKitUserScript):
        (webkit_user_script_new):
        (webkit_user_script_new_for_world):
        * UIProcess/API/glib/WebKitUserContentManager.cpp:
        (webkit_user_content_manager_register_script_message_handler_in_world):
        (webkit_user_content_manager_unregister_script_message_handler_in_world):
        * UIProcess/API/glib/WebKitUserContentPrivate.h:
        * UIProcess/API/gtk/WebKitUserContent.h:
        * UIProcess/API/gtk/WebKitUserContentManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitUserContent.h:
        * UIProcess/API/wpe/WebKitUserContentManager.h:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserContentWorlds):

2018-08-23  Tim Horton  <timothy_horton@apple.com>

        Use unified build for UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=185014

        Reviewed by Alex Christensen.

        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration urlSchemeHandlerForURLScheme:]):
        * UIProcess/API/glib/IconDatabase.cpp:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/WebKitColorChooser.cpp:
        * UIProcess/API/gtk/WebKitPopupMenu.cpp:
        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        * UIProcess/ApplicationStateTracker.mm:
        * UIProcess/Authentication/mac/WebCredentialMac.mm:
        * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:
        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        * UIProcess/Cocoa/NavigationState.mm:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * UIProcess/Cocoa/ViewGestureController.cpp:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):
        (-[WKWebViewContentProviderRegistry addPage:]):
        (-[WKWebViewContentProviderRegistry removePage:]):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/Cocoa/WebURLSchemeHandlerCocoa.mm:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKTextTouchBarItemController itemForIdentifier:]):
        (WebKit::WebViewImpl::performDragOperation):
        * UIProcess/Downloads/DownloadProxy.cpp:
        * UIProcess/DrawingAreaProxy.cpp:
        * UIProcess/Gamepad/UIGamepad.cpp:
        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        * UIProcess/Gamepad/cocoa/UIGamepadProviderCocoa.mm:
        * UIProcess/HighPerformanceGraphicsUsageSampler.cpp:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        * UIProcess/PerActivityStateCPUUsageSampler.cpp:
        * UIProcess/Plugins/PluginInfoStore.cpp:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeScrollingPerformanceData.mm:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        * UIProcess/RemoteWebInspectorProxy.cpp:
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        * UIProcess/SuspendedPageProxy.cpp:
        * UIProcess/TextCheckerCompletion.cpp:
        * UIProcess/UIMessagePortChannelProvider.cpp:
        * UIProcess/UserMediaPermissionCheckProxy.cpp:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        * UIProcess/VisitedLinkStore.cpp:
        * UIProcess/WKInspectorHighlightView.mm:
        (findIntersectionOnLineBetweenPoints):
        (quadIntersection):
        (layerPathWithHole):
        (layerPath):
        (-[WKInspectorHighlightView _layoutForNodeHighlight:offset:]):
        (-[WKInspectorHighlightView _layoutForNodeListHighlight:]):
        (-[WKInspectorHighlightView _layoutForRectsHighlight:]):
        (-[WKInspectorHighlightView update:]):
        * UIProcess/WebBackForwardList.cpp:
        * UIProcess/WebContextMenuListenerProxy.cpp:
        * UIProcess/WebCookieManagerProxy.cpp:
        * UIProcess/WebEditCommandProxy.cpp:
        * UIProcess/WebFrameProxy.cpp:
        * UIProcess/WebFullScreenManagerProxy.cpp:
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/WebNavigationState.cpp:
        * UIProcess/WebOpenPanelResultListenerProxy.cpp:
        * UIProcess/WebPageInjectedBundleClient.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        * UIProcess/WebURLSchemeHandler.cpp:
        * UIProcess/WebURLSchemeTask.cpp:
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        * UIProcess/ios/DragDropInteractionState.mm:
        * UIProcess/ios/InputViewUpdateDeferrer.mm:
        * UIProcess/ios/PageClientImplIOS.mm:
        (-[WKEditCommandObjC initWithWebEditCommandProxy:]):
        (-[WKEditCommandObjC command]):
        * UIProcess/ios/SmartMagnificationController.mm:
        * UIProcess/ios/TextCheckerIOS.mm:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (presentationStyleForView):
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView initWithFrame:webView:]):
        (-[WKApplicationStateTrackingView _applicationDidEnterBackground]):
        (-[WKApplicationStateTrackingView _applicationDidFinishSnapshottingAfterEnteringBackground]):
        (-[WKApplicationStateTrackingView _applicationWillEnterForeground]):
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS _startUpdating]):
        (-[WKGeolocationProviderIOS _stopUpdating]):
        (-[WKGeolocationProviderIOS _setEnableHighAccuracy:]):
        (-[WKGeolocationProviderIOS init]):
        (-[WKGeolocationProviderIOS initWithProcessPool:]):
        (-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:completionHandler:view:]):
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
        (-[WKLegacyCoreLocationProvider positionChanged:]):
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator _scrollOffsetForEvent:]):
        (-[WKKeyboardScrollingAnimator beginWithEvent:]):
        (-[WKKeyboardScrollingAnimator handleKeyEvent:]):
        (-[WKKeyboardScrollingAnimator startAnimatedScroll]):
        (-[WKKeyboardScrollingAnimator stopAnimatedScroll]):
        * UIProcess/ios/WKLegacyPDFView.mm:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _systemContentInset]):
        * UIProcess/ios/WKSystemPreviewView.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/mac/CorrectionPanel.mm:
        (correctionIndicatorType):
        * UIProcess/mac/PageClientImplMac.mm:
        * UIProcess/mac/RemoteWebInspectorProxyMac.mm:
        (-[WKRemoteWebInspectorProxyObjCAdapter initWithRemoteWebInspectorProxy:]):
        * UIProcess/mac/TextCheckerMac.mm:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        * UIProcess/mac/ViewSnapshotStore.mm:
        * UIProcess/mac/WKFullKeyboardAccessWatcher.mm:
        (-[WKFullKeyboardAccessWatcher notifyAllProcessPools]):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (WebKit::WKFullScreenWindowControllerVideoFullscreenModelClient::setInterface):
        (WebKit::WKFullScreenWindowControllerVideoFullscreenModelClient::interface const):
        (-[WKFullScreenWindowController initWithWindow:webView:page:]):
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController windowDidEnterFullScreen:]):
        (-[WKFullScreenWindowController windowDidExitFullScreen:]):
        (-[WKFullScreenWindowController _manager]):
        (-[WKFullScreenWindowController _replaceView:with:]):
        (zoomAnimation):
        (createMask):
        (maskAnimation):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController initWithPage:view:viewImpl:recognizer:]):
        (-[WKImmediateActionController willDestroyView:]):
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController didPerformImmediateActionHitTest:contentPreventsDefault:userData:]):
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        (-[WKImmediateActionController _webHitTestResult]):
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController menuItem:maxSizeForPoint:]):
        (-[WKImmediateActionController _animationControllerForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):
        (-[WKImmediateActionController _animationControllerForText]):
        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController initWithInspectedPage:]):
        (-[WKInspectorViewController webView]):
        (-[WKInspectorViewController configuration]):
        (-[WKInspectorViewController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):
        (-[WKInspectorViewController webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WKInspectorViewController inspectorWKWebViewReload:]):
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _expectedPreviewCallbackForRect:]):
        (pageDidDrawToImage):
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
        (pageDidComputePageRects):
        (-[WKPrintingView _askPageToComputePageRects]):
        (-[WKPrintingView _pageForRect:]):
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]):
        (-[WKPrintingView _drawPreview:]):
        (-[WKPrintingView drawRect:]):
        (-[WKPrintingView rectForPage:]):
        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient initWithPage:view:]):
        (-[WKTextFinderClient findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:]):
        (-[WKTextFinderClient getSelectedText:]):
        (arrayFromRects):
        (-[WKTextFinderClient didFindStringMatchesWithRects:didWrapAround:]):
        (-[WKTextFinderClient didGetImageForMatchResult:]):
        * UIProcess/mac/WKTextInputWindowController.mm:
        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:viewImpl:mode:]):
        (-[WKViewLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewViewSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewFixedSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        * UIProcess/mac/WebColorPickerMac.mm:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKMenuTarget forwardContextMenuAction:]):
        (WebKit::menuItemIdentifier):
        (WebKit::WebContextMenuProxyMac::createContextMenuItem):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter initWithWebInspectorProxy:]):
        * UIProcess/mac/WebPageProxyMac.mm:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        * UIProcess/win/PageClientImpl.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        * UIProcess/win/WebView.cpp:
        * UIProcess/wpe/TextCheckerWPE.cpp:
        * UIProcess/wpe/WebPasteboardProxyWPE.cpp:
        * WebKit.xcodeproj/project.pbxproj:

2018-08-23  Sihui Liu  <sihui_liu@apple.com>

        Move legacy directory configuration from WebProcessPool to API::WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=188765
        <rdar://problem/43633183>

        Reviewed by Geoffrey Garen.

        Diretories are parameters of websiteDataStore instead of webProcessPool, so we should move
        legacy default paths to API::WebsiteDataStore, which already stores default paths for 
        non-legacy cases.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration):
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::legacyDefaultDataStoreConfiguration):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/win/WebProcessPoolWin.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/wpe/WebProcessPoolWPE.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory): Deleted.

2018-08-23  Alex Christensen  <achristensen@webkit.org>

        Add new _webViewRequestPointerLock SPI with a completionHandler
        https://bugs.webkit.org/show_bug.cgi?id=188907
        <rdar://problem/35871109>

        Reviewed by Andy Estes.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::requestPointerLock):

2018-08-23  Andy Estes  <aestes@apple.com>

        [Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave
        https://bugs.webkit.org/show_bug.cgi?id=188829

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::supportsVersion):

2018-08-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234942.

        Caused page loading issues in iTunes

        Reverted changeset:

        "Transition more WKWebViewConfiguration ivars to
        API::PageConfiguration values"
        https://bugs.webkit.org/show_bug.cgi?id=188663
        https://trac.webkit.org/changeset/234942

2018-08-23  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Support the inputmode attribute on contenteditable elements
        https://bugs.webkit.org/show_bug.cgi?id=188878

        Reviewed by Ryosuke Niwa.

        Ensured that the assistedNodeInformation for a contenteditable element reflects
        the value of the element's inputmode attribute.

        Moved logic to obtain the InputMode from the attribute value into WebCore.

        * Shared/AssistedNodeInformation.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2018-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        Assert in NetworkBlobRegistry::unregisterBlobURL after network process had terminated
        https://bugs.webkit.org/show_bug.cgi?id=188880

        Reviewed by Saam Barati.

        Removed the debug assertion. WebContent process might be asking this network process
        to unregister a blob registered from another network processs which had since crashed.

        We could keep track of which blob had been registered with which network process
        in WebContent process and avoid sending IPC to the network process but that's a lot of
        house-keeping for virtually no benefit other than not hitting this assertion.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::unregisterBlobURL):

2018-08-23  Sihui Liu  <sihui_liu@apple.com>

        Remove keys of defaults that are no longer used in webProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=188855

        Reviewed by Alex Christensen.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):

2018-08-23  Dan Bernstein  <mitz@apple.com>

        [Cocoa] First scroll gesture in pinned, non-rubber-banding WKWebView may fail to initiate back/forward swipe
        https://bugs.webkit.org/show_bug.cgi?id=188894
        <rdar://problem/43651434>

        Reviewed by Tim Horton.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent): Set the rubber-band state on the ScrollingTree
          synchronously rather than dispatching doing that to the scrolling thread. This is safe to
          do because ScrollingTree synchrnoizes access to the rubber-band state with an internal
          mutex.

2018-08-23  Youenn Fablet  <youenn@apple.com>

        self.isSecureContext undefined in Service Worker
        https://bugs.webkit.org/show_bug.cgi?id=188842

        Reviewed by Alex Christensen.

        Enable isSecureContext runtime flag.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updatePreferencesStore):

2018-08-23  Commit Queue  <commit-queue@webkit.org>

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

        Caused 50+ Layout Tests to Crash and 173 api Failures on Debug
        builds (Requested by Truitt on #webkit).

        Reverted changeset:

        "Move legacy directory configuration from WebProcessPool to
        API::WebsiteDataStore"
        https://bugs.webkit.org/show_bug.cgi?id=188765
        https://trac.webkit.org/changeset/235216

2018-08-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove the remaining CoordinatedGraphicsLayerState cruft
        https://bugs.webkit.org/show_bug.cgi?id=188881

        Reviewed by Carlos Garcia Campos.

        Rid CompositingCoordinator class of code that manages now-deleted state
        tracking of layer creation, update and removal on the
        CoordinatedGraphicsState class. The syncLayerState() method is changed
        accordingly, now only enforcing a frame synchronization when called.

        Use of Nicosia::PlatformLayer::LayerID is adopted since the
        CoordinatedLayerID type has been removed.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        (WebKit::CompositingCoordinator::initializeRootCompositingLayerIfNeeded):
        (WebKit::CompositingCoordinator::syncLayerState):
        (WebKit::CompositingCoordinator::createGraphicsLayer):
        (WebKit::CompositingCoordinator::detachLayer):
        (WebKit::CompositingCoordinator::attachLayer):
        (WebKit::CompositingCoordinator::clearPendingStateChanges): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:

2018-08-22  Antti Koivisto  <antti@apple.com>

        NetworkCache::Storage::lastStableVersion should be a developer-only feature
        https://bugs.webkit.org/show_bug.cgi?id=188843
        <rdar://problem/43574100>

        Reviewed by Geoffrey Garen.

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

        Delete old cache versions unconditionally if we are system WebKit.

        * Shared/ChildProcess.h:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::isSystemWebKit):

        Find out if WebKit is installed under '/System/'.

2018-08-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove CoordinatedImageBacking and related functionality
        https://bugs.webkit.org/show_bug.cgi?id=188847

        Reviewed by Michael Catanzaro.

        Remove the CoordinatedImageBacking class and its intertwining use in the
        CoordinatedGraphics system.

        Drop the CoordinatedImageBacking object management from the
        CompositingCoordinator class, along with the
        CoordinatedImageBacking::Client inheritance. The corresponding image
        backing state management on the CoordinatedGraphicsState class can be
        removed accordingly.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        (WebKit::CompositingCoordinator::clearPendingStateChanges):
        (WebKit::CompositingCoordinator::purgeBackingStores):
        (WebKit::CompositingCoordinator::createImageBackingIfNeeded): Deleted.
        (WebKit::CompositingCoordinator::createImageBacking): Deleted.
        (WebKit::CompositingCoordinator::updateImageBacking): Deleted.
        (WebKit::CompositingCoordinator::clearImageBackingContents): Deleted.
        (WebKit::CompositingCoordinator::removeImageBacking): Deleted.
        (WebKit::CompositingCoordinator::flushPendingImageBackingChanges): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:

2018-08-22  Sihui Liu  <sihui_liu@apple.com>

        Move legacy directory configuration from WebProcessPool to API::WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=188765

        Reviewed by Geoffrey Garen.

        Diretories are parameters of websiteDataStore instead of webProcessPool, so we should move
        legacy default paths to API::WebsiteDataStore, which already stores default paths for 
        non-legacy cases.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration):
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::legacyDefaultDataStoreConfiguration):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory):
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/win/WebProcessPoolWin.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/wpe/WebProcessPoolWPE.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory): Deleted.
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory): Deleted.

2018-08-22  John Wilander  <wilander@apple.com>

        The Storage Access API prompt should show the eTLD+1s, not the full host names
        https://bugs.webkit.org/show_bug.cgi?id=188830
        <rdar://problem/43380645>

        Reviewed by Brent Fulgham.

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

2018-08-22  Tim Horton  <timothy_horton@apple.com>

        De-unify WebPage
        https://bugs.webkit.org/show_bug.cgi?id=188865

        Reviewed by Wenson Hsieh.

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        WebPage being unified is causing mysterious build issues inside Carbon headers
        on High Sierra only. Also, WebPage by itself takes longer to build than
        most full unified source files, so it might not make sense to unify it
        with others (to maximize parallelism).

2018-08-22  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r235204.

        reverting previous rollout

        Reverted changeset:

        "Unreviewed, rolling out r235176."
        https://bugs.webkit.org/show_bug.cgi?id=185015
        https://trac.webkit.org/changeset/235204

2018-08-22  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r235176.

        broke internal builds

        Reverted changeset:

        "Use unified build for WebProcess"
        https://bugs.webkit.org/show_bug.cgi?id=185015
        https://trac.webkit.org/changeset/235176

2018-08-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support dragging attachment elements out as files on macOS
        https://bugs.webkit.org/show_bug.cgi?id=181294
        <rdar://problem/36298801>

        Reviewed by Tim Horton.

        Add support for dragging attachment elements on macOS by writing promised files to drag pasteboard. See changes
        below for more details.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView filePromiseProvider:fileNameForType:]):
        (-[WKWebView filePromiseProvider:writePromiseToURL:completionHandler:]):
        (-[WKWebView draggingSession:sourceOperationMaskForDraggingContext:]):
        (-[WKWebView draggingSession:endedAtPoint:operation:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView filePromiseProvider:fileNameForType:]):
        (-[WKView filePromiseProvider:writePromiseToURL:completionHandler:]):
        (-[WKView draggingSession:sourceOperationMaskForDraggingContext:]):
        (-[WKView draggingSession:endedAtPoint:operation:]):

        Plumb NSFilePromiseProviderDelegate and NSDraggingSource method implementations to WebViewImpl.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKPromisedAttachmentContext initWithAttachmentInfo:]):
        (-[WKPromisedAttachmentContext blobURL]):
        (-[WKPromisedAttachmentContext filename]):
        (-[WKPromisedAttachmentContext attachmentIdentifier]):

        Add an object that contains the information needed to deliver a dragged attachment element's data via
        NSFilePromiseProvider. This is stored as the userInfo of the NSFilePromiseProvider created upon drag start.

        (WebKit::WebViewImpl::draggedImage):
        (WebKit::WebViewImpl::sendDragEndToPage):

        Add a helper method to handle cleanup after the dragging has finished, and call it from -draggedImage:… and
        -draggingSessionEnded:…. The latter is only triggered in the where -beginDraggingSessionWithItems:… is used,
        which currently only happens when dragging attachment elements.

        (WebKit::WebViewImpl::fileNameForFilePromiseProvider):
        (WebKit::webKitUnknownError):
        (WebKit::WebViewImpl::writeToURLForFilePromiseProvider):

        Deliver either NSFileWrapper data to the destination URL (in the case where an attachment identifier is known
        and the corresponding API::Attachment is backed by a file wrapper), or save the contents of the blob URL to the
        destination.

        (WebKit::WebViewImpl::dragSourceOperationMask):
        (WebKit::WebViewImpl::draggingSessionEnded):
        (WebKit::WebViewImpl::startDrag):

2018-08-22  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add support for the inputmode attribute
        https://bugs.webkit.org/show_bug.cgi?id=183621

        Reviewed by Tim Horton.

        The inputmode attribute specifies which input mechanism would be most helpful for
        users entering content in textfield inputs and textareas. This patch adds support
        for seven values: text, tel, url, email, numeric, decimal and search.

        On iOS, we can specify UIKeyboardTypes that best match the supplied inputmode.
        - text: UIKeyboardTypeDefault
        - tel: UIKeyboardTypePhonePad
        - url: UIKeyboardTypeURL
        - email: UIKeyboardTypeEmailAddress
        - numeric: UIKeyboardTypeNumbersAndPunctuation
        - decimal: UIKeyboardTypeDecimalPad
        - search: UIKeyboardTypeWebSearch

        In the case that the inputmode attribute is not specified, we fall back to using
        our existing heuristic to determine what kind of keyboard to show for textfields.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode const):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h: Added inputMode field.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textInputTraits]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::inputModeForElement):
        (WebKit::WebPage::getAssistedNodeInformation):

2018-08-22  Jeff Miller  <jeffm@apple.com>

        WKNavigationDelegate needs to allow clients to specify a custom blocked plug-in message
        https://bugs.webkit.org/show_bug.cgi?id=188764

        Reviewed by Alex Christensen.

        Add a new private WKNavigationDelegate method that takes a completion handler so clients can return
        a custom unavailability description in addition to the policy. Change WebPageProxy::findPlugin() to
        send a delayed reply and API::LoaderClient::pluginLoadPolicy()/API::NavigationClient::decidePolicyForPluginLoad()
        to take a completion handler to support this.
    
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::pluginLoadPolicy):
        Changed to take a completion handler. The default implementation doesn't return a custom
        unavailability description.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::decidePolicyForPluginLoad):
        Ditto.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        Changed pluginLoadPolicy() to take a completion handler.

        (WKPageSetPageNavigationClient):
        Changed decidePolicyForPluginLoad() to take a completion handler.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        Add alternate version of -decidePolicyForPluginLoadWithCurrentPolicy: that allows clients to return
        the unavailibility description.
    
        * UIProcess/Cocoa/NavigationState.h:
        Add flag for new delegate method.
        Changed decidePolicyForPluginLoad() to take a completion handler.
    
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        Calculate flag for new delegate method.
    
        (WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad):
        Changed to take a completion handler.
        Prefer new delegate method, if available.
    
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        Changed to send a delayed reply.
        Refactored some code into a lambda so it can be shared when using m_navigationClient->decidePolicyForPluginLoad().
        Removed unneeded UNUSED_PARAM() macros.
    
        * UIProcess/WebPageProxy.h:
        Changed findPlugin() to send a delayed reply.
    
        * UIProcess/WebPageProxy.messages.in:
        Ditto.

2018-08-22  Sihui Liu  <sihui_liu@apple.com>

        Try removing defaultSessionParameters from NetworkProcessCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=188831

        Reviewed by Alex Christensen.

        * 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-08-22  Tim Horton  <timothy_horton@apple.com>

        Use unified build for WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=185015

        Reviewed by Alex Christensen.

        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        * WebProcess/Gamepad/WebGamepadProvider.cpp:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
        * WebProcess/InjectedBundle/API/gtk/DOM/GObjectEventListener.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleFileHandle.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp:
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageFullScreenClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Network/WebSocketProvider.cpp:
        * WebProcess/Network/WebSocketStream.cpp:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        * WebProcess/Network/webrtc/LibWebRTCResolver.cpp:
        * WebProcess/Network/webrtc/LibWebRTCResolver.h:
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.cpp:
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        * WebProcess/Network/webrtc/WebRTCMonitor.h:
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        * WebProcess/Notifications/WebNotificationManager.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        * WebProcess/Plugins/Netscape/NetscapePluginNone.cpp:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.mm:
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        * WebProcess/Plugins/Plugin.cpp:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        * WebProcess/Plugins/PluginProxy.cpp:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebSWOriginTable.cpp:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
        * WebProcess/UserContent/WebUserContentController.cpp:
        * WebProcess/WebConnectionToUIProcess.cpp:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebColorChooser.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDataListSuggestionPicker.cpp:
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebGeolocationClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
        * WebProcess/WebCoreSupport/WebNotificationClient.cpp:
        * WebProcess/WebCoreSupport/WebPerformanceLoggingClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp:
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        * WebProcess/WebCoreSupport/WebValidationMessageClient.cpp:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        * WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp:
        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        * WebProcess/WebPage/DrawingArea.cpp:
        * WebProcess/WebPage/EventDispatcher.cpp:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.cpp:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        * WebProcess/WebPage/WebContextMenu.cpp:
        * WebProcess/WebPage/WebDocumentLoader.cpp:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebInspector.cpp:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPageOverlay.cpp:
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
        * WebProcess/WebPage/mac/PageBannerMac.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebPage/win/WebPageWin.cpp:
        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp:
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebStorage/StorageAreaImpl.cpp:
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        * WebProcess/win/WebProcessMainWin.cpp:
        * WebProcess/win/WebProcessWin.cpp:
        * WebProcess/wpe/WebProcessMainWPE.cpp:

2018-08-22  Daniel Bates  <dabates@apple.com>

        Cleanup: Add type alias for spell document tag
        https://bugs.webkit.org/show_bug.cgi?id=188817

        Reviewed by Simon Fraser.

        * UIProcess/TextChecker.h:
        * UIProcess/TextCheckerCompletion.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::spellDocumentTag):
        * UIProcess/WebPageProxy.h: Also addressed FIXME comment and modernized the code to use a std::optional
        while I am here.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        (WebKit::TextChecker::checkTextOfParagraph):
        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::spellDocumentTagMap):
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::textCheckerFor):
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        (WebKit::TextChecker::checkTextOfParagraph):
        * UIProcess/wpe/TextCheckerWPE.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):

2018-08-22  Antti Koivisto  <antti@apple.com>

        Use OptionSet for NetworkCache::Storage::TraverseFlags
        https://bugs.webkit.org/show_bug.cgi?id=188837

        Reviewed by Anders Carlsson.

        Type safe flags.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::initializeSize):
        (WebKit::CacheStorage::Caches::readRecordsList):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::traverse):
        (WebKit::NetworkCache::Cache::dumpContentsToFile):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::TraverseOperation::TraverseOperation):
        (WebKit::NetworkCache::Storage::traverse):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManager::activityStateDidChange):

        Also use OptionSet<>::containsAll() in a few places.

2018-08-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] pkg-config files should require libwpe
        https://bugs.webkit.org/show_bug.cgi?id=188835

        Reviewed by Žan Doberšek.

        * wpe/wpe-web-extension.pc.in:
        * wpe/wpe-webkit.pc.in:

2018-08-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Switch to Nicosia::CompositionLayer state tracking
        https://bugs.webkit.org/show_bug.cgi?id=188693

        Reviewed by Carlos Garcia Campos.

        Switch CoordinatedGraphicsScene to utilizing Nicosia::CompositionLayer
        objects for state updates of the TextureMapper layer tree.

        CoordinatedGraphicsScene::paintToCurrentGLContext() now calls
        updateSceneState() at the beginning. This is a new method that manages
        all updates for a given Nicosia::Scene instance. Any removed layers
        have their composition-side state cleaned up, and the current set of
        layers is then iterated to ensure and update the corresponding
        TextureMapperLayer objects.

        Layers with any backing (painted backing store, platform-layer or image
        content) are temporarly stored for updating outside of mutex-controlled
        scene update. Performing all other state updates outside of this mutex
        area will be investigated at a later point.

        We then iterate over vectors for each layer backing, gathering any
        affected CoordinatedBackingStore or TextureMapperPlatformLayerProxy
        objects that we have to update.

        This drops a bunch of member variables and helper methods off the
        CoordinatedGraphicsScene class. The applyStateChanges() method will be
        further simplified in the future. coordinateUpdateCompletionWithClient
        logic in ThreadedCompositor should be checked to see whether it still
        addresses any real-life problem, because at the moment it imposes a few
        additional operations in terms of scene updates that we could really do
        without. This will be checked later and removed if possible.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::applyStateChanges):
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebKit::compositionLayerImpl):
        (WebKit::contentLayerImpl):
        (WebKit::backingStoreImpl):
        (WebKit::imageBackingImpl):
        (WebKit::texmapLayer):
        (WebKit::updateBackingStore):
        (WebKit::updateImageBacking):
        (WebKit::removeLayer):
        (WebKit::CoordinatedGraphicsScene::commitSceneState):
        (WebKit::CoordinatedGraphicsScene::updateSceneState):
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):
        (WebKit::CoordinatedGraphicsScene::syncPlatformLayerIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::setLayerChildrenIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::setLayerFiltersIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::setLayerState): Deleted.
        (WebKit::CoordinatedGraphicsScene::getLayerByIDIfExists): Deleted.
        (WebKit::CoordinatedGraphicsScene::createLayers): Deleted.
        (WebKit::CoordinatedGraphicsScene::createLayer): Deleted.
        (WebKit::CoordinatedGraphicsScene::deleteLayers): Deleted.
        (WebKit::CoordinatedGraphicsScene::deleteLayer): Deleted.
        (WebKit::CoordinatedGraphicsScene::setRootLayerID): Deleted.
        (WebKit::CoordinatedGraphicsScene::prepareContentBackingStore): Deleted.
        (WebKit::CoordinatedGraphicsScene::createBackingStoreIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::removeBackingStoreIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::resetBackingStoreSizeToLayerSize): Deleted.
        (WebKit::CoordinatedGraphicsScene::createTilesIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::removeTilesIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::updateTilesIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::syncImageBackings): Deleted.
        (WebKit::CoordinatedGraphicsScene::createImageBacking): Deleted.
        (WebKit::CoordinatedGraphicsScene::updateImageBacking): Deleted.
        (WebKit::CoordinatedGraphicsScene::clearImageBackingContents): Deleted.
        (WebKit::CoordinatedGraphicsScene::removeImageBacking): Deleted.
        (WebKit::CoordinatedGraphicsScene::assignImageBackingToLayer): Deleted.
        (WebKit::CoordinatedGraphicsScene::setLayerAnimationsIfNeeded): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        (WebKit::CoordinatedGraphicsScene::layerByID): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::renderLayerTree):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):

2018-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        Replace booleans for modifier keys in UIEventWithKeyState with OptionSet<Modifier>
        https://bugs.webkit.org/show_bug.cgi?id=188777

        Reviewed by Simon Fraser.

        Added two FIXMEs.

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

2018-08-21  Alex Christensen  <achristensen@webkit.org>

        Roll out r235139 and r235146
        https://bugs.webkit.org/show_bug.cgi?id=188805

        It turns out shouldKeepCurrentBackForwardListItemInList has one use left.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::shouldKeepCurrentBackForwardListItemInList):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::shouldKeepCurrentBackForwardListItemInList):
        * UIProcess/WebPageProxy.h:

2018-08-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Remove _WKAttachments and notify the UI client upon mainframe navigation
        https://bugs.webkit.org/show_bug.cgi?id=188715
        <rdar://problem/43541790>

        Reviewed by Tim Horton.

        Adds logic for invalidating Attachment objects upon mainframe navigation, or upon web content process
        termination. An invalid Attachment's wrapper may still be retained by a UI client; however, calls to -info and
        other SPI methods will either return nil or immediately invoke their completion handlers with a nil result and
        an NSError. See changes below for more detail.

        This patch also takes some extra measures to avoid sending redundant or unexpected removal updates to the UI
        client upon invalidating all Attachments.

        See Tools changes for new API tests.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::invalidate):
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didInsertAttachment:withSource:]):
        (-[WKWebView _didRemoveAttachment:]):

        Refactor these methods to take references to the API::Attachment that is being inserted or removed, rather than
        take attachment identifiers. This allows us to keep logic for setting the InsertionState of Attachment objects
        in WebPageProxy, rather than in platform code.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachment info]):

        If the attachment object is invalid, return nil.

        (-[_WKAttachment setDisplayOptions:completion:]):
        (-[_WKAttachment setFileWrapper:contentType:completion:]):

        If the attachment object is invalid, immediately invoke the completion block with an error.

        (-[_WKAttachment isConnected]):

        Add a new readonly property for a client to easily determine whether a _WKAttachment is connected to the
        document, without having to maintain the current set of connected attachment objects by observing insertion and
        removal callbacks.

        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::didInsertAttachment):
        (WebKit::PageClientImplCocoa::didRemoveAttachment):

        Make these take API::Attachment&s rather than identifier strings.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::didInsertAttachment):
        (WebKit::PageClient::didRemoveAttachment):

        Also make these take API::Attachment&s rather than identifier strings.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::invalidateAllAttachments):

        Introduce a helper function that invalidates all Attachments and notifies the UI client if needed. This is
        invoked upon mainframe navigation, and when the web content process terminates.

        (WebKit::WebPageProxy::platformRegisterAttachment):
        (WebKit::WebPageProxy::didInsertAttachmentWithIdentifier):
        (WebKit::WebPageProxy::didRemoveAttachmentWithIdentifier):
        (WebKit::WebPageProxy::didInsertAttachment):
        (WebKit::WebPageProxy::didRemoveAttachment):

        Keep track of whether we've notified the UI client that an Attachment has been inserted into the document. This
        allows us to send removal updates to the UI client only for Attachments that are currently in the document, from
        the perspective of the UI client, and allows us to avoid sending extra removal updates in
        invalidateAllAttachments for Attachments that either have already been removed, or Attachments which we haven't
        inserted yet.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::didInsertAttachmentWithIdentifier):
        (WebKit::WebEditorClient::didRemoveAttachmentWithIdentifier):
        (WebKit::WebEditorClient::didInsertAttachment): Deleted.
        (WebKit::WebEditorClient::didRemoveAttachment): Deleted.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

        Rename did{Insert|Remove}Attachment to did{Insert|Remove}AttachmentWithIdentifier.

2018-08-21  Megan Gardner  <megan_gardner@apple.com>

        Change Selection modification to not snap the grabber when selecting above or below the selection anchor
        https://bugs.webkit.org/show_bug.cgi?id=188826

        Reviewed by Tim Horton.

        Selecting single lines is sometimes difficult because we currently snap selections to single
        characters if we move past the position of the other anchor in our selection. This patch changes
        this behaviour to reflect the behaviour in the rest of this system, which snaps the selection
        to the position on the line of the other anchor, rather than snapping it all the way a single
        character.

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

2018-08-21  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove unused file-local static variable from TextCheckerIOS.mm
        https://bugs.webkit.org/show_bug.cgi?id=188818

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::TextChecker::isSmartInsertDeleteEnabled):

2018-08-21  Daniel Bates  <dabates@apple.com>

        [iOS][WK2] Misspelled words are not underlined
        https://bugs.webkit.org/show_bug.cgi?id=188800
        <rdar://problem/34811332>

        Reviewed by Wenson Hsieh.

        Implement enough of TextChecker for iOS to compute the list of misspelled words in a
        paragraph and advertise support for continuous spell checking. The WebCore editing
        machinery queries TextChecker for the list of the misspelled words, creating document
        markers that demarcate the misspelled words. When we paint a line of text we paint
        the spelling correction dots under each misspelled word.

        On iOS we make use of UITextChecker to perform spell checking of a string. We maintain
        a side table that maps a "spell document tag" to a UITextChecker* to conform to the
        shape of the TextChecker interface.

        * Platform/spi/ios/UIKitSPI.h: Forward declare some SPI.
        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::mutableState): Added.
        (WebKit::TextChecker::state): Turns around and returns mutableState().
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed): Returns true if we are building
        with USE(UNIFIED_TEXT_CHECKING). Otherwise, do what we do now.
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled): Update state.
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged): Ditto.
        (WebKit::spellDocumentTagMap): Returns HashMap that maps a "spell document tag" (int64_t) to
        a RetainPtr<UITextChecker>>.
        (WebKit::TextChecker::uniqueSpellDocumentTag): Generates a unique identifier for the page
        this text checker is associated with.
        (WebKit::TextChecker::closeSpellDocumentWithTag): Removes the entry for the specified identifier
        from the HashMap.
        (WebKit::textCheckerFor): Query the HashMap for the UITextChecker for the specified spell
        document tag, if it exists. Otherwise, create a new UITextChecker and add a new map entry
        that associates it with the specified spell document tag. 
        (WebKit::TextChecker::checkTextOfParagraph): Spell check the specified string and return a list
        that represents the misspelled words.
        (WebKit::TextChecker::checkSpellingOfString): Added a comment to explain that iOS does not implement
        this function and instead implements checkTextOfParagraph().
        (WebKit::TextChecker::checkGrammarOfString): Ditto.

2018-08-21  Alex Christensen  <achristensen@webkit.org>

        Transition ResizeReversePaginatedWebView API test from WKPageLoaderClient to WKPageNavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=188821

        Reviewed by Simon Fraser.

        Add some more values to WKPageRenderingProgressEvents which were already supported by _WKRenderingProgressEvents and WKLayoutMilestones.

        * UIProcess/API/C/WKPageRenderingProgressEvents.h:
        * UIProcess/API/C/WKPageRenderingProgressEventsInternal.h:
        (pageRenderingProgressEvents):

2018-08-21  Alex Christensen  <achristensen@webkit.org>

        Fix API tests after r235139
        https://bugs.webkit.org/show_bug.cgi?id=188805

        Apparently the call to didChangeBackForwardList with no changes was observable.  We should rename, but I'm restoring existing behavior for now.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::goToItem):

2018-08-21  John Wilander  <wilander@apple.com>

        Storage Access API: The call to ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal() should send eTLD+1s, not full host names
        https://bugs.webkit.org/show_bug.cgi?id=188783
        <rdar://problem/43559215>

        Reviewed by Alex Christensen.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccess):
            Now sends the eTLD+1 for the top frame and sub frame.

2018-08-21  Megan Gardner  <megan_gardner@apple.com>

        Use VisiblePosition to calculate selection ranges
        https://bugs.webkit.org/show_bug.cgi?id=188767
        <rdar://problem/43577166>

        Reviewed by Ryosuke Niwa.

        Switches to using VisiblePosition, instead of Position. This code used to use VisiblePosiiton,
        but it has been changed a lot lately, and using Position causes issues with next and previous
        when trying to snap a selection. VisiblePosition gives us the correct information, and does not 
        result in collapsed ranges.

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

2018-08-21  Alex Christensen  <achristensen@webkit.org>

        Remove unused shouldKeepCurrentBackForwardListItemInList check
        https://bugs.webkit.org/show_bug.cgi?id=188805

        Reviewed by Andy Estes.

        The check was only done in WKPageLoaderClient, and nobody implements the check.
        It was not needed to put in WKPageNavigationClient or WKNavigationDelegate, so let's remove it!
        This removes the unused ability to go back and remove the current back/forward list item.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didChangeBackForwardList):
        (API::LoaderClient::shouldKeepCurrentBackForwardListItemInList): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::shouldKeepCurrentBackForwardListItemInList): Deleted.
        * UIProcess/WebPageProxy.h:

2018-08-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Augment _WKAttachment SPI to handle NSFileWrappers in addition to NSData
        https://bugs.webkit.org/show_bug.cgi?id=188496
        <rdar://problem/43216836>

        Reviewed by Tim Horton.

        Adjusts WebKit's attachment editing SPI with the following modifications:
        •   Deprecate `-_insertAttachmentWithFilename:contentType:data:options:completion:` in favor of
            `-_insertAttachmentWithFileWrapper:contentType:options:completion:`.
        •   Deprecate `-requestInfo:` and in favor of just `-info`.
        •   Add a `-fileWrapper` property to `_WKAttachmentInfo` that returns an `NSFileWrapper`.
        •   Remove some SPI methods that would otherwise be deprecated, but are not even necessary, since they're no
            longer even used by Mail.

        To make this possible, we refactor where and how attachment data is tracked. Currently, the data is stored in
        the network process, and made accessible to the web process via blob URLs stored in the File object in the
        attachment element. As such, requests from the UI process for attachment data would first be routed through the
        web process to network process and back.

        Instead, we now keep the relevant attachment data (in the form of NSFileWrapper on Cocoa platforms) in the UI
        process, on API::Attachment. We additionally keep a map of attachment identifiers to API::Attachments, which
        allows us to propagate the same _WKAttachment wrapper object to the SPI client for each uniquely identified
        attachment element. This also has the benefit of allowing us to remove the asynchronous version of `-requestInfo:`
        and replace it with just an `info` property.

        Changes are covered by new and existing API tests.

        * PlatformMac.cmake:

        Remove APIAttachment.cpp, now that APIAttachment.cpp is listed in Sources.txt.

        * Scripts/webkit/messages.py:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):

        Guard _WKAttachment creation with ENABLE_ATTACHMENT_ELEMENT.

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

        Continue removing encoding support for WebCore::AttachmentInfo. Additionally, rename PromisedBlobInfo to
        PromisedAttachmentInfo.

        * Sources.txt:
        * SourcesCocoa.txt:

        Move APIAttachment.cpp from the SourcesCocoa.txt to the platform-agnostic Sources.txt.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::updateAttributes):

        Rename setDataAndContentType to just updateAttributes; instead of sending data, only send the information needed
        to update the presentational attributes of the attachment element.

        (API::Attachment::requestInfo): Deleted.

        Just call the completion handler with the result of `self.info`.

        (API::Attachment::setDataAndContentType): Deleted.
        * UIProcess/API/APIAttachment.h:

        Add additional attributes: a content type, a file path, and (on Cocoa platforms) an NSFileWrapper.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        Remove -_webView:didInsertAttachment:, since this is unused by any client currently, and is superceded by
        -_webView:didInsertAttachment:withSource:.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didInsertAttachment:withSource:]):
        (-[WKWebView _didRemoveAttachment:]):

        Look up the API::Attachment corresponding to the identifier, and send its wrapper object to the client.

        (-[WKWebView _insertAttachmentWithFilename:contentType:data:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:options:completion:]):

        Add a way to insert an attachment using NSFileWrapper, and reimplement _insertAttachmentWithFilename: using it.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachmentInfo initWithFileWrapper:filePath:contentType:]):
        (-[_WKAttachmentInfo data]):
        (-[_WKAttachmentInfo name]):
        (isDeclaredOrDynamicTypeIdentifier):
        (-[_WKAttachmentInfo _typeIdentifierFromPathExtension]):
        (-[_WKAttachmentInfo contentType]):
        (-[_WKAttachmentInfo mimeType]):
        (-[_WKAttachmentInfo utiType]):
        (-[_WKAttachmentInfo fileWrapper]):
        (-[_WKAttachment info]):
        (-[_WKAttachment requestInfo:]):

        Add a property on _WKAttachment to retrieve a _WKAttachmentInfo (a snapshot of the current state of the
        attachment, along with the NSFileWrapper). Reimplement requestInfo using this property.

        (-[_WKAttachment setFileWrapper:contentType:completion:]):
        (-[_WKAttachment setData:newContentType:newFilename:completion:]):

        Reimplemented by calling -setFileWrapper:contentType:completion: with an NSFileWrapper created using the given
        data. Additionally, create and associate the unique identifier with an API::Attachment right away.

        (-[_WKAttachment uniqueIdentifier]):
        (-[_WKAttachment description]):
        (-[_WKAttachmentInfo initWithInfo:]): Deleted.
        (-[_WKAttachmentInfo fileLoadingError]): Deleted.
        (-[_WKAttachment isEqual:]): Deleted.
        (-[_WKAttachment hash]): Deleted.

        There's no longer any point to implementing these methods, since the SPI client is now guaranteed a unique
        mapping of _WKAttachments to attachment elements in the document.

        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::didInsertAttachment):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::platformRegisterAttachment):
        (WebKit::WebPageProxy::platformCloneAttachment):

        Extend the behavior of registering new attachment data on Cocoa platforms by additionally creating and setting
        NSFileWrappers on the API::Attachment.

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

        Clear out the map of attachment identifiers to API::Attachments when the web content process is terminated.

        (WebKit::WebPageProxy::attachmentForIdentifier const):

        Helper function to look up an API::Attachment for the given attachment identifier. Returns null if the
        attachment is not found, or the attachment identifier is invalid.

        (WebKit::WebPageProxy::insertAttachment):
        (WebKit::WebPageProxy::updateAttachmentAttributes):
        (WebKit::WebPageProxy::registerAttachmentIdentifierFromData):
        (WebKit::WebPageProxy::registerAttachmentIdentifierFromFilePath):
        (WebKit::WebPageProxy::cloneAttachmentData):
        (WebKit::WebPageProxy::platformRegisterAttachment):
        (WebKit::WebPageProxy::platformCloneAttachment):
        (WebKit::WebPageProxy::didInsertAttachment):

        Create an entry in the attachment identifier to API::Attachment map when an attachment is inserted, if one does
        not already exist. An attachment mapping would not exist only in the case where an attachment element was
        created via bindings; in this case, the client wouldn't have access to an NSFileWrapper containing the contents
        of the file; in the future, this can be improved by adding a mechanism to register an attachment element with
        this data, but for now, this is unnecessary for Mail's purposes.

        (WebKit::WebPageProxy::didRemoveAttachment):
        (WebKit::WebPageProxy::ensureAttachment):

        Ensures an attachment identifier to API::Attachment mapping.

        (WebKit::WebPageProxy::attachmentInfoCallback): Deleted.
        (WebKit::WebPageProxy::requestAttachmentInfo): Deleted.
        (WebKit::WebPageProxy::setAttachmentDataAndContentType): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startDrag:item:]):
        (-[WKContentView _prepareToDragPromisedAttachment:]):
        (-[WKContentView _prepareToDragPromisedBlob:]): Deleted.

        Reimplement the way promised attachment data is delivered to the destination when an attachment element is
        dragged. Instead of relying on the blob URL of the File on the attachment element, first try to find an API
        Attachment object corresponding to the unique identifier of the dragged attachment, and use its NSFileWrapper to
        deliver promised data to the destination file URL. The blob URL codepath still exists in the case where script
        specifies the dragged attachment's File.

        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerAttachmentIdentifier):
        (WebKit::WebEditorClient::cloneAttachmentData):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertAttachment):
        (WebKit::WebPage::updateAttachmentAttributes):
        (WebKit::WebPage::requestAttachmentInfo): Deleted.
        (WebKit::WebPage::setAttachmentDataAndContentType): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        More renaming and IPC message plumbing.

2018-08-21  Alex Christensen  <achristensen@webkit.org>

        Increment NetworkCache::Storage::lastStableVersion after r233742
        https://bugs.webkit.org/show_bug.cgi?id=188798
        <rdar://43561761>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/cache/NetworkCacheStorage.h:

2018-08-21  Brent Fulgham  <bfulgham@apple.com>

        Remove experimental affiliated domain code now that StorageAccess API is available
        https://bugs.webkit.org/show_bug.cgi?id=188756
        <rdar://problem/43527848>

        Reviewed by Alex Christensen.

        In Bug 174661 we added a compatibility quirk to support wsj.com authentication. This quirk is no longer needed,
        since the StorageAccess API provides the necessary tools to do this type of interaction without needing global
        cross-site access.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation):
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        (WebKit::areDomainsAssociated): Deleted.

2018-08-21  Alex Christensen  <achristensen@webkit.org>

        Add _WKWebsiteDataStoreConfiguration. sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=188748

        Reviewed by Ryosuke Niwa.

        * NetworkProcess/NetworkSessionCreationParameters.h:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration setSourceApplicationBundleIdentifier:]):
        (-[_WKWebsiteDataStoreConfiguration sourceApplicationBundleIdentifier]):
        (-[_WKWebsiteDataStoreConfiguration sourceApplicationSecondaryIdentifier]):
        (-[_WKWebsiteDataStoreConfiguration setSourceApplicationSecondaryIdentifier:]):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-08-21  Per Arne Vollan  <pvollan@apple.com>

        [WebGL] Contexts are not updated when display configuration changed.
        https://bugs.webkit.org/show_bug.cgi?id=188750

        Reviewed by Brent Fulgham.

        Calling CGDisplayRegisterReconfigurationCallback in GraphicsContext3DManager::addContext
        returns kCGErrorSuccess when WindowServer access is blocked in the WebContent process,
        but the callback function is never called. We should register the callback function in
        the UI process, and send a message to the WebContent process when the display
        configuration changed.

        * Sources.txt:
        * UIProcess/API/C/WKMockDisplay.cpp: Added.
        (WKSendDisplayConfigurationChangedMessageForTesting):
        * UIProcess/API/C/WKMockDisplay.h: Added.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::displayReconfigurationCallBack):
        (WebKit::WebProcessPool::sendDisplayConfigurationChangedMessageForTesting):
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::displayConfigurationChanged):

2018-08-21  John Wilander  <wilander@apple.com>

        Make ResourceLoadObserver::logWebSocketLoading() handle websockets in detached frames
        https://bugs.webkit.org/show_bug.cgi?id=188757
        <rdar://problem/38713390>

        Reviewed by Alex Christensen.

        These changes are test infrastructure to support the new WebKitTestRunner
        function isStatisticsRegisteredAsSubresourceUnder().

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubresourceUnder):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsSubresourceUnder const):
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::isRegisteredAsSubresourceUnder):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-08-21  Daniel Bates  <dabates@apple.com>

        Replace TextCheckingTypeMask with OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=188678

        Reviewed by Antti Koivisto.

        * Scripts/webkit/messages.py: Add WebCore::TextCheckingType to the special case map so that
        the generator knows what header has the definition for this type.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextCheckingRequestData>::encode):
        (IPC::ArgumentCoder<TextCheckingRequestData>::decode):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::coreTextCheckingType):
        (WebKit::textCheckingResultFromNSTextCheckingResult):
        * UIProcess/TextChecker.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::checkTextOfParagraph):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::requestCheckingOfString):
        (WebKit::TextChecker::checkTextOfParagraph): Also simplified return expressions.
        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::checkTextOfParagraph):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldEraseMarkersAfterChangeSelection const):
        (WebKit::WebEditorClient::checkTextOfParagraph):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2018-08-21  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for 2.21.91 release.

        * wpe/NEWS: Add release notes for the 2.21.91 release.

2018-08-21  Commit Queue  <commit-queue@webkit.org>

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

        It was not the main cause of the high CPU usage in the end
        (Requested by KaL on #webkit).

        Reverted changeset:

        "Unreviewed, rolling out r234259."
        https://bugs.webkit.org/show_bug.cgi?id=188005
        https://trac.webkit.org/changeset/234981

2018-08-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Use unified build for NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=185011

        Reviewed by Alex Christensen.

        * NetworkProcess/Cookies/WebCookieManager.cpp:
        * NetworkProcess/Downloads/Download.cpp:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkContentRuleListManager.cpp:
        * NetworkProcess/NetworkDataTask.cpp:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        * NetworkProcess/NetworkLoadChecker.cpp:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkSession.cpp:
        * NetworkProcess/NetworkSocketStream.cpp:
        * NetworkProcess/PingLoad.cpp:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        * NetworkProcess/cache/NetworkCache.cpp:
        * NetworkProcess/capture/NetworkCaptureEvent.cpp:
        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        * NetworkProcess/capture/NetworkCaptureRecorder.cpp:
        * NetworkProcess/capture/NetworkCaptureReplayer.cpp:
        * NetworkProcess/capture/NetworkDataTaskReplay.cpp:
        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::platformCancelNetworkLoad):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:didBecomeInvalidWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:willCacheResponse:completionHandler:]):
        Fix the build with unified sources.

        * Sources.txt: Un-@no-unify NetworkProcess/*.
        * SourcesCocoa.txt: Un-@no-unify NetworkProcess/*.

2018-08-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Sync unified build with Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=188732

        Reviewed by Tim Horton.

        Sync unified build with Cocoa ports. This enables unified build for WebKit/Platform and
        WebKit/Shared.

        Lots of files need to be moved around since the existing Sources.txt was not copied from
        CMakeLists.txt. This replaces the Sources.txt with the sources list from CMakeList.txt.
        Files that are not built for Cocoa are moved to SourcesGTK.txt, SourcesWPE.txt, and
        PlatformWin.cmake. Files that are built only on Cocoa are moved to SourcesCocoa.txt. There's
        plenty of room to determine if many of these files really need to be platform-specific in
        the future, but let's not change that now.

        Unfortunately, several files under Shared and PluginProcess need to be un-unified to be
        usable for GTK's WebKitPluginProcess2. I've never managed to understand why, but it won't
        link otherwise. Fortunately, this only affects a few files (listed in
        PluginProcessGTK2_SOURCES), only a couple dozen of which are cross-platform.

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

2018-08-20  Tim Horton  <timothy_horton@apple.com>

        Fix the iOSMac build with unified sources

        * Shared/mac/ArgumentCodersMac.mm:
        * Shared/mac/ChildProcessMac.mm:
        * Shared/mac/NativeWebKeyboardEventMac.mm:

2018-08-20  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Move capture device monitoring to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=188521
        <rdar://problem/43251787>

        Reviewed by Youenn Fablet.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged): Notify as appropriate.
        (WebKit::UserMediaPermissionRequestManagerProxy::viewIsBecomingVisible): Change name from
        viewIsBecomingVisible. Call captureDevicesChanged if a change happened when not visible.
        (WebKit::UserMediaPermissionRequestManagerProxy::watchdogTimerFired): Clear m_pendingDeviceChangeEvent.
        (WebKit::UserMediaPermissionRequestManagerProxy::processPregrantedRequests): Deleted.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::UserMediaProcessManager): Initialize timer.
        (WebKit::UserMediaProcessManager::captureDevicesChanged): New, notify each manager.
        (WebKit::UserMediaProcessManager::beginMonitoringCaptureDevices): Cache the device list and 
        register device change listener the first time it is called.
        * UIProcess/UserMediaProcessManager.h:

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

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::addDeviceChangeObserver): Add listener, tell page
        to start monitoring device changes.
        (WebKit::UserMediaPermissionRequestManager::removeDeviceChangeObserver): Remove listener.
        (WebKit::UserMediaPermissionRequestManager::captureDevicesChanged): Call listeners.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::addDeviceChangeObserver):
        (WebKit::WebUserMediaClient::removeDeviceChangeObserver):
        * WebProcess/WebCoreSupport/WebUserMediaClient.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::captureDevicesChanged):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addMockMediaDevice):
        (WebKit::WebProcess::clearMockMediaDevices):
        (WebKit::WebProcess::removeMockMediaDevice):
        (WebKit::WebProcess::resetMockMediaDevices):
        (WebKit::WebProcess::captureDevicesChanged):
        * WebProcess/WebProcess.h:

2018-08-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK/WPE cookie API tests after r234396.

        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::displayNameForCookieHostName): Bring back the check to handle localhost as an
        special case for non cocoa ports.

2018-08-19  Darin Adler  <darin@apple.com>

        [Cocoa] Update uses of wrapper template functions in WebKit for clarity, simplicity, better ARC readiness
        https://bugs.webkit.org/show_bug.cgi?id=188735

        Reviewed by Dan Bernstein.

        Because of argument-dependent lookup, there should never be a reason to call
        the wrapper function as WebKit::wrapper or API::wrapper unless there is a need
        to resolve a name conflict, so removed the explicit namespacing.

        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageLoadURLRequestReturningNavigation): Removed explicit null check and
        leakRef/autorelease pair, both done by the wrapper template function now.

        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        (toWKBackForwardListItem): Deleted.
        (-[WKBackForwardList currentItem]): Use wrapper instead of toWKBackForwardListItem.
        (-[WKBackForwardList backItem]): Ditto.
        (-[WKBackForwardList forwardItem]): Ditto.
        (-[WKBackForwardList itemAtIndex:]): Ditto.
        (-[WKBackForwardList backList]): Removed leakRef/autorelease pair.
        (-[WKBackForwardList forwardList]): Ditto.

        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (+[WKContentRuleListStore defaultStore]): Removed explicit WebKit namespace.
        (+[WKContentRuleListStore storeWithURL:]): Fixed a storage leak by removing leakRef,
        which was not balanced. This is not a copy or create function, so it should not
        return an object that requires a release to balance it.
        (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:releasesArgument:]):
        Removed explicit WebKit namespace and unneeded get().
        (-[WKContentRuleListStore lookUpContentRuleListForIdentifier:completionHandler:]):
        Removed explicit WebKit namespace.
        (+[WKContentRuleListStore defaultStoreWithLegacyFilename]): Ditto.
        (+[WKContentRuleListStore storeWithURLAndLegacyFilename:]): Fixed storage leak,
        as above in storeWithURL.

        * UIProcess/API/Cocoa/WKFrameInfo.mm:
        (-[WKFrameInfo _handle]): Removed explicit WebKit namespace.
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
        (WKHTTPCookieStoreObserver::cookiesDidChange): Ditto.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction sourceFrame]): Removed explicit null check, now done by
        the wrapper template function.
        (-[WKNavigationAction targetFrame]): Ditto.
        (-[WKNavigationAction _userInitiatedAction]): Ditto.
        (-[WKNavigationAction _mainFrameNavigation]): Ditto.

        * UIProcess/API/Cocoa/WKOpenPanelParameters.mm:
        (-[WKOpenPanelParameters _acceptedMIMETypes]): Removed leakRef/autorelease pair,
        now done by the wrapper template function.
        (-[WKOpenPanelParameters _acceptedFileExtensions]): Ditto.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences copyWithZone:]): Use retain instead of leakRef; slightly clearer
        for when we convert to ARC.
        (+[WKPreferences _experimentalFeatures]): Removed leakRef/autorelease pair,
        now done by the wrapper template function.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _configuration]): Fixed a storage leak by removing leakRef,
        which was not balanced. This is not a copy or create function, so it should not
        return an object that requires a release to balance it.

        * UIProcess/API/Cocoa/WKURLSchemeTaskInternal.h:
        Replaced inline wrapper function with WrapperTraits structure template specialization.

        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript _userContentWorld]): Removed explicit API namespace.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadRequest:]): Removed explicit null check and
        leakRef/autorelease pair, both done by the wrapper template function now.
        (-[WKWebView loadFileURL:allowingReadAccessToURL:]): Ditto.
        (-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]): Ditto.
        (-[WKWebView goToBackForwardListItem:]): Ditto.
        (-[WKWebView goBack]): Ditto.
        (-[WKWebView goForward]): Ditto.
        (-[WKWebView reload]): Ditto.
        (-[WKWebView reloadFromOrigin]): Ditto.
        (-[WKWebView _didInsertAttachment:withSource:]): Removed leakRef/autorelease pairs,
        now done by the wrapper template function.
        (-[WKWebView _didRemoveAttachment:]): Ditto.
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]): Removed
        explicit null check and leakRef/autorelease pair, both done by the wrapper template
        function now.
        (-[WKWebView _loadRequest:shouldOpenExternalURLs:]): Ditto.
        (-[WKWebView _reloadWithoutContentBlockers]): Ditto.
        (-[WKWebView _reloadExpiredOnly]): Ditto.
        (-[WKWebView _sessionStateData]): Removed explicit leakRef/autorelease pair, done
        by the wrapper template function now. Also, the old version explicitly dereferenced
        and would not work when the result of encodeLegacySessionState was null. Decided
        not to add a call to releaseNonNull to preserve that possibly-incorrect optimization,
        instead allowing the wrapper function to generate code to handle the null case.
        (-[WKWebView _sessionState]): Use the Objective-C autorelease instead of adoptNS
        and RetainPtr's autorelease.
        (-[WKWebView _sessionStateWithFilter:]): Ditto.
        (-[WKWebView _restoreSessionState:andNavigate:]): Removed explicit null check and
        leakRef/autorelease pair, both done by the wrapper template function now.
        (-[WKWebView _insertAttachmentWithFilename:contentType:data:options:completion:]):
        Removed explicit leakRef/autorelease pair, done by the wrapper template function now.
        (-[WKWebView _diagnosticLoggingDelegate]): Replaced a leakRef/autorelease pair with
        use of RetainPtr's autorelease.
        (-[WKWebView _findDelegate]): Ditto.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _applicationManifest]): Removed explicit null check,
        done by the wrapper template function now.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore defaultDataStore]): Removed explicit WebKit namespace
        and unneeded call to get().
        (+[WKWebsiteDataStore nonPersistentDataStore]): Removed explicit WebKit namespace
        and leakRef/autorelease pair, done by the wrapper template function now.
        (-[WKWebsiteDataStore httpCookieStore]): Removed explicit WebKit namespace.

        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (+[_WKApplicationManifest applicationManifestFromJSON:manifestURL:documentURL:]):
        Removed explicit leakRef/autorelease pair, done by the wrapper template function now.
        * UIProcess/API/Cocoa/_WKGeolocationPosition.mm:
        (WebKit::wrapper): Ditto.

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration copyWithZone:]): Use retain instead of leakRef;
        slightly clearer for when we convert to ARC.

        * UIProcess/API/Cocoa/_WKUserContentWorld.mm:
        (+[_WKUserContentWorld worldWithName:]): Removed explicit leakRef/autorelease pair,
        done by the wrapper template function now.

        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies websiteDataStore]): Removed explicit null check, done by
        the wrapper template function now.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didChangeBackForwardList): Removed
        explicit null check, done by the wrapper template function now.
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): Ditto.
        (WebKit::NavigationState::NavigationClient::didStartProvisionalNavigation): Ditto.
        (WebKit::NavigationState::NavigationClient::didReceiveServerRedirectForProvisionalNavigation): Ditto.
        (WebKit::NavigationState::NavigationClient::didFailProvisionalNavigationWithError): Ditto.
        (WebKit::NavigationState::NavigationClient::didFailProvisionalLoadInSubframeWithError): Ditto.
        (WebKit::NavigationState::NavigationClient::didCommitNavigation): Ditto.
        (WebKit::NavigationState::NavigationClient::didFinishDocumentLoad): Ditto.
        (WebKit::NavigationState::NavigationClient::didFinishNavigation): Ditto.
        (WebKit::NavigationState::NavigationClient::didFailNavigationWithError): Ditto.
        (WebKit::NavigationState::NavigationClient::didSameDocumentNavigation): Ditto.

        * UIProcess/Cocoa/SessionStateCoding.mm:
        (WebKit::encodeSessionState): Removed explicit leakRef/autorelease pair, done
        by the wrapper template function now. Also, the old version explicitly dereferenced
        and would not work when the result of encodeLegacySessionState was null. Decided
        not to add a call to releaseNonNull to preserve that possibly-incorrect optimization,
        instead allowing the wrapper function to generate code to handle the null case.

        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController configuration]): Removed explicit WebKit namespace.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (+[WKWebProcessPlugInFrame lookUpFrameFromHandle:]): Removed explicit null check,
        done by the wrapper template function now.
        (-[WKWebProcessPlugInFrame hitTest:]): Removed explicit leakRef/autorelease pair, done
        by the wrapper template function now. Also, the old version explicitly dereferenced
        and would not work when the result of hitTest was null. Decided not to add a call to
        releaseNonNull to preserve that possibly-incorrect optimization, instead allowing the
        wrapper function to generate code to handle the null case.
        (-[WKWebProcessPlugInFrame childFrames]): Removed explicit leakRef/autorelease pair,
        done by the wrapper template function now.
        (-[WKWebProcessPlugInFrame handle]): Ditto.
        (-[WKWebProcessPlugInFrame _parentFrame]): Removed explicit null check, done by the
        wrapper template function now.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm:
        (-[WKWebProcessPlugInHitTestResult nodeHandle]): Removed explicit null check and
        leakRef/autorelease pair, both done by the wrapper template function now.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (+[WKWebProcessPlugInNodeHandle nodeHandleWithJSValue:inContext:]): Ditto.
        (-[WKWebProcessPlugInNodeHandle htmlIFrameElementContentFrame]): Ditto.
        (-[WKWebProcessPlugInNodeHandle HTMLTableCellElementCellAbove]): Ditto.
        (-[WKWebProcessPlugInNodeHandle frame]): Ditto.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm:
        (+[WKWebProcessPlugInRangeHandle rangeHandleWithJSValue:inContext:]): Ditto.
        (-[WKWebProcessPlugInRangeHandle frame]): Ditto.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
        (+[WKWebProcessPlugInScriptWorld world]): Ditto.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController mainFrame]): Ditto.
        (+[WKWebProcessPlugInBrowserContextController lookUpBrowsingContextFromHandle:]): Ditto.

2018-08-19  Darin Adler  <darin@apple.com>

        [Cocoa] Consolidate inline "wrapper" functions in WebKit API into function templates and WrapperTraits
        https://bugs.webkit.org/show_bug.cgi?id=188733

        Reviewed by Sam Weinig.

        Replaced all the different functions named "wrapper" that were all boilerplate doing Objective-C
        casts with WrapperTraits specializations. The only thing about this that was at all tricky was
        the loose mixing of the WebKit namespace, the API namespace, and the global namespace. My choice
        for this first step was to put WrapperTraits into the WebKit namespace and to put the wrapper
        function into both the WebKit and API namespaces with "using". This turned out pretty clean: did
        not have to touch any of the code calling wrapper just to make things work, although we can now
        clean up by changing call sites to get rid of unnecessary explicit use of leakRef and autorelease.
        Doing this will make ARC conversion practical and easy, which is the motivation behind pursuing
        this set of changes.

        * Shared/Cocoa/WKObject.h: Tweaked style of the ObjectStorage structure template,
        using a class name instead of "T". Added WrapperTraits structure template, checkedObjCCast
        function template, and multiple wrapper functions templates that take a variety of pointer,
        reference, smart pointer, and smart reference types, and return the wrapper for each one,
        handling object lifetime appropriately.

        * Shared/API/Cocoa/_WKFrameHandleInternal.h:
        * Shared/API/Cocoa/_WKHitTestResultInternal.h:
        * Shared/Cocoa/WKNSArray.h:
        * Shared/Cocoa/WKNSData.h:
        * Shared/Cocoa/WKNSDictionary.h:
        * Shared/Cocoa/WKNSError.h:
        * Shared/Cocoa/WKNSNumber.h:
        * Shared/Cocoa/WKNSString.h:
        * Shared/Cocoa/WKNSURL.h:
        * Shared/Cocoa/WKNSURLRequest.h:
        * UIProcess/API/Cocoa/WKBackForwardListInternal.h:
        * UIProcess/API/Cocoa/WKBackForwardListItemInternal.h:
        * UIProcess/API/Cocoa/WKBrowsingContextGroupInternal.h:
        * UIProcess/API/Cocoa/WKConnectionInternal.h:
        * UIProcess/API/Cocoa/WKContentRuleListInternal.h:
        * UIProcess/API/Cocoa/WKContentRuleListStoreInternal.h:
        * UIProcess/API/Cocoa/WKFrameInfoInternal.h:
        * UIProcess/API/Cocoa/WKHTTPCookieStoreInternal.h:
        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.h:
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        * UIProcess/API/Cocoa/WKNavigationDataInternal.h:
        * UIProcess/API/Cocoa/WKNavigationInternal.h:
        * UIProcess/API/Cocoa/WKNavigationResponseInternal.h:
        * UIProcess/API/Cocoa/WKOpenPanelParametersInternal.h:
        * UIProcess/API/Cocoa/WKPreferencesInternal.h:
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h:
        * UIProcess/API/Cocoa/WKSecurityOriginInternal.h:
        * UIProcess/API/Cocoa/WKUserContentControllerInternal.h:
        * UIProcess/API/Cocoa/WKUserScriptInternal.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStoreInternal.h:
        * UIProcess/API/Cocoa/WKWindowFeaturesInternal.h:
        * UIProcess/API/Cocoa/_WKApplicationManifestInternal.h:
        * UIProcess/API/Cocoa/_WKAttachmentInternal.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionInternal.h:
        * UIProcess/API/Cocoa/_WKExperimentalFeatureInternal.h:
        * UIProcess/API/Cocoa/_WKGeolocationPositionInternal.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfigurationInternal.h:
        * UIProcess/API/Cocoa/_WKUserContentWorldInternal.h:
        * UIProcess/API/Cocoa/_WKUserInitiatedActionInternal.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheetInternal.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkStoreInternal.h:
        * UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrameInternal.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResultInternal.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandleInternal.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroupInternal.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandleInternal.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorldInternal.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
        Replaced inline wrapper functions with WrapperTraits structure template
        specializations. This is always in the WebKit namespace, unlike the functions,
        which were in a mix of namespaces. Also deleted some unneeded "#pragma once".

2018-08-19  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r234396): Leak of CFURLRef in WebKit::NetworkProcess::deleteHSTSCacheForHostNames()
        <https://webkit.org/b/188725>

        Reviewed by Dan Bernstein.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::deleteHSTSCacheForHostNames): Use
        adoptCF() to prevent a leak.

2018-08-18  Andy Estes  <aestes@apple.com>

        [watchOS] NetworkProximityManager should use WTF_MAKE_FAST_ALLOCATED
        https://bugs.webkit.org/show_bug.cgi?id=188723

        Reviewed by Sam Weinig.

        * NetworkProcess/watchos/NetworkProximityManager.h:

2018-08-18  Andy Estes  <aestes@apple.com>

        [watchOS] Add more assertions to NetworkProximityAssertion
        https://bugs.webkit.org/show_bug.cgi?id=188721

        Reviewed by Wenson Hsieh.

        * NetworkProcess/watchos/NetworkProximityAssertion.mm:
        (WebKit::NetworkProximityAssertion::hold):
        (WebKit::NetworkProximityAssertion::release):
        (WebKit::NetworkProximityAssertion::releaseTimerFired):

2018-08-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Paste is missing from callout bar when pasteboard only contains custom data
        https://bugs.webkit.org/show_bug.cgi?id=184271
        <rdar://problem/39256708>

        Reviewed by Ryosuke Niwa.

        Currently, the "paste:" selector action cannot be performed during editing if the pasteboard only contains
        custom pasteboard data. This is because logic in -[WKContentView canPerformActionForWebView:withSender:] only
        checks against a list of pasteboard types which does not include the type identifier for custom pasteboard data.
        To fix this, we allow pasting only in the case where none of the other type identifiers exist in the pasteboard,
        as long as the custom pasteboard data type identifier is present, and the custom pasteboard data's origin
        matches the origin of the focused frame's document.

        Test: PasteMixedContent.CopyAndPasteWithCustomPasteboardDataOnly

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

        Add a originIdentifierForPasteboard field, and add support for encoding it when propagating EditorState via IPC.

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

        If none of the conventional pasteboard type identifiers for rich or plain text editing are present, check to see
        if we have custom pasteboard data; if so, only allow pasting if the custom pasteboard data's origin matches that
        of the focused frame's document origin.

        Additionally refactor a bit of logic by pulling out `_page->editorState()` into a separate local variable, used
        throughout the rest of the method.

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

        Send the focused frame's document origin to the UI process via EditorState.

2018-08-17  Tim Horton  <timothy_horton@apple.com>

        Start bringing up Unified Sources in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=188703

        Reviewed by Simon Fraser.

        * Configurations/BaseTarget.xcconfig:
        Add SRCROOT to the include path, so unified sources can find the source files.

        * Shared/APIWebArchive.mm:
        (API::releaseWebArchiveData):
        (API::WebArchive::data):
        (API::releaseCFData): Deleted.
        * Shared/APIWebArchiveResource.mm:
        (API::releaseWebArchiveResourceData):
        (API::WebArchiveResource::data):
        (API::releaseCFData): Deleted.
        Disambiguate two static methods by renaming them.

        * Shared/cf/ArgumentCodersCF.cpp:
        Leave a comment about the bizarreness of this file.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::decode):
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::WebPopupItem):
        (WebKit::WebPopupItem::decode):
        * Shared/WebPreferencesStore.cpp:
        * Shared/WebRenderLayer.cpp:
        (WebKit::WebRenderLayer::create):
        (WebKit::WebRenderLayer::createArrayFromLayerList):
        (WebKit::WebRenderLayer::WebRenderLayer):
        * Shared/gtk/WebEventFactory.cpp:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit const):
        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::sessionIdentifier const):
        (API::AutomationSessionClient::messageOfCurrentJavaScriptDialogOnPage):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::ensureBackingStore):
        (WebKit::RemoteLayerBackingStore::setNeedsDisplay):
        (WebKit::RemoteLayerBackingStore::backingStoreSize const):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::drawInContext):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::LayerCreationProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::setRootLayerID):
        (WebKit::RemoteLayerTreeTransaction::setDestroyedLayerIDs):
        (WebKit::RemoteLayerTreeTransaction::setLayerIDsWithNewlyUnreachableBackingStore):
        (WebKit::dumpChangedLayers):
        (WebKit::RemoteLayerTreeTransaction::description const):
        * Shared/WebPlatformTouchPoint.cpp:
        (WebKit::WebPlatformTouchPoint::WebPlatformTouchPoint):
        Get rid of lots of `using namespace`.

        * Sources.txt: Added.
        * SourcesCocoa.txt: Added.
        * WebKit.xcodeproj/project.pbxproj:
        Set up unified sources.
        Right now, we only unify Platform/ and Shared/[^API].

2018-08-17  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist][iOS] Display suggestions for input[type=color]
        https://bugs.webkit.org/show_bug.cgi?id=188669

        Reviewed by Tim Horton.

        An input[type=color] element that has an associated datalist element should
        display the color values provided on iOS. Similar to macOS, we now support 1-12
        suggested colors, that will be displayed at the top of the color picker.

        Also ensured that we get rounded corners on both sides of a color swatch if it is
        the only one in its row.

        * Shared/AssistedNodeInformation.cpp: Added suggestedColors field.
        (WebKit::AssistedNodeInformation::encode const):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        (+[WKColorPicker defaultTopColorMatrix]):
        (-[WKColorPicker initWithView:]): Use the list of suggestedColors if it exists.
        (-[WKColorPicker drawSelectionIndicatorForColorButton:]):
        * WebProcess/WebCoreSupport/WebColorChooser.cpp:
        (WebKit::WebColorChooser::WebColorChooser):
        (WebKit::WebColorChooser::reattachColorChooser):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2018-08-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234991.

        Caused an assertion failure on the bots.

        Reverted changeset:

        "Pass webPageID and webFrameID to NetworkLoad for speculative
        loads"
        https://bugs.webkit.org/show_bug.cgi?id=188682
        https://trac.webkit.org/changeset/234991

2018-08-17  Alex Christensen  <achristensen@webkit.org>

        Add some plumbing for safe browsing
        https://bugs.webkit.org/show_bug.cgi?id=188709

        Reviewed by Tim Horton.

        Also adding a URL to SafeBrowsingResult because we'll need it.
        Also adding a bool to LoadParameters because we will need to do special things
        when loading the safe browsing warning, like adding a way to skip the safe browsing check.

        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm:
        (WebKit::SafeBrowsingResult::SafeBrowsingResult):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        * UIProcess/SafeBrowsingResult.h:
        (WebKit::SafeBrowsingResult::url const):
        * 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-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Replace canBubble and cancelable booleans in Event by enum classes
        https://bugs.webkit.org/show_bug.cgi?id=188692

        Reviewed by Alex Christensen.

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

2018-08-17  Andy Estes  <aestes@apple.com>

        [Xcode] Fix up file reference paths in Source/WebKit/NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=188700

        Rubber-stamped by Dan Bernstein.

        * WebKit.xcodeproj/project.pbxproj:

2018-08-17  Alex Christensen  <achristensen@webkit.org>

        Pass webPageID and webFrameID to NetworkLoad for speculative loads
        https://bugs.webkit.org/show_bug.cgi?id=188682

        Reviewed by Youenn Fablet.

        This also removes an authentication shortcut I introduced in r234941

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveResponse):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):

2018-08-17  Alex Christensen  <achristensen@webkit.org>

        Simplify server trust authentication flow
        https://bugs.webkit.org/show_bug.cgi?id=188684

        Reviewed by Youenn Fablet.

        We unnecessarily had the allowsSpecificHTTPSCertificateForHost check at two different abstraction levels.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::allowsSpecificHTTPSCertificateForHost): Deleted.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):

2018-08-17  Alex Christensen  <achristensen@webkit.org>

        Fix API tests after r234985
        https://bugs.webkit.org/show_bug.cgi?id=188679

        * UIProcess/API/C/WKPage.cpp:
        (encodingOf):
        (dataFrom):
        The encoding of null strings had changed, which is no big deal because there's no data in that encoding,
        but switching it back fixes the tests.

2018-08-17  Alex Christensen  <achristensen@webkit.org>

        Replace WebPageProxy::loadAlternateHTMLString with loadAlternateHTML
        https://bugs.webkit.org/show_bug.cgi?id=188679

        Reviewed by Carlos Garcia Campos.

        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (encodingOf):
        (dataFrom):
        (loadString):
        (WKPageLoadAlternateHTMLString):
        (WKPageLoadAlternateHTMLStringWithUserData):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadAlternateHTMLString): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadAlternateHTMLString):

2018-08-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r234259.

        Caused excessive CPU usage

        Reverted changeset:

        "[GTK][WPE] Improve the way request displayRefresh
        notifications"
        https://bugs.webkit.org/show_bug.cgi?id=188005
        https://trac.webkit.org/changeset/234259

2018-08-16  Commit Queue  <commit-queue@webkit.org>

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

        Breaking builds due to copy failure (Requested by brichards on
        #webkit).

        Reverted changeset:

        "Add script to generate WebContent service resource files"
        https://bugs.webkit.org/show_bug.cgi?id=188601
        https://trac.webkit.org/changeset/234958

2018-08-16  Sihui Liu  <sihui_liu@apple.com>

        Remove unused parentProcessName from NetworkProcessCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=188618

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2018-08-16  Andy Estes  <aestes@apple.com>

        [watchOS] Upstream Proximity Networking (nee Wi-Fi Assertions)
        https://bugs.webkit.org/show_bug.cgi?id=188664

        Reviewed by Tim Horton.

        Proximity Networking provides two features for speeding up page loads on watchOS:

        1. Binding requests to the Apple Watch's Wi-Fi interface even when the iPhone is in proximity.
        2. When Wi-Fi isn't available, preemptively upgrading the Bluetooth link to its fastest data
        rate prior to starting page loads.

        * Configurations/WebKit.xcconfig:

        Added LDFLAGS for Proximity Networking.

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

        Added NetworkProximityManager as a supplement.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:

        Renamed ENABLE(WIFI_ASSERTIONS) to ENABLE(PROXIMITY_NETWORKING).

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:

        Renamed m_wiFiAssertionHolder to m_proximityAssertionToken and changed its type from an
        optional WiFiAssertionHolder to an optional NetworkProximityAssertion::Token.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        (WebKit::NetworkProcess::platformPrepareToSuspend):
        (WebKit::NetworkProcess::platformProcessDidResume):
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):

        Changed to use NetworkProximityManager.

        * NetworkProcess/cocoa/WiFiAssertionHolder.h: Removed.
        * NetworkProcess/cocoa/WiFiAssertionHolder.mm: Removed.
        * NetworkProcess/watchos/NetworkProximityAssertion.h: Added.
        (WebKit::NetworkProximityAssertion::Token::Token):
        (WebKit::NetworkProximityAssertion::Token::~Token):

        Added. NetworkDataTasks hold these tokens to keep Bluetooth or Wi-Fi assertions active
        during loading. When the last token is destroyed, its associated assertion will be
        deactivated.

        * NetworkProcess/watchos/NetworkProximityAssertion.mm: Added.
        (WebKit::NetworkProximityAssertion::NetworkProximityAssertion):
        (WebKit::NetworkProximityAssertion::hold):
        (WebKit::NetworkProximityAssertion::release):
        (WebKit::NetworkProximityAssertion::resume):
        (WebKit::NetworkProximityAssertion::suspend):
        (WebKit::NetworkProximityAssertion::suspendNow):
        (WebKit::NetworkProximityAssertion::releaseTimerFired):
        (WebKit::NetworkProximityAssertion::suspendAfterBackgroundingTimerFired):

        Added. NetworkProximityAssertion is the base class for Bluetooth and Wi-Fi assertions. It
        manages the logic for holding and releasing assertions as well as responding to network
        process backgrounding and suspension.

        (WebKit::BluetoothProximityAssertion::BluetoothProximityAssertion):
        (WebKit::BluetoothProximityAssertion::suspend):
        (WebKit::BluetoothProximityAssertion::holdNow):
        (WebKit::BluetoothProximityAssertion::releaseNow):

        Added. Holds a Bluetooth assertion by calling -[IDSService setLinkPreferences:].

        (WebKit::WiFiProximityAssertion::WiFiProximityAssertion):
        (WebKit::WiFiProximityAssertion::holdNow):
        (WebKit::WiFiProximityAssertion::releaseNow):

        Added. Holds a Wi-Fi assertion by using WiFiManagerClient.

        * NetworkProcess/watchos/NetworkProximityManager.h: Added.
        * NetworkProcess/watchos/NetworkProximityManager.mm: Added.
        (-[WKProximityServiceDelegate setClient:]):
        (-[WKProximityServiceDelegate service:devicesChanged:]):
        (-[WKProximityServiceDelegate service:nearbyDevicesChanged:]):
        (WebKit::NetworkProximityManager::NetworkProximityManager):
        (WebKit::NetworkProximityManager::~NetworkProximityManager):
        (WebKit::NetworkProximityManager::supplementName):
        (WebKit::bindRequestToWiFi):
        (WebKit::NetworkProximityManager::applyProperties):
        (WebKit::NetworkProximityManager::resume):
        (WebKit::NetworkProximityManager::suspend):
        (WebKit::NetworkProximityManager::recommendation const):
        (WebKit::NetworkProximityManager::processRecommendations):
        (WebKit::toProcessID):
        (WebKit::NetworkProximityManager::resumeRecommendations):
        (WebKit::NetworkProximityManager::suspendRecommendations):
        (WebKit::NetworkProximityManager::updateCompanionProximity):
        (WebKit::NetworkProximityManager::updateRecommendation):
        (WebKit::NetworkProximityManager::initialize):
        (WebKit::NetworkProximityManager::devicesChanged):

        Added. NetworkProximityManager is a network process supplement that can bind
        NetworkDataTasks to Wi-Fi, associate assertions with NetworkDataTasks, check for companion
        proximity, ask for proximity network recommendations, and respond to network process
        backgrounding and suspending.

        * Platform/Logging.h:

        Renamed the WiFiAssertions log channel to ProximityNetworking.

        * Platform/spi/ios/MobileWiFiSPI.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

        Renamed ENABLE(WIFI_ASSERTIONS) to ENABLE(PROXIMITY_NETWORKING).

        * WebKit.xcodeproj/project.pbxproj:
        * config.h:

        Removed unused definition of HAVE_MOBILE_WIFI.

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Remove unused and deprecated _WKProcessPoolConfiguration.allowsCellularAccess
        https://bugs.webkit.org/show_bug.cgi?id=188681

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration allowsCellularAccess]): Deleted.
        (-[_WKProcessPoolConfiguration setAllowsCellularAccess:]): Deleted.

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Deprecate SPI that is or ought to be unused
        https://bugs.webkit.org/show_bug.cgi?id=188616

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Add temporary SPI WKContextHandlesSafeBrowsing
        https://bugs.webkit.org/show_bug.cgi?id=188676

        Reviewed by Joseph Pecoraro.

        WebKit showing the safe browsing warning doesn't play well with Safari showing the safe browsing warning.
        I plan to adopt this SPI in Safari to disable Safari's safe browsing check if it's true.
        Then when I implement safe browsing in WebKit, I can switch this value to true in the same change and
        not have a broken Safari.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextHandlesSafeBrowsing):

2018-08-16  Ben Richards  <benton_richards@apple.com>

        Add script to generate WebContent service resource files
        https://bugs.webkit.org/show_bug.cgi?id=188601

        Reviewed by Dan Bernstein.

        Added new build phase to WebContent service to copy resource files to WebKit.framework/PrivateHeaders/CustomWebContentResource.
        These resources are intended to be used by a client to create a custom WebContent service.

        * Scripts/copy-webcontent-resources-to-private-headers.sh: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Consolidate data/string API loading paths
        https://bugs.webkit.org/show_bug.cgi?id=188417

        Reviewed by Michael Catanzaro.

        loadHTMLString and loadData are basically duplicate code.
        loadPlainTextString was also basically the same except it didn't set up a navigation, which
        was almost certainly a bug, but nobody uses it in all of Apple and Debian.  We should probably deprecate
        and remove it, but for now I make it use the same data loading path.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadData):
        (WKPageLoadDataWithUserData):
        (loadString):
        (WKPageLoadHTMLString):
        (WKPageLoadHTMLStringWithUserData):
        (WKPageLoadPlainTextString):
        (WKPageLoadPlainTextStringWithUserData):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadHTMLString:baseURL:userData:]):
        (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]):
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_load_html):
        (webkit_web_view_load_plain_text):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadHTMLString): Deleted.
        (WebKit::WebPageProxy::loadPlainTextString): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadString): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Transition more WKWebViewConfiguration ivars to API::PageConfiguration values
        https://bugs.webkit.org/show_bug.cgi?id=188665

        Reviewed by Joseph Pecoraro.

        APPLICATION_MANIFEST is enabled on all Cocoa platforms, so I removed some guards, too!

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::applicationManifest const):
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _applicationManifest]):
        (-[WKWebViewConfiguration _setApplicationManifest:]):
        (-[WKWebViewConfiguration _setCPULimit:]):
        (-[WKWebViewConfiguration _cpuLimit]):

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Transition more WKWebViewConfiguration ivars to API::PageConfiguration values
        https://bugs.webkit.org/show_bug.cgi?id=188663

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _drawsBackground]):
        (-[WKWebViewConfiguration _setDrawsBackground:]):
        (-[WKWebViewConfiguration _waitsForPaintAfterViewDidMoveToWindow]):
        (-[WKWebViewConfiguration _setWaitsForPaintAfterViewDidMoveToWindow:]):
        (-[WKWebViewConfiguration _isControlledByAutomation]):
        (-[WKWebViewConfiguration _setControlledByAutomation:]):

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Stop using canAuthenticateAgainstProtectionSpace in modern WebKit
        https://bugs.webkit.org/show_bug.cgi?id=188639

        Reviewed by Youenn Fablet.

        canAuthenticateAgainstProtectionSpace is an unnecessary step in the authentication process.
        It is leftover from when it was necessary when we used NSURLConnection, which is only used in WebKitLegacy now.
        Now it's just an extra IPC roundtrip asking if we should use NSURLSessionAuthChallengeRejectProtectionSpace
        or if we are going to ask the API client.  We can move this step into the C API for compatibility
        with the 1 client that still uses it (not for long, see rdar://problem/43358403) and simplify and optimize
        authentication.

        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::canAuthenticateAgainstProtectionSpaceAsync): Deleted.
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::completeAuthenticationChallenge): Deleted.
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace): Deleted.
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::cancelDownload):
        (WebKit::NetworkProcess::canAuthenticateAgainstProtectionSpace): Deleted.
        (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpace): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::canAuthenticateAgainstProtectionSpaceAsync): Deleted.
        * NetworkProcess/PreconnectTask.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::canAuthenticateAgainstProtectionSpaceAsync): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * 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::didReceiveAuthenticationChallenge):
        (WebKit::NavigationState::NavigationClient::canAuthenticateAgainstProtectionSpace): Deleted.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::canAuthenticateAgainstProtectionSpace): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canAuthenticateAgainstProtectionSpace): Deleted.
        * UIProcess/WebPageProxy.h:

2018-08-15  Jer Noble  <jer.noble@apple.com>

        Add Experimental Feature support for SourceBuffer.changeType()
        https://bugs.webkit.org/show_bug.cgi?id=188626

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetSourceBufferChangeTypeEnabled):
        (WKPreferencesGetSourceBufferChangeTypeEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Transition more WKWebViewConfiguration ivars to API::PageConfiguration values
        https://bugs.webkit.org/show_bug.cgi?id=188661

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _alwaysRunsAtForegroundPriority]):
        (-[WKWebViewConfiguration _setAlwaysRunsAtForegroundPriority:]):
        (-[WKWebViewConfiguration _initialCapitalizationEnabled]):
        (-[WKWebViewConfiguration _setInitialCapitalizationEnabled:]):
        (-[WKWebViewConfiguration _overrideContentSecurityPolicy]):
        (-[WKWebViewConfiguration _setOverrideContentSecurityPolicy:]):

2018-08-16  Aditya Keerthi  <akeerthi@apple.com>

        Support drag-and-drop for input[type=color]
        https://bugs.webkit.org/show_bug.cgi?id=188464

        Reviewed by Wenson Hsieh.

        On iOS, the drag preview for the color input is a rounded rectangle. In order to
        ensure that the corners appear transparent, the visiblePath property of the
        UIDragPreviewParameters was set to match the preview's shape. This also required
        the creation of an additional ArgumentCoder for Path.

        When beginning the drag session, the preview should appear centered about the
        color input. This is managed in createTargetedDragPreview. However, once the
        preview is dragged, the preview should be at the center of the touch location.
        Consequently, DragSourceActionColor was added to the list of sources that could
        update the drag preview after lifting.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Path>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::setPasteboardColor):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/ios/DragDropInteractionState.h:
        * UIProcess/ios/DragDropInteractionState.mm:
        (WebKit::createTargetedDragPreview):
        (WebKit::shouldUseDragImageToCreatePreviewForDragSource):
        (WebKit::shouldUseVisiblePathToCreatePreviewForDragSource):
        (WebKit::canUpdatePreviewForActiveDragSource):
        (WebKit::DragDropInteractionState::previewForDragItem const):
        (WebKit::DragDropInteractionState::stageDragItem):
        (WebKit::DragDropInteractionState::updatePreviewsForActiveDragSources):
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        (-[WKColorPicker initWithView:]):
        * UIProcess/mac/WebColorPickerMac.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setColor):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-08-16  Per Arne Vollan  <pvollan@apple.com>

        Assert that calling CGSSetDenyWindowServerConnections(true) succeeds
        https://bugs.webkit.org/show_bug.cgi?id=188615

        Reviewed by Brent Fulgham.

        If the call to CGSSetDenyWindowServerConnections(true) fails, it means there are open WindowServer connections
        at this point, and future WindowServer connections will not be denied. We should assert that this call succeeds.

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

2018-08-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE build fix after r234920.

        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::setViewState):
        * UIProcess/API/wpe/WPEView.h:

2018-08-16  Antti Koivisto  <antti@apple.com>

        Use OptionSet for ActivityState::Flags
        https://bugs.webkit.org/show_bug.cgi?id=188554

        Reviewed by Brent Fulgham.

        * Shared/WebPageCreationParameters.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::windowDidOrderOffScreen):
        (WebKit::WebViewImpl::windowDidOrderOnScreen):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityState):
        (WebKit::WebPageProxy::activityStateDidChange):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::setMuted):
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isInWindow const):
        (WebKit::WebPageProxy::isViewVisible const):
        (WebKit::WebPageProxy::isViewFocused const):
        (WebKit::WebPageProxy::isViewWindowActive const):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::activityStateDidChange):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::activityStateDidChange):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::activityStateDidChange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateThrottleState):
        (WebKit::WebPage::updateIsInWindow):
        (WebKit::WebPage::visibilityDidChange):
        (WebKit::WebPage::setActivityState):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isVisible const):
        (WebKit::WebPage::isVisibleOrOccluded const):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::activityStateDidChange):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::pageActivityStateDidChange):
        * WebProcess/WebProcess.h:

2018-08-15  Ansh Shukla  <ansh_shukla@apple.com>

        NSURLAuthenticationMethodOAuth challenges are surfaced to clients in -didReceiveAuthenticationChallenge as NSURLAuthenticationMethodDefault
        https://bugs.webkit.org/show_bug.cgi?id=186870
        <rdar://problem/41314410>

        Reviewed by Alex Christensen.

        Correctly expose the OAuth protection space type in API.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        * UIProcess/API/C/WKProtectionSpaceTypes.h:

2018-08-15  Ben Richards  <benton_richards@apple.com>

        We should cache the compiled sandbox profile in a data vault
        https://bugs.webkit.org/show_bug.cgi?id=184991

        Reviewed by Ryosuke Niwa.

        This patch changes a few things (note: data vaults and sandbox entitlements are only used in internal builds):
        (1) Instead of compiling a sandbox every time a process is launched, processes now look for a cached sandbox
            in a process specific data vault on macOS platforms. (ChildProcessMac.mm)
        (2) If a valid cached sandbox is not found, a process will create the data vault (or ensure that it exists),
            compile a sandbox, and cache it.
        (3) In order to create process specific data vaults, each process now has their own <process name>-OSX-sandbox.entitlements
            file which contains an entitlement with a process specific "storage class" which ensures that each process
            can only ever access its own data vault. (See the article on confluence "Data Vaults and Restricted Files" for more info)
        (4) The sandbox entitlements file for the Network and WebContent services are loaded dynamically
            through Scripts/<process name>-process-entitlements.sh which is triggered in a new build phase for each service.
            The Storage process sandbox entitlements are loaded directly in Configurations/StorageService.xcconfig.
            The reason that the sandbox entitlements are applied dynamically is so that these sandbox entitlements
            are only applied when WK_USE_RESTRICTED_ENTITLEMENTS is YES. This means that open source builds will still work.

        * Configurations/Network-OSX-sandbox.entitlements: Added.
        * Configurations/Storage-OSX-sandbox.entitlements: Added.
        * Configurations/StorageService.xcconfig:
        * Configurations/WebContent-OSX-sandbox.entitlements: Added.
        * Configurations/WebKit.xcconfig:
        * NetworkProcess/NetworkProcess.h:
        * PluginProcess/PluginProcess.h:
        * Scripts/process-network-sandbox-entitlements.sh: Added.
        * Scripts/process-webcontent-sandbox-entitlements.sh: Added.
        * Shared/ChildProcess.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/SandboxInitializationParameters.h:
        (WebKit::SandboxInitializationParameters::setOverrideSandboxProfilePath):
        (WebKit::SandboxInitializationParameters::overrideSandboxProfilePath const):
        (WebKit::SandboxInitializationParameters::setSandboxProfile):
        (WebKit::SandboxInitializationParameters::sandboxProfile const):
        (): Deleted.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::SandboxProfileDeleter::operator()):
        (WebKit::SandboxParametersDeleter::operator()):
        (WebKit::SandboxInfo::SandboxInfo):
        (WebKit::fileContents):
        (WebKit::processStorageClass):
        (WebKit::setAndSerializeSandboxParameters):
        (WebKit::sandboxDataVaultParentDirectory):
        (WebKit::sandboxDirectory):
        (WebKit::sandboxFilePath):
        (WebKit::ensureSandboxCacheDirectory):
        (WebKit::writeSandboxDataToCacheFile):
        (WebKit::compileAndCacheSandboxProfile):
        (WebKit::tryApplyCachedSandbox):
        (WebKit::webKit2Bundle):
        (WebKit::getSandboxProfileOrProfilePath):
        (WebKit::compileAndApplySandboxSlowCase):
        (WebKit::applySandbox):
        (WebKit::initializeSandboxParameters):
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/SandboxInitialiationParametersMac.mm:
        (WebKit::SandboxInitializationParameters::SandboxInitializationParameters):
        * StorageProcess/StorageProcess.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.h:

2018-08-15  Ross Kirsling  <ross.kirsling@sony.com>

        [WinCairo] Unreviewed build fix after r234896.

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

2018-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Can't share an app on AppStore to WeChat due to a release assert
        https://bugs.webkit.org/show_bug.cgi?id=188621
        <rdar://problem/43343976>

        Reviewed by Geoffrey Garen.

        Disable the thread safety check when the app is not linked on or after iOS 12 since this release assert
        is getting hit by third party applications on iOS in UI process.

        * UIProcess/Cocoa/VersionChecks.h:
        (WebKit::SDKVersion::FirstWithMainThreadReleaseAssertionInWebPageProxy): Added. It's iOS 12 or macOS 10.14 Mojave.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::isMainThreadOrCheckDisabled): Added. Returns true whether when we're in the main thread or if the app
        is not linked on or after iOS 12 or macOS 10.14 Mojave.
        (WebKit::globalPageMap):
        (WebKit::m_isInPrewarmedPool):
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores):
        (WebKit::WebProcessProxy::topPrivatelyControlledDomainsWithWebsiteData):
        (WebKit::WebProcessProxy::didFinishLaunching):

2018-08-15  Alex Christensen  <achristensen@webkit.org>

        Remove WKNavigationDelegatePrivate's canAuthenticateAgainstProtectionSpace
        https://bugs.webkit.org/show_bug.cgi?id=188622

        Reviewed by Timothy Hatcher.

        It's been deprecated for a release now, nobody uses it, and it's a concept from NSURLConnection, which we don't use any more in WebKit2.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::canAuthenticateAgainstProtectionSpace):

2018-08-15  Tim Horton  <timothy_horton@apple.com>

        Crashes in Quip under _dictionaryPopupInfoForRange, in setObject:forKey:
        https://bugs.webkit.org/show_bug.cgi?id=188569
        <rdar://problem/34201095>

        Reviewed by Megan Gardner.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        Speculative fix; the crashes indicate font is null, but we just checked it,
        so it must be getting made null by convertFont:toSize:. Check again!

2018-08-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234870.

        The test introduced with this change is a flaky failure.

        Reverted changeset:

        "NSURLAuthenticationMethodOAuth challenges are surfaced to
        clients in -didReceiveAuthenticationChallenge as
        NSURLAuthenticationMethodDefault"
        https://bugs.webkit.org/show_bug.cgi?id=186870
        https://trac.webkit.org/changeset/234870

2018-08-15  Alex Christensen  <achristensen@webkit.org>

        NetworkCORSPreflightChecker should proceed in case of ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested even though the WebKit app is not implementing the didReceiveAuthenticationChallenge/didReceiveAuthenticationChallengeInFrame callback
        https://bugs.webkit.org/show_bug.cgi?id=188592
        <rdar://problem/43210331>

        Reviewed by Youenn Fablet.

        Do a canAuthenticateAgainstProtectionSpace check in NetworkCORSPreflightChecker like we do in NetworkLoad.
        Use CompletionHandlers to make the now 3 different canAuthenticateAgainstProtectionSpace checks look the same from the NetworkProcess.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::canAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        (WebKit::NetworkResourceLoader::continueCanAuthenticateAgainstProtectionSpace): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::didReceiveChallenge):
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::canAuthenticateAgainstProtectionSpaceAsync):
        (WebKit::PreconnectTask::continueCanAuthenticateAgainstProtectionSpace): Deleted.
        * NetworkProcess/PreconnectTask.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::didReceiveChallenge):

2018-08-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] WaylandCompositor fails to properly remove surface from its page map
        https://bugs.webkit.org/show_bug.cgi?id=188520

        Reviewed by Alex Christensen.

        willDestroySurface overwrites the surface pointer in the map's iterator in an attempt to
        change the value of the surface pointer in the map, but it doesn't work because changing
        the iterator does not change the map itself. There's no need to fix this function: it's
        better to use WeakPtr instead.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::getTexture):
        (WebKit::WaylandCompositor::bindSurfaceToWebPage):
        (WebKit::WaylandCompositor::unregisterWebPage):
        (WebKit::WaylandCompositor::willDestroySurface): Deleted.
        * UIProcess/gtk/WaylandCompositor.h:

2018-08-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment SPI] Remove attachment display mode options
        https://bugs.webkit.org/show_bug.cgi?id=188596

        Reviewed by Dan Bernstein.

        Remove attachment display mode from WebKit. Note that _WKAttachmentDisplayOptions needs to remain in the private
        header for source compatibility with Mail.

        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachmentDisplayOptions coreDisplayOptions]): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setAttachmentDisplayOptions):

2018-08-14 Sihui Liu <sihui_liu@apple.com>

        Crash in WebKit::filterPreloadHSTSEntry via NetworkProcess::getHostNamesWithHSTSCache
        https://bugs.webkit.org/show_bug.cgi?id=188576
        <rdar://problem/43148977>

        Reviewed by Alex Christensen.

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

2018-08-14  Alex Christensen  <achristensen@webkit.org>

        isValidCSSSelector is unsafe to be called from a non-main thread
        https://bugs.webkit.org/show_bug.cgi?id=188581
        <rdar://problem/40517358>

        Reviewed by Sam Weinig.

        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::compiledToFile):
        (API::ContentRuleListStore::lookupContentRuleList):
        (API::ContentRuleListStore::getAvailableContentRuleListIdentifiers):
        (API::ContentRuleListStore::compileContentRuleList):
        (API::ContentRuleListStore::removeContentRuleList):
        (API::ContentRuleListStore::getContentRuleListSource):
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:

2018-08-14  Ansh Shukla  <ansh_shukla@apple.com>

        NSURLAuthenticationMethodOAuth challenges are surfaced to clients in -didReceiveAuthenticationChallenge as NSURLAuthenticationMethodDefault
        https://bugs.webkit.org/show_bug.cgi?id=186870
        <rdar://problem/41314410>

        Reviewed by Alex Christensen.

        Correctly expose the OAuth protection space type in API.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        * UIProcess/API/C/WKProtectionSpaceTypes.h:

2018-08-14  Ben Richards  <benton_richards@apple.com>

        Remove api misuse check so that custom webcontent service identifier can be set at runtime
        https://bugs.webkit.org/show_bug.cgi?id=188579

        Reviewed by Ryosuke Niwa.

        Changed API misuse check so that a custom bundle identifier can be set at runtime with a debug flag

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setCustomWebContentServiceBundleIdentifier):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):

2018-08-14  Antti Koivisto  <antti@apple.com>

        RemoteLayerTreeTransaction should use OptionSet for change flags
        https://bugs.webkit.org/show_bug.cgi?id=188547

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::notePropertiesChanged):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::resetChangedProperties):

        Also remove unused everChangedProperties.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode const):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2018-08-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] [macOS] Implement a mechanism to test drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=181898
        <rdar://problem/39181698>

        Reviewed by Simon Fraser.

        Adds a new SPI method, `-_doAfterProcessingAllPendingMouseEvents:`, to WKWebView. This invokes the given
        callback after all queued mouse events have been handled by the web process. See Tools/ChangeLog for more
        detail.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _doAfterProcessingAllPendingMouseEvents:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::processDidExit):

        Invoke any outstanding callbacks for processing pending mouse events when the web process is terminated.

        (WebKit::WebViewImpl::doAfterProcessingAllPendingMouseEvents):

        Either invoke the callback immediately if there are no mouse events to be processed, or insert the callback in
        a queue that will be flushed once all mouse events have been handled.

        (WebKit::WebViewImpl::didFinishProcessingAllPendingMouseEvents):
        (WebKit::WebViewImpl::flushPendingMouseEventCallbacks):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::pinnedStateWillChange):
        (WebKit::PageClient::pinnedStateDidChange):
        (WebKit::PageClient::videoControlsManagerDidChange):

        Drive-by tweaks: remove unnecessary semicolons after empty implementation stubs.

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

        Notify the page client when there are no remaining mouse events left in the queue.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didFinishProcessingAllPendingMouseEvents):

        Add some plumbing through PageClient, so that WebPageProxy can tell WebViewImpl when it is finished processing
        all mouse events.

        * UIProcess/win/PageClientImpl.h:

2018-08-13  Alex Christensen  <achristensen@webkit.org>

        Fix linux build after r234811
        https://bugs.webkit.org/show_bug.cgi?id=188501

        * UIProcess/API/glib/WebKitWebsiteData.cpp:
        (recordContainsSupportedDataTypes):

2018-08-13  Commit Queue  <commit-queue@webkit.org>

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

        plugin processes crash on launch (Requested by smfr on
        #webkit).

        Reverted changeset:

        "We should cache the compiled sandbox profile in a data vault"
        https://bugs.webkit.org/show_bug.cgi?id=184991
        https://trac.webkit.org/changeset/234747

2018-08-13  Alex Christensen  <achristensen@webkit.org>

        Use a 1-byte enum class for TextDirection
        https://bugs.webkit.org/show_bug.cgi?id=188350

        Reviewed by Simon Fraser.

        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::WebPopupItem):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView webSelectionRectsForSelectionRects:]):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::show):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2018-08-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence "enumeral and non-enumeral type in conditional expression" warning

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

2018-08-12  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Color wells should appear pressed when presenting a color picker
        https://bugs.webkit.org/show_bug.cgi?id=188477

        Reviewed by Tim Horton.

        In order for the color well to accurately reflect the state of the picker, it is
        necessary to ensure that the picker is destroyed at the appropriate time.

        Added windowWillClose and didClosePopover delegate methods to destroy the picker
        it has been closed. Also added a call to WebColorPicker::endPicker in
        WebColorPickerMac's implementation of endPicker to ensure that the object is
        destroyed. Removed redundant calls to endPicker in the WebPageProxy.

        The hitTest method was overridden in WKPopoverColorWell to ensure that AppKit's
        view does not block our drawn color well from receiving click events.

        * UIProcess/WebColorPicker.cpp:
        (WebKit::WebColorPicker::endPicker):
        * UIProcess/WebColorPicker.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::endColorPicker):
        (WebKit::WebPageProxy::didEndColorPicker):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::closeOverlayedViews):
        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::~WebColorPickerMac):
        (WebKit::WebColorPickerMac::endPicker):
        (-[WKPopoverColorWell popoverDidClose:]):
        (-[WKPopoverColorWell hitTest:]):
        (-[WKColorPopoverMac setAndShowPicker:withColor:suggestions:]):
        (-[WKColorPopoverMac invalidate]):
        (-[WKColorPopoverMac windowWillClose:]):
        (-[WKColorPopoverMac didClosePopover]):

2018-08-10  David Kilzer  <ddkilzer@apple.com>

        [Cocoa] WebKit::PlatformPopupMenuData should use member initialization
        <https://webkit.org/b/188478>
        <rdar://problem/43154363>

        Reviewed by Joseph Pecoraro.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::PlatformPopupMenuData): Delete
        implementation.  This constructor caused the warning by never
        initializing its member variables.
        * Shared/PlatformPopupMenuData.h:
        (WebKit::PlatformPopupMenuData::PlatformPopupMenuData):
        - Use default constructor.
        (WebKit::PlatformPopupMenuData::shouldPopOver):
        (WebKit::PlatformPopupMenuData::hideArrows):
        (WebKit::PlatformPopupMenuData::menuSize):
        - Add struct member initialization.

2018-08-10  Chris Dumez  <cdumez@apple.com>

        Crash under NetworkResourceLoader::convertToDownload()
        https://bugs.webkit.org/show_bug.cgi?id=188479
        <rdar://problem/42201724>

        Reviewed by Alex Christensen.

        In NetworkResourceLoader::convertToDownload(), if m_networkLoad is null then we're trying
        to convert a load that came from the disk cache. Since we do not currently support converting
        such a load, cancel the current load and start a fresh download.

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

2018-08-10  Sihui Liu  <sihui_liu@apple.com>

        Incorrect log message in NetworkSession when creating NetworkDataTask
        https://bugs.webkit.org/show_bug.cgi?id=188463

        Reviewed by Chris Dumez.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):

2018-08-09  Ben Richards  <benton_richards@apple.com>

        We should cache the compiled sandbox profile in a data vault
        https://bugs.webkit.org/show_bug.cgi?id=184991

        Reviewed by Ryosuke Niwa.

        This patch changes a few things (note: data vaults and sandbox entitlements are only used in internal builds):
        (1) Instead of compiling a sandbox every time a process is launched, processes now look for a cached sandbox
            in a process specific data vault on macOS platforms. (ChildProcessMac.mm)
        (2) If a valid cached sandbox is not found, a process will create the data vault (or ensure that it exists),
            compile a sandbox, and cache it.
        (3) In order to create process specific data vaults, each process now has their own <process name>-OSX-sandbox.entitlements
            file which contains an entitlement with a process specific "storage class" which ensures that each process
            can only ever access its own data vault. (See the article on confluence "Data Vaults and Restricted Files" for more info)
        (4) The sandbox entitlements file for the Network, WebContent and Plugin services are loaded dynamically
            through Scripts/<process name>-process-entitlements.sh which is triggered in a new build phase for each service.
            The Storage process sandbox entitlements are loaded directly in Configurations/StorageService.xcconfig.
            The reason that the sandbox entitlements are applied dynamically is so that these sandbox entitlements
            are only applied when WK_USE_RESTRICTED_ENTITLEMENTS is YES. This means that open source builds will still work.

        * Configurations/Network-OSX-sandbox.entitlements: Added.
        * Configurations/Storage-OSX-sandbox.entitlements: Added.
        * Configurations/StorageService.xcconfig:
        * Configurations/WebContent-OSX-sandbox.entitlements: Added.
        * Configurations/WebKit.xcconfig:
        * NetworkProcess/NetworkProcess.h:
        * PluginProcess/PluginProcess.h:
        * Scripts/process-network-sandbox-entitlements.sh: Added.
        * Scripts/process-webcontent-sandbox-entitlements.sh: Added.
        * Shared/ChildProcess.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/SandboxInitializationParameters.h:
        (WebKit::SandboxInitializationParameters::setOverrideSandboxProfilePath):
        (WebKit::SandboxInitializationParameters::overrideSandboxProfilePath const):
        (WebKit::SandboxInitializationParameters::setSandboxProfile):
        (WebKit::SandboxInitializationParameters::sandboxProfile const):
        (): Deleted.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::SandboxProfileDeleter::operator()):
        (WebKit::SandboxParametersDeleter::operator()):
        (WebKit::SandboxInfo::SandboxInfo):
        (WebKit::fileContents):
        (WebKit::processStorageClass):
        (WebKit::setAndSerializeSandboxParameters):
        (WebKit::sandboxDataVaultParentDirectory):
        (WebKit::sandboxDirectory):
        (WebKit::sandboxFilePath):
        (WebKit::ensureSandboxCacheDirectory):
        (WebKit::writeSandboxDataToCacheFile):
        (WebKit::compileAndCacheSandboxProfile):
        (WebKit::tryApplyCachedSandbox):
        (WebKit::webKit2Bundle):
        (WebKit::sandboxProfilePath):
        (WebKit::compileAndApplySandboxSlowCase):
        (WebKit::applySandbox):
        (WebKit::initializeSandboxParameters):
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/SandboxInitialiationParametersMac.mm:
        (WebKit::SandboxInitializationParameters::SandboxInitializationParameters):
        * StorageProcess/StorageProcess.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.h:

2018-08-09  Jer Noble  <jer.noble@apple.com>

        Video playback is using more power
        https://bugs.webkit.org/show_bug.cgi?id=188452

        Reviewed by Eric Carlson.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setLowPowerVideoAudioBufferSizeEnabled:]):
        (-[WKPreferences _lowPowerVideoAudioBufferSizeEnabled]):

2018-08-09  Alex Christensen  <achristensen@webkit.org>

        Fix URLSchemeHandler.SyncXHR API test after r234735.
        https://bugs.webkit.org/show_bug.cgi?id=188358

        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didReceiveData):
        Return after appending data for synchronous loads.  We used to send unused messages.

2018-08-09  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(234640) Loading stalls in environments without SafariSafeBrowsing framework
        https://bugs.webkit.org/show_bug.cgi?id=188453
        <rdar://problem/43102553>

        Reviewed by Chris Dumez.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):

2018-08-09  Alex Christensen  <achristensen@webkit.org>

        WKURLSchemeHandler crashes when sent errors with sync XHR
        https://bugs.webkit.org/show_bug.cgi?id=188358

        Reviewed by Chris Dumez.

        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didReceiveData):
        (WebKit::WebURLSchemeTask::didComplete):
        * UIProcess/WebURLSchemeTask.h:

2018-08-09  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r232083): WKWebView loses first-party cookies on iOS
        https://bugs.webkit.org/show_bug.cgi?id=188443
        <rdar://problem/42991584>

        Reviewed by Chris Dumez.

        Revert the change to set sharedCookieStorage for iOS as it is breaking Kayak.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2018-08-09  Per Arne Vollan  <pvollan@apple.com>

        DisplayRefreshMonitorMac should hold a weak pointer to WebPage.
        https://bugs.webkit.org/show_bug.cgi?id=186683

        Reviewed by Brent Fulgham.

        Instead of DisplayRefreshMonitorMac having a RefPtr to WebPage, it should have a weak pointer.
        Having a RefPtr could in theory create reference cycles. This potential problem has not been
        observed in practice, but it is safer to use a weak pointer.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):

2018-08-09  Ali Juma  <ajuma@chromium.org>

        Import WPTs for IntersectionObserver
        https://bugs.webkit.org/show_bug.cgi?id=188416

        Reviewed by Simon Fraser.

        Make IntersectionObserver an experimental feature, so that it is enabled in
        WebKitTestRunner.

        * Shared/WebPreferences.yaml:

2018-08-08  Tim Horton  <timothy_horton@apple.com>

        Yet more crashes in MobileSafari under -[WKFormInputSession setSuggestions:]
        https://bugs.webkit.org/show_bug.cgi?id=188427
        <rdar://problem/43064672>

        Reviewed by Wenson Hsieh.

        Speculatively fix more crashes seen under setSuggestions.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession isValid]):
        (-[WKFormInputSession setSuggestions:]):
        (-[WKFormInputSession invalidate]):
        Belt-and-suspenders fix: use WeakObjCPtr for WKFormInputSession's WKContentView reference.

        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        Invalidate the WKFormInputSession before replacing it; we theorize that
        there is a path in which we get here without having previously called stopAssistingNode.
        Most of the code is OK with this, but this leaves WKFormInputSession
        with a raw reference to WKContentView which can later become stale.

2018-08-08  Don Olmstead  <don.olmstead@sony.com>

        [Curl] Surface additional NetworkLoadMetrics
        https://bugs.webkit.org/show_bug.cgi?id=188391

        Reviewed by Joseph Pecoraro.

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

2018-08-08  Alex Christensen  <achristensen@webkit.org>

        Fix possible null dereference in WebBackForwardList::restoreFromState
        https://bugs.webkit.org/show_bug.cgi?id=188418
        <rdar://problem/42531726>

        Reviewed by Chris Dumez.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::restoreFromState):
        Null-check m_page like we do everywhere else in this file because it can be set to null when closing the page.

2018-08-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r234314, r234320, and r234321.
        https://bugs.webkit.org/show_bug.cgi?id=188414

        Caused email sign in issue (Requested by ryanhaddad on
        #webkit).

        Reverted changesets:

        "Remove unused WKNavigationDelegatePrivate
        decidePolicyForNavigationAction SPI"
        https://bugs.webkit.org/show_bug.cgi?id=188077
        https://trac.webkit.org/changeset/234314

        "Fix API tests after r234314"
        https://bugs.webkit.org/show_bug.cgi?id=188077
        https://trac.webkit.org/changeset/234320

        "Fix API tests after r234314"
        https://bugs.webkit.org/show_bug.cgi?id=188077
        https://trac.webkit.org/changeset/234321

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

        Add a WebKit2 logging channel for ActivityState
        https://bugs.webkit.org/show_bug.cgi?id=188411

        Reviewed by Tim Horton.
        
        Add logging for ActivityState changes and the entrypoints that affect ActivityState.

        * Platform/Logging.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::windowDidOrderOffScreen):
        (WebKit::WebViewImpl::windowDidOrderOnScreen):
        (WebKit::WebViewImpl::windowDidChangeOcclusionState):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        (WebKit::WebViewImpl::viewDidHide):
        (WebKit::WebViewImpl::viewDidUnhide):
        (WebKit::WebViewImpl::activeSpaceDidChange):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::activityStateDidChange):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::isViewVisible):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setActivityState):

2018-08-05  Darin Adler  <darin@apple.com>

        [Cocoa] More tweaks and refactoring to prepare for ARC
        https://bugs.webkit.org/show_bug.cgi?id=188245

        Reviewed by Dan Bernstein.

        * Platform/cocoa/WKCrashReporter.mm:
        (WebKit::setCrashLogMessage): Refactor into a separate function for clarity.
        (WebKit::setCrashReportApplicationSpecificInformation): Use a bridging cast.

        * Shared/mac/PasteboardTypes.mm:
        (WebKit::PasteboardTypes::forEditing): Use a bridging cast.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::convertToNPNNString): Added. Uses CFStringRef rather than NSString so we can
        manually manage the autoreleasing.
        (WebKit::initializeKeyboardEvent): Use convertToNPNNString.
        (WebKit::NetscapePlugin::sendComplexTextInput): Ditto.

        * WebProcess/Plugins/PDF/PDFPlugin.mm: Use __unsafe_unretained explicitly
        for a parent pointer. We could consider moving to __weak after switching to ARC.

2018-08-07  Ben Richards  <benton_richards@apple.com>

        Add SPI for launching WebContent process with pre-linked injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=188367

        Reviewed by Ryosuke Niwa.

        Added SPI to allow applications to set a "customWebContentServiceBundleIdentifier" which will be launched instead of the default WebContent XPC service.
        The "customWebContentServiceBundleIdentifier" should be the bundle identifier for an XPC service that calls [WKProcessPool _webContentProcessXPCMain].
        The new XPC service should be hard linked to the application's injected bundle in order to receive the intended performance benefit.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        (main):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetCustomWebContentServiceBundleIdentifier):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _webContentProcessXPCMain]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration customWebContentServiceBundleIdentifier]):
        (-[_WKProcessPoolConfiguration setCustomWebContentServiceBundleIdentifier:]):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setCustomWebContentServiceBundleIdentifier):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):
        * WebKit.xcodeproj/project.pbxproj:

2018-08-07  Chris Dumez  <cdumez@apple.com>

        StorageManager should stop ref'ing IPC::Connections as this is leak-prone
        https://bugs.webkit.org/show_bug.cgi?id=188380

        Reviewed by Alex Christensen.

        StorageManager should stop ref'ing IPC::Connections as this is leak-prone. Instead, assign a unique identifier
        to each IPC::Connection and store this identifier intead of a RefPtr<IPC::Connection>. When the StorageManager
        needs an actual IPC::Connection, it can look it up from the identifier.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::~Connection):
        (IPC::Connection::connection):
        * Platform/IPC/Connection.h:
        (IPC::Connection::uniqueID const):
        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::addListener):
        (WebKit::StorageManager::StorageArea::removeListener):
        (WebKit::StorageManager::StorageArea::hasListener const):
        (WebKit::StorageManager::StorageArea::setItem):
        (WebKit::StorageManager::StorageArea::removeItem):
        (WebKit::StorageManager::StorageArea::clear):
        (WebKit::StorageManager::StorageArea::dispatchEvents const):
        (WebKit::StorageManager::SessionStorageNamespace::allowedConnection const):
        (WebKit::StorageManager::SessionStorageNamespace::setAllowedConnection):
        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::processDidCloseConnection):
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createTransientLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        (WebKit::StorageManager::setItem):
        (WebKit::StorageManager::removeItem):
        (WebKit::StorageManager::clear):
        (WebKit::StorageManager::applicationWillTerminate):
        (WebKit::StorageManager::findStorageArea const):
        * UIProcess/WebStorage/StorageManager.h:

2018-08-07  Eric Carlson  <eric.carlson@apple.com>

        NotReadableError when calling getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=188309
        <rdar://problem/42916838>

        Reviewed by Brent Fulgham.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream): Deal with audio and video sandbox
        extensions being issued at different times. Use new ProcessState methods.
        (WebKit::UserMediaProcessManager::endedCaptureSession): Use new ProcessState methods.

2018-08-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r233778): Text selection sometimes cannot be extended in iframes
        https://bugs.webkit.org/show_bug.cgi?id=188374
        <rdar://problem/42928657>

        Reviewed by Simon Fraser.

        rangeForPoint contains logic for converting a selection handle location in root view coordinates to an updated
        selection. In doing so, we first convert the selection handle location to content coordinates; however, the call
        site to EventHandler::hitTestResultAtPoint still hit-tests using the location in root view coordinates rather
        than content coordinates, which means that when the focused frame is a subframe, hit-testing will fail to find
        nodes within the subframe under the selection handle. This manifests in behaviors such as snapping to a single
        character when selecting text in subframes.

        To fix this, we just need to pass in the point in the frame's content coordinates when hit-testing.

        Tests:  editing/selection/ios/selection-handles-in-iframe.html
                editing/selection/ios/selection-handles-in-readonly-input.html

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

        Make a couple of other minor adjustments:
        1.  Take a Frame& instead of a Frame*, since Frame& is assumed to be non-null here.
        2.  Rename rangeForPoint to rangeForPointInRootViewCoordinates, as well as the point argument to
            pointInRootViewCoordinates.

        (WebKit::WebPage::updateSelectionWithTouches):
        (WebKit::rangeForPoint): Deleted.

2018-08-07  Alex Christensen  <achristensen@webkit.org>

        Fix things after r234640
        https://bugs.webkit.org/show_bug.cgi?id=188133

        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        Fix assertions as I had in r234552.  Also fix a possible race condition with fragment navigations by only keeping the first "use" response.
        * config.h:
        Fix IOSMAC build.

2018-08-07  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Scrollbars are not visible when using 3rd party mouse
        https://bugs.webkit.org/show_bug.cgi?id=188372

        Reviewed by Simon Fraser.

        The scrollbars are not visible because they are not updated with the recommended scroller style
        when a 3rd party mouse is used. They still have the overlay style, but the system is
        recommending the legacy style in this case. The UI process is currently notifying the WebProcess
        about changes in the scroller style, but the current style is not set in the WebProcess on
        startup. This patch sets the initial scroller style in the WebProcess by passing it as part of
        the WebProcess creation parameters. Also, to make sure hot-plugging of a 3rd party mouse is
        is visually changing the scroller style of the current page, a class method in NSScrollerImpPair
        is called to update all NSScrollerImpPairs with the new recommended style. This method was
        previously called by AppKit, but after blocking WindowServer access, AppKit is no longer calling
        this method. This has been manually tested by using a 3rd party mouse.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::scrollerStylePreferenceChanged):

2018-08-06  Andy Estes  <aestes@apple.com>

        [Wi-Fi Assertions] suspendWiFiAssertions() should be able to delay sending ProcessReadyToSuspend
        https://bugs.webkit.org/show_bug.cgi?id=188373
        <rdar://problem/42857398>

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformPrepareToSuspend):
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformPrepareToSuspend):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformPrepareToSuspend):

2018-08-06  Alex Christensen  <achristensen@webkit.org>

        Check with SafeBrowsing during navigation in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=188133

        Reviewed by Chris Dumez.

        This turns WebFramePolicyListenerProxy into an object that now listens for the results
        of two processes happening in parallel: the API::NavigationClient's decidePolicyForNavigation{Action, Response}
        (which it was already waiting for) and, on platforms that support it, the SafariSafeBrowsing framework's check.
        The first result is stored as it waits for the second result unless the first result is the API::NavigationClient
        saying to cancel or convert the navigation to a download, in which cases we don't care what the safe browsing
        framework results are because we won't show the URL in the browser.

        Nothing is done with the safe browsing results yet.

        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm: Added.
        (WebKit::SafeBrowsingResult::SafeBrowsingResult):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        * UIProcess/SafeBrowsingResult.h: Added.
        (WebKit::SafeBrowsingResult::provider const):
        (WebKit::SafeBrowsingResult::isPhishing const):
        (WebKit::SafeBrowsingResult::isMalware const):
        (WebKit::SafeBrowsingResult::isUnwantedSoftware const):
        (WebKit::SafeBrowsingResult::isKnownToBeUnsafe const):
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
        (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::create):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-08-06  Chris Dumez  <cdumez@apple.com>

        Regression(NetworkLoadChecker): CORS preflights are no longer able to deal with client certificate authentication
        https://bugs.webkit.org/show_bug.cgi?id=188355
        <rdar://problem/42546319>

        Reviewed by Alex Christensen.

        Before we started using the NetworkLoadChecker to do CORS-preflighting in the Network process, challenges would
        use the NetworkLoad::completeAuthenticationChallenge() code path with isAllowedToAskUserForCredentials to set
        to false. This would call:
        1. completionHandler(AuthenticationChallengeDisposition::UseCredential, { }); for TLS handshakes (server trust
           evaluation & client certification authentication)
        2. NetworkProcess::singleton().authenticationManager().didReceiveAuthenticationChallenge() otherwise

        However, NetworkCORSPreflightChecker::didReceiveChallenge() was behaving differently and calling:
        1. completionHandler(AuthenticationChallengeDisposition::RejectProtectionSpace, { }); for server trust evaluations
        2. completionHandler(AuthenticationChallengeDisposition::Cancel, { }); otherwise

        Restore previous behavior by aligning NetworkCORSPreflightChecker::didReceiveChallenge() with
        NetworkLoad::completeAuthenticationChallenge() when isAllowedToAskUserForCredentials is set to false. This means
        we end up asking the AuthenticationManager for client certificate authentication instead or cancelling the
        preflight.

        This fixes CORS-preflighting on some internal sites.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):

2018-08-06  Alex Christensen  <achristensen@webkit.org>

        Use enum classes and OptionSets for PaintPhase and PaintBehavior
        https://bugs.webkit.org/show_bug.cgi?id=188323

        Reviewed by Simon Fraser.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::shouldCreateTransientPaintingSnapshot const):

2018-08-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234552.

        Introduced 2 layout test failures on High Sierra.

        Reverted changeset:

        "Check with SafeBrowsing during navigation in WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=188133
        https://trac.webkit.org/changeset/234552

2018-08-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234569.

        Breaks internal builds.

        Reverted changeset:

        "We should cache the compiled sandbox profile in a data vault"
        https://bugs.webkit.org/show_bug.cgi?id=184991
        https://trac.webkit.org/changeset/234569

2018-08-06  Chris Dumez  <cdumez@apple.com>

        Fix IPC::Connection leak in StorageManager
        https://bugs.webkit.org/show_bug.cgi?id=188321
        <rdar://problem/42748485>

        Reviewed by Alex Christensen.

        When a StorageMap is destroyed on WebContent process side, StorageManager::destroyStorageMap()
        gets called via IPC with a (IPC::Connection, StorageMapID) pair. Normally, it removes this
        pair from m_storageAreasByConnection. However, if this is a *transient* StorageMap (sessionStorage),
        then we keep the pair in the map and we merely remove the StorageMapID as a listener from the
        StorageArea. We do this so that:
        1. The StorageArea stays alive so that it can be reused later on for the same security origin, on
           the same IPC::Connection (logic for this is in StorageManager::createTransientLocalStorageMap()
        2. Removing the StorageMapID as a listener from the StorageArea is important because
           StorageArea::m_eventListeners holds a strong reference to the IPC::Connection in a std::pair
           with the StorageMapID (HashSet<std::pair<RefPtr<IPC::Connection>, uint64_t>> m_eventListeners).

        As mentioned in 1 above, in StorageManager::createTransientLocalStorageMap(), there is logic to
        check if there is already an existing StorageArea for the given IPC::Connection that is transient
        and is for the same security origin. In this case, we could avoid constructing a new StorageArea
        and we would:
        1. Add a new entry to m_storageAreasByConnection with the key (connection, newStorageMapID), using
           same same StorageArea as value.
        2. Remove the previous (connection, oldStorageMapID) key from m_storageAreasByConnection.

        Step 2 here is wrong and is updated in this patch. It is only safe to remove the previous 
        (connection, oldStorageMapID) if this oldStorageMapID no longer exists (i.e. destroyStorageMap()
        was already called for it). This patch thus adds a check before removing (connection, oldStorageMapID)
        from the HashMap to make sure that the oldStorageMapID is no longer a listener of the StorageArea).

        This would cause leaks in the following case:
        1. We construct a StorageArea for (connection1, storageMapId1)
        2. We ask for a StorageArea for (connection1, storageMapId2) and decide to reuse the existing StorageArea
           since it has the same SecurityOrigin.
        3. As a result of step2, we would remove (connection1, storageMapId1) from m_storageAreasByConnection
           and add (connection1, storageMapId2), even though there is still a StorageMap with storageMapId1
           on WebContent process side.
        4. Later on, we would try to call destroyStorageMap(connection1, storageMap1), it would fail to find
           it in m_storageAreasByConnection and return early. It would therefore fail to remove storageMapId1
           as a listener of the StorageArea which still exists.
        -> This would leak the IPC::Connection that there would be a std::pair<RefPtr<IPC::Connection>, StorageMapID>
           with value (connection1, storageMap1) which would get leaked and it would ref the IPC::Connection.

        This code should really be refactored to be less leak prone but I have kept the patch minimal for now
        to facilitate cherry-picking.

        Note that this would reproduce very easily on sina.com.cn, when clicking bold links at the top, which
        opens new tabs to different pages in the same WebContent process. When closing all Safari windows, the
        IPC::Connection for this WebContent process would stay alive.

        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::hasListener const):
        (WebKit::StorageManager::createTransientLocalStorageMap):

2018-08-06  Alex Christensen  <achristensen@webkit.org>

        Make BlendMode an enum class
        https://bugs.webkit.org/show_bug.cgi?id=188325

        Reviewed by Darin Adler.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):

2018-08-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Caret disappears after resigning and becoming first responder if active focus state is retained
        https://bugs.webkit.org/show_bug.cgi?id=188322
        <rdar://problem/42455270>

        Reviewed by Tim Horton.

        Prior to r230745, when a user selects a word in non-editable web content without a prior selection, we would
        always try to activate the text interaction assistant, creating a selection view (a UITextSelectionView). After
        the long press is recognized, this text selection view is configured for "highlight mode", which is a special
        mode for presenting selection UI where the grabber handles at the start and end of the selection are suppressed.
        UIKit then prepares to show the selection by asking WKContentView for the number of selection rects; if this
        number is zero, the UITextSelectionView is removed from the superview, and state that keeps track of whether the
        selection view is in "highlight mode" is reset.

        In the case where there's no prior selection, our cached EditorState in the UI process will not be up to date
        yet when the gesture is recognized. This means that when UIKit asks us for the number of selection rects, we'll
        return 0, which causes any state tracking "highlight mode" for the selection to be reset, subsequently resulting
        in selection handles showing up before the user has ended the initial loupe gesture.

        r230745 addressed this bug by removing logic to activate the text selection when becoming first responder,
        instead deferring until the next `-_selectionChanged` call with post-layout editor state data to activate the
        selection. While this does ensure that selection handles don't erroneously appear, it also means that clients
        that call -becomeFirstResponder to show selection UI and the keyboard in a web view while an element is already
        focused will not have an active selection assistant (i.e. the selection view will still be hidden). One way this
        happens is when Safari uses `-_retainActiveFocusedState` in combination with `-resignFirstResponder` and
        `-becomeFirstResponder` to temporarily switch focus away from the web view when the URL bar is tapped.

        To fix both the inactive selection after `-becomeFirstResponder` as well as the selection handles showing up
        when performing a loupe gesture, we simply make the check in `-becomeFirstResponderForWebView` more nuanced.
        Instead of always activating the selection or never activating the selection, only activate the selection if the
        current editor state has information about a selection to avoid causing the selection view to be immediately
        removed and "highlight mode" to be reset when selecting a word via loupe gesture for the first time.

        Tests:  KeyboardInputTests.CaretSelectionRectAfterRestoringFirstResponder
                KeyboardInputTests.RangedSelectionRectAfterRestoringFirstResponder
                editing/selection/ios/selection-handles-after-touch-end.html

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

2018-08-06  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add Nicosia::Scene
        https://bugs.webkit.org/show_bug.cgi?id=188340

        Reviewed by Carlos Garcia Campos.

        CompositingCoordinator spawns a Nicosia::Scene object that it shares
        with the CoordinatedGraphicsSceneState instance. All the
        Nicosia::CompositionLayer objects indirectly managed by
        CompositingCoordinator are now stored in a local Nicosia::Scene::State
        member object. Upon each flush that requires frame synchronization the
        Nicosia::Scene object is updated in a thread-safe manner, increasing
        the scene ID value as well as copying the local HashSet and root layer
        values into the shared Scene object, allowing for the consumer (which
        currently is the related CoordinatedGraphicsScene instance) to update
        its output accordingly.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::CompositingCoordinator):
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        (WebKit::CompositingCoordinator::initializeRootCompositingLayerIfNeeded):
        (WebKit::CompositingCoordinator::createGraphicsLayer):
        (WebKit::CompositingCoordinator::detachLayer):
        (WebKit::CompositingCoordinator::attachLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:

2018-08-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Add support for microtasks in workers
        https://bugs.webkit.org/show_bug.cgi?id=188246

        Reviewed by Darin Adler.

        Rename JSMainThreadExecState.h to JSExecState.h.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttr.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBlob.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCDATASection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRule.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRuleList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleDeclaration.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleSheet.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValue.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRect.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMComment.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMImplementation.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDeprecated.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentGtk.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementGtk.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFile.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFileList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAppletElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCanvasElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCollection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDocument.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMapElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLQuoteElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTitleElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyboardEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNamedNodeMap.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeGtk.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeIterator.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMProcessingInstruction.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRange.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheet.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheetList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMText.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTreeWalker.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathExpression.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathNSResolver.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathResult.cpp:

2018-08-03  Ben Richards  <benton_richards@apple.com>

        We should cache the compiled sandbox profile in a data vault
        https://bugs.webkit.org/show_bug.cgi?id=184991

        Reviewed by Ryosuke Niwa.

        This patch changes a few things (note: data vaults and sandbox entitlements are only used in internal builds):
        (1) Instead of compiling a sandbox every time a process is launched, processes now look for a cached sandbox
            in a process specific data vault on macOS platforms. (ChildProcessMac.mm)
        (2) If a valid cached sandbox is not found, a process will create the data vault (or ensure that it exists),
            compile a sandbox, and cache it.
        (3) In order to create process specific data vaults, each process now has their own <process name>-OSX-sandbox.entitlements
            file which contains an entitlement with a process specific "storage class" which ensures that each process
            can only ever access its own data vault. (See the article on confluence "Data Vaults and Restricted Files" for more info)
        (4) The sandbox entitlements file for the Network, WebContent and Plugin services are loaded dynamically
            through Scripts/<process name>-process-entitlements.sh which is triggered in a new build phase for each service.
            The Storage process sandbox entitlements are loaded directly in Configurations/StorageService.xcconfig.
            The reason that the sandbox entitlements are applied dynamically is so that these sandbox entitlements
            are only applied when WK_USE_RESTRICTED_ENTITLEMENTS is YES. This means that open source builds will still work.

        * Configurations/Network-OSX-sandbox.entitlements: Added.
        * Configurations/Plugin-OSX-sandbox.entitlements: Added.
        * Configurations/Storage-OSX-sandbox.entitlements: Added.
        * Configurations/StorageService.xcconfig:
        * Configurations/WebContent-OSX-sandbox.entitlements: Added.
        * Configurations/WebKit.xcconfig:
        * NetworkProcess/NetworkProcess.h:
        * PluginProcess/PluginProcess.h:
        * Scripts/process-network-entitlements.sh: Added.
        * Scripts/process-plugin-entitlements.sh: Added.
        * Scripts/process-webcontent-entitlements.sh:
        * Shared/ChildProcess.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/SandboxInitializationParameters.h:
        (WebKit::SandboxInitializationParameters::setOverrideSandboxProfilePath):
        (WebKit::SandboxInitializationParameters::overrideSandboxProfilePath const):
        (WebKit::SandboxInitializationParameters::setSandboxProfile):
        (WebKit::SandboxInitializationParameters::sandboxProfile const):
        (): Deleted.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::SandboxProfileDeleter::operator()):
        (WebKit::SandboxParametersDeleter::operator()):
        (WebKit::SandboxInfo::SandboxInfo):
        (WebKit::fileContents):
        (WebKit::processStorageClass):
        (WebKit::setAndSerializeSandboxParameters):
        (WebKit::getUserCacheDirectory):
        (WebKit::sandboxDataVaultParentDirectory):
        (WebKit::sandboxDirectory):
        (WebKit::sandboxFilePath):
        (WebKit::ensureSandboxCacheDirectory):
        (WebKit::writeSandboxDataToCacheFile):
        (WebKit::compileAndCacheSandboxProfile):
        (WebKit::tryApplyCachedSandbox):
        (WebKit::webKit2Bundle):
        (WebKit::sandboxProfilePath):
        (WebKit::compileAndApplySandboxSlowCase):
        (WebKit::applySandbox):
        (WebKit::initializeSandboxParameters):
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/SandboxInitialiationParametersMac.mm:
        (WebKit::SandboxInitializationParameters::SandboxInitializationParameters):
        * StorageProcess/StorageProcess.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.h:

2018-08-03  Alex Christensen  <achristensen@webkit.org>

        Fix spelling of "overridden"
        https://bugs.webkit.org/show_bug.cgi?id=188315

        Reviewed by Darin Adler.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::receiveSourceEventHandler):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::encode const):
        (WebKit::WebPreferencesStore::decode):
        (WebKit::valueForKey):
        (WebKit::setValueForKey):
        (WebKit::WebPreferencesStore::setStringValueForKey):
        (WebKit::WebPreferencesStore::getStringValueForKey const):
        (WebKit::WebPreferencesStore::setBoolValueForKey):
        (WebKit::WebPreferencesStore::getBoolValueForKey const):
        (WebKit::WebPreferencesStore::setUInt32ValueForKey):
        (WebKit::WebPreferencesStore::getUInt32ValueForKey const):
        (WebKit::WebPreferencesStore::setDoubleValueForKey):
        (WebKit::WebPreferencesStore::getDoubleValueForKey const):
        (WebKit::WebPreferencesStore::setOverrideDefaultsStringValueForKey):
        (WebKit::WebPreferencesStore::setOverrideDefaultsBoolValueForKey):
        (WebKit::WebPreferencesStore::setOverrideDefaultsUInt32ValueForKey):
        (WebKit::WebPreferencesStore::setOverrideDefaultsDoubleValueForKey):
        * Shared/WebPreferencesStore.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dragInteraction:previewForLiftingItem:session:]):
        (-[WKContentView dragInteraction:previewForCancellingItem:withDefault:]):
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _systemContentInset]):

2018-08-03  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r234517.

        Caused API test failures on iOS

        Reverted changeset:

        "[Cocoa] setCookie API fails to set session cookies for
        defaultDataStore if processPool created but not used"
        https://bugs.webkit.org/show_bug.cgi?id=188209
        https://trac.webkit.org/changeset/234517

2018-08-03  Ben Richards  <benton_richards@apple.com>

        Add configuration for automatic process pre-warming
        https://bugs.webkit.org/show_bug.cgi?id=187108

        Reviewed by Ryosuke Niwa.

        Added configurations to allow setting the maximum number of processes that should be automatically prewarmed.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetMaximumNumberOfPrewarmedProcesses):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setMaximumNumberOfPrewarmedProcesses:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setMaximumPrewarmedProcessCount:]):
        (-[_WKProcessPoolConfiguration maximumPrewarmedProcessCount]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishLoadForFrame): Moved call to notifyProcessPoolToPrewarm from didFirstVisuallyNonEmptyLayoutForFrame to here.
        This is to try to ensure that frame loading and prewarming don't happen at the same time as this would be heavy for some devices.
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setMaximumNumberOfProcesses): Condition changed so that calling setMaximumNumberOfProcesses after warmInitialProcess
        doesn't result in a crash.
        (WebKit::WebProcessPool::setMaximumNumberOfPrewarmedProcesses):
        (WebKit::WebProcessPool::warmInitialProcess):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        * UIProcess/WebProcessPool.h:

2018-08-03  Alex Christensen  <achristensen@webkit.org>

        Check with SafeBrowsing during navigation in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=188133

        Reviewed by Chris Dumez.

        This turns WebFramePolicyListenerProxy into an object that now listens for the results
        of two processes happening in parallel: the API::NavigationClient's decidePolicyForNavigation{Action, Response}
        (which it was already waiting for) and, on platforms that support it, the SafariSafeBrowsing framework's check.
        The first result is stored as it waits for the second result unless the first result is the API::NavigationClient
        saying to cancel or convert the navigation to a download, in which cases we don't care what the safe browsing
        framework results are because we won't show the URL in the browser.

        Nothing is done with the safe browsing results yet.

        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm: Added.
        (WebKit::SafeBrowsingResult::SafeBrowsingResult):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        * UIProcess/SafeBrowsingResult.h: Added.
        (WebKit::SafeBrowsingResult::provider const):
        (WebKit::SafeBrowsingResult::isPhishing const):
        (WebKit::SafeBrowsingResult::isMalware const):
        (WebKit::SafeBrowsingResult::isUnwantedSoftware const):
        (WebKit::SafeBrowsingResult::isKnownToBeUnsafe const):
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
        (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::create):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-08-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234513.

        14 API tests fail the assertions added in this change.

        Reverted changeset:

        "Check with SafeBrowsing during navigation in WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=188133
        https://trac.webkit.org/changeset/234513

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

        [WPE] WebDriver: add support for action commands
        https://bugs.webkit.org/show_bug.cgi?id=188301

        Reviewed by Žan Doberšek.

        WPE doesn't support action commands because the platform specific code for handling events is not implemented.

        * SourcesWPE.txt: Add new file to compilation.
        * UIProcess/API/glib/WebKitUIClient.cpp: Use the drawing area size as window size in WPE.
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::viewBackend): Return the WPE backend of the view.
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::performInteractionSequence):
        (WebKit::WebAutomationSession::cancelInteractionSequence):
        * UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp: Added.
        (WebKit::modifiersToEventState):
        (WebKit::mouseButtonToWPEButton):
        (WebKit::stateModifierForWPEButton):
        (WebKit::doMouseEvent):
        (WebKit::doMotionEvent):
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        (WebKit::doKeyStrokeEvent):
        (WebKit::keyCodeForVirtualKey):
        (WebKit::modifiersForKeyCode):
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        (WebKit::WebAutomationSession::platformSimulateKeySequence):
        * UIProcess/WebPageProxy.h:
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::viewBackend): Return the WPE backend.

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

        [WPE] Implement MouseEvent.buttons
        https://bugs.webkit.org/show_bug.cgi?id=187998

        Reviewed by Žan Doberšek.

        Pass buttons currently pressed to WebMouseEvent.

        * Shared/wpe/WebEventFactory.cpp:
        (WebKit::pressedMouseButtons): Helper to get the pressed buttons mask for the WPE modifiers.
        (WebKit::WebEventFactory::createWebMouseEvent): Use pressedMouseButtons().
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithTouchEvent): Update the event modifiers.

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

        [WPE] Use WPE key symbols and new API instead of xkbcommon and the key mapper
        https://bugs.webkit.org/show_bug.cgi?id=188093

        Reviewed by Žan Doberšek.

        * Shared/WebEvent.h: Add WebKeyboardEvent constructor for WPE.
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent): WebKeyboardEvent constructor for WPE.
        * Shared/wpe/WebEventFactory.cpp:
        (WebKit::isWPEKeyCodeFromKeyPad): Helper tpo check if a key symbols is from key pad.
        (WebKit::WebEventFactory::createWebKeyboardEvent): Use PlatformKeyboardEvent API to provide key code, hardware
        key code, key identifier and windows key code to WebKeyboardEvent.
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend): Use WPE key symbols.

2018-08-02  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Context menus in RTL are left-aligned
        https://bugs.webkit.org/show_bug.cgi?id=188292
        <rdar://problem/32293787>

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PDF/PDFLayerControllerSPI.h:
        Add some SPI.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::handleContextMenuEvent):
        Translate UI layout direction back into the platform enum, and pass it to PDFKit.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userInterfaceLayoutDirection const):
        Add a getter for UI layout direction.

2018-08-02  Chris Dumez  <cdumez@apple.com>

        Regression(r234486): assertion hit in ~CallbackAggregator()
        https://bugs.webkit.org/show_bug.cgi?id=188283
        <rdar://problem/42851342>

        Reviewed by Alex Christensen.

        [NSHTTPCookieStorage _saveCookies:] SPI may call its completion block on the background queue
        so we need to make sure we dispatch back to the main thread before calling our completion
        handler.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::saveCookies):
        (WebKit::NetworkProcess::platformSyncAllCookies):

2018-08-02  Alex Christensen  <achristensen@webkit.org>

        Fix some builds after r234516
        ​https://bugs.webkit.org/show_bug.cgi?id=188250

        * Platform/IPC/ArgumentCoders.h:
        This assertion was comparing integers of different signs.
        Since we don't allow exception throwing in WebKit, valueless_by_exception won't be true,
        so this assertion will always be true.  I'll just remove it.

2018-08-02  Sihui Liu  <sihui_liu@apple.com>

        httpCookieStore.getAllCookies() does not always call completion block
        https://bugs.webkit.org/show_bug.cgi?id=188242

        Reviewed by Chris Dumez.

        Take background assertion for network process to keep it alive during cookieStore API calls.

        * UIProcess/GenericCallback.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookie):
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManagerProxy::setCookie):
        (WebKit::WebCookieManagerProxy::setCookies):
        (WebKit::WebCookieManagerProxy::getAllCookies):
        (WebKit::WebCookieManagerProxy::getCookies):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):

2018-08-02  Sihui Liu  <sihui_liu@apple.com>

        [Cocoa] setCookie API fails to set session cookies for defaultDataStore if processPool created but not used
        https://bugs.webkit.org/show_bug.cgi?id=188209

        Reviewed by Geoffrey Garen.

        If defaultDataStore is already created when launching network process, it means user 
        probably set cookies for default session via API, so we should update m_websiteDataStore to 
        make sure pendingCookies is passed to network process.

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

2018-08-02  Alex Christensen  <achristensen@webkit.org>

        Use WTF::Variant for WebPreferencesStore::Value
        https://bugs.webkit.org/show_bug.cgi?id=188250

        Reviewed by Sam Weinig.

        It was conceptually a variant. This just uses an actual WTF::Variant.
        Since it's encoded and decoded, I wrote variadic template encoders and decoders
        like we have for other types (Expected, std::tuple, KeyValuePair, etc.)

        * Platform/IPC/ArgumentCoders.h:
        (IPC::VariantCoder::encode):
        (IPC::VariantCoder::decode):
        Introduce ArgumentCoder<Variant>, which encodes which type the Variant currently
        holds followed by the encoding of the current type.
        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::Decoder):
        * Platform/IPC/Decoder.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::createMessageDecoder):
        Use move semantics to prevent an unnecessary copy of the Vector<Attachment>
        * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb:
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::decode):
        Use modern std::optional-based decoding supported by the new Variant decoding.
        (WebKit::valueForKey):
        Use WTF::get and WTF::holds_alternative instead of custom type checks.
        (WebKit::WebPreferencesStore::Value::encode const): Deleted.
        (WebKit::WebPreferencesStore::Value::decode): Deleted.
        (WebKit::as<String>): Deleted.
        (WebKit::as<bool>): Deleted.
        (WebKit::as<uint32_t>): Deleted.
        (WebKit::as<double>): Deleted.
        * Shared/WebPreferencesStore.h:
        (WebKit::WebPreferencesStore::Value::Value): Deleted.
        (WebKit::WebPreferencesStore::Value::operator=): Deleted.
        (WebKit::WebPreferencesStore::Value::~Value): Deleted.
        (WebKit::WebPreferencesStore::Value::type const): Deleted.
        (WebKit::WebPreferencesStore::Value::asString const): Deleted.
        (WebKit::WebPreferencesStore::Value::asBool const): Deleted.
        (WebKit::WebPreferencesStore::Value::asUInt32 const): Deleted.
        (WebKit::WebPreferencesStore::Value::asDouble const): Deleted.
        (WebKit::WebPreferencesStore::Value::destroy): Deleted.
        (): Deleted.
        Use WTF::Variant instead of a custom type/union pair.

2018-08-02  Alex Christensen  <achristensen@webkit.org>

        Check with SafeBrowsing during navigation in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=188133

        Reviewed by Chris Dumez.

        This turns WebFramePolicyListenerProxy into an object that now listens for the results
        of two processes happening in parallel: the API::NavigationClient's decidePolicyForNavigation{Action, Response}
        (which it was already waiting for) and, on platforms that support it, the SafariSafeBrowsing framework's check.
        The first result is stored as it waits for the second result unless the first result is the API::NavigationClient
        saying to cancel or convert the navigation to a download, in which cases we don't care what the safe browsing
        framework results are because we won't show the URL in the browser.

        Nothing is done with the safe browsing results yet.

        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm: Added.
        (WebKit::SafeBrowsingResult::SafeBrowsingResult):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        * UIProcess/SafeBrowsingResult.h: Added.
        (WebKit::SafeBrowsingResult::provider const):
        (WebKit::SafeBrowsingResult::isPhishing const):
        (WebKit::SafeBrowsingResult::isMalware const):
        (WebKit::SafeBrowsingResult::isUnwantedSoftware const):
        (WebKit::SafeBrowsingResult::isKnownToBeUnsafe const):
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
        (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::create):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-08-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Keyboard becomes unresponsive after pressing delete while pressing down on a character key with accents
        https://bugs.webkit.org/show_bug.cgi?id=188251
        <rdar://problem/37842108>

        Reviewed by Tim Horton.

        Fixes a bug in key event handling where invoking -handleKeyWebEvent:withCompletionHandler: from within the
        completion callback of a previous call to -handleKeyWebEvent:withCompletionHandler: would cause the completion
        callback to be cleared out prematurely. In some cases (as described in the title of this bug), UIKit exercises
        this codepath and subsequently hangs due to their completion block never getting invoked by WebKit.

        Test: KeyboardInputTests.CanHandleKeyEventInCompletionHandler

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]):
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]):

2018-08-01  Dan Bernstein  <mitz@apple.com>

        Optionally expose Attr::style to JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=188226
        <rdar://problem/42818113>

        Reviewed by Darin Adler.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Encode new attrStyleEnabled member.
        (WebKit::WebProcessCreationParameters::decode): Decode new attrStyleEnabled member.
        * Shared/WebProcessCreationParameters.h: Define new attrStyleEnabled member, initialized to
          false.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy): Copy new m_attrStyleEnabled member.
        * UIProcess/API/APIProcessPoolConfiguration.h: Define new m_attrStyleEnabled member.

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: Declare new attrStyleEnabled boolean
          property.
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration attrStyleEnabled]): New accessor.
        (-[_WKProcessPoolConfiguration setAttrStyleEnabled:]): Ditto.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess): Initialize parameters.attrStyleEnabled
          from the configuration.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Set the attrStyleEnabled runtime feature based
          on the creation parameters.

2018-08-02  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r234489.

        Caused 50+ crashes and 60+ API failures on iOS

        Reverted changeset:

        "[WTF] Rename String::format to String::deprecatedFormat"
        https://bugs.webkit.org/show_bug.cgi?id=188191
        https://trac.webkit.org/changeset/234489

2018-08-01  Tomas Popela  <tpopela@redhat.com>

        [WTF] Rename String::format to String::deprecatedFormat
        https://bugs.webkit.org/show_bug.cgi?id=188191

        Reviewed by Darin Adler.

        It should be replaced with string concatenation.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::buildAcceptLanguages):
        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::createServerAndClientIdentifiers):
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::writeHeaders):
        * Shared/win/WebEventFactory.cpp:
        (WebKit::keyIdentifierFromEvent):
        * Shared/wpe/WebEventFactory.cpp:
        (WebKit::identifierStringForKeyEvent):
        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::loggingString const):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::performURLImport):
        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::startWatchdog):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::loggingString const):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::loggingString):
        * UIProcess/WebInspectorUtilities.cpp:
        (WebKit::inspectorPageGroupIdentifierForPage):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching):
        (WebKit::WebProcessPool::startMemorySampler):
        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::logHandleKeyboardEventForTesting):
        (WebKit::InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting):
        (WebKit::InputMethodFilter::logConfirmCompositionForTesting):
        (WebKit::InputMethodFilter::logSetPreeditForTesting):

2018-08-01  Tim Horton  <timothy_horton@apple.com>

        Using the keyboard arrow keys to scroll a webpage is very slow, not smooth, takes too long
        https://bugs.webkit.org/show_bug.cgi?id=188239
        <rdar://problem/22997654>

        Reviewed by Simon Fraser.

        Instead of depending on key repeat to drive scrolling with arrow keys held down,
        run a display link that animates the scroll. We still do a single discrete scroll
        first (so that you can tap the key and shift by line/page), but then on the first
        repeat we ramp up to a constant velocity determined by the desired increment,
        stopping when the key is lifted or a different key is pressed.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollByContentOffset:animated:]):
        (-[WKWebView _scrollByContentOffset:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Add animated parameter to scrollByContentOffset, and plumb it through to UIScrollView.

        * UIProcess/ios/WKContentViewInteraction.h:
        Add a WKKeyboardScrollingAnimator member.
        Conform to WKKeyboardScrollable.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        Install the WKKeyboardScrollingAnimator.

        (-[WKContentView cleanupInteraction]):
        Uninstall the WKKeyboardScrollingAnimator.

        (-[WKContentView unscaledView]):
        Fix a stupid style nit.

        (-[WKContentView handleKeyWebEvent:]):
        Give WKKeyboardScrollingAnimator the first shot at incoming keyboard events.
        It will only consume events here if it's already performing a scrolling animation
        (because otherwise they should go straight through to the page).

        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        Give WKKeyboardScrollingAnimator a shot at handling keyboard events that
        the web content did not handle. We will only start a scrolling animation
        if the page did not handle an event that would start a scroll.

        (-[WKContentView isKeyboardScrollable]):
        Part of WKKeyboardScrollable; only report ourselves as scrollable if
        we would previously have allowed scrolling from keyboard events (if
        we're not in contenteditable, and don't have a <select> focused).

        (-[WKContentView distanceForScrollingIncrement:]):
        Part of WKKeyboardScrollable; compute the distance for each scrolling increment.

        (-[WKContentView scrollByContentOffset:animated:]):
        Part of WKKeyboardScrollable; plumb scrolls up to WKWebView.

        (-[WKContentView _scrollOffsetForEvent:]): Moved to WKKeyboardScrollingAnimator.mm.

        * UIProcess/ios/WKKeyboardScrollingAnimator.h: Added.
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm: Added.
        (-[WKKeyboardScrollingAnimator init]):
        (-[WKKeyboardScrollingAnimator initWithScrollable:]):
        (-[WKKeyboardScrollingAnimator invalidate]):
        (-[WKKeyboardScrollingAnimator _scrollOffsetForEvent:]):
        Compute the scroll offset given a particular event. This is moved from WKContentView;
        otherwise the primary change is that it now asks the WKKeyboardScrollable
        for the distance instead of computing it directly.

        (-[WKKeyboardScrollingAnimator beginWithEvent:]):
        If we're currently in the initial state (WaitingForFirstEvent), and
        a given event should start a scroll, transition into WaitingForRepeat,
        and do a single animated scroll of the appropriate distance.

        (-[WKKeyboardScrollingAnimator handleKeyEvent:]):
        If this key event should terminate a scroll (because it is either a keyup
        or a non-scrolling keydown), shut down any running animations.

        If this is the first key repeat after the initial scroll, start a scrolling
        animation.

        Eat the event if it either started or continued a scroll.

        (-[WKKeyboardScrollingAnimator startAnimatedScroll]):
        (-[WKKeyboardScrollingAnimator stopAnimatedScroll]):
        Helpers to start and stop the display link and do some bookkeeping.

        (-[WKKeyboardScrollingAnimator displayLinkFired:]):
        Ask the WKKeyboardScrollable to scroll the content based on the frame time,
        an acceleration curve, and the current animation's scrolling increment.

        * WebKit.xcodeproj/project.pbxproj:

2018-08-01  Chris Dumez  <cdumez@apple.com>

        Make sure cookies get flushed to disk before exiting or suspending the network process
        https://bugs.webkit.org/show_bug.cgi?id=188241
        <rdar://problem/42831831>

        Reviewed by Alex Christensen and Geoffrey Garen.

        Make sure cookies get flushed to disk before exiting or suspending the network process,
        to make sure they do not get lost.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::NetworkProcess::platformSyncAllCookies):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::syncAllCookies):
        (WebKit::NetworkProcess::platformSyncAllCookies):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::didClose):
        (WebKit::callExitNow):
        (WebKit::callExitSoon):
        (WebKit::ChildProcess::initialize):
        (WebKit::didCloseOnConnectionWorkQueue): Deleted.
        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::shouldCallExitWhenConnectionIsClosed const):

2018-08-01  Alex Christensen  <achristensen@webkit.org>

        Move all calls to ResourceLoader::start to WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=184946

        Reviewed by Andy Estes.

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

2018-08-01  Nan Wang  <n_wang@apple.com>

        AX: AOM: Add ARIA IDL Attribute Reflection
        https://bugs.webkit.org/show_bug.cgi?id=184676
        <rdar://problem/39476882>

        Added ARIA property string reflection on Element, behind
        a new runtime flag. 
        Spec: https://w3c.github.io/aria/#idl-interface

        Reviewed by Chris Fleizach.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAriaReflectionEnabled):
        (WKPreferencesGetAriaReflectionEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2018-08-01  Alex Christensen  <achristensen@webkit.org>

        Allow WebFramePolicyListenerProxy to be used multiple times
        https://bugs.webkit.org/show_bug.cgi?id=188229

        Reviewed by Chris Dumez.

        This fixes a regression from r234210 in clients that misuse the API.

        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):

2018-08-01  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Color picker should have a border when presented in a popover
        https://bugs.webkit.org/show_bug.cgi?id=188207

        Reviewed by Wenson Hsieh.

        The color picker should have a border when presented in a popover. This matches
        the behavior of color pickers in other parts of iOS.

        Since the popover will resize its view to fill its size, we first place the
        color picker in a container view. The container view can then fill the popover,
        while the smaller color picker is centered in it's container - creating the
        appearance of a border.

        * UIProcess/ios/forms/WKFormColorControl.mm:
        (-[WKColorPopover initWithView:]):
        * UIProcess/ios/forms/WKFormColorPicker.mm:

2018-08-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r234443 and r234445.
        https://bugs.webkit.org/show_bug.cgi?id=188224

        Revision caused 3 api failures across all platforms.
        (Requested by Truitt on #webkit).

        Reverted changesets:

        "Add configuration for automatic process pre-warming"
        https://bugs.webkit.org/show_bug.cgi?id=187108
        https://trac.webkit.org/changeset/234443

        "Add configuration for automatic process pre-warming"
        https://bugs.webkit.org/show_bug.cgi?id=187108
        https://trac.webkit.org/changeset/234445

2018-08-01  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] WKColorPicker's selection indicator doesn't always cover the selected swatch
        https://bugs.webkit.org/show_bug.cgi?id=188124

        Reviewed by Wenson Hsieh.

        - On iPhone, the size of an individual color swatch can change on rotation. In
        this case, we should resize the selection indicator along with the swatch. Added
        a new delegate method to WKColorMatrixViewDelegate to notify the color picker if
        the matrix was redrawn. We then resize the selection indicator to match the
        selected swatch's size.

        - On iPad, the selection indicator should have rounded corners if it's at the
        corner of the color picker. Otherwise, part of the indicator will be hidden by
        the popover. The selected swatch's position is checked before drawing the
        indicator. If it's at one of the four corners of the picker, the appropriate mask
        is applied to the color selection indicator's border.

        * UIProcess/ios/forms/WKFormColorPicker.h:
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        (-[WKColorMatrixView layoutSubviews]):
        (-[WKColorPicker initWithView:]):
        (-[WKColorPicker drawSelectionIndicatorForColorButton:]):
        (-[WKColorPicker colorMatrixViewDidLayoutSubviews:]):
        (-[WKColorPicker colorMatrixView:didTapColorButton:]):
        (-[WKColorPicker didPanColors:]):

2018-08-01  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Move CoordinatedBackingStore to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=188158

        Reviewed by Carlos Garcia Campos.

        Move the CoordinatedBackingStore class from WebKit to WebCore. It has no
        dependency on anything in the WebKit layer, and it's more suitable to
        future needs to keep it in the WebCore layer.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * SourcesGTK.txt:
        * SourcesWPE.txt:

2018-07-31  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r231107): MoviStar+ launches to a blank black screen
        https://bugs.webkit.org/show_bug.cgi?id=188139

        Reviewed by Brent Fulgham.

        Add infrastructure to check UIProcess SDK from the WebProcess and NetworkProcess for linked-on-or-after checks.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2018-07-31  Ryosuke Niwa  <rniwa@webkit.org>

        Add configuration for automatic process pre-warming
        https://bugs.webkit.org/show_bug.cgi?id=187108

        Reviewed by Ryosuke Niwa.

        Added the missing availability macros.

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:

2018-07-31  Ben Richards  <benton_richards@apple.com>

        Add configuration for automatic process pre-warming
        https://bugs.webkit.org/show_bug.cgi?id=187108

        Reviewed by Ryosuke Niwa.

        Added configurations to allow setting the maximum number of processes that should be automatically prewarmed.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetMaximumNumberOfPrewarmedProcesses):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setMaximumPrewarmedProcessCount:]):
        (-[_WKProcessPoolConfiguration maximumPrewarmedProcessCount]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishLoadForFrame): Moved call to notifyProcessPoolToPrewarm from didFirstVisuallyNonEmptyLayoutForFrame to here.
        This is to try to ensure that frame loading and prewarming don't happen at the same time as this would be heavy for some devices.
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setMaximumNumberOfProcesses): Condition changed so that calling setMaximumNumberOfProcesses after warmInitialProcess
        doesn't result in a crash.
        (WebKit::WebProcessPool::setMaximumNumberOfPrewarmedProcesses):
        (WebKit::WebProcessPool::warmInitialProcess):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        * UIProcess/WebProcessPool.h:

2018-07-31  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] <select> elements do not popup options
        https://bugs.webkit.org/show_bug.cgi?id=188172

        Reviewed by Fujii Hironori.

        * PlatformWin.cmake: Add WebPopupMenuProxyWin
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode const): Encode
        windows parameters
        (WebKit::PlatformPopupMenuData::decode): Decode windows
        parameters
        * Shared/PlatformPopupMenuData.h: Add the windows specific
        parameters (based on removed Windows implementation)
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        * UIProcess/win/WebPopupMenuProxyWin.cpp: Added. (based on
        removed Windows implementation plus some fixes/api changes
        since the removal)
        (WebKit::isASCIIPrintable):
        (WebKit::translatePoint):
        (WebKit::WebPopupMenuProxyWin::WebPopupMenuProxyWndProc):
        (WebKit::WebPopupMenuProxyWin::wndProc):
        (WebKit::WebPopupMenuProxyWin::registerWindowClass):
        (WebKit::WebPopupMenuProxyWin::WebPopupMenuProxyWin):
        (WebKit::WebPopupMenuProxyWin::~WebPopupMenuProxyWin):
        (WebKit::WebPopupMenuProxyWin::showPopupMenu):
        (WebKit::WebPopupMenuProxyWin::hidePopupMenu):
        (WebKit::WebPopupMenuProxyWin::calculatePositionAndSize):
        (WebKit::WebPopupMenuProxyWin::clientRect const):
        (WebKit::WebPopupMenuProxyWin::invalidateItem):
        (WebKit::WebPopupMenuProxyWin::scrollSize const):
        (WebKit::WebPopupMenuProxyWin::setScrollOffset):
        (WebKit::WebPopupMenuProxyWin::visibleSize const):
        (WebKit::WebPopupMenuProxyWin::contentsSize const):
        (WebKit::WebPopupMenuProxyWin::scrollableAreaBoundingBox const):
        (WebKit::WebPopupMenuProxyWin::scrollTo):
        (WebKit::WebPopupMenuProxyWin::invalidateScrollbarRect):
        (WebKit::WebPopupMenuProxyWin::onMouseActivate):
        (WebKit::WebPopupMenuProxyWin::onSize):
        (WebKit::WebPopupMenuProxyWin::onKeyDown):
        (WebKit::WebPopupMenuProxyWin::onChar):
        (WebKit::WebPopupMenuProxyWin::onMouseMove):
        (WebKit::WebPopupMenuProxyWin::onLButtonDown):
        (WebKit::WebPopupMenuProxyWin::onLButtonUp):
        (WebKit::WebPopupMenuProxyWin::onMouseWheel):
        (WebKit::WebPopupMenuProxyWin::onPaint):
        (WebKit::WebPopupMenuProxyWin::onPrintClient):
        (WebKit::WebPopupMenuProxyWin::down):
        (WebKit::WebPopupMenuProxyWin::up):
        (WebKit::WebPopupMenuProxyWin::paint):
        (WebKit::WebPopupMenuProxyWin::setFocusedIndex):
        (WebKit::WebPopupMenuProxyWin::visibleItems const):
        (WebKit::WebPopupMenuProxyWin::listIndexAtPoint const):
        (WebKit::WebPopupMenuProxyWin::focusedIndex const):
        (WebKit::WebPopupMenuProxyWin::focusFirst):
        (WebKit::WebPopupMenuProxyWin::focusLast):
        (WebKit::WebPopupMenuProxyWin::incrementWheelDelta):
        (WebKit::WebPopupMenuProxyWin::reduceWheelDelta):
        (WebKit::WebPopupMenuProxyWin::scrollToRevealSelection):
        * UIProcess/win/WebPopupMenuProxyWin.h: Added. (based on
        removed Windows implementation plus some fixes/api changes
        since then)
        (WebKit::WebPopupMenuProxyWin::create):
        (WebKit::WebPopupMenuProxyWin::hide):
        (WebKit::WebPopupMenuProxyWin::scrollbar const):
        (WebKit::WebPopupMenuProxyWin::itemHeight const):
        (WebKit::WebPopupMenuProxyWin::windowRect const):
        (WebKit::WebPopupMenuProxyWin::wheelDelta const):
        (WebKit::WebPopupMenuProxyWin::setWasClicked):
        (WebKit::WebPopupMenuProxyWin::wasClicked const):
        (WebKit::WebPopupMenuProxyWin::scrollbarCapturingMouse const):
        (WebKit::WebPopupMenuProxyWin::setScrollbarCapturingMouse):
        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData): Make the data to
        pass between processes.

2018-07-31  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove partitioned cookies for reduced complexity, lower memory footprint, and ability to support more platforms
        https://bugs.webkit.org/show_bug.cgi?id=188109
        <rdar://problem/42664391>

        Reviewed by Brent Fulgham, Chris Dumez, and Alex Christensen.

        This patch removes cookie partitioning which reduces the model to just
        blocked cookies (in third-party contexts) and first-party cookie access.

        Several of the changes are renaming to reflect that there are no more
        cookie partitions. However, the compile-time check remains for now since
        this change is not ready to ship.

        The API changes are mostly in C APIs used for layout tests. The slight
        change in Cocoa API is that there no longer is a functionality to
        "enable" cookie partitioning. The boolean member is still there but it
        no longer does anything.

        The functional changes are in WebKit::ResourceLoadStatisticsMemoryStore
        and WebKit::NetworkDataTaskCocoa where cookie partitioning used to be
        managed and applied respectively. The IPC communication has changed to
        reflect this.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updatePrevalentDomainsToBlockCookiesFor):
            Name change from updatePrevalentDomainsToPartitionOrBlockCookies().
            No longer supports the partitioned category.
        (WebKit::NetworkProcess::removeAllStorageAccess):
            Now supports a completion handler. This change was made to address
            flakiness that came after layout test changes that were needed because
            of the removal of partitioned cookies.
        (WebKit::NetworkProcess::updatePrevalentDomainsToPartitionOrBlockCookies): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
            Partitioning removed from message name.
            RemoveAllStorageAccess message now supports a completion handler
            as explained above
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
            Removed parameter cookieStoragePartitioningEnabled.
        (WebKit::NetworkProcessCreationParameters::decode):
            Removed parameter cookieStoragePartitioningEnabled.
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::logCookieInformation):
            No longer takes partitioning into account.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
            Now only applies cookie blocking.
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
            Now only applies cookie blocking.
        (WebKit::NetworkDataTaskCocoa::applyCookiePartitioningPolicy): Deleted.
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
            Removed the call to setCookieStoragePartitioningEnabled().
        (WebKit::NetworkProcess::setCookieStoragePartitioningEnabled): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
            WebCore::NetworkStorageSession::shouldBlockCookies() now takes a
            frame ID and page ID to resolve cookie access with the Storage
            Access API. This was previously handled by
            WebCore::NetworkStorageSession::cookieStoragePartition().
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerSetCookieStoragePartitioningEnabled): Deleted.
        * UIProcess/API/C/WKCookieManager.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsUpdateCookieBlocking):
        (WKWebsiteDataStoreSetStatisticsHasHadNonRecentUserInteraction): Deleted.
            There is no longer a difference between recent and non-recent
            user interaction so this test function was removed.
        (WKWebsiteDataStoreSetStatisticsTimeToLiveCookiePartitionFree): Deleted.
        (WKWebsiteDataStoreStatisticsUpdateCookiePartitioning): Deleted.
        (WKWebsiteDataStoreSetStatisticsShouldPartitionCookiesForHost): Deleted.
            Deleted because partitioning is no longer a thing.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
            Deprecated _isCookieStoragePartitioningEnabled() and
            _setCookieStoragePartitioningEnabled() via WK_API_DEPRECATED.
        * UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm:
        (WebKit::ResourceLoadStatisticsMemoryStore::registerUserDefaultsIfNeeded):
            Removed support for ResourceLoadStatisticsTimeToLiveCookiePartitionFree.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
            No longer sets a parameter based on cookieStoragePartitioningEnabled().
        (WebKit::WebProcessPool::setCookieStoragePartitioningEnabled):
            Added a FIXME comment that this setter no longer does anything meaningful.
            Removed the IPC call to the network process to propagate the setting.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::clearCallbackStates):
            Name change from m_updatePartitionOrBlockCookiesCallbackMap to
            m_updateBlockCookiesCallbackMap.
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToBlockCookiesFor):
            Name change plus it now just takes one vector of strings named domainsToBlock.
        (WebKit::NetworkProcessProxy::didUpdateBlockCookies):
            Name change from didUpdatePartitionOrBlockCookies().
        (WebKit::NetworkProcessProxy::storageAccessRequestResult):
            Just moved to its right place.
        (WebKit::NetworkProcessProxy::removeAllStorageAccess):
            Now take a completion handler.
        (WebKit::NetworkProcessProxy::didRemoveAllStorageAccess):
            To call the completion handler.
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToPartitionOrBlockCookies): Deleted.
            Name change.
        (WebKit::NetworkProcessProxy::didUpdatePartitionOrBlockCookies): Deleted.
            Name change.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
            Name change and added completion handler message for removeAllStorageAccess().
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsMemoryStore::scheduleStatisticsProcessingRequestIfNecessary):
        (WebKit::ResourceLoadStatisticsMemoryStore::logUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::mergeWithDataFromDecoder):
        (WebKit::ResourceLoadStatisticsMemoryStore::clear):
        (WebKit::ResourceLoadStatisticsMemoryStore::wasAccessedAsFirstPartyDueToUserInteraction const):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldBlockAndKeepCookies):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldBlockAndPurgeCookies):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::clearBlockingStateForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::resetCookieBlockingState):
        (WebKit::ResourceLoadStatisticsMemoryStore::removeAllStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::logNonRecentUserInteraction): Deleted.
            There is no longer a difference between recent and non-recent
            user interaction so this test function was removed.
        (WebKit::ResourceLoadStatisticsMemoryStore::setTimeToLiveCookiePartitionFree): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldPartitionCookies): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldBlockCookies): Deleted.
            Now split into shouldBlockAndKeepCookies() and shouldBlockAndPurgeCookies().
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookiePartitioning): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookiePartitioningForDomains): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::clearPartitioningStateForDomains): Deleted.
        (WebKit::ResourceLoadStatisticsMemoryStore::resetCookiePartitioningState): Deleted.
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::startMonitoringDisk):
            Added an empty completion handler to the m_memoryStore.clear() call.
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setCookieStoragePartitioningEnabled): Deleted.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
            Now has a completion handler.
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdate):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearBlockingStateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingStateReset):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemory):
            Now supports a completion handler for removeAllStorageAccess().
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        (WebKit::WebResourceLoadStatisticsStore::logNonRecentUserInteraction): Deleted.
            There is no longer a difference between recent and non-recent
            user interaction so this test function was removed.
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdate): Deleted.
            Renamed to scheduleCookieBlockingUpdate().
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdateForDomains): Deleted.
            Renamed to scheduleCookieBlockingUpdateForDomains().
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearPartitioningStateForDomains): Deleted.
            Renamed to scheduleClearBlockingStateForDomains().
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningStateReset): Deleted.
            Renamed to scheduleCookieBlockingStateReset().
        (WebKit::WebResourceLoadStatisticsStore::setTimeToLiveCookiePartitionFree): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToPartitionOrBlockCookiesHandler): Deleted.
            Renamed callUpdatePrevalentDomainsToBlockCookiesForHandler().
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::WebsiteDataStore::removeAllStorageAccessHandler):
            Now supports a completion handler for removeAllStorageAccess().
        (WebKit::WebsiteDataStore::networkProcessDidCrash):
            Name change in function called to get rid of "partitioning."
        (WebKit::WebsiteDataStore::updatePrevalentDomainsToPartitionOrBlockCookies): Deleted.
            Renamed updatePrevalentDomainsToBlockCookiesFor().
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-07-31  Rob Buis  <rbuis@igalia.com>

        Remove ResourceResponse::cacheBodyKey API
        https://bugs.webkit.org/show_bug.cgi?id=188192

        Reviewed by Frédéric Wang.

        Remove unused API.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::decodeStorageRecord):

2018-07-30  Sihui Liu  <sihui_liu@apple.com>

        Add support for fetching and remove type  _WKWebsiteDataTypeHSTSCache
        https://bugs.webkit.org/show_bug.cgi?id=187379
        <rdar://problem/41879559>

        WKWebsiteDataStore should support _WKWebsiteDataTypeHSTSCache so Safari could list HSTS cache entries
        and be able to remove them on a per-domain basis.

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::filterPreloadHSTSEntry):
        (WebKit::NetworkProcess::getHostNamesWithHSTSCache):
        (WebKit::NetworkProcess::deleteHSTSCacheForHostNames):
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::encode const):
        (WebKit::WebsiteData::decode):
        * Shared/WebsiteData/WebsiteData.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::displayNameForCookieHostName):
        (WebKit::WebsiteDataRecord::displayNameForHostName):
        (WebKit::WebsiteDataRecord::addHSTSCacheHostname):
        (WebKit::WebsiteDataRecord::displayNameForPluginDataHostName): Deleted.
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::WebsiteDataStore::removeData):

2018-07-30  Simon Fraser  <simon.fraser@apple.com>

        Shrink GraphicsLayerCA
        https://bugs.webkit.org/show_bug.cgi?id=188141

        Reviewed by Zalan Bujtas.

        Shrink GraphicsLayerCA from 1040 to 880 bytes by:
        * moving all the clone-related stuff into the lazily-allocated m_layerClones
        * moving all the animation-related stuff into the lazily-allocated m_animations
        * making enums be 8-bit
        * re-ordering data members

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::updateCustomAppearance):
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::requiresCustomAppearanceUpdateOnBoundsChange const):

2018-07-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r230817): Terrible performance when selecting text on Stash code review
        https://bugs.webkit.org/show_bug.cgi?id=188144
        <rdar://problem/42642489>

        Reviewed by Darin Adler.

        After r230817, mouse events were serially dispatched to the web process and handled before the subsequent mouse
        event. However, this resulted in rapid-fire mouse move events filling up the mouse event queue in the case where
        mouse move events were being handled by the web process at a slower rate than the UI process was enqueueing
        them. To mitigate this, r231511 introduced a mechanism for replacing the most recently enqueued mouse move event
        with an incoming mouse move event.

        However, when a user with a force-click-enabled trackpad performs a mouse drag, a rapid stream of
        "mouseforcechanged" events is interleaved alongside the stream of "mousemove" events. This renders r231511
        ineffective, since the most recently queued event is often a "mouseforcechanged" event instead of a "mousemove".
        On the stash code review page, this can result in hundreds of mouse events being backed up in the mouse event
        queue, causing perceived slowness when selecting text.

        To fix this, we extend the mechanism introduced in r231511, such that it is capable of replacing both
        "mouseforcechanged" and "mousemove" events in the queue. Rather than consider only the most recently queued
        item, we instead find the most recently queued event that matches the type of the incoming event, remove it from
        the queue, and then append the incoming event to the end of the queue. To avoid the risk of removing the only
        "mousemove" or "mouseforcechanged" event in the middle of a mouse down and mouse up, we also bail when searching
        backwards for an event to replace if we come across any event that is neither of these types.

        This effectively throttles the rate at which mouseforcechanged or mousemove events are dispatched when a user
        with force-click-enabled hardware clicks and drags the mouse across the page.

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

2018-07-30  Devin Rousso  <webkit@devinrousso.com>

        Add missing CoreGraphics SPI
        https://bugs.webkit.org/show_bug.cgi?id=188177

        Reviewed by Joseph Pecoraro.

        * WebProcess/cocoa/WebProcessCocoa.mm:

2018-07-30  Rob Buis  <rbuis@igalia.com>

        https://bugs.webkit.org/show_bug.cgi?id=188137
        Merge PlatformCookieJar functions into NetworkStorageSession

        Adapt callsites to use NetworkStorageSession instead of CookieJar functions.

        Reviewed by Alex Christensen.

        * NetworkProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::logCookieInformationInternal):
        * NetworkProcess/cache/NetworkCache.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:

2018-07-30  Alex Christensen  <achristensen@webkit.org>

        Add RefCounted CompletionHandler wrapping abstraction for sending policy decisions back to WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=188089

        Reviewed by Geoffrey Garen and Said Abou-Hallawa.

        This will be necessary for when I add an asynchronous parallel step to decidePolicyForNavigationAction.
        We will want to wait for that asynchronous step for decidePolicyForNavigationActionSync but not for a client.

        No change in behavior.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::PolicyDecisionSender::create):
        (WebKit::WebPageProxy::PolicyDecisionSender::operator()):
        (WebKit::WebPageProxy::PolicyDecisionSender::PolicyDecisionSender):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-07-30  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r234327.

        Caused 2 crashes on macOS and iOS debug API tests

        Reverted changeset:

        "Add RefCounted CompletionHandler wrapping abstraction for
        sending policy decisions back to WebProcess"
        https://bugs.webkit.org/show_bug.cgi?id=188089
        https://trac.webkit.org/changeset/234327

2018-07-30  Chris Dumez  <cdumez@apple.com>

        Potential null dereference under WebPage::applicationDidBecomeActive()
        https://bugs.webkit.org/show_bug.cgi?id=188170
        <rdar://problem/37493418>

        Reviewed by Wenson Hsieh.

        WebPage::m_page gets nulled out when the page is closed but the WebPage object may receive IPC
        until it gets destroyed. Therefore, we need to null-check m_page before using it in IPC message
        handlers.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationDidEnterBackground):
        (WebKit::WebPage::applicationWillEnterForeground):
        (WebKit::WebPage::applicationDidBecomeActive):

2018-07-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix incorrect guards around a method declaration in PageClient.h
        https://bugs.webkit.org/show_bug.cgi?id=188153

        Reviewed by Tim Horton.

        `WebCore::DragItem` is forward declared under `ENABLE(DRAG_SUPPORT)`, but `startDrag` is declared under
        `PLATFORM(COCOA)`. If `ENABLE(DRAG_SUPPORT)` is off but `PLATFORM(COCOA)` is on, the build breaks.

        We fix this by moving `startDrag` under `ENABLE(DRAG_SUPPORT)`.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::startDrag):

2018-07-28  Andy Estes  <aestes@apple.com>

        [Wi-Fi Assertions] Pass a ResumptionReason to resumeWiFiAssertions
        https://bugs.webkit.org/show_bug.cgi?id=188142
        <rdar://problem/42628842>

        Reviewed by Darin Adler.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformProcessDidResume):
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):

2018-07-28  Darin Adler  <darin@apple.com>

        [Cocoa] Update more WebCore Objective-C code to be ARC compatible
        https://bugs.webkit.org/show_bug.cgi?id=188140

        Reviewed by Sam Weinig.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): Removed the call to
        setAction: since the full screen placeholder view now always uses the
        cancelOperation: method.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::lookupTextAtLocation): Updated to use the new
        DictionaryLookup function that returns a tuple instead of using an out argument.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation): Ditto.
        (WebKit::WebPage::performDictionaryLookupForSelection): Ditto.

2018-07-27  Chris Dumez  <cdumez@apple.com>

        Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable()
        https://bugs.webkit.org/show_bug.cgi?id=188097
        <rdar://problem/42558823>

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:

2018-07-27  Alex Christensen  <achristensen@webkit.org>

        Don't include WebPageProxy.h just for UndoOrRedo
        https://bugs.webkit.org/show_bug.cgi?id=188086

        Reviewed by Saam Barati.

        * Shared/UndoOrRedo.h: Added.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::registerEditCommand):
        * UIProcess/PageClient.h:
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply):
        (WebKit::WebEditCommandProxy::reapply):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::registerEditCommandForUndo):
        (WebKit::WebPageProxy::canUndoRedo):
        (WebKit::WebPageProxy::executeUndoRedo):
        (WebKit::WebPageProxy::canUndo):
        (WebKit::WebPageProxy::canRedo):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::canUndo const):
        (WebKit::WebEditorClient::canRedo const):
        (WebKit::WebEditorClient::undo):
        (WebKit::WebEditorClient::redo):

2018-07-27  Alex Christensen  <achristensen@webkit.org>

        Make CompletionHandler more const correct
        https://bugs.webkit.org/show_bug.cgi?id=186543

        Reviewed by Saam Barati.

        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::willPerformHTTPRedirection):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::clearAllCaches):
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::simulateMouseInteraction):
        (WebKit::WebAutomationSession::simulateKeyboardInteraction):
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::requestNewPageWithOptions):
        (WebKit::AutomationSessionClient::requestSwitchToPage):
        (WebKit::AutomationSessionClient::requestHideWindowOfPage):
        (WebKit::AutomationSessionClient::requestRestoreWindowOfPage):
        * 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::decidePolicyForNotificationPermissionRequest):
        (WebKit::UIDelegate::UIClient::runOpenPanel):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::webGLPolicyForURL):
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        (WebKit::WebPageProxy::getWindowFrame):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning):

2018-07-27  Simon Fraser  <simon.fraser@apple.com>

        Be more conservative with compositing layer creation when memory is low
        https://bugs.webkit.org/show_bug.cgi?id=187866
        rdar://problem/42366345

        Reviewed by Zalan Bujtas.
        
        When process physical footprint is above a fraction of the jetsam limit, be more conservative in making
        compositing layers. We avoid compositing for these situations:
        1. Layers with 3D transforms which are affine (like translateZ(0)).
        2. Layers with will-change
        3. Layers for canvases (other than WebGL/WebGPU)
        
        We reuse some macOS code in MemoryPressureHandler() but choose different thresholds for iOS,
        falling into "conservative mode" at 50% of jetsam limit, and "strict mode" at 65%.
        Compositing chooses to be more conservative in either "conservative" or "strict" memory modes.
        
        Plumb through a "compositingPolicyOverride" both so that on-device testing isn't
        flakily falling into a different mode, and so that we can impose the conservative
        mode for testing.

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

2018-07-27  Alex Christensen  <achristensen@webkit.org>

        Add RefCounted CompletionHandler wrapping abstraction for sending policy decisions back to WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=188089

        Reviewed by Geoffrey Garen.

        This will be necessary for when I add an asynchronous parallel step to decidePolicyForNavigationAction.
        We will want to wait for that asynchronous step for decidePolicyForNavigationActionSync but not for a client.

        No change in behavior.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::PolicyDecisionSender::create):
        (WebKit::WebPageProxy::PolicyDecisionSender::operator()):
        (WebKit::WebPageProxy::PolicyDecisionSender::PolicyDecisionSender):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-07-27  Saam Barati  <sbarati@apple.com>

        Use SPI to compute the jetsam limit on iOS instead of hardcoding 840MB
        https://bugs.webkit.org/show_bug.cgi?id=188091
        <rdar://problem/42647697>

        Reviewed by Simon Fraser.

        Give the Network/Storage/WebContent process the com.apple.private.memorystatus
        entitlement. This allows them to read the process jetsam limit.

        * Configurations/Databases-iOS.entitlements:
        * Configurations/Network-iOS.entitlements:
        * Configurations/WebContent-iOS.entitlements:

2018-07-03  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r233461.

        assertions triggered on ios11 Debug wk2

        Reverted changeset:

        "[iOS] Add assert to catch improper use of WebCore::Timer in
        UI Process"
        https://bugs.webkit.org/show_bug.cgi?id=185330
        https://trac.webkit.org/changeset/233461

2018-07-27  Alex Christensen  <achristensen@webkit.org>

        Remove unused WKNavigationDelegatePrivate decidePolicyForNavigationAction SPI
        https://bugs.webkit.org/show_bug.cgi?id=188077

        Reviewed by Darin Adler.

        The one client has moved to the version with userInfo, and it never used the SPI
        on old operating systems.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

2018-07-27  Alex Christensen  <achristensen@webkit.org>

        Begin making WKWebViewConfiguration a wrapper around an API::PageConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=188030

        Reviewed by Sam Weinig.

        Eventually WKWebViewConfiguration should become just a API::ObjectStorage<API::PageConfiguration>.
        The transition includes adding fields that exist in WKWebViewConfiguration to API::PageConfiguration
        and making WKWebViewConfiguration's getters and setters just call API::PageConfiguration's corresponding methods
        instead of having an ivar for each value then copying it to an API::PageConfiguration we construct in
        the WKWebView constructor.  To transition incrementally, I've added a RefPtr<API::PageConfiguration> ivar to
        WKWebViewConfiguration and moved a few ivars to use the values stored in that API::PageConfiguration instead.
        I've arbitrarily chosen _treatsSHA1SignedCertificatesAsInsecure and _urlSchemeHandlers as the first two 
        properties to transition, and I'll continue transitioning each ivar in small, easy-to-review bunches.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        (API::PageConfiguration::urlSchemeHandlerForURLScheme):
        (API::PageConfiguration::setURLSchemeHandlerForURLScheme):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::urlSchemeHandlers):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]):
        (-[WKWebViewConfiguration urlSchemeHandlerForURLScheme:]):
        (-[WKWebViewConfiguration copyPageConfiguration]):
        (-[WKWebViewConfiguration _treatsSHA1SignedCertificatesAsInsecure]):
        (-[WKWebViewConfiguration _setTreatsSHA1SignedCertificatesAsInsecure:]):
        (-[WKWebViewConfiguration _urlSchemeHandlers]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h:

2018-07-27  Chris Dumez  <cdumez@apple.com>

        Loading a file URL and then issuing a reload right away causes the load to fail due to sandboxing
        https://bugs.webkit.org/show_bug.cgi?id=188078
        <rdar://problem/42562493>

        Unreviewed, follow-up fix after r234290 to address assertion hits on the bots. Make the fix
        specific to reloads as we know the existing provisional sandbox extension is for the same
        URL then.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reload):
        (WebKit::WebPage::SandboxExtensionTracker::beginLoad):
        (WebKit::WebPage::SandboxExtensionTracker::beginReload):
        * WebProcess/WebPage/WebPage.h:

2018-07-26  Andy VanWagoner  <andy@vanwagoner.family>

        [INTL] Remove INTL sub-feature compile flags
        https://bugs.webkit.org/show_bug.cgi?id=188081

        Reviewed by Michael Catanzaro.

        * Configurations/FeatureDefines.xcconfig:

2018-07-26  Chris Dumez  <cdumez@apple.com>

        Loading a file URL and then issuing a reload right away causes the load to fail due to sandboxing
        https://bugs.webkit.org/show_bug.cgi?id=188078
        <rdar://problem/42562493>

        Reviewed by Geoff Garen.

        When WebPageProxy::loadFile() is called, we create a SandboxExtension::Handle for the resource path provided
        by the caller and pass it to the WebProcess. WebPage::loadRequest() then calls SandboxExtensionTracker::beginLoad()
        to store this handle in m_provisionalSandboxExtension for later consumption.

        If a reload is issued before this sandbox extension has been consumed, then the following happens:
        1. WebPageProxy::reload() does NOT create a SandboxExtension::Handle because it has already issued one earlier.
           maybeInitializeSandboxExtensionHandle() returns early due to m_process->hasAssumedReadAccessToURL(url) check.
        2. WebPage::reload() then calls SandboxExtensionTracker::beginLoad() with a null handle, which overwrites the
           previous m_provisionalSandboxExtension its needs.
        3. The load fails because the WebContent process is missing the sandbox extension.

        To address the issue, SandboxExtensionTracker::beginLoad() is updated to only overwrite m_provisionalSandboxExtension
        if the new handle is not null. This avoids inadvertently clearing a valid sandbox extension we may need for the load,
        since the UIProcess sends us a null handle if it previously sent us a sandbox extension for the path in question.

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

2018-07-26  Chris Dumez  <cdumez@apple.com>

        It should be possible to use WTF::CallbackAggregator from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=188084

        Reviewed by Alex Christensen.

        This code was passing CallbackAggregator objects for background thread and not being
        careful on which thread the CallbackAggregator gets destroyed. This patch fixes this
        since the CallbackAggregator destructor no longer takes care of dispatching to the
        main thread.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::clearAllCaches):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):

2018-07-26  Ross Kirsling  <ross.kirsling@sony.com>

        String(View) should have a splitAllowingEmptyEntries function instead of a flag parameter
        https://bugs.webkit.org/show_bug.cgi?id=187963

        Reviewed by Alex Christensen.

        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::updateVaryInformation):
        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        (WebKit::NetworkCapture::Manager::fuzzyMatchURLs):
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromPropertyLists):
        (WebKit::PluginVersion::parse):
        * Shared/Plugins/Netscape/unix/NetscapePluginModuleUnix.cpp:
        (WebKit::NetscapePluginModule::parseMIMEDescription):
        * Shared/Plugins/unix/PluginSearchPath.cpp:
        (WebKit::pluginsDirectories):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::fileCanBeAcceptedForUpload):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::isTransparentSilverlightBackgroundValue):
        Update split/splitAllowingEmptyEntries usage.

2018-07-26  Alex Christensen  <achristensen@webkit.org>

        Fix assertions introduced in r234210
        https://bugs.webkit.org/show_bug.cgi?id=188074

        Reviewed by Chris Dumez.

        There is a client that uses WKFramePolicyListenerUseWithPolicies to send website policies as
        a response to the WKPageNavigationClient's decidePolicyForNavigationResponse.  That is wasting
        effort to generate policies that don't change anything. Once that client adopts WKWebView
        they won't be able to do this any more, so temporarily remove the assertion.
        Also, make the assertion about process swapping a release assert to prevent that client
        from adopting WKFramePolicyListenerUseInNewProcessWithPolicies for navigation responses.
        It should only be used for navigation actions.

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

2018-07-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r234181 and r234189.
        https://bugs.webkit.org/show_bug.cgi?id=188075

        These are not needed right now (Requested by thorton on
        #webkit).

        Reverted changesets:

        "Enable Web Content Filtering on watchOS"
        https://bugs.webkit.org/show_bug.cgi?id=187979
        https://trac.webkit.org/changeset/234181

        "HAVE(PARENTAL_CONTROLS) should be true on watchOS"
        https://bugs.webkit.org/show_bug.cgi?id=187985
        https://trac.webkit.org/changeset/234189

2018-07-26  Chris Dumez  <cdumez@apple.com>

        ERROR: Unhandled web process message 'WebPage:SetUseDarkAppearance' when browsing in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=188028

        Reviewed by Wenson Hsieh.

        The issue was that the WebViewImpl constructor was calling setUseDarkAppearance() *before* calling
        initializeWebPage(), which would cause us to send IPC the WebContent process for a pageID that does
        not exist on WebProcess side yet.

        To address the issue, the WebViewImpl constructor no longer calls setUseDarkAppearance() and WebPageProxy
        no longer holds a flag indicates is dark appearance is used. Instead, the WebPageProxy asks the WebView
        for the value whenever it needs to, via the PageClient.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::effectiveAppearanceDidChange):
        (WebKit::WebViewImpl::setUseDarkAppearance): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::useDarkAppearance const):
        (WebKit::WebPageProxy::effectiveAppearanceDidChange):
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::setUseDarkAppearance): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::useDarkAppearance const): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::effectiveAppearanceIsDark const):

2018-07-26  Sihui Liu  <sihui_liu@apple.com>

        Remove a forward protocol declaration of '_WKWebViewPrintProvider'
        https://bugs.webkit.org/show_bug.cgi?id=188012
        <rdar://problem/42309526>

        Reviewed by Darin Adler.

        @procotol() expressions emit invalid protocol metadata when used with forward @protocol declarations. 
        Clang is going to make it an error for using a forward-declared protocol in a @protocol expression, so
        we need to stop doing this.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:

2018-07-26  Chris Dumez  <cdumez@apple.com>

        Disable Dark Mode in the Plugin process to avoid rendering issues
        https://bugs.webkit.org/show_bug.cgi?id=188059
        <rdar://problem/42369281>

        Reviewed by Tim Horton.

        Plugins generally do not support dark mode and this causes rendering issues so
        disable dark mode in the plugin process.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):

2018-07-26  Chris Dumez  <cdumez@apple.com>

        WebSiteData-related methods should take in CompletionHandlers instead of Functions
        https://bugs.webkit.org/show_bug.cgi?id=188027

        Reviewed by Alex Christensen.

        WebSiteData-related methods should take in CompletionHandlers instead of Functions since
        they are need to be called and are only called once.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::fetchWebsiteData):
        (WebKit::PluginProcessProxy::deleteWebsiteData):
        (WebKit::PluginProcessProxy::deleteWebsiteDataForHostNames):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::fetchWebsiteData):
        (WebKit::StorageProcessProxy::deleteWebsiteData):
        (WebKit::StorageProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores):
        (WebKit::WebProcessProxy::topPrivatelyControlledDomainsWithWebsiteData):
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/WebProcessProxy.h:

2018-07-26  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Improve the way request displayRefresh notifications
        https://bugs.webkit.org/show_bug.cgi?id=188005

        Reviewed by Žan Doberšek.

        Add a new interface ThreadedDisplayRefreshMonitor::Client and use it to pipe the the
        requestDisplayRefreshMonitorUpdate and handleDisplayRefreshMonitorUpdate to the
        ThreadedCoordinatedLayerTreeHost.

        In response to requestDisplayRefreshMonitorUpdate, the LayerTreeHost will force a layer
        flush that in the end causes a repaint, which generates the requested display refresh
        event.

        In response to handleDisplayRefreshMonitorUpdate, the call to renderNextFrame will happen,
        and if the DisplayRefreshMonitor has been rescheduled, renderNextFrame will also force
        a new layer flush, causing the repaint that will generate the display refreh event.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::create):
        (WebKit::ThreadedCompositor::ThreadedCompositor):
        (WebKit::m_displayRefreshMonitor):
        (WebKit::ThreadedCompositor::handleDisplayRefreshMonitorUpdate):
        (WebKit::ThreadedCompositor::requestDisplayRefreshMonitorUpdate): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        (WebKit::ThreadedDisplayRefreshMonitor::ThreadedDisplayRefreshMonitor):
        (WebKit::ThreadedDisplayRefreshMonitor::requestRefreshCallback):
        (WebKit::ThreadedDisplayRefreshMonitor::dispatchDisplayRefreshCallback):
        (WebKit::ThreadedDisplayRefreshMonitor::invalidate):
        (WebKit::ThreadedDisplayRefreshMonitor::displayRefreshCallback):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.h:
        (WebKit::ThreadedDisplayRefreshMonitor::create):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::renderNextFrame):
        (WebKit::CoordinatedLayerTreeHost::flushLayersAndForceRepaint):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost):
        (WebKit::ThreadedCoordinatedLayerTreeHost::requestDisplayRefreshMonitorUpdate):
        (WebKit::ThreadedCoordinatedLayerTreeHost::handleDisplayRefreshMonitorUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2018-07-25  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Update sandboxes for revised OpenCL calls and streaming media
        https://bugs.webkit.org/show_bug.cgi?id=188013
        <rdar://problem/42594262>

        Reviewed by Eric Carlson.

        Testing logs from recent Mojave builds shows that OpenCL is checking more CPU-specific values as part of WebKit
        painting operations. We need to allow these checks in the sandbox to support these more optimized drawing operations.

        I also corrected some sandbox violations I found while investigating streaming media issues.

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

2018-07-25  Jeremy Jones  <jeremyj@apple.com>

        Mask AVBackgroundView to the corner radius.
        https://bugs.webkit.org/show_bug.cgi?id=187976
        rdar://problem/41810866

        Reviewed by Jon Lee.

        This changes sets the appropriate mask to the layer so the corners look correct.

        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm:
        (-[WKFullscreenStackView init]):

2018-07-25  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r227577) Text on TV & Movies page doesn't wrap properly in iTunes
        https://bugs.webkit.org/show_bug.cgi?id=188018
        <rdar://problem/42517520>

        Reviewed by Dean Jackson.

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

2018-07-25  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/ServicesController.mm:
        (WebKit::hasCompatibleServicesForItems):
        I can't even.

2018-07-25  Tim Horton  <timothy_horton@apple.com>

        Crashing on some builds that don't have async NSSharingService API
        https://bugs.webkit.org/show_bug.cgi?id=188015
        <rdar://problem/42593935>

        Reviewed by Eric Carlson.

        * UIProcess/mac/ServicesController.mm:
        (WebKit::hasCompatibleServicesForItems):

2018-07-25  Chris Dumez  <cdumez@apple.com>

        navigator.userAgent may return outdated value after webView.customUserAgent is set
        https://bugs.webkit.org/show_bug.cgi?id=188009
        <rdar://problem/42566456>

        Reviewed by Alex Christensen.

        Let the page know when the user agent changes.

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

2018-07-25  Alex Christensen  <achristensen@webkit.org>

        Use CompletionHandler for policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=187975

        Reviewed by Chris Dumez.

        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        (WebKit::WebFramePolicyListenerProxy::receivedPolicyDecision): Deleted.
        (WebKit::WebFramePolicyListenerProxy::setNavigation): Deleted.
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::create):
        (WebKit::WebFramePolicyListenerProxy::policyListenerType const): Deleted.
        (WebKit::WebFramePolicyListenerProxy::listenerID const): Deleted.
        (): Deleted.
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        (WebKit::WebFrameProxy::receivedPolicyDecision): Deleted.
        (WebKit::WebFrameProxy::activePolicyListenerProxy): Deleted.
        (WebKit::WebFrameProxy::changeWebsiteDataStore): Deleted.
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:

2018-07-25  Commit Queue  <commit-queue@webkit.org>

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

        broke API tests (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Use CompletionHandler for policy decisions"
        https://bugs.webkit.org/show_bug.cgi?id=187975
        https://trac.webkit.org/changeset/234196

2018-07-25  Alex Christensen  <achristensen@webkit.org>

        Use CompletionHandler for policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=187975

        Reviewed by Chris Dumez.

        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        (WebKit::WebFramePolicyListenerProxy::receivedPolicyDecision): Deleted.
        (WebKit::WebFramePolicyListenerProxy::setNavigation): Deleted.
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::create):
        (WebKit::WebFramePolicyListenerProxy::policyListenerType const): Deleted.
        (WebKit::WebFramePolicyListenerProxy::listenerID const): Deleted.
        (): Deleted.
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        (WebKit::WebFrameProxy::receivedPolicyDecision): Deleted.
        (WebKit::WebFrameProxy::activePolicyListenerProxy): Deleted.
        (WebKit::WebFrameProxy::changeWebsiteDataStore): Deleted.
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:

2018-07-25  Brent Fulgham  <bfulgham@apple.com>

        [macOS] PluginProcess needs TCC entitlements for media capture
        https://bugs.webkit.org/show_bug.cgi?id=187981
        <rdar://problem/42433634>

        Reviewed by Chris Dumez.

        The changes needed in Bug 185526 are also needed for the plugin process, or else the UIProcess
        (e.g., Safari) is not able to pass the user's camera/microphone access permission to the plugin process.

        This patch has the following changes:

        1. Rename "WebContent-OSX-restricted.entitlements" to "WebContent-or-Plugin-OSX-restricted.entitlements"
        2. Rename "process-webcontent-entitlements.sh" to "process-webcontent-or-plugin-entitlements.sh"
        3. Add a run-script step to the Plugin.64 and Plugin.32 builds to add the relevant entitlements.
        4. Silence some Flash plugin sandbox exceptions triggered after activating the camera.

        * Configurations/WebContent-or-Plugin-OSX-restricted.entitlements: Renamed from Source/WebKit/Configurations/WebContent-OSX-restricted.entitlements.
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player ESR.plugin.sb: Address sandbox violations needed by camera use.
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb: Ditto.
        * Scripts/process-webcontent-or-plugin-entitlements.sh: Renamed from Source/WebKit/Scripts/process-webcontent-entitlements.sh.
        * WebKit.xcodeproj/project.pbxproj: Update for renaming, and perform entitlement steps on Plugin process.

2018-07-24  Tim Horton  <timothy_horton@apple.com>

        Enable Web Content Filtering on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=187979
        <rdar://problem/42559346>

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

2018-07-24  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist][macOS] Display suggestions for input[type=color]
        https://bugs.webkit.org/show_bug.cgi?id=187794

        Reviewed by Tim Horton.

        An input[type=color] element that has an associated datalist element should
        display the color values provided. We now support 1-12 suggested colors, that
        will be displayed at the top of the color selection popover. If no suggestions
        are specified we keep the existing default colors.

        Created an NSPopoverColorWell subclass that allows custom colors to be specified
        in the form of an NSColorList.

        Also fixed a bug where an additional color well was displayed when clicking on
        the input element.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Color>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showColorPicker):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/mac/WebColorPickerMac.h:
        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::create):
        (WebKit::WebColorPickerMac::WebColorPickerMac):
        (WebKit::WebColorPickerMac::showColorPicker):
        (+[WKPopoverColorWell _colorPopoverCreateIfNecessary:]):
        (-[WKPopoverColorWell _showPopover]):
        (-[WKPopoverColorWell setSuggestedColors:]):
        (-[WKColorPopoverMac initWithFrame:inView:]):
        (-[WKColorPopoverMac setAndShowPicker:withColor:suggestions:]):
        (-[WKColorPanelMac setAndShowPicker:withColor:suggestions:]):
        * WebProcess/WebCoreSupport/WebColorChooser.cpp:
        (WebKit::WebColorChooser::WebColorChooser):
        (WebKit::WebColorChooser::reattachColorChooser):

2018-07-24  Alex Christensen  <achristensen@webkit.org>

        Modernize NavigationState
        https://bugs.webkit.org/show_bug.cgi?id=187966

        Reviewed by Andy Estes.

        Don't ignore switch warnings any more.
        Use BlockPtr.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):

2018-07-24  Alex Christensen  <achristensen@webkit.org>

        Remove WebFramePolicyListenerProxy::changeWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=187967

        Reviewed by Andy Estes.

        We need to call WebFrameProxy::changeWebsiteDataStore if the _WKWebsitePolicies has a WKWebsiteDataStore.
        We're doing that in a weird way that is not in the right layer.  Inside the call to WebFramePolicyListenerProxy::use
        we can inform the frame if there's a new WebsiteDataStore.
        
        No change in behavior, as verified by the WebKit.WebsitePoliciesDataStore API test.
        This is a step towards using lambdas in WebFramePolicyListenerProxy.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::decidePolicyForNavigationAction):
        (API::NavigationClient::decidePolicyForNavigationResponse):
        * UIProcess/API/APIPolicyClient.h:
        (API::PolicyClient::decidePolicyForNavigationAction):
        (API::PolicyClient::decidePolicyForNewWindowAction):
        (API::PolicyClient::decidePolicyForResponse):
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerUse):
        (WKFramePolicyListenerUseInNewProcess):
        (useWithPolicies):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPagePolicyClient):
        (WKPageSetPageNavigationClient):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::changeWebsiteDataStore): Deleted.
        * UIProcess/WebFramePolicyListenerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/mac/PageClientImplMac.mm:

2018-07-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234121.

        Caused perf test failures.

        Reverted changeset:

        "We should cache the compiled sandbox profile in a data vault"
        https://bugs.webkit.org/show_bug.cgi?id=184991
        https://trac.webkit.org/changeset/234121

2018-07-24  Jeff Miller  <jeffm@apple.com>

        WKUIDelegate needs an alternate decideDatabaseQuotaForSecurityOrigin method that provides the database name and display name
        https://bugs.webkit.org/show_bug.cgi?id=187567

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        Declare alternate decideDatabaseQuotaForSecurityOrigin method, copying the existing FIXME comment
        from the old method.
        
        * UIProcess/Cocoa/UIDelegate.h:
        Add flag for new delegate method.
        
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        Initialize new flag.
        
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota):
        Prefer the new UIDelegate method that takes the database name and display name, falling back to the
        existing method if the client doesn't implement it.

2018-07-24  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Add support to WebView for setting tooltips
        https://bugs.webkit.org/show_bug.cgi?id=187930

        Reviewed by Fujii Hironori.

        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::toolTipChanged): Set tooltip on WebView
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setToolTip): Add support for updating the
        tooltip text in Windows.
        * UIProcess/win/WebView.h:

2018-07-24  Alex Christensen  <achristensen@webkit.org>

        Reduce getters/setters in WebFramePolicyListenerProxy
        https://bugs.webkit.org/show_bug.cgi?id=187830

        Reviewed by Dean Jackson.

        This is a step towards making it a lambda, which has no getters or setters.
        No change in behavior.

        setApplyPolicyInNewProcessIfPossible can be replaced by passing another parameter.
        This bit was just piggy-backing on the WebFramePolicyListenerProxy.

        isMainFrame was only used in an assert, which has a corresponding ObjC exception in
        NavigationState::NavigationClient::decidePolicyForNavigationAction for the one relevant client.

        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerUseInNewProcess):
        (useWithPolicies):
        (WKFramePolicyListenerUseWithPolicies):
        (WKFramePolicyListenerUseInNewProcessWithPolicies):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::receivedPolicyDecision):
        (WebKit::WebFramePolicyListenerProxy::use):
        (WebKit::WebFramePolicyListenerProxy::download):
        (WebKit::WebFramePolicyListenerProxy::ignore):
        (WebKit::WebFramePolicyListenerProxy::isMainFrame const): Deleted.
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::setApplyPolicyInNewProcessIfPossible): Deleted.
        (WebKit::WebFramePolicyListenerProxy::applyPolicyInNewProcessIfPossible const): Deleted.
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::receivedPolicyDecision):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:

2018-07-24  Alex Christensen  <achristensen@webkit.org>

        Remove WebFramePolicyListenerProxy::invalidate
        https://bugs.webkit.org/show_bug.cgi?id=187833

        Reviewed by Dean Jackson.

        When we're invalidating the listener, calling ignore instead will at worst cause
        an ignored message to be sent.  The load will be cancelled either way.
        Removing the invalidate method gets it closer to being a lambda.

        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::invalidate): Deleted.
        * UIProcess/WebFramePolicyListenerProxy.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::webProcessWillShutDown):
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):

2018-07-24  Chris Dumez  <cdumez@apple.com>

        WebFullScreenManagerProxy does not need to be ref counted
        https://bugs.webkit.org/show_bug.cgi?id=187928

        Reviewed by Eric Carlson.

        WebFullScreenManagerProxy does not need to be ref counted, it is owned by WebPageProxy.
        It is also error-prone because WebFullScreenManagerProxy has a raw pointer to its WebPageProxy
        and anybody could extend the lifetime of the WebFullScreenManagerProxy by refing it, which
        would make the WebPageProxy pointer stale.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::WebFullScreenManagerProxy):
        (WebKit::WebFullScreenManagerProxy::willEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::didEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::willExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::didExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::setAnimatingFullScreen):
        (WebKit::WebFullScreenManagerProxy::requestExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::saveScrollPosition):
        (WebKit::WebFullScreenManagerProxy::restoreScrollPosition):
        (WebKit::WebFullScreenManagerProxy::setFullscreenInsets):
        (WebKit::WebFullScreenManagerProxy::setFullscreenAutoHideDuration):
        (WebKit::WebFullScreenManagerProxy::setFullscreenControlsHidden):
        (WebKit::WebFullScreenManagerProxy::invalidate):
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::reattachToWebProcess):
        * UIProcess/WebPageProxy.h:

2018-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [TextureMapper] Separate repaint counter state from debug visuals
        https://bugs.webkit.org/show_bug.cgi?id=187946

        Reviewed by Carlos Garcia Campos.

        Instead of managing the repaint counter visibility along with the
        debug border visuals, do that together with the repaint count value.

        In the CoordinatedGraphicsScene class, remove the helper
        setLayerRepaintCountIfNeeded() method that's only been called in one
        place, and instead set the repaint count information on the
        TextureMapperLayer object directly from setLayerState(). The repaint
        counter visiblity and count value are gathered from the new struct
        that's kept on the CoordinatedGraphicsLayerState object.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::setLayerState):
        (WebKit::CoordinatedGraphicsScene::setLayerRepaintCountIfNeeded): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:

2018-07-24  Thibault Saunier  <tsaunier@igalia.com>

        [WPE][GTK] Implement WebRTC based on libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=186932

        Reviewed by Philippe Normand.

        * WebProcess/Network/webrtc/LibWebRTCProvider.h: Use LibWebRTCProviderGlib when building WPE or GTK ports.

2018-07-23  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Add implementation for setting cursors
        https://bugs.webkit.org/show_bug.cgi?id=187868

        Reviewed by Fujii Hironori.

        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setCursor): Set cursor on the webview
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setCursor): Add implementation to set the
        web cursor to update the Windows cursor
        * UIProcess/win/WebView.h:

2018-07-23  Jeremy Jones  <jeremyj@apple.com>

        Crash when loadViewIfRequired called while WKFullScreenViewController is being deallocated.
        https://bugs.webkit.org/show_bug.cgi?id=187920
        rdar://problem/41324023

        Reviewed by Eric Carlson.

        Clear dangling weak-ref.
        Prevent async playback state calls from instantiating the interface.
        Release WKFullScreenViewController when it is no longer needed.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController dealloc]):
        (-[WKFullScreenViewController setPlaying:]):
        (-[WKFullScreenViewController setAnimating:]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _completedExitFullScreen]):

2018-07-23  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the build.

        * UIProcess/mac/ServicesController.mm:
        (WebKit::hasCompatibleServicesForItems):

2018-07-23  Ben Richards  <benton_richards@apple.com>

        We should cache the compiled sandbox profile in a data vault
        https://bugs.webkit.org/show_bug.cgi?id=184991

        Reviewed by Ryosuke Niwa.

        This patch changes a few things (note: data vaults and sandbox entitlements are only used in internal builds):
        (1) Instead of compiling a sandbox every time a process is launched, processes now look for a cached sandbox
            in a process specific data vault on macOS platforms. (ChildProcessMac.mm)
        (2) If a valid cached sandbox is not found, a process will create the data vault (or ensure that it exists),
            compile a sandbox, and cache it.
        (3) In order to create process specific data vaults, each process now has their own <process name>-OSX-sandbox.entitlements
            file which contains an entitlement with a process specific "storage class" which ensures that each process
            can only ever access its own data vault. (See the article on confluence "Data Vaults and Restricted Files" for more info)
        (4) The sandbox entitlements file for the Network, WebContent and Plugin services are loaded dynamically
            through Scripts/<process name>-process-entitlements.sh which is triggered in a new build phase for each service.
            The Storage process sandbox entitlements are loaded directly in Configurations/StorageService.xcconfig.
            The reason that the sandbox entitlements are applied dynamically is so that these sandbox entitlements
            are only applied when WK_USE_RESTRICTED_ENTITLEMENTS is YES. This means that open source builds will still work.

        * Configurations/Network-OSX-sandbox.entitlements: Added.
        * Configurations/Plugin-OSX-sandbox.entitlements: Added.
        * Configurations/Storage-OSX-sandbox.entitlements: Added.
        * Configurations/StorageService.xcconfig:
        * Configurations/WebContent-OSX-sandbox.entitlements: Added.
        * Configurations/WebKit.xcconfig:
        * NetworkProcess/NetworkProcess.h:
        * PluginProcess/PluginProcess.h:
        * Scripts/process-network-entitlements.sh: Added.
        * Scripts/process-plugin-entitlements.sh: Added.
        * Scripts/process-webcontent-entitlements.sh:
        * Shared/ChildProcess.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/SandboxInitializationParameters.h:
        (WebKit::SandboxInitializationParameters::setOverrideSandboxProfilePath):
        (WebKit::SandboxInitializationParameters::overrideSandboxProfilePath const):
        (WebKit::SandboxInitializationParameters::setSandboxProfile):
        (WebKit::SandboxInitializationParameters::sandboxProfile const):
        (): Deleted.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::SandboxProfileDeleter::operator()):
        (WebKit::SandboxParametersDeleter::operator()):
        (WebKit::SandboxInfo::SandboxInfo):
        (WebKit::fileContents):
        (WebKit::processStorageClass):
        (WebKit::setAndSerializeSandboxParameters):
        (WebKit::getUserCacheDirectory):
        (WebKit::sandboxDataVaultParentDirectory):
        (WebKit::sandboxDirectory):
        (WebKit::sandboxFilePath):
        (WebKit::ensureSandboxCacheDirectory):
        (WebKit::writeSandboxDataToCacheFile):
        (WebKit::compileAndCacheSandboxProfile):
        (WebKit::tryApplyCachedSandbox):
        (WebKit::webKit2Bundle):
        (WebKit::sandboxProfilePath):
        (WebKit::compileAndApplySandboxSlowCase):
        (WebKit::applySandbox):
        (WebKit::initializeSandboxParameters):
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/SandboxInitialiationParametersMac.mm:
        (WebKit::SandboxInitializationParameters::SandboxInitializationParameters):
        * StorageProcess/StorageProcess.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.h:

2018-07-23  Tim Horton  <timothy_horton@apple.com>

        Creating and loading content in a WKWebView triggers Main Thread Checker warnings under ServicesController
        https://bugs.webkit.org/show_bug.cgi?id=186963
        <rdar://problem/41393682>

        Reviewed by Timothy Hatcher.

        * UIProcess/mac/ServicesController.h:
        * UIProcess/mac/ServicesController.mm:
        (WebKit::hasCompatibleServicesForItems):
        (WebKit::ServicesController::refreshExistingServices):
        Adopt async ShareKit SPI that is actually thread-safe instead of the not-quite-safe
        synchronous API. Request all three sets of services immediately, and dispatch
        to the Web Content processes when all three have returned.

2018-07-23  Chris Dumez  <cdumez@apple.com>

        WebResourceLoadStatisticsStore fails to unregister itself as a MessageReceiver in its destructor
        https://bugs.webkit.org/show_bug.cgi?id=187910
        <rdar://problem/42356526>

        Reviewed by Brent Fulgham.

        The WebResourceLoadStatisticsStore was only removing itself as a MessageReceiver from the WebProcessProxy
        and that WebProcessProxy's connection was getting closed. However, it is possible for the
        WebResourceLoadStatisticsStore to get destroyed before this happens. This would lead to crashes such as
        the one in <rdar://problem/42356526>.

        To address the issue, we let the WebsiteDataStore take care of registering / unregistering the
        WebResourceLoadStatisticsStore as a MessageReceiver with the WebProcessProxy. This is more reliable since
        the WebsiteDataStore is the one that subclasses WebProcessLifetimeObserver. Make sure the
        WebResourceLoadStatisticsStore is removed as a MessageReceiver whenever the WebsiteDataStore is destroyed
        or WebsiteDataStore::m_resourceLoadStatistics gets cleared.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        * UIProcess/WebResourceLoadStatisticsStore.h:
        Drop logic to add / remove the WebResourceLoadStatisticsStore as a receiver now that the
        WebsiteDataStore takes care of it.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        Make sure the WebResourceLoadStatisticsStore gets unregistered as a MessageReceiver from all associated
        WebProcessProxy objects when the WebsiteDataStore gets destroyed.

        (WebKit::WebsiteDataStore::webProcessWillOpenConnection):
        (WebKit::WebsiteDataStore::webProcessDidCloseConnection):
        Register / Unregister the WebResourceLoadStatisticsStore as a MessageReceiver with the WebProcessProxy.

        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
        Make sure we unregister the WebResourceLoadStatisticsStore as a MessageReceiver with all associated
        WebProcessProxy objects before we clear m_resourceLoadStatistics as this will causes the
        WebResourceLoadStatisticsStore to get destroyed.

        (WebKit::WebsiteDataStore::unregisterWebResourceLoadStatisticsStoreAsMessageReceiver):
        (WebKit::WebsiteDataStore::registerWebResourceLoadStatisticsStoreAsMessageReceiver):
        Add utility functions to register / unregister WebResourceLoadStatisticsStore as a MessageReceiver with
        all associated WebProcessProxy objects.

        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
        Register the new WebResourceLoadStatisticsStore as a MessageReceiver with all associated WebProcessProxy
        objects in case setResourceLoadStatisticsEnabled(true) gets called *after* we've already started
        WebProcesses.

        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-07-23  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add logging of Storage Access API use in experimental debug mode
        https://bugs.webkit.org/show_bug.cgi?id=187918
        <rdar://problem/42509062>

        Reviewed by Jiewen Tan.

        Tested manually by looking at log output.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords):
            This is just a clean-up change.
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
            Both these now log proper info in debug mode.

2018-07-23  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add support for input[type=color]
        https://bugs.webkit.org/show_bug.cgi?id=187871

        Reviewed by Tim Horton.

        Created WKFormColorControl to display a color picker once a color input gains
        focus. The control is presented as an inputView on iPhone and as a popover on
        iPad. The picker itself consists of two color matrices. The first is a set of 12
        default colors, displayed on the top row of the picker. In a subsequent patch,
        this top row will be made customizable through the use of the datalist element.
        The second matrix is a grid of 120 colors, provided by the system. Colors can be
        selected from either matrix by tapping or with a pan gesture.

        WKColorMatrixView represents a single color matrix and is comprised of
        WKColorButtons that represent each color in the matrix.

        * Shared/AssistedNodeInformation.h:
        * UIProcess/API/Cocoa/_WKFocusedElementInfo.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]):
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView inputView]):
        (-[WKContentView requiresAccessoryView]):
        (isAssistableInputType):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView actionNameForFocusedFormControlView:]):
        * UIProcess/ios/forms/WKFormColorControl.h: Added.
        * UIProcess/ios/forms/WKFormColorControl.mm: Added.
        (-[WKColorPopover initWithView:]):
        (-[WKColorPopover controlView]):
        (-[WKColorPopover controlBeginEditing]):
        (-[WKColorPopover controlEndEditing]):
        (-[WKFormColorControl initWithView:]):
        (-[WKFormColorControl assistantView]):
        (-[WKFormColorControl beginEditing]):
        (-[WKFormColorControl endEditing]):
        * UIProcess/ios/forms/WKFormColorPicker.h: Added.
        * UIProcess/ios/forms/WKFormColorPicker.mm: Added.
        (+[WKColorButton colorButtonWithColor:]):
        (-[WKColorMatrixView initWithFrame:]):
        (-[WKColorMatrixView initWithFrame:colorMatrix:]):
        (-[WKColorMatrixView layoutSubviews]):
        (-[WKColorMatrixView colorButtonTapped:]):
        (+[WKColorPicker defaultTopColorMatrix]):
        (-[WKColorPicker initWithView:]):
        (-[WKColorPicker setControlValueFromUIColor:]):
        (-[WKColorPicker controlView]):
        (-[WKColorPicker controlBeginEditing]):
        (-[WKColorPicker controlEndEditing]):
        (-[WKColorPicker colorMatrixView:didTapColorButton:]):
        (-[WKColorPicker didPanColors:]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isAssistableElement):
        (WebKit::WebPage::getAssistedNodeInformation):

2018-07-23  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Fix detection of held modifier keys for key events
        https://bugs.webkit.org/show_bug.cgi?id=187862

        Reviewed by Fujii Hironori.

        * Shared/win/WebEventFactory.cpp:
        (WebKit::IsKeyInDownState): Use requested modifier not VK_MENU

2018-07-20  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r233925): Can't go into PiP twice
        https://bugs.webkit.org/show_bug.cgi?id=187876
        <rdar://problem/42444520>

        Reviewed by Jon Lee.

        We fail to enter PiP the second time because the video fullscreen interface no longer has a
        model, and so gives a contentSize of 0x0. This happens because we disassociate the
        interface from the model in didCleanupFullscreen. However, the interface and model can still
        be re-used if they're kept alive by another client. We should delay disassociating the model
        from the interface until just before the model is destroyed in removeClientForContext.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::removeClientForContext):
        (WebKit::VideoFullscreenManagerProxy::didCleanupFullscreen):

2018-07-20  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Enable basic functionality in experimental debug mode
        https://bugs.webkit.org/show_bug.cgi?id=187835
        <rdar://problem/42408590>

        Reviewed by Chris Dumez.

        This patch makes the experimental ITP Debug Mode feature work, at least
        to a basic level. This means:
        - Debug logging on the INFO level.
        - Permanently treat 3rdpartytestwebkit.org as a prevalent resource.
        - Support manual setting of a custom permanently prevalent resource through user
          defaults on Cocoa platforms.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsDebugModeWithCompletionHandler):
        (WKWebsiteDataStoreSetResourceLoadStatisticsPrevalentResourceForDebugMode):
            Test infrastructure.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm:
        (WebKit::ResourceLoadStatisticsMemoryStore::registerUserDefaultsIfNeeded):
            Used to pick up custom set prevalent resource on Cocoa platforms (for debug mode).
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::isPrevalentDueToDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::processStatisticsAndDataRecords):
            Now skips processing of debug mode prevalent resources so that they
            stay prevalent.
        (WebKit::ResourceLoadStatisticsMemoryStore::ensurePrevalentResourcesForDebugMode):
            Convenience function to make 3rdpartytestwebkit.org and any custom domain
            set through ResourceLoadStatisticsMemoryStore::setPrevalentResourceForDebugMode()
            be prevalent resources.
        (WebKit::ResourceLoadStatisticsMemoryStore::setResourceLoadStatisticsDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::setPrevalentResourceForDebugMode):
            Sets a custom domain to always be treated as prevalent in debug mode.
        (WebKit::ResourceLoadStatisticsMemoryStore::clear):
            Now makes sure 3rdpartytestwebkit.org and any custom domain set through
            ResourceLoadStatisticsMemoryStore::setPrevalentResourceForDebugMode()
            are prevalent resources even after a clear of the store.
        (WebKit::debugLogDomainsInBatches):
            We may have too many domain names to fit in a single log statement.
            This function logs them in batches of 50, if we have more than 50.
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookiePartitioning):
            Now makes use of debugLogDomainsInBatches() in debug mode.
        * UIProcess/ResourceLoadStatisticsMemoryStore.h:
        (WebKit::ResourceLoadStatisticsMemoryStore::isDebugModeEnabled const):
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::populateMemoryStoreFromDisk):
            Now accepts a non-empty memory store in debug mode. This is to support a
            pre-populated store with 3rdpartytestwebkit.org and any custom domain already
            set as prevalent.
        (WebKit::ResourceLoadStatisticsPersistentStorage::setResourceLoadStatisticsDebugMode):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResourceForDebugMode):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-07-20  Tim Horton  <timothy_horton@apple.com>

        Occasional crash under -[WKFormInputSession setSuggestions:]
        https://bugs.webkit.org/show_bug.cgi?id=187869
        <rdar://problem/41357063>

        Reviewed by Dean Jackson.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputDelegate]):
        Make inputDelegate weak.

2018-07-20  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Relax WebKit sandbox to permit proper App Store behavior
        https://bugs.webkit.org/show_bug.cgi?id=187831
        <rdar://problem/42047455>

        Reviewed by Alexey Proskuryakov.

        The Mac App Store is unable to perform some gift card redemption tasks on macOS due to missing sandbox permissions.
        This patch adds those permissions.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:

2018-07-20  Brady Eidson  <beidson@apple.com>

        Add WKNavigation/WKNavigationAction related SPI.
        https://bugs.webkit.org/show_bug.cgi?id=187826

        Reviewed by Chris Dumez.

        * UIProcess/API/APINavigationAction.h:

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageLoadURLRequestReturningNavigation):

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction _mainFrameNavigation]):
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:

        * UIProcess/API/glib/WebKitUIClient.cpp:

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

2018-07-20  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] enable-media-capabilities websetting
        https://bugs.webkit.org/show_bug.cgi?id=187847

        Reviewed by Carlos Garcia Campos.

        Add a new WebKitSetting for the MediaCapabilities spec defined in:
        https://wicg.github.io/media-capabilities/

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_media_capabilities):
        (webkit_settings_set_enable_media_capabilities):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitSettings.h:

2018-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.21.5 release.

        * gtk/NEWS: Add release notes for 2.21.5.
        * webkitglib-symbols.map: Remove symbols.

2018-07-19  Chris Dumez  <cdumez@apple.com>

        Null pointer dereference under WebPage::autofillLoginCredentials()
        https://bugs.webkit.org/show_bug.cgi?id=187823
        <rdar://problem/37152195>

        Reviewed by David Kilzer.

        Deal with m_assistedNode being null under WebPage::autofillLoginCredentials().

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

2018-07-19  Chris Dumez  <cdumez@apple.com>

        [ITP] Crash under ResourceLoadStatisticsMemoryStore::removeDataRecords()
        https://bugs.webkit.org/show_bug.cgi?id=187821
        <rdar://problem/42112693>

        Reviewed by David Kilzer.

        In two cases, ResourceLoadStatisticsMemoryStore (which lives on a background queue) needs to call WebPageProxy
        operations on the main thread and then dispatch back on the background queue when the operation completes.
        However, it is possible for the ResourceLoadStatisticsMemoryStore to get destroyed on the background queue
        during this time and we would then crash when trying to use m_workQueue to re-dispatch. To address the issue,
        I now ref the work queue in the lambda so that we're guaranteed to be able to re-dispatch to the background
        queue. When we're back on the background queue, we'll realize that weakThis in gone and we'll call the callback
        and return early.

        Note that I am not checking weakThis on the main thread as this would not be safe. weakThis should only be
        used on the background queue.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::grandfatherExistingWebsiteData):

2018-07-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        Move WebFrameListenerProxy to WebFramePolicyListenerProxy, its only subclass
        https://bugs.webkit.org/show_bug.cgi?id=187825
        <rdar://problem/42405081>

        Unreviewed build fix for Windows port.

        RefPtr.h(45): error C2027: use of undefined type 'API::Navigation'

        * UIProcess/win/WebInspectorProxyWin.cpp: Include "APINavigation.h".

2018-07-19  Alex Christensen  <achristensen@webkit.org>

        Move WebFrameListenerProxy to WebFramePolicyListenerProxy, its only subclass
        https://bugs.webkit.org/show_bug.cgi?id=187825

        Reviewed by Brady Eidson.

        * CMakeLists.txt:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        * UIProcess/Automation/WebAutomationSession.cpp:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/RemoteWebInspectorProxy.cpp:
        * UIProcess/WebFormSubmissionListenerProxy.h:
        (WebKit::WebFormSubmissionListenerProxy::create):
        (WebKit::WebFormSubmissionListenerProxy::WebFormSubmissionListenerProxy):
        * UIProcess/WebFrameListenerProxy.cpp: Removed.
        * UIProcess/WebFrameListenerProxy.h: Removed.
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
        (WebKit::WebFramePolicyListenerProxy::receivedPolicyDecision):
        (WebKit::WebFramePolicyListenerProxy::changeWebsiteDataStore):
        (WebKit::WebFramePolicyListenerProxy::invalidate):
        (WebKit::WebFramePolicyListenerProxy::isMainFrame const):
        (WebKit::WebFramePolicyListenerProxy::setNavigation):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::listenerID const):
        (WebKit::WebFramePolicyListenerProxy::operator new): Deleted.
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::activePolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        * UIProcess/mac/WKInspectorViewController.mm:
        * WebKit.xcodeproj/project.pbxproj:

2018-07-19  Jon Lee  <jonlee@apple.com>

        Update iOS fullscreen alert text again
        https://bugs.webkit.org/show_bug.cgi?id=187797
        rdar://problem/42373783

        Reviewed by Jer Noble.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _showPhishingAlert]):

2018-07-19  Brady Eidson  <beidson@apple.com>

        Add an SPI policy action to allow clients to explicitly ask for a new process on a navigation.
        https://bugs.webkit.org/show_bug.cgi?id=187789

        Reviewed by Andy Estes.

        At navigation policy time, when a client says "use/allow", they can now say "use/allow in a new process if possible"

        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerUseInNewProcess):
        (WKFramePolicyListenerUseInNewProcessWithPolicies):
        * UIProcess/API/C/WKFramePolicyListener.h:

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

        * UIProcess/WebFrameListenerProxy.h:
        (WebKit::WebFrameListenerProxy::setApplyPolicyInNewProcessIfPossible):
        (WebKit::WebFrameListenerProxy::applyPolicyInNewProcessIfPossible const):

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

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:

2018-07-19  Youenn Fablet  <youenn@apple.com>

        Ensure experimentalPlugInSandboxProfilesEnabled is set on PluginProcess
        https://bugs.webkit.org/show_bug.cgi?id=187729

        Reviewed by Ryosuke Niwa.

        experimentalPlugInSandboxProfilesEnabled flag is used at initialization of the plugin process sandbox.
        This flag value should be set according to the value of this flag in the UIProcess.
        We set this value in the plugin process manager.
        At launch of the plugin process, this flag will also be passed to it so that it is set properly.

        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (WebKit::PluginServiceInitializerDelegate::getExtraInitializationData):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPluginSandboxProfilesEnabledForAllPlugins):
        (WKPreferencesGetPluginSandboxProfilesEnabledForAllPlugins):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setExperimentalPlugInSandboxProfilesEnabled:]):
        (-[WKPreferences _experimentalPlugInSandboxProfilesEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/Plugins/PluginProcessManager.h:
        (WebKit::PluginProcessManager::experimentalPlugInSandboxProfilesEnabled const):
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::setExperimentalPlugInSandboxProfilesEnabled):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):

2018-07-18  Ricky Mondello  <rmondello@apple.com>

        Let clients override _WKThumbnailView's background color

        https://bugs.webkit.org/show_bug.cgi?id=187788

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKThumbnailView.h: Declare a property.
        * UIProcess/API/Cocoa/_WKThumbnailView.mm: Define an ivar.
        (-[_WKThumbnailView updateLayer]): Consult the background color.
        (-[_WKThumbnailView setOverrideBackgroundColor:]): Notably, call -updateLayer.
        (-[_WKThumbnailView overrideBackgroundColor]): Added.

2018-07-18  Jer Noble  <jer.noble@apple.com>

        CRASH at WebKit: WebKit::WebFullScreenManagerProxy::saveScrollPosition
        https://bugs.webkit.org/show_bug.cgi?id=187769
        <rdar://problem/42160666>

        Reviewed by Tim Horton.

        Null-check all uses of _page and _manager in WKFullScreenWindowControllerIOS.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (WebKit::WKWebViewState::applyTo):
        (WebKit::WKWebViewState::store):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):

2018-07-18  Chris Dumez  <cdumez@apple.com>

        WebContent crash in WebProcess::ensureNetworkProcessConnection
        https://bugs.webkit.org/show_bug.cgi?id=187791
        <rdar://problem/41995022>

        Reviewed by Ryosuke Niwa.

        If the WebProcessProxy::GetNetworkProcessConnection synchronous IPC between the WebProcess
        and the UIProcess succeeded but we received an invalid connection identifier, then try
        once more. This may indicate the network process has crashed, in which case it will be
        relaunched.

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

2018-07-18  Per Arne Vollan  <pvollan@apple.com>

        The WebContent process does not suspend when MiniBrowser is minimized.
        https://bugs.webkit.org/show_bug.cgi?id=187708

        Reviewed by Chris Dumez.

        Using the NSRunLoop runloop type prevents the WebContent process from suspending. Instead, use the new
        _WebKit runloop type. Also do not leak a boost to the WebContent process, since this also prevents the
        WebContent process from going to sleep. Calling SetApplicationIsDaemon prevents the WebContent process
        from being assigned the application process priority level. To block WindowServer connections, call
        CGSSetDenyWindowServerConnections(true) instead. Finally, App nap must be manually enabled, since the
        WebContent process is no longer a NSApplication.

        * Configurations/WebContentService.xcconfig:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::shouldLeakBoost):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateThrottleState):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeProcess):

2018-07-18  Chris Dumez  <cdumez@apple.com>

        Crash under WebKit::SuspendedPageProxy::webProcessDidClose(WebKit::WebProcessProxy&)
        https://bugs.webkit.org/show_bug.cgi?id=187780

        Reviewed by Brady Eidson.

        Protect |this| in SuspendedPageProxy::webProcessDidClose() since the call to
        WebPageProxy::suspendedPageClosed() may destroy us before the method is done
        executing.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::webProcessDidClose):

2018-07-18  Jer Noble  <jer.noble@apple.com>

        -_beginAnimatedResizeWithUpdates: can leave view in bad state if called during an existing animation
        https://bugs.webkit.org/show_bug.cgi?id=187739

        Reviewed by Tim Horton.

        It's not enough to reset _dynamicViewportUpdateMode to NotResizing; other parts of the code
        check whether _resizeAnimationView is non-nil, the contentView may be hidden, etc. Add a new
        internal method _cancelAnimatedResize that cleans up state when a call to
        _beginAnimatedResizeWithUpdates: fails.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        (-[WKWebView _cancelAnimatedResize]):
        (-[WKWebView _didCompleteAnimatedResize]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):

2018-07-18  Jer Noble  <jer.noble@apple.com>

        PiP from Element Fullscreen should match AVKit's behavior
        https://bugs.webkit.org/show_bug.cgi?id=187623

        Reviewed by Jon Lee.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        (WebKit::PlaybackSessionManagerProxy::controlsManagerContextId const):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::willEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::didEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::failedToEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::willExitPictureInPicture):
        (WebKit::VideoFullscreenModelContext::didExitPictureInPicture):
        (WebKit::VideoFullscreenModelContext::failedToExitPictureInPicture):
        (WebKit::VideoFullscreenManagerProxy::controlsManagerInterface):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (WKFullScreenViewControllerVideoFullscreenModelClient::setParent):
        (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface):
        (WKFullScreenViewControllerVideoFullscreenModelClient::interface const):
        (-[WKFullScreenViewController initWithWebView:]):
        (-[WKFullScreenViewController dealloc]):
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController ensurePiPAnimator]):
        (-[WKFullScreenViewController willEnterPictureInPicture]):
        (-[WKFullScreenViewController didEnterPictureInPicture]):
        (-[WKFullScreenViewController failedToEnterPictureInPicture]):
        (-[WKFullScreenViewController loadView]):
        (-[WKFullScreenViewController viewWillAppear:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::videoControlsManagerDidChange):
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (WebKit::WKFullScreenWindowControllerVideoFullscreenModelClient::setParent):
        (WebKit::WKFullScreenWindowControllerVideoFullscreenModelClient::setInterface):
        (WebKit::WKFullScreenWindowControllerVideoFullscreenModelClient::interface const):
        (-[WKFullScreenWindowController initWithWindow:webView:page:]):
        (-[WKFullScreenWindowController dealloc]):
        (-[WKFullScreenWindowController videoControlsManagerDidChange]):
        (-[WKFullScreenWindowController willEnterPictureInPicture]):

2018-07-18  Jer Noble  <jer.noble@apple.com>

        Dissociate the VideoFullscreenInterface from its VideoFullscreenModel before removing it from the manager
        https://bugs.webkit.org/show_bug.cgi?id=187775
        <rdar://problem/42343229>

        Reviewed by Jon Lee.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::didCleanupFullscreen):

2018-07-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add SPI to defer running async script until after document load
        https://bugs.webkit.org/show_bug.cgi?id=187748
        <rdar://problem/42317378>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Add plumbing for a new ShouldDeferAsynchronousScriptsUntilAfterDocumentLoad configuration that determines
        whether async script execution should be deferred until document load (i.e. DOMContentLoaded). This
        configuration defaults to NO on all platforms. See WebCore ChangeLog for more detail.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _shouldDeferAsynchronousScriptsUntilAfterDocumentLoad]):
        (-[WKWebViewConfiguration _setShouldDeferAsynchronousScriptsUntilAfterDocumentLoad:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2018-07-18  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Start tracking Nicosia layers in CoordinatedGraphicsState
        https://bugs.webkit.org/show_bug.cgi?id=187751

        Reviewed by Carlos Garcia Campos.

        Start including the Nicosia::CompositionLayer objects in the
        CoordinatedGraphicsState struct, under a separate NicosiaState struct.
        References to all the layers in a given scene are kept in a HashSet,
        and a separate reference to the root layer kept in a separate member
        variable.

        CompositingCoordinator now takes care of adding or removing the
        Nicosia::CompositionLayer objects to the NicosiaState's HashSet, as well
        as setting the root layer object when it's being initialized. Additions
        and removals of Nicosia::CompositionLayer correspond to the additions
        and removals of CoordinatedGraphicsLayer objects to the coordinator's
        m_registeredLayers HashMap.

        Upon each state commit that's done in CoordinatedGraphicsScene, the
        NicosiaState object will be copied into the member variable. Nothing is
        done yet with that state object, but in the near future it will be used
        to finally commit all the state details into the TextureMapper layers.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::commitSceneState):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::initializeRootCompositingLayerIfNeeded):
        (WebKit::CompositingCoordinator::createGraphicsLayer):
        (WebKit::CompositingCoordinator::detachLayer):
        (WebKit::CompositingCoordinator::attachLayer):

2018-07-17  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (iOS 12): Can't scroll to the bottom of the page in WKWebView while keyboard is up on pages with viewport-fit=cover
        https://bugs.webkit.org/show_bug.cgi?id=187743
        <rdar://problem/41651546>

        Reviewed by Simon Fraser.

        UIScrollView's _systemContentInset no longer includes keyboard insets
        in apps linked on iOS 12+ when contentInsetAdjustmentBehavior is None.

        We use contentInsetAdjustmentBehavior to control adjustment of other
        sources of insets, but expect the keyboard inset to always be applied.

        For now, barring a more comprehensive way to separate insets, re-add
        the keyboard inset in cases where UIKit does not.

        * Platform/spi/ios/UIKitSPI.h:
        Move some IPI to the SPI header.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _haveSetObscuredInsets]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Make it possible for WKScrollView to check whether the client is overriding insets.

        * UIProcess/Cocoa/VersionChecks.h:
        Add a linkedOnOrAfter() version for this new UIScrollView behavior.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView initWithFrame:]):
        Force WKScrollView's scroll indicator to always respect insets. We always
        want the scroll bars in a sensible place, even if the page sets
        viewport-fit=cover.

        (-[WKScrollView _adjustForAutomaticKeyboardInfo:animated:lastAdjustment:]):
        Store the bottom inset due to the keyboard.

        (-[WKScrollView _systemContentInset]):
        Add the bottom inset due to the keyboard to the systemContentInset 
        in all cases where UIKit does not. Also avoid adding it if the client takes
        full control of the insets, because the only client that does (MobileSafari)
        includes insets-due-to-keyboard in their custom insets.

2018-07-17  Chris Dumez  <cdumez@apple.com>

        RELEASE_ASSERT() under IPC::Connection::sendSync() from PluginProxy::supportsSnapshotting()
        https://bugs.webkit.org/show_bug.cgi?id=187740
        <rdar://problem/41818955>

        Reviewed by Youenn Fablet.

        As per the crash trace, PluginProxy::supportsSnapshotting() can be called during layout but does synchronous
        IPC. As a result, we need to prevent WebCore re-entrancy by using DoNotProcessIncomingMessagesWhenWaitingForSyncReply
        sendOption.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::supportsSnapshotting const):

2018-07-17  Chris Dumez  <cdumez@apple.com>

        Turn on PSON in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=186542

        Reviewed by Brady Eidson.

        Fix leaking of pre-warmed WebContent processes which became obvious when turning
        on process-swap-on-navigation by default in WebKitTestRunner. The issue was that
        the WebProcessPool holds a strong reference to its WebProcessProxy objects via
        m_processes data members. In turn, WebProcessProxy objects hold a strong reference
        to their WebProcessPool via their m_processPool data member. This reference cycle
        normally gets broken by calling WebProcessProxy::shutDown() which removes the
        WebProcessProxy objects from its WebProcessPool's m_processes container.
        WebProcessProxy::shutDown() normally gets called when a WebProcessProxy no longer
        has any WebPageProxy objects. However, in the case of unused pre-warmed
        WebProcessProxy objects, those never get any page and therefore we'd never break
        the reference cycle. To address the issue, pre-warmed WebProcessProxy objects
        now only hold a Weak reference to their process pool, only regular WebProcessProxy
        objects hold a strong reference to their pool.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::getLaunchOptions):
        (WebKit::WebProcessProxy::markIsNoLongerInPrewarmedPool):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::processPool):
        (WebKit::WebProcessProxy::WeakOrStrongPtr::WeakOrStrongPtr):
        (WebKit::WebProcessProxy::WeakOrStrongPtr::setIsWeak):
        (WebKit::WebProcessProxy::WeakOrStrongPtr::get const):
        (WebKit::WebProcessProxy::WeakOrStrongPtr::operator-> const):
        (WebKit::WebProcessProxy::WeakOrStrongPtr::operator* const):
        (WebKit::WebProcessProxy::WeakOrStrongPtr::operator bool const):
        (WebKit::WebProcessProxy::WeakOrStrongPtr::updateStrongReference):

2018-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add an SPI hook to allow clients to yield document parsing and script execution
        https://bugs.webkit.org/show_bug.cgi?id=187682
        <rdar://problem/42207453>

        Reviewed by Ryosuke Niwa.

        Add hooks to WKDOMDocument to create and return an internal WKDOMDocumentParserYieldToken object, whose lifetime
        is tied to a document parser yield token. See WebCore ChangeLog for more detail.

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        (-[WKDOMDocumentParserYieldToken initWithDocument:]):
        (-[WKDOMDocument parserYieldToken]):

2018-07-17  John Wilander  <wilander@apple.com>

        Add completion handlers to TestRunner functions setStatisticsLastSeen(), setStatisticsPrevalentResource(), setStatisticsVeryPrevalentResource(), setStatisticsHasHadUserInteraction(), and setStatisticsHasHadNonRecentUserInteraction()
        https://bugs.webkit.org/show_bug.cgi?id=187710
        <rdar://problem/42252757>

        Reviewed by Chris Dumez.

        These changes are to back the completion handler functionality of
        TestRunner functions:
        - setStatisticsLastSeen(),
        - setStatisticsPrevalentResource(),
        - setStatisticsVeryPrevalentResource(),
        - setStatisticsHasHadUserInteraction(), and
        - setStatisticsHasHadNonRecentUserInteraction().

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsLastSeen):
        (WKWebsiteDataStoreSetStatisticsPrevalentResource):
        (WKWebsiteDataStoreSetStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreSetStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreSetStatisticsHasHadNonRecentUserInteraction):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::logNonRecentUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::clearPrevalentResource):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-07-16  Simon Fraser  <simon.fraser@apple.com>

        Add color filter for transforming colors in Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=187717

        Reviewed by Dean Jackson.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FilterOperation>::encode):
        (IPC::decodeFilterOperation):

2018-07-16  Tim Horton  <timothy_horton@apple.com>

        Black flash in content area when returning to Mail
        https://bugs.webkit.org/show_bug.cgi?id=187719
        <rdar://problem/42165340>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidFinishSnapshottingAfterEnteringBackground):
        This still reproduces sometimes even after r233723, because:

        If a pending commit arrives after ApplicationDidEnterBackground (when we
        ask the web content process to freeze the layer tree), and after
        ApplicationDidFinishSnapshottingAfterEnteringBackground (when we hide
        WKContentView), but before the process sleeps, it will cause WKContentView
        to be unhidden (potentially including layers with empty surfaces as contents).
        Nothing will re-hide WKContentView. Instead, we should wait for the next
        *pending* commit, which will necessarily not come until after the application
        returns to the foreground because of the strict IPC ordering between
        the message that freezes the layer tree and the "next commit" mechanism.

2018-07-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] When bringing MobileSafari to the foreground, images, which are pending decoding, won't be drawn into the immediate-paint transaction
        https://bugs.webkit.org/show_bug.cgi?id=187375

        Reviewed by Simon Fraser.

        For immediate-paint transaction, we should force all the images which are 
        pending decoding to be repainted before building this transaction.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::updateControlTints):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2018-07-11  Dean Jackson  <dino@apple.com>

        Allow removal of white backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=187574
        <rdar://problem/41146792>

        Reviewed by Simon Fraser.

        Add a new WebPreference for punching out white backgrounds.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPunchOutWhiteBackgroundsInDarkMode):
        (WKPreferencesGetPunchOutWhiteBackgroundsInDarkMode):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _punchOutWhiteBackgroundsInDarkMode]):
        (-[WKWebViewConfiguration _setPunchOutWhiteBackgroundsInDarkMode:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2018-07-16  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist][macOS] Add suggestions UI for TextFieldInputTypes
        https://bugs.webkit.org/show_bug.cgi?id=186531

        Reviewed by Tim Horton.

        Created WebDataListSuggestionsDropdownMac as a wrapper around the suggestions
        view. The suggestions for TextFieldInputTypes are displayed using an NSTableView
        in it's own child window. This is done so that suggestions can be presented
        outside of the page if the parent window's size is too small. The maximum number
        of suggestions that are visible at one time is 6, with additional suggestions made
        available by scrolling.

        Suggestions in the view can be selected via click or by using arrow keys. If the
        input element associated with the suggestions is blurred, or the page is moved in
        any way, the suggestions view is hidden.

        Added IPC messages to the UIProcess to enable the display of the suggestions view.
        This required a new ArgumentCoder for DataListSuggestionInformation.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DataListSuggestionInformation>::encode):
        (IPC::ArgumentCoder<DataListSuggestionInformation>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebDataListSuggestionsDropdown.cpp: Copied from Source/WebKit/WebProcess/WebCoreSupport/WebDataListSuggestionPicker.h.
        (WebKit::WebDataListSuggestionsDropdown::WebDataListSuggestionsDropdown):
        (WebKit::WebDataListSuggestionsDropdown::~WebDataListSuggestionsDropdown):
        (WebKit::WebDataListSuggestionsDropdown::close):
        * UIProcess/WebDataListSuggestionsDropdown.h: Copied from Source/WebKit/WebProcess/WebCoreSupport/WebDataListSuggestionPicker.h.
        (WebKit::WebDataListSuggestionsDropdown::Client::~Client):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewWillStartLiveResize):
        (WebKit::WebPageProxy::viewDidLeaveWindow):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::setPageZoomFactor):
        (WebKit::WebPageProxy::setPageAndTextZoomFactors):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::pageDidScroll):
        (WebKit::WebPageProxy::showDataListSuggestions):
        (WebKit::WebPageProxy::handleKeydownInDataList):
        (WebKit::WebPageProxy::endDataListSuggestions):
        (WebKit::WebPageProxy::didCloseSuggestions):
        (WebKit::WebPageProxy::didSelectOption):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::closeOverlayedViews):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createDataListSuggestionsDropdown):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::createDataListSuggestionsDropdown):
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.h: Copied from Source/WebKit/WebProcess/WebCoreSupport/WebDataListSuggestionPicker.h.
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm: Added.
        (WebKit::WebDataListSuggestionsDropdownMac::create):
        (WebKit::WebDataListSuggestionsDropdownMac::~WebDataListSuggestionsDropdownMac):
        (WebKit::WebDataListSuggestionsDropdownMac::WebDataListSuggestionsDropdownMac):
        (WebKit::WebDataListSuggestionsDropdownMac::show):
        (WebKit::WebDataListSuggestionsDropdownMac::didSelectOption):
        (WebKit::WebDataListSuggestionsDropdownMac::selectOption):
        (WebKit::WebDataListSuggestionsDropdownMac::handleKeydownWithIdentifier):
        (WebKit::WebDataListSuggestionsDropdownMac::close):
        (-[WKDataListSuggestionCell initWithFrame:]):
        (-[WKDataListSuggestionCell setText:]):
        (-[WKDataListSuggestionCell setActive:]):
        (-[WKDataListSuggestionCell drawRect:]):
        (-[WKDataListSuggestionCell mouseEntered:]):
        (-[WKDataListSuggestionCell mouseExited:]):
        (-[WKDataListSuggestionCell acceptsFirstResponder]):
        (-[WKDataListSuggestionTable initWithElementRect:]):
        (-[WKDataListSuggestionTable setVisibleRect:]):
        (-[WKDataListSuggestionTable currentActiveRow]):
        (-[WKDataListSuggestionTable setActiveRow:]):
        (-[WKDataListSuggestionTable reload]):
        (-[WKDataListSuggestionTable acceptsFirstResponder]):
        (-[WKDataListSuggestionTable enclosingScrollView]):
        (-[WKDataListSuggestionTable removeFromSuperviewWithoutNeedingDisplay]):
        (-[WKDataListSuggestionsView initWithInformation:inView:]):
        (-[WKDataListSuggestionsView currentSelectedString]):
        (-[WKDataListSuggestionsView updateWithInformation:]):
        (-[WKDataListSuggestionsView moveSelectionByDirection:]):
        (-[WKDataListSuggestionsView invalidate]):
        (-[WKDataListSuggestionsView dropdownRectForElementRect:]):
        (-[WKDataListSuggestionsView showSuggestionsDropdown:]):
        (-[WKDataListSuggestionsView selectedRow:]):
        (-[WKDataListSuggestionsView numberOfRowsInTableView:]):
        (-[WKDataListSuggestionsView tableView:heightOfRow:]):
        (-[WKDataListSuggestionsView tableView:viewForTableColumn:row:]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebDataListSuggestionPicker.cpp:
        (WebKit::WebDataListSuggestionPicker::handleKeydownWithIdentifier):
        (WebKit::WebDataListSuggestionPicker::didSelectOption):
        (WebKit::WebDataListSuggestionPicker::didCloseSuggestions):
        (WebKit::WebDataListSuggestionPicker::close):
        (WebKit::WebDataListSuggestionPicker::displayWithActivationType):
        * WebProcess/WebCoreSupport/WebDataListSuggestionPicker.h:

2018-07-16  Jeremy Jones  <jeremyj@apple.com>

        Fullscreen requires active document.
        https://bugs.webkit.org/show_bug.cgi?id=186226
        rdar://problem/36187413

        Reviewed by Jer Noble.

        This change guarantees the document to be visible for both element fullscreen and video fullscreen.

        User gesture is not enough to guarantee that the document is visible when fullscreen is initiated
        because JavaScript can spin wait before initiating fullscreen. During that spin the page or window might
        be hidden.

        Document::hidden() can't be relied upon because it won't update while JavaScript spins.

        This change adds a sync call to the UI process to get the current UI visibility state.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getIsViewVisible):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::isViewVisible):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2018-07-16  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r233502): Camera in <input type=file> becomes unresponsive after attempting to dismiss it
        https://bugs.webkit.org/show_bug.cgi?id=187706
        <rdar://problem/42137088>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        Remove an unused member.

        (-[WKFileUploadPanel _dismissDisplayAnimated:]):
        Allow us to dismiss the camera view controller in addition to the menu.

2018-07-16  Alex Christensen  <achristensen@webkit.org>

        Reduce size of NetworkLoadMetrics and therefore ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=187671

        Reviewed by Darin Adler.

        * Shared/WebCoreArgumentCoders.h:

2018-07-16  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: closeAndDeleteDatabasesForOrigins should remove all databases for those origins
        https://bugs.webkit.org/show_bug.cgi?id=187631
        <rdar://problem/42164227>

        Reviewed by Brady Eidson.

        We need to return all origins, both openingOrigin and mainFrameOrigin, of IndexedDB so users
        could be better aware of which origins are using databases and decide what they want to 
        remove.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::indexedDatabaseOrigins):
        * StorageProcess/StorageProcess.h:

2018-07-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] http/tests/misc/bubble-drag-events.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=182352

        Reviewed by Youenn Fablet.

        PingLoad is not refcounted and deletes itself when the load finishes. The problem is that the network data
        task can also finish the load, causing the PingLoad to be deleted early. We tried to fix it in r233032 in the
        network data task soup implementation, but it caused regressions.

        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::didReceiveChallenge): Create a weak ref for the ping load before calling the operation completion
        handler and return early after the completion handler if it was deleted.
        (WebKit::PingLoad::didReceiveResponseNetworkSession): Ditto.
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::continueAuthenticate): Revert r233032.

2018-07-13  Timothy Hatcher  <timothy@apple.com>

        Add _drawsBackground to WKWebViewConfiguration.
        https://bugs.webkit.org/show_bug.cgi?id=187665
        rdar://problem/42182268

        Reviewed by Tim Horton.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const): Copy m_drawsBackground, and some missing values.
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::drawsBackground const): Added.
        (API::PageConfiguration::setDrawsBackground): Added.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Transfer _drawsBackground to page config.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Set _drawsBackground to YES.
        (-[WKWebViewConfiguration encodeWithCoder:]): Encode _drawsBackground.
        (-[WKWebViewConfiguration initWithCoder:]): Decode _drawsBackground.
        (-[WKWebViewConfiguration copyWithZone:]): Copy _drawsBackground.
        (-[WKWebViewConfiguration _drawsBackground]): Added.
        (-[WKWebViewConfiguration _setDrawsBackground:]): Added.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp: Set m_drawsBackground based on configuration.

2018-07-13  Tim Horton  <timothy_horton@apple.com>

        WebKit sometimes holds WiFi/BT assertions while the Networking process is suspended
        https://bugs.webkit.org/show_bug.cgi?id=187662
        <rdar://problem/41999448>

        Reviewed by Chris Dumez.

        Inform WiFiAssertions when the Networking process is first going into the background,
        so it has a chance of dropping its assertions even in cases where the system
        suspends the process before we receive prepareToSuspend.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::processDidTransitionToForeground):
        (WebKit::NetworkProcess::processDidTransitionToBackground):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendProcessDidTransitionToForeground):
        (WebKit::NetworkProcessProxy::sendProcessDidTransitionToBackground):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::updateProcessAssertions):
        Plumb the foreground/background transition to NetworkProcess.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformPrepareToSuspend):
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
        Make use of SuspensionReason to explain to WiFiAssertions the
        difference between prepareToSuspend and didTransitionToBackground,
        so that it can adjust the timing of dropping the assertion.

2018-07-13  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r231676): watchOS WebKit usually doesn't load in the background
        https://bugs.webkit.org/show_bug.cgi?id=187663
        <rdar://problem/42181185>

        Reviewed by Chris Dumez.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground):
        "Screen lock" is very aggressive on watchOS; we want to do our usual
        30 seconds of loading in the background when you drop your wrist,
        so disable this power optimization on that platform.

2018-07-13  Chris Dumez  <cdumez@apple.com>

        WebResourceLoader may try to send a IPC with a destination ID that is 0
        https://bugs.webkit.org/show_bug.cgi?id=187654
        <rdar://problem/39265927>

        Reviewed by Brady Eidson.

        WebResourceLoader may try to send a IPC with a destination ID that is 0 according to release
        assertion hits we see in the wild. This can lead to HashMap corruption on recipient side when
        trying to lookup a key that is 0.

        As per the crash traces, we see it starts from WebLoaderStrategy::internallyFailedLoadTimerFired()
        which is likely due to the Network process crashing. WebLoaderStrategy::networkProcessCrashed()
        calls scheduleInternallyFailedLoad() on each ResourceLoader and clears the WebResourceLoaders in
        m_webResourceLoaders. When a ResourceLoader is cancelled (marked as failed), we clear its identifier
        and we normally null out the WebLoaderStrategy's coreLoader. However, if we cannot find the
        WebResourceLoader in m_webResourceLoaders (because that map was already cleared) then the
        WebResourceLoader's coreLoader may not get nulled out, even if the coreLoader's identifier has
        been reset. We have 2 lambdas in WebResourceLoader which keep the WebResourceLoader alive and
        try to send IPC and are merely doing a null check on the coreLoader before trying to send the
        IPC.

        To address the issue, we now clear the WebResourceLoader's coreLoader in
        WebLoaderStrategy::networkProcessCrashed(). For robustness, we also check that a coreLoader's
        identifier is not 0 before trying to send IPC.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::networkProcessCrashed):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):

2018-07-13  Zach Li  <zachli@apple.com>

        Allow BOCOM and ABC plug-ins to run unsandboxed
        https://bugs.webkit.org/show_bug.cgi?id=187652
        rdar://problem/42149182

        Reviewed by Youenn Fablet.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldAllowPluginToRunUnsandboxed):

2018-07-13  Chris Dumez  <cdumez@apple.com>

        Add more threading release assertions
        https://bugs.webkit.org/show_bug.cgi?id=187647

        Reviewed by Alex Christensen.

        Add more threading release assertions to help debug <rdar://problem/39265927>.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::m_isInPrewarmedPool):
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::didFinishLaunching):

2018-07-13  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] Add windows storage process connection implementation
        https://bugs.webkit.org/show_bug.cgi?id=187531

        Reviewed by Fujii Hironori.

        * NetworkProcess/NetworkProcess.cpp:
        * Platform/IPC/Attachment.h:
        * StorageProcess/StorageProcess.cpp:
        * UIProcess/Storage/StorageProcessProxy.cpp:

2018-07-13  Dan Bernstein  <mitz@apple.com>

        [macOS] REGRESSION (r233536): Development WebContent service got opted back into Library Validation
        https://bugs.webkit.org/show_bug.cgi?id=187640

        Reviewed by Daniel Bates.

        * Scripts/process-webcontent-entitlements.sh: Add the
          com.apple.security.cs.disable-library-validation to the Development service regardless of
          whether restricted entitlements are to be used, because that entitlement is not restricted.

2018-07-13  Chris Dumez  <cdumez@apple.com>

        NetworkConnectionToWebProcess::m_networkResourceLoaders should use Ref<> for its values
        https://bugs.webkit.org/show_bug.cgi?id=187629

        Reviewed by Youenn Fablet.

        NetworkConnectionToWebProcess::m_networkResourceLoaders should use Ref<> for its values
        since they cannot be null.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:

2018-07-12  Alex Christensen  <achristensen@webkit.org>

        Reduce size of WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=186820

        Reviewed by Yusuke Suzuki and Youenn Fablet.

        * NetworkProcess/cache/NetworkCacheStorage.h:
        Increment cache version because of URL encoding change.

2018-07-12  Chris Dumez  <cdumez@apple.com>

        [Cocoa] Make sure NetworkProcess::createNetworkConnectionToWebProcess() returns a valid mach port
        https://bugs.webkit.org/show_bug.cgi?id=187625

        Reviewed by Youenn Fablet.

        Make sure NetworkProcess::createNetworkConnectionToWebProcess() returns a valid mach port to help
        debug <rdar://problem/41995022>.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didCreateNetworkConnectionToWebProcess):

2018-07-12  Chris Dumez  <cdumez@apple.com>

        PingLoad does not need to ref the NetworkConnectionToWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=187624

        Reviewed by Youenn Fablet.

        PingLoad does not need to ref the NetworkConnectionToWebProcess and keep it alive longer than it needs to be.
        Instead, ref the IPC::Connection which is lighter weight and gets invalidated when the NetworkConnectionToWebProcess
        is destroyed.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::didFinishPingLoad): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:

2018-07-12  Brady Eidson  <beidson@apple.com>

        Make process-swap-on-navigation an experimental feature.
        <rdar://problem/41995053> and https://bugs.webkit.org/show_bug.cgi?id=187558

        Reviewed by Chris Dumez.

        * Shared/WebPreferences.yaml:
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetProcessSwapOnNavigationEnabled):
        (WKPreferencesGetProcessSwapOnNavigationEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateBoolValueForExperimentalFeatureKey):
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage): If the new web page has PSON enabled via WebPreferences,
          absorb that setting into this process pool's configuration.

2018-07-12  Chris Dumez  <cdumez@apple.com>

        Simplify code in NetworkConnectionToWebProcess::didReceiveMessage()
        https://bugs.webkit.org/show_bug.cgi?id=187621

        Reviewed by Youenn Fablet.

        Simplify code in NetworkConnectionToWebProcess::didReceiveMessage() by not using HashMap iterators and
        calling get() directly.

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

2018-07-12  Chris Dumez  <cdumez@apple.com>

        Make sure WebProcess::ensureNetworkProcessConnection() is always called on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=187607

        Reviewed by Alex Christensen.

        Add release assertion to make sure that ensureNetworkProcessConnection() is always called on the main
        thread. Calling it on a background thread would not be safe. It would not be safe because:
        1. We check if we have a network process connection and then create one if we don't without any locking.
        2. It is not safe to construct or use a NetworkProcessConnection object from a non-main thread

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

2018-07-12  Chris Dumez  <cdumez@apple.com>

        Assert that the IPC::Connection is valid in Connection::dispatchMessage(Decoder&)
        https://bugs.webkit.org/show_bug.cgi?id=187617

        Reviewed by Youenn Fablet.

        Assert that the IPC::Connection is valid in Connection::dispatchMessage(Decoder&) as
        m_client would be stale otherwise.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchMessage):

2018-07-12  Youenn Fablet  <youenn@apple.com>

        Add a FrameLoaderClient willInjectUserScriptForFrame callback
        https://bugs.webkit.org/show_bug.cgi?id=187565

        Reviewed by Alex Christensen.

        Introduce a new WKBundlePageLoaderClient callback that is called everytime a user script is injected.
        Implement WebFrameLoaderClient::willInjectUserScript by calling this new callback.

        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::willInjectUserScriptForFrame):
        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (setUpPageLoaderClient):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::globalObjectIsAvailableForFrame):
        (WebKit::InjectedBundlePageLoaderClient::willInjectUserScriptForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::willInjectUserScript):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2018-07-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] When bringing MobileSafari to the foreground, images are drawn asynchronously after removing a snapshot that included them
        https://bugs.webkit.org/show_bug.cgi?id=187374
        <rdar://problem/41249545>

        Reviewed by Tim Horton.

        UIProcess should block committing all the layer tree transactions for 
        immediate update until it receives a one whose activityStateChangeID is
        greater than or equal to the one it sends with SetActivityState message.

        * Scripts/webkit/messages.py:
        Fix the messages code generator to include DrawingAreaInfo.h for the WebKit
        typedef ActivityStateChangeID.

        * Shared/DrawingAreaInfo.h:
        Define ActivityStateChangeID to be uint64_t. Add a definition for the case
        when the UIProcess won't be blocked for a reply back from the WebProcess.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::activityStateChangeID const):
        (WebKit::RemoteLayerTreeTransaction::setActivityStateChangeID):
        Add a member for activityStateChangeID in the LayerTreeTransaction.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode const):
        (WebKit::RemoteLayerTreeTransaction::decode):
        Make LayerTreeTransaction know how to encode and decode activityStateChangeID.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::waitForDidUpdateActivityState):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
        Make the DrawingArea in the UIProcess wait the layer tree with a certain
        activityStateChangeID.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::waitForDidUpdateActivityState):
        If m_activityStateChangeWantsSynchronousReply is true, generate a new 
        activityStateChangeID and send it in the SetActivityState message.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::takeNextActivityStateChangeID):
        A simple way to generate a new activityStateChangeID.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState):
        Fix the UIProcess functions' prototype for Mac.

        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::activityStateDidChange):
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        Fix the UIProcess functions' prototype for GTK.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::activityStateDidChange):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        Replace wantsDidUpdateActivityState with activityStateChangeID. Treat
        activityStateChangeID == ActivityStateChangeAsynchronous as if 
        wantsDidUpdateActivityState == false.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Make the WebPrcess pass the activityStateChangeID which it receives from
        the SetActivityState message to the LayerTreeTransaction.

        (WebKit::RemoteLayerTreeDrawingArea::activityStateDidChange):
        When receiving the SetActivityState, treat activityStateChangeID !=
        ActivityStateChangeAsynchronous as if wantsDidUpdateActivityState == true.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::setActivityState):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Replace the boolean wantsDidUpdateActivityState with activityStateChangeID
        in the SetActivityState message.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::activityStateDidChange):
        (WebKit::TiledCoreAnimationDrawingArea::didUpdateActivityStateTimerFired):
        Fix the WebProcess functions' prototype for Mac.

2018-07-12  Antti Koivisto  <antti@apple.com>

        REGRESSION (r232356): After zooming a page in and out, it's possible to temporarily have missing tiles (google.com, apple.com)
        https://bugs.webkit.org/show_bug.cgi?id=187553
        <rdar://problem/41863803>

        Reviewed by Simon Fraser.

        We ignore zoom scale from UI process if it doesn't match the last remote layer tree transaction. However nothing
        guarantees that we receive the real scale again until user interacts with the page. This means the web process
        scale and the UI process scale can be wildly out of sync.

        This problem becomes more likely to be visible when
        - we are under memory pressure so we don't update tiles during zooming and rely on the one final update afterwards
        - the page generates lots of layer tree transactions

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

        Remember the last transaction where we actually changed the page scale.

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

        Only reject the UI process scale if there has been a scale changing transaction meanwhile.
        The transaction id test was added in r218149 and the problem it fixed remains fixed. This change also matches better
        what it was purpoted to implement.

2018-07-12  Megan Gardner  <megan_gardner@apple.com>

        Keep Selections within Shadow DOM boundaries
        https://bugs.webkit.org/show_bug.cgi?id=187556
        <rdar://problem/41664567>

        Reviewed by Ryosuke Niwa.

        Update rangeForPosition to take into account both editing and shadow DOM boundries.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::rangeForPoint):
        (WebKit::WebPage::updateSelectionWithTouches):
        (WebKit::rangeForPosition): Deleted.
        
2018-07-12  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r230163): Videos cannot be seen full screen in Complete Anatomy app
        https://bugs.webkit.org/show_bug.cgi?id=187527
        <rdar://problem/40511527>

        Reviewed by Ryosuke Niwa.

        Do not enable element fullscreen mode unless apps specifically opt-in. The Fullscreen API is
        an experimental feature on iOS, but not on Mac, but we can't simply not return the ExperimentalFeature
        object from the list of experimental features, as this keeps Safari from being able to apply a
        NSUserDefault value for that feature. Instead, add a property to API::ExperimentalFeature and
        _WKExperimentalFeature called "hidden", which signals to clients whether to display the feature
        in their UI.

        * Scripts/GeneratePreferences.rb:
        * Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb:
        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/APIExperimentalFeature.cpp:
        (API::ExperimentalFeature::create):
        (API::ExperimentalFeature::ExperimentalFeature):
        * UIProcess/API/APIExperimentalFeature.h:
        * UIProcess/API/Cocoa/_WKExperimentalFeature.h:
        * UIProcess/API/Cocoa/_WKExperimentalFeature.mm:
        (-[_WKExperimentalFeature isHidden]):

2018-07-12  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Run Unlock Keychain more reliably
        https://bugs.webkit.org/show_bug.cgi?id=187604

        Reviewed by Dan Bernstein.

        Move unlocking to a separate target, and make it a dependency for all targets that
        produce binaries.
        
        This is more than strictly required to fix the build, but this way, we won't need
        to remember about keychain when project structure changes. Another consideration that
        wasn't initially apparent to me is that is should be possible to build any target,
        not just "All", so projects aren't necessarily built in the same order even now.

        * WebKit.xcodeproj/project.pbxproj: 

2018-07-12  Per Arne Vollan  <pvollan@apple.com>

        Add compile guard for enabling NSRunLoop in the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=187563

        Reviewed by Chris Dumez.

        Also, replace __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 with ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING) where appropriate.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalHostingProcess):
        * Shared/ChildProcess.h:
        * Shared/mac/ChildProcessMac.mm:
        * Shared/mac/HangDetectionDisablerMac.mm:
        (WebKit::setClientsMayIgnoreEvents):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::shouldLeakBoost):
        * UIProcess/WebProcessPool.h:
        * WebProcess/Plugins/PDF/PDFLayerControllerSPI.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::stopRunLoop):

2018-07-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Pass the backend library name as command line parameter to the web process
        https://bugs.webkit.org/show_bug.cgi?id=186841

        Reviewed by Žan Doberšek.

        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess): Add --backend-library parameter when launching the web process.
        * WebProcess/wpe/WebProcessMainWPE.cpp: Call wpe_loader_init() with the library passed as --backend-library parameter.

2018-07-11  Jon Lee  <jonlee@apple.com>

        Update iOS fullscreen alert text
        https://bugs.webkit.org/show_bug.cgi?id=187576
        rdar://problem/42052284

        Reviewed by Ryosuke Niwa.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _showPhishingAlert]): Update text and string keys.

2018-07-11  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (231276): Attempting to copy an image fails
        https://bugs.webkit.org/show_bug.cgi?id=187212
        <rdar://problem/41540074>

        Reviewed by Ryosuke Niwa.

        r210683 introduced logic to prevent file URLs from being copied to the clipboard
        in unexpected cases. In order to achieve this functionality,
        checkURLReceivedFromWebProcess was called on all items in the pathnames array
        passed into WebPasteboardProxy::setPasteboardPathnamesForType. However, this
        method is a misnomer, as the pathnames array always contains exactly one URL and
        one title for the URL.

        Renamed methods to make it clear that one URL and one title are being passed in
        and updated logic to ensure that checkURLReceivedFromWebProcess is only called
        on the URL and not the title.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<PasteboardURL>::encode):
        (IPC::ArgumentCoder<PasteboardURL>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::setPasteboardURL):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setURL):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-07-11  Alex Christensen  <achristensen@webkit.org>

        Add SPI for immediate injection of user scripts
        https://bugs.webkit.org/show_bug.cgi?id=173342
        <rdar://problem/29202285>

        Reviewed by Brady Eidson, Youenn Fablet, and Geoff Garen.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserScript):
        * UIProcess/API/C/WKUserContentControllerRef.cpp:
        (WKUserContentControllerAddUserScript):
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController addUserScript:]):
        (-[WKUserContentController _addUserScriptImmediately:]):
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addUserScript):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserScripts):
        (WebKit::WebUserContentController::addUserScriptInternal):
        If we are to inject the script internally, inject it into the appropriate pages.
        If we're injecting into the top frame only, there's no need to traverse the frame tree.
        (WebKit::WebUserContentController::addUserScript):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_cpuLimit):

2018-07-11  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Address a possible cause of missing tiles
        https://bugs.webkit.org/show_bug.cgi?id=187570
        rdar://problem/40941118

        Reviewed by Tim Horton.
        
        If the web process crashes, it's possible for the user to trigger a scroll before
        the process is re-launched. The pre-commit handler will bail early on the _isValid
        check without clearing _hasScheduledVisibleRectUpdate, so that remains YES and we
        get stuck doing no more visible content rect updates.
        
        Fix by adding -[WKWebView _didRelaunchProcess] (WKContentView got this already), and
        in that clear state that could have been set in the UI process while the web process
        connection was invalid.
        
        Also add more release logging around process termination, crash and relaunch.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        (-[WKWebView _didRelaunchProcess]):
        (-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]):
        (-[WKWebView _updateVisibleContentRects]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::processDidTerminate):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didRelaunchProcess):

2018-07-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Release logging dumps "Cleaning up dragging state…" every time gesture recognizers are reset in WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=187562

        Reviewed by Tim Horton.

        Tweaks up a release logging statement, such that it only logs when performing a drag or drop.

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

2018-07-11  Commit Queue  <commit-queue@webkit.org>

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

        "WKTR vs exp features, booooooo" (Requested by bradee-oh on
        #webkit).

        Reverted changeset:

        "Make process-swap-on-navigation an experimental feature."
        https://bugs.webkit.org/show_bug.cgi?id=187558
        https://trac.webkit.org/changeset/233741

2018-07-11  Brady Eidson  <beidson@apple.com>

        Make process-swap-on-navigation an experimental feature.
        <rdar://problem/41995053> and https://bugs.webkit.org/show_bug.cgi?id=187558

        Reviewed by Geoff Garen.

        * Shared/WebPreferences.yaml:

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

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage): If the new web page has PSON enabled via WebPreferences,
          absorb that setting into this process pool's configuration.

2018-07-11  Jer Noble  <jer.noble@apple.com>

        Disable all network caching for HLS streams.
        https://bugs.webkit.org/show_bug.cgi?id=187544
        <rdar://problem/41863600>

        Reviewed by Chris Dumez.

        Revert the behavior added in r215263 where Media responses are cached if they are from
        a resource whose expected content length is <4MB.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeStoreDecision):
        (WebKit::NetworkCache::expectedTotalResourceSizeFromContentRange): Deleted.

2018-07-11  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] AC for fixed-position elements is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=187514

        Reviewed by Carlos Garcia Campos.

        Enable accelerated compositing for fixed-position elements when using
        AcceleratedDrawingArea and AC is force-enabled. This effectively enables
        this option for the WPE port which is using the AcceleratedDrawingArea
        implementation and not DrawingAreaImpl like the GTK+ port.

        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::updatePreferences):

2018-07-11  Christopher Reid  <chris.reid@sony.com>

        [Win][WebKit] Disable accelerated compositing until it is supported
        https://bugs.webkit.org/show_bug.cgi?id=187503

        Reviewed by Žan Doberšek.

        * UIProcess/win/WebView.cpp:

2018-07-10  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r233480): Mail contents flash black when activating
        https://bugs.webkit.org/show_bug.cgi?id=187504
        <rdar://problem/41752351>

        Reviewed by Simon Fraser.

        The sequence of events to reproduce the bug originally fixed in r203371
        is either:

        A) the simple background/foreground case

        1] app begins to suspend
        2] app suspension snapshots are taken
        3] WKWebView's surfaces are marked volatile
        4] app completes suspension
            ... time goes by ...
        5] WKWebView's volatile surfaces are purged
            ... time goes by ...
        6] app begins to resume, shows (good) suspension snapshot
        7] app removes suspension snapshot
        8] WKWebView has sublayers with purged (black) surfaces
        9] WKWebView sublayers are repaired by a new commit with nonvolatile surfaces

        B) the re-snapshot while in the background case

        1] app begins to suspend
        2] app suspension snapshots are taken
        3] WKWebView's surfaces are marked volatile
        4] app completes suspension
        ... time goes by ...
        5] WKWebView's volatile surfaces are purged
        ... time goes by ...
        6] app wakes up in the background to update its snapshots
        7] in the updated snapshots, WKWebView has sublayers with purged (black) surfaces
        ... time goes by ...
        8] app begins to resume, shows (bad) suspension snapshot
        9] WKWebView presents layers with purged (black) surfaces until new commit fixes them
        10] WKWebView sublayers are repaired by a new commit with nonvolatile surfaces

        WebKit's current approach to fix this problem is simply to hide the
        WKWebView's sublayers at some point after A2/B2 (suspension snapshots),
        but before A8/B7 (the first time the empty layers would be presented
        or snapshotted).

        Previously, we did this by hiding the layers when the window's CAContext
        was created, which happened early enough in both cases (at A6/B6).
        However, that notification was removed underneath us at some point.

        However, in looking at the timelines, there's a better place to do this:
        immediately after marking the surfaces volatile (A3/B3), which is always
        strictly after the app suspension snapshots are taken, and also always
        before the freshly-made-volatile layers could be presented or snapshotted.

        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        (WebKit::ApplicationStateTracker::~ApplicationStateTracker):
        (WebKit::ApplicationStateTracker::applicationDidCreateWindowContext): Deleted.
        * UIProcess/ios/WKApplicationStateTrackingView.h:
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView didMoveToWindow]):
        (-[WKApplicationStateTrackingView _applicationDidCreateWindowContext]): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationDidCreateWindowContext]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidFinishSnapshottingAfterEnteringBackground):
        Remove the didCreateWindowContext notification, and hide content after
        snapshotting after entering the background.

2018-07-10  Youenn Fablet  <youenn@apple.com>

        Make fetch() use "same-origin" credentials by default
        https://bugs.webkit.org/show_bug.cgi?id=176023

        Reviewed by Chris Dumez.

        Before the patch, when changing the credential mode in case of redirection,
        we were not waiting for WebProcess response to restart the load.
        This patch updates the implementation to ask the WebProcess whether to proceed as for other regular asynchronous loads.
        This requires some refactoring in particular we now pass request, redirectRequest and redirectResponse to NetworkLoadChecker
        that will send them back as part of the completion handler.

        To do so, we change manual redirection handling and make it a successful case and not an error case as before.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::redirectionError):
        (WebKit::NetworkLoadChecker::checkRedirection):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::restartNetworkLoad):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::willPerformHTTPRedirection):

2018-07-10  Chris Dumez  <cdumez@apple.com>

        [IOS] We should prevent WebProcess suspension while the UIProcess is waiting for a reply from its injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=187536
        <rdar://problem/41931912>

        Reviewed by Brady Eidson.

        Update RemoteObjectRegistry to take a background process assertion for each pending reply on the
        UIProcess side. Otherwise, the destination web process may get suspended and the reply block would
        not get called. We already do this in WebPageProxy for callbacks waiting for an IPC from the
        WebProcess.

        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::RemoteObjectRegistry):
        (WebKit::RemoteObjectRegistry::sendInvocation):
        (WebKit::RemoteObjectRegistry::callReplyBlock):
        (WebKit::RemoteObjectRegistry::releaseUnusedReplyBlock):
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _initWithWebPage:]):
        (-[_WKRemoteObjectRegistry _initWithWebPageProxy:]):
        (-[_WKRemoteObjectRegistry _initWithMessageSender:]): Deleted.
        * Shared/API/Cocoa/_WKRemoteObjectRegistryInternal.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _remoteObjectRegistry]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::remoteObjectRegistry):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _remoteObjectRegistry]):

2018-07-09  Brian Burg  <bburg@apple.com>

        WebDriver: hang when running Selenium test correct_event_firing_tests.py::testShouldEmitOnChangeEventsWhenSelectingElements[Safari]
        https://bugs.webkit.org/show_bug.cgi?id=187486
        <rdar://problem/41987110>

        Reviewed by Tim Horton.

        This test takes the unusual step of doing Element Click directly on a <select> element,
        despite the specification supporting clicking on <option> elements directly. It hangs
        because we fire a nested run loop when the Carbon popup menu appears, and the nested runloop
        is not exited until the popup menu is clicked or dismissed.

        If a click is being simulated on the <select> via WebDriver, we should just not show
        the popup menu but still deliver all of the events that are fired when clicking the element.

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

2018-07-10  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _internalDoAfterNextPresentationUpdate:withoutWaitingForPainting:withoutWaitingForAnimatedResize:]):

2018-07-10  Tim Horton  <timothy_horton@apple.com>

        doAfterNextPresentationUpdate should not be called while content is hidden due to animated resize
        https://bugs.webkit.org/show_bug.cgi?id=187500
        <rdar://problem/41294139>

        Reviewed by Simon Fraser.

        Clients generally expect that after doAfterNextPresentationUpdate, there's
        something vaguely sensible on the screen. They use this to remove snapshots,
        unhide web views, etc.

        During some kinds of resize/rotation, we will hide the WKContentView,
        and asynchronously hide it when the resize/rotation is complete. This
        can cause clients to prematurely expose a blank WKWebView.

        To fix this, avoid calling doAfterNextPresentationUpdate until the
        animated resize completes. Add a variant that does not wait for this
        (to be used for testing purposes).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCompleteAnimatedResize]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        Rename the vector of blocks that we call after animated resize completes
        to be generic rather than just about snapshots.

        (-[WKWebView _internalDoAfterNextPresentationUpdate:withoutWaitingForPainting:withoutWaitingForAnimatedResize:]):
        Add this _internal variant of _doAfterNextPresentationUpdate that takes bits determining
        which waits to perform or avoid, to reduce duplication.

        (-[WKWebView _doAfterNextPresentationUpdate:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForAnimatedResizeForTesting:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForPainting:]):
        Call _internalDoAfterNextPresentationUpdate with the appropriate bits set for each situation.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Add _doAfterNextPresentationUpdateWithoutWaitingForAnimatedResizeForTesting to WKWebView(WKTesting).

2018-07-10  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r231510): Dismissing PDFPlugin context menu automatically clicks the first item
        https://bugs.webkit.org/show_bug.cgi?id=187507
        <rdar://problem/42007155>

        Reviewed by Per Arne Vollan.

        WebPageProxy::showPDFContextMenu, introduced in r213510, assumes that
        the user always chooses some item from the menu; it does not handle
        the case where the context menu is dismissed without selecting anything.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (-[WKPDFMenuTarget selectedMenuItem]):
        (-[WKPDFMenuTarget contextMenuAction:]):
        (WebKit::WebPageProxy::showPDFContextMenu):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::handleContextMenuEvent):
        Make showPDFContextMenu return an optional index, instead of always
        returning an index. Don't perform any action if it is nullopt.

2018-07-10  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Support display of webinspector ui on non-legacy minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=187415

        Reviewed by Brian Burg.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::getInspectedWindowInfo):
        (WebKit::WebInspectorProxy::windowReceivedMessage):
        (WebKit::WebInspectorProxy::wndProc):
        (WebKit::WebInspectorProxy::registerWindowClass):
        (WebKit::decidePolicyForNavigationAction):
        (WebKit::webProcessDidCrash):
        (WebKit::WebInspectorProxy::platformCreateFrontendPage):
        (WebKit::WebInspectorProxy::platformCloseFrontendPageAndWindow):
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowWidth):
        (WebKit::WebInspectorProxy::platformIsFront):
        (WebKit::WebInspectorProxy::platformHide):
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::platformBringInspectedPageToFront):
        (WebKit::WebInspectorProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorProxy::platformCreateFrontendWindow):
        (WebKit::WebInspectorProxy::platformDidCloseForCrash):
        (WebKit::WebInspectorProxy::platformInvalidate):
        (WebKit::WebInspectorProxy::platformStartWindowDrag):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openFrontendConnection):
        * WebProcess/WebPage/win/WebInspectorUIWin.cpp:
        (WebKit::WebInspectorUI::localizedStringsURL):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL):

2018-07-10  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make testRunner.statisticsResetToConsistentState() take a completion handler
        https://bugs.webkit.org/show_bug.cgi?id=187499
        <rdar://problem/41999431>

        Reviewed by Chris Dumez.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
            Now uses a WTF::CallbackAggregator to call its
            completion handler when both the call to
            WebResourceLoadStatisticsStore::scheduleClearInMemory()
            and to
            WebResourceLoadStatisticsStore::resetParametersToDefaultValues()
            are complete.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemory):
            Now takes a WTF::CompletionHandler so that it can support the
            completion handler in
            WKWebsiteDataStoreStatisticsResetToConsistentState().
        (WebKit::WebResourceLoadStatisticsStore::resetParametersToDefaultValues):
            Now takes a WTF::CompletionHandler so that it can support the
            completion handler in
            WKWebsiteDataStoreStatisticsResetToConsistentState().
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-07-10  Ryosuke Niwa  <rniwa@webkit.org>

        Disable cross-origin-window-policy by default
        https://bugs.webkit.org/show_bug.cgi?id=187509

        Reviewed by Chris Dumez.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCrossOriginWindowPolicyEnabled):
        (WKPreferencesGetCrossOriginWindowPolicyEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:

2018-07-09  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r232416): Flickering when going back to Google search results on back swipe
        https://bugs.webkit.org/show_bug.cgi?id=187506
        <rdar://problem/41939594>

        Reviewed by Chris Dumez.

        Same document navigations won't have a preceding didStartProvisionalLoadForMainFrame,
        so the code introduced in r232416 would immediately remove the snapshot
        upon any same document navigation.

        Instead, adjust r232416 slightly to start tracking snapshot removal events
        after didStartProvisionalLoad OR didSameDocumentNavigation. Call the block
        that starts tracking, then immediately fire the same-document navigation event.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame):
        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::stopWaitingForEvent):
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):

2018-07-09  Youenn Fablet  <youenn@apple.com>

        Remove cfca.com.npCryptoKit.CGB.MAC.sb and cfca.com.npP11CertEnroll.MAC.CGB.sb
        https://bugs.webkit.org/show_bug.cgi?id=187487
        <rdar://problem/41991584>

        Reviewed by Alexey Proskuryakov.

        * Resources/PlugInSandboxProfiles/cfca.com.npCryptoKit.CGB.MAC.sb: Removed.
        * Resources/PlugInSandboxProfiles/cfca.com.npP11CertEnroll.MAC.CGB.sb: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2018-07-09  Youenn Fablet  <youenn@apple.com>

        Add the possibility to run unsandboxed plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=187310
        <rdar://problem/41798808>

        Reviewed by Alexey Proskuryakov.

        Add a utility method to know which plug-ins are allowed to run unsandboxed.
        For such plug-ins, we skip the sandboxing done when starting the plug-in process.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::initializeSandbox):
        * Shared/WebPreferences.yaml:
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::shouldRunPluginUnsandboxed):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldRunPluginUnsandboxed):
        (WebKit::PluginInfoStore::shouldUsePlugin):

2018-07-09  Dean Jackson  <dino@apple.com>

        Remove fullscreen-auto-hide-delay
        https://bugs.webkit.org/show_bug.cgi?id=187493
        <rdar://problem/41830852>

        Reviewed by Antoine Quint.

        Now there is no delay, rename setFullscreenAutoHideTiming to setFullscreenAutoHideDuration,
        and only send that value over to the Web Process.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::setFullscreenAutoHideDuration):
        (WebKit::WebFullScreenManagerProxy::setFullscreenAutoHideTiming): Deleted.
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController viewWillAppear:]):
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didExitFullScreen):
        (WebKit::WebFullScreenManager::setFullscreenAutoHideDuration):
        (WebKit::WebFullScreenManager::setFullscreenAutoHideTiming): Deleted.
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/FullScreen/WebFullScreenManager.messages.in:

2018-07-09  Timothy Hatcher  <timothy@apple.com>

        Semantic colors don't update when accessibility Increase Contrast mode is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=187425
        rdar://problem/39948240

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Moved call to setUseDarkAppearance to WebViewImpl.
        (-[WKWebView _setUseSystemAppearance:]): No need to call setUseDarkAppearance here anymore.
        (-[WKWebView viewDidChangeEffectiveAppearance]): Added. This is the proper NSView method to use.
        (-[WKWebView _effectiveAppearanceIsDark]): Deleted.
        (-[WKWebView effectiveAppearanceDidChange]): Deleted. This method is a deprecated name.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidChangeEffectiveAppearance]): Added. This is the proper NSView method to use.
        (-[WKView _setUseSystemAppearance:]): No need to call setUseDarkAppearance here anymore.
        (-[WKView _effectiveAppearanceIsDark]): Deleted.
        (-[WKView effectiveAppearanceDidChange]): Deleted. This method is a deprecated name.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl): Call setUseDarkAppearance before page config is sent in initializeWebPage.
        (WebKit::WebViewImpl::effectiveAppearanceDidChange): Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseDarkAppearance): WebCore::Page::setUseDarkAppearance now handles the style changes.
        The RenderTheme color caches also don't need cleared with platformColorsDidChange(), since we cache light
        and dark colors seperatly in RenderThemeMac.

2018-07-09  Simon Fraser  <simon.fraser@apple.com>

        Shrink various loading-related enums to shrink CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=187443

        Reviewed by Chris Dumez.

        * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm:
        (WebKit::LegacyCustomProtocolManager::wasRedirectedToRequest):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueWillSendRequest):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::canUseCache const):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::cachePolicyAllowsExpired):
        (WebKit::NetworkCache::makeRetrieveDecision):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        * Shared/API/c/mac/WKURLRequestNS.mm:
        (WKURLRequestCopyNSURLRequest):
        * Shared/Cocoa/WKNSURLRequest.mm:
        (-[WKNSURLRequest _web_createTarget]):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        * UIProcess/API/Cocoa/WKFrameInfo.mm:
        (-[WKFrameInfo request]):
        * UIProcess/API/Cocoa/WKNavigation.mm:
        (-[WKNavigation _request]):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction request]):
        * UIProcess/API/Cocoa/WKNavigationData.mm:
        (-[WKNavigationData originalRequest]):
        * UIProcess/API/Cocoa/WKNavigationResponse.mm:
        (-[WKNavigationResponse _request]):
        * UIProcess/API/Cocoa/WKURLSchemeTask.mm:
        (-[WKURLSchemeTaskImpl request]):
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload request]):
        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.mm:
        (WebKit::LegacyCustomProtocolManagerClient::startLoading):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformCanHandleRequest):

2018-07-09  Chris Dumez  <cdumez@apple.com>

        WebProcessProxy::topPrivatelyControlledDomainsWithWebsiteData() fails to protect the page in its lambda
        https://bugs.webkit.org/show_bug.cgi?id=187478
        <rdar://problem/41975998>

        Reviewed by Youenn Fablet.

        Make sure we protect the WebPageProxy when we capture it in the lambda or it might go away by the
        time the lambda gets called.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::topPrivatelyControlledDomainsWithWebsiteData):

2018-07-09  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Remove unused AuthenticationManager static methods.
        https://bugs.webkit.org/show_bug.cgi?id=187419

        Reviewed by Yusuke Suzuki.

        The file for curl port was added without implementation and never called from anyware.
        Also interfaces only used by the curl port were removed from the shared header file.

        * PlatformWin.cmake:
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/curl/AuthenticationManagerCurl.cpp: Removed.

2018-07-09  Stephan Szabo  <stephan.szabo@sony.com>

        Check that LayerTreeHost was created before use
        https://bugs.webkit.org/show_bug.cgi?id=187404

        Reviewed by Žan Doberšek.

        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode):

2018-07-09  Commit Queue  <commit-queue@webkit.org>

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

        Revision caused the api test LinkColorWithSystemAppearance to
        fail on all systems. (Requested by Truitt on #webkit).

        Reverted changeset:

        "Semantic colors don't update when accessibility Increase
        Contrast mode is enabled."
        https://bugs.webkit.org/show_bug.cgi?id=187425
        https://trac.webkit.org/changeset/233612

2018-07-09  Brian Burg  <bburg@apple.com>

        WebDriver: hang in Selenium test alerts_tests.py::testShouldHandleAlertOnPageBeforeUnload
        https://bugs.webkit.org/show_bug.cgi?id=187418
        <rdar://problem/41909520>

        Unreviewed build fix for Sierra.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        According to some compilers, the local 'automationSession' is unused. Change this
        to just convert the return value to boolean rather than assign to an unused local.

2018-07-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce a layout milestone to track when the document contains a large number of rendered characters
        https://bugs.webkit.org/show_bug.cgi?id=187412
        <rdar://problem/41744338>

        Reviewed by Ryosuke Niwa.

        Add plumbing for the new significant rendered text layout milestone in the modern WebKit client layer. See
        WebCore/ChangeLog for more details.

        * Shared/API/Cocoa/_WKRenderingProgressEvents.h:
        * Shared/API/Cocoa/_WKRenderingProgressEventsInternal.h:
        (renderingProgressEvents):
        * Shared/API/c/WKPageLoadTypes.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toWKLayoutMilestones):
        (WebKit::toLayoutMilestones):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (layoutMilestones):

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

        REGRESSION (r233561): MobileMail crashes when replying to an email
        https://bugs.webkit.org/show_bug.cgi?id=187436
        rdar://problem/41931915

        Reviewed by Alan Bujtas.
        
        r233561 added a RELEASE_ASSERT(isMainThread()) in this function. This is fine most of the time,
        until Mail spawns a WebThread for mail compose, at which point the meaning of isMainThread changes
        and the RELEASE_ASSERT fires.
        
        For now, just remove the RELEASE_ASSERT.

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

2018-07-06  Timothy Hatcher  <timothy@apple.com>

        Semantic colors don't update when accessibility Increase Contrast mode is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=187425
        rdar://problem/39948240

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Moved call to setUseDarkAppearance to WebViewImpl.
        (-[WKWebView _setUseSystemAppearance:]): No need to call setUseDarkAppearance here anymore.
        (-[WKWebView viewDidChangeEffectiveAppearance]): Added. This is the proper NSView method to use.
        (-[WKWebView _effectiveAppearanceIsDark]): Deleted.
        (-[WKWebView effectiveAppearanceDidChange]): Deleted. This method is a deprecated name.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidChangeEffectiveAppearance]): Added. This is the proper NSView method to use.
        (-[WKView _setUseSystemAppearance:]): No need to call setUseDarkAppearance here anymore.
        (-[WKView _effectiveAppearanceIsDark]): Deleted.
        (-[WKView effectiveAppearanceDidChange]): Deleted. This method is a deprecated name.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl): Call setUseDarkAppearance before page config is sent in initializeWebPage.
        (WebKit::WebViewImpl::effectiveAppearanceDidChange): Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseDarkAppearance): WebCore::Page::setUseDarkAppearance now handles the style changes.
        The RenderTheme color caches also don't need cleared with platformColorsDidChange(), since we cache light
        and dark colors seperatly in RenderThemeMac.

2018-07-06  Chris Dumez  <cdumez@apple.com>

        Add release assertions to try and catch a possible HashMap corruption in NetworkConnectionToWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=187417

        Reviewed by Ryosuke Niwa.

        Add assertions to make sure we:
        - Always use NetworkConnectionToWebProcess::m_networkResourceLoaders from the main thread
        - Never use a 0 identifier as key for NetworkConnectionToWebProcess::m_networkResourceLoaders

        We see crashes (rdar://problem/39265927) that only seem to make sense if this HashMap was
        somehow getting corrupted. Let's try and catch the most common reasons for HashMap corruption.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didCleanupResourceLoader):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
        (WebKit::NetworkConnectionToWebProcess::setDefersLoading):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::messageSenderDestinationID):

2018-07-06  Brian Burg  <bburg@apple.com>

        WebDriver: hang in Selenium test alerts_tests.py::testShouldHandleAlertOnPageBeforeUnload
        https://bugs.webkit.org/show_bug.cgi?id=187418
        <rdar://problem/41909520>

        Reviewed by Timothy Hatcher.

        Per the W3C specification, “User prompts that are spawned from beforeunload event handlers,
        are dismissed implicitly upon navigation or close window, regardless of the defined user prompt handler.”

        This behavior differs from legacy Selenium behavior where (as in the test) it's expected that
        a test can accept or dismiss a beforeunload alert manually.

        Prior to this patch, beforeunload alerts hang because Safari uses a nested modal run loop, which does
        not process incoming Automation messages, so there was no way for the test to manually dismiss
        the alert.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        Don't show beforeunload alerts for pages being controlled by automation.


2018-07-06  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: contextConnection under WebCore::SWServer::terminateWorkerInternal
        https://bugs.webkit.org/show_bug.cgi?id=187348
        <rdar://problem/41853270>

        Reviewed by Youenn Fablet.

        Make sure we mark corresponding SWServerWorkers as terminated when we terminate a
        Service Worker context connection once it is no longer needed.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::swContextConnectionMayNoLongerBeNeeded):

2018-07-06  Andy Estes  <aestes@apple.com>

        [iOS] WKPDFView should show the Data Detectors sheet when long-pressing a URL that Data Detectors can handle
        https://bugs.webkit.org/show_bug.cgi?id=187396
        <rdar://problem/41786980>

        Reviewed by Dan Bernstein.

        If a URL can be presented by Data Detectors, show the Data Detectors sheet instead
        of the link sheet. Also implement the optional WKActionSheetAssistantDelegate
        method that asks the UI delegate for its data detection context.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _showActionSheetForURL:atLocation:withAnnotationRect:]):
        (-[WKPDFView dataDetectionContextForActionSheetAssistant:]):

2018-07-06  Chris Dumez  <cdumez@apple.com>

        WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler() should take in a CompletionHandler
        https://bugs.webkit.org/show_bug.cgi?id=187392

        Reviewed by Youenn Fablet.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-07-06  Chris Dumez  <cdumez@apple.com>

        [iOS] Assertion failure in WebProcessProxy::allProcesses() (isMainThread())
        https://bugs.webkit.org/show_bug.cgi?id=187394

        Reviewed by Dan Bernstein.

        Use RunLoop::isMain() instead of isMainThread() in the assertion to fix issues for
        applications using both WebKit and WebKitLegacy.

        * UIProcess/WebProcessProxy.cpp:

2018-07-06  Daniel Bates  <dabates@apple.com>

        Remove Strong Confirmation Password button
        https://bugs.webkit.org/show_bug.cgi?id=187306
        <rdar://problem/41795185>

        Reviewed by Sam Weinig.

        Remove support for the Strong Confirmation Password button because we never made use of it.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (toAutoFillButtonType):
        (toWKAutoFillButtonType):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (toAutoFillButtonType):
        (toWKAutoFillButtonType):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:

2018-07-05  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r230843): Flash doesn't work; Produces blue box on page
        https://bugs.webkit.org/show_bug.cgi?id=187346
        <rdar://problem/41773974>

        Reviewed by Ryosuke Niwa.

        Reset page plugins when the load client policies are updated.
        This will ensure that pages will rebuild their plugin lists based on the new policies.

        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::setPluginLoadClientPolicy):
        (WebKit::WebPluginInfoProvider::clearPluginClientPolicies):

2018-07-05  Brady Eidson  <beidson@apple.com>

        IndexedDB operations in a Page fail after a StorageProcess crash.
        <rdar://problem/41626526> and https://bugs.webkit.org/show_bug.cgi?id=187123

        Reviewed by Alex Christensen.

        When the connection to a StorageProcess goes away, explicitly tell all of the WebPages
        in the WebProcess about it.
        
        This puts Documents/Workers in an error mode where requests fail instead of timeout.
        It also clears the Page's connection so *new* Documents and Workers will get a fresh 
        new connection that works.
        
        * UIProcess/API/C/WKContext.cpp:
        (WKContextTerminateStorageProcess):
        
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _terminateStorageProcess]):
        
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::terminateForTesting):
        * UIProcess/Storage/StorageProcessProxy.h:
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::terminateStorageProcessForTesting):
        (WebKit::WebProcessPool::terminateStorageProcess): Deleted.
        * UIProcess/WebProcessPool.h:
        
        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
        (WebKit::WebToStorageProcessConnection::didClose):
        * WebProcess/Storage/WebToStorageProcessConnection.h:
        (WebKit::WebToStorageProcessConnection::existingIDBConnectionToServerForIdentifier):
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::webToStorageProcessConnectionClosed):

2018-07-05  Simon Fraser  <simon.fraser@apple.com>

        Address two possible causes of missing tiles in iOS Safari, and add logging to gather more data about other possible causes
        https://bugs.webkit.org/show_bug.cgi?id=187376
        rdar://problem/40941118

        Reviewed by Tim Horton.
        
        We have continual reports of users experiencing missing tiles in MobileSafari, where loading a page
        shows the tiles at the top, but we don't render new tiles as the user scrolls down. This is consistent
        with failing to dispatch visible content rect updates via -[WKWebView _updateVisibleContentRects].
        
        This patch addresses two possible (but unlikely) causes. First, it resets _currentlyAdjustingScrollViewInsetsForKeyboard
        after a web process crash. Second, it catches exceptions thrown by [webView _updateVisibleContentRects]
        and resets _hasScheduledVisibleRectUpdate.
        
        This patch also adds release logging that fires if over 1s has elapsed between scheduling
        a visible content rect update and trying to re-schedule, and logging for all reasons that
        -_updateVisibleContentRects returns early.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _processDidExit]):
        (-[WKWebView _addUpdateVisibleContentRectPreCommitHandler]):
        (-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]):
        (-[WKWebView _updateVisibleContentRects]):

2018-07-05  Olivia Barnett  <obarnett@apple.com>

        iPad: Scrolling with hardware keyboard while SELECT popover is visible scrolls the page, detaches popover
        https://bugs.webkit.org/show_bug.cgi?id=187363
        <rdar://problem/41106306>

        Reviewed by Tim Horton.

        Added extra check to prevent keyboard scrolling when the select box is open.

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

2018-07-05  Timothy Hatcher  <timothy@apple.com>

        Rename and flip the meaning of defaultAppearance to be useDarkAppearance.
        https://bugs.webkit.org/show_bug.cgi?id=187369
        rdar://problem/41870420

        Reviewed by Tim Horton.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _effectiveAppearanceIsDark]):
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setUseSystemAppearance:]):
        (-[WKWebView effectiveAppearanceDidChange]):
        (-[WKWebView _defaultAppearance]): Deleted.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _effectiveAppearanceIsDark]):
        (-[WKView effectiveAppearanceDidChange]):
        (-[WKView _setUseSystemAppearance:]):
        (-[WKView _defaultAppearance]): Deleted.
        (-[WKView _setDefaultAppearance:]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::effectiveAppearanceIsDark):
        (WebKit::WebViewImpl::setUseDarkAppearance):
        (WebKit::WebViewImpl::useDefaultAppearance): Deleted.
        (WebKit::WebViewImpl::setDefaultAppearance): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setUseDarkAppearance):
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::setDefaultAppearance): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::useDarkAppearance const):
        (WebKit::WebPageProxy::defaultAppearance const): Deleted.
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView drawRect:]):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::paintControlForLayerInContext):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        (WebKit::WebPage::drawRect):
        (WebKit::WebPage::setUseDarkAppearance):
        (WebKit::WebPage::setDefaultAppearance): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-07-05  Brian Burg  <bburg@apple.com>

        REGRESSION: ASSERT under WebAutomationSessionProxy::computeElementLayout when elementInViewClientCenterPoint returns nullopt
        https://bugs.webkit.org/show_bug.cgi?id=187367
        <rdar://problem/41861346>

        Reviewed by Timothy Hatcher.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        There's no reason to unwrap this optional, as the IPC argument type is std::optional<IntPoint>.

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

        Upstream hover gesture implementation
        https://bugs.webkit.org/show_bug.cgi?id=187366

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView _hoverGestureRecognizerChanged:]):

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

        Fix some -Wdocumentation warnings in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=187318

        Reviewed by Dan Bernstein.

        Fix most of the -Wdocumentation warnings in WebKit. The remaining
        ones are slightly mysterious, so we can't turn the warning on yet.

        * Configurations/BaseTarget.xcconfig:
        Define U_HIDE_DEPRECATED_API. It's defined in all other WebKit projects,
        and the doc comments in the deprecated ICU API have some errors.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        Adjust comments or parameter names to be consistent with each other.

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

        Regression(r232886): WebsiteDataStore objects may get destroyed on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=187356
        <rdar://problem/41854555>

        Reviewed by Geoffrey Garen.

        As of r232886, CallbackAggregators in WebsiteDataStore hold a Ref<> to their WebsiteDataStore. This
        is an issue because CallbackAggregator objects can get destroyed on a background thread and may be
        the last ones holding a ref to the data store. When this happens, the WebsiteDataStore would get
        destroyed on a background store and potentially cause crashes. Note that even if the callback
        aggregator would not be the last one to hold a ref to the store, it still would not be safe to deref
        the store on the background thread since WebsiteDataStore is not ThreadSafeRefCounted.

        To address the issue, this patch updates the CallbackAggregators' destructor to deref their data
        store member on the main thread. Note that we could also have WebsiteDataStore subclass
        ThreadSafeRefCounted<T, DestructionThread::Main> but the data store technically does not need to
        be ThreadSafeRefCounted at the moment.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::WebsiteDataStore::removeData):

2018-07-05  Dan Bernstein  <mitz@apple.com>

        [macOS] REGRESSION: Development WebContent service has restricted entitlements, rendering it useless for development
        https://bugs.webkit.org/show_bug.cgi?id=187355

        Reviewed by Anders Carlsson.

        * Configurations/WebContentService.Development.xcconfig: Set WK_USE_RESTRICTED_ENTITLEMENTS
          to NO for the Development service.

2018-07-05  Rob Buis  <rbuis@igalia.com>

        [GTK] Remove soup/DownloadSoupErrors.h
        https://bugs.webkit.org/show_bug.cgi?id=187339

        This header is not used anymore.

        Reviewed by Frédéric Wang.

        * NetworkProcess/Downloads/soup/DownloadSoupErrors.h: Removed.
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        * PlatformGTK.cmake:

2018-07-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r233325): [GTK] Broke 40 animations tests
        https://bugs.webkit.org/show_bug.cgi?id=187264

        Reviewed by Žan Doberšek.

        Use a different PlatformDisplayID for compositing in the GTK port. This way, when entering AC a window screen
        changed is emitted and the GTK default display refresh monitor is destroyed, ensuring the one created by the
        threaded compositor is used.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::create): Remove unused WebPage parameter and add PlatformDisplayID.
        (WebKit::ThreadedCompositor::ThreadedCompositor): Create the display refresh monitor with the given displayID.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        (WebKit::ThreadedDisplayRefreshMonitor::ThreadedDisplayRefreshMonitor): Pass the given displayID to the parent constructor.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.h:
        (WebKit::ThreadedDisplayRefreshMonitor::create): Add PlatformDisplayID parameter.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost): Use compositingDisplayID when
        creating the threaded compositor and notify about the window screen change.
        (WebKit::ThreadedCoordinatedLayerTreeHost::setIsDiscardable): Use primaryDisplayID when leaving AC and
        compositingDisplayID when re-entering.

2018-07-04  Olivia Barnett  <obarnett@apple.com>

        A WKWebView in a UIViewController that is presented modally and uses a file picker will be incorrectly dismissed by the system
        https://bugs.webkit.org/show_bug.cgi?id=185257
        <rdar://problem/40819252>

        Reviewed by Tim Horton.

        Call to dismiss the presented modal was being called on the parent and not the child, which caused the file picker to be incorrectly dismissed along with the modal. A test for this bug-fix could not be completed without additional tools as TestWebKitAPI is not a UI application.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _dismissDisplayAnimated:]):

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

        Introduce PLATFORM(IOSMAC)
        https://bugs.webkit.org/show_bug.cgi?id=187315

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/NetworkService.xcconfig:
        * Configurations/WebContentService.xcconfig:
        * Configurations/WebKit.xcconfig:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::sourceApplicationAuditData const):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::overrideSystemProxies):
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalHostingProcess):
        * Platform/spi/ios/UIKitSPI.h:
        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setApplicationIsDaemon):
        (WebKit::enableSandboxStyleFileQuarantine):
        * Shared/mac/CodeSigning.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webViewPrintFormatter]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (-[WKRemoteView initWithFrame:contextID:]):
        * UIProcess/_WKWebViewPrintFormatter.mm:
        * UIProcess/_WKWebViewPrintFormatterInternal.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didExitStableState]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView _defineForWebView:]):
        (-[WKContentView setSelectedTextRange:]):
        (-[WKContentView closestPositionToPoint:]):
        (-[WKContentView _updateChangedSelection:]):
        * UIProcess/ios/WKLegacyPDFView.mm:
        * UIProcess/ios/WKPDFView.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::getPositionInformation):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox):
        * config.h:

2018-07-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        50 failing WebDriver tests after r233417
        https://bugs.webkit.org/show_bug.cgi?id=187263

        Reviewed by Frédéric Wang.

        A std::optional value is used while being std::nullopt. This is because the wrong input source is used when
        transitioning keyboard input states.

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

2018-07-03  Youenn Fablet  <youenn@apple.com>

        Remove quarantine for Webex plugin
        https://bugs.webkit.org/show_bug.cgi?id=187050
        rdar://problem/41478189

        Reviewed by Brent Fulgham.

        Update the Plugin Info.plist to not do quarantine of downloaded files by default.
        Update PluginProcess implementation to reenable quarantine for all plug-ins except cisco webex plug-in.

        * Platform/spi/mac/QuarantineSPI.h: Add qtn_proc_init.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::shouldOverrideQuarantine):
        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::shouldOverrideQuarantine):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):

2018-07-03  Youenn Fablet  <youenn@apple.com>

        Crash in  WebKit::CacheStorage::Cache::toRecordInformation when running http/tests/cache-storage/cache-persistency.https.html
        https://bugs.webkit.org/show_bug.cgi?id=187243

        Reviewed by Chris Dumez.

        In case a caches object has an engine, it uses the engine to get the salt.
        In case engine/caches are non persistent, no salt was set for the engine, hence the crashes.
        Add an empty salt whenever initializing a non-persistent engine to remove the crash.

        Covered by updated expectations for two tests.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::initialize):

2018-07-03  Youenn Fablet  <youenn@apple.com>

        Fix regression introduced in r233335
        https://bugs.webkit.org/show_bug.cgi?id=187282

        Reviewed by Chris Dumez.

        When checking for navigation loads, we need to return whether the request URL matches the service worker URL.
        Before this patch, if the request URL was not matching the service worker URL, we were using the origin/referrer
        which should only be used for subresource loads.

        Covered by imported/w3c/web-platform-tests/service-workers/service-worker/claim-with-redirect.https.html
        being no longer flaky.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::isValidFetch):

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

        Make CallbackMap::invalidate() safe to re-enter
        https://bugs.webkit.org/show_bug.cgi?id=187298
        <rdar://problem/41057167>

        Reviewed by Geoffrey Garen.

        Made it safe to re-enter CallbackMap::invalidate(), GenericCallback::performCallbackWithReturnValue(),
        GenericCallback::invalidate() & invalidateCallbackMap() since those execute client blocks which may
        re-enter WebKit.

        * UIProcess/GenericCallback.h:
        (WebKit::GenericCallback::performCallbackWithReturnValue):
        (WebKit::invalidateCallbackMap):

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

        [iOS] Clean up sandbox warnings found during Public Beta
        https://bugs.webkit.org/show_bug.cgi?id=187308
        <rdar://problem/41203914>

        Reviewed by Eric Carlson.

        I made our sandbox overly restrictive during our iOS 12.0 development cycle, and have found a number of missing items.

        This patch adds the missing IOKit properties, and removes a duplicate call to (play-media).

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

2018-07-03  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Embed certificate information into ResourceResponse.
        https://bugs.webkit.org/show_bug.cgi?id=187102

        Reviewed by Youenn Fablet.

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

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

        [iOS WK2] We fail to make surfaces volatile when suspending, increasing memory impact
        https://bugs.webkit.org/show_bug.cgi?id=187285
        rdar://problem/41732391

        Reviewed by Tim Horton.
        
        The "Mach port as layer contents" code path used in iOS WK2 relies on replacing the 
        Mach port layer contents with the actual IOSurface on suspension (otherwise the
        live Mach port will keep the surface in use). However, we were never hitting this
        RemoteLayerTreeHost::mapAllIOSurfaceBackingStore() code path on iOS 11 and later
        because UIKit stopped firing the notification we relied on.
        
        To fix this, use the _UIApplicationDidFinishSuspensionSnapshotNotification notification
        which is fired on UIApp.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):

2018-07-02  Simon Fraser  <simon.fraser@apple.com>

        Clean up the layer volatility code and logging
        https://bugs.webkit.org/show_bug.cgi?id=187286

        Reviewed by Tim Horton.
        
        Fix the layer volatility logging so it doesn't say "succeeded" when it actually failed
        and gave up.
        
        Use a couple of lambda functions in RemoteLayerBackingStore::setBufferVolatility() to
        make the code easier to read.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::setBufferVolatility):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::callVolatilityCompletionHandlers):
        (WebKit::WebPage::layerVolatilityTimerFired):
        (WebKit::WebPage::markLayersVolatile):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::markLayersVolatile):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::markAllLayersVolatile):
        * WebProcess/WebProcess.h:

2018-07-03  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make WebsiteDataStore::getAllStorageAccessEntries() call the right network process instead of iterating over the process pools
        https://bugs.webkit.org/show_bug.cgi?id=187277
        <rdar://problem/41745510>

        Reviewed by Chris Dumez.

        Existing tests use this code. The change is for correctness.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getAllStorageAccessEntriesFor:completionHandler:]):
            Now receives a WKWebView from its caller and gets the page ID from it.
        (-[WKWebsiteDataStore _getAllStorageAccessEntries:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getAllStorageAccessEntries):
            Now gets a page ID from its caller and gets the right network process
            through it.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-07-03  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r233461.

        Assertions triggered during iOS 11 debug layout and API tests

        Reverted changeset:

        "[iOS] Add assert to catch improper use of WebCore::Timer in
        UI Process"
        https://bugs.webkit.org/show_bug.cgi?id=185330
        https://trac.webkit.org/changeset/233461

2018-07-03  Youenn Fablet  <youenn@apple.com>

        Update com.cmbchina.CMBSecurity.sb to make it functional
        https://bugs.webkit.org/show_bug.cgi?id=187278

        Reviewed by Brent Fulgham.

        * Resources/PlugInSandboxProfiles/com.cmbchina.CMBSecurity.sb:

2018-07-03  Jer Noble  <jer.noble@apple.com>

        Update Fullscreen anti-phishing alert text
        https://bugs.webkit.org/show_bug.cgi?id=187199
        <rdar://problem/41162543>

        Reviewed by Brent Fulgham.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _showPhishingAlert]):

2018-07-03  David Kilzer  <ddkilzer@apple.com>

        [iOS] Add assert to catch improper use of WebCore::Timer in UI Process
        <https://webkit.org/b/185330>
        <rdar://problem/32816079>

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::StorageProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::m_nonVisibleProcessCleanupTimer):
        - Call setWebKitProcessType() to se the global for the current
          process.

2018-07-03  Frederic Wang  <fred.wang@free.fr>

        [iOS] Animations with Bézier timing function not suspended on UI process when animation-play-state is set to "paused"
        https://bugs.webkit.org/show_bug.cgi?id=170784

        Reviewed by Antoine Quint.

        In order to pause a running animation, GraphicsLayerCA::pauseCAAnimationOnLayer calls
        PlatformCALayer::addAnimationForKey, assuming it will replace the current animation.
        This patch fixes PlatformCALayerRemote::addAnimationForKey to ensure this assumption holds.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::addAnimationForKey): If the animation was already sent to
        the UI process, make sure it is properly updated.

2018-07-02  Youenn Fablet  <youenn@apple.com>

        Add sandbox to microdone plugin
        https://bugs.webkit.org/show_bug.cgi?id=187149
        <rdar://problem/41538057>

        Unreviewed.

        * Resources/PlugInSandboxProfiles/cn.microdone.cmb.safari.sb: Renamed from Source/WebKit/Resources/PlugInSandboxProfiles/cn.microdone.cmb.safari.
        * WebKit.xcodeproj/project.pbxproj:

2018-07-02  Tim Horton  <timothy_horton@apple.com>

        Adjust now-incorrect animated resize logging after r232544
        https://bugs.webkit.org/show_bug.cgi?id=187281
        <rdar://problem/41645347>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _didCompleteAnimatedResize]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        _beginAnimatedResizeWithUpdate: and _didCompleteAnimatedResize are
        not strictly paired; we could instead track the SPI, but it's a bit
        tricky since resizeWithContentHidden has an implicit endAnimatedResize.
        Instead, just log if we still have a resizeAnimationView when we're
        committing outside of an animated resize, which seems to be the original concern,
        and point toward the possibility of unpaired begin/end.
        Also fix logging that has the wrong method name.

2018-07-02  Youenn Fablet  <youenn@apple.com>

        Update com.apple.NPSafeInput.sb to make it functional
        https://bugs.webkit.org/show_bug.cgi?id=187276

        Reviewed by Brent Fulgham.

        * Resources/PlugInSandboxProfiles/com.apple.NPSafeInput.sb:

2018-07-02  Youenn Fablet  <youenn@apple.com>

        Update com.cfca.npSecEditCtl.MAC.BOC.plugin.sb to make it functional
        https://bugs.webkit.org/show_bug.cgi?id=187261

        Reviewed by Brent Fulgham.

        * Resources/PlugInSandboxProfiles/com.cfca.npSecEditCtl.MAC.BOC.plugin.sb:

2018-07-02  Brady Eidson  <beidson@apple.com>

        Crash notifying observers of responsiveness state change
        <rdar://problem/41267796> and https://bugs.webkit.org/show_bug.cgi?id=187262

        Reviewed by Tim Horton.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::callObserverCallback): Copy the container ahead of time.

2018-07-02  Sihui Liu  <sihui_liu@apple.com>

        Remove InitWebCoreThreadSystemInterface() in WKProcessPool _initWithConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=187252

        Reviewed by Dan Bernstein.

        Clean up after <rdar://problem/15256572>.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]):

2018-07-02  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r233381): Double WebResourceLoadStatisticsStore destructor invocation
        https://bugs.webkit.org/show_bug.cgi?id=187247

        Reviewed by Chris Dumez.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        Don't call postTask() to dispatch this task, as that keeps a reference
        to this WebResourceLoadStatisticsStore object and thus causes problems
        when invoked from the destructor in the form of a second destructor
        invocation that ends up crashing the process. Blocking nature of this
        call should be enough to avoid WebResourceLoadStatisticsStore lifetime
        issues.

2018-07-02  Per Arne Vollan  <pvollan@apple.com>

        Delete display link when closing page or the WebContent process has crashed.
        https://bugs.webkit.org/show_bug.cgi?id=186895

        Reviewed by Brent Fulgham.

        If there is a running display link in the UI process, there is no need to keep it around if the
        page is being closed or the WebContent process has crashed.

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

2018-06-23  Darin Adler  <darin@apple.com>

        [Cocoa] Improve ARC compatibility of more code in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=186973

        Reviewed by Dan Bernstein.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::hasEntitlement): Use WTF::hasEntitlement.

        * Shared/mac/SandboxUtilities.h: Removed connectedProcessHasEntitlement since
        we can now use WTF::hasEntitlement instead.
        * Shared/mac/SandboxUtilities.mm: Ditto.

        * StorageProcess/ios/StorageProcessIOS.mm:
        (WebKit::StorageProcess::parentProcessHasServiceWorkerEntitlement): Use
        WTF::hasEntitlement.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::parentProcessHasServiceWorkerEntitlement): Ditto.

2018-06-30  David Kilzer  <ddkilzer@apple.com>

        Fix clang static analyzer warnings: Garbage return value
        <https://webkit.org/b/187224>

        Reviewed by Eric Carlson.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::changeCount):
        (WebKit::WebPlatformStrategies::addTypes):
        (WebKit::WebPlatformStrategies::setTypes):
        (WebKit::WebPlatformStrategies::setBufferForType):
        (WebKit::WebPlatformStrategies::setPathnamesForType):
        (WebKit::WebPlatformStrategies::setStringForType):
        (WebKit::WebPlatformStrategies::getNumberOfFiles):
        (WebKit::WebPlatformStrategies::getPasteboardItemsCount):
        (WebKit::WebPlatformStrategies::writeCustomData):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::substitutionsPanelIsShowing):
        - Use brace initialization for local variables.

2018-06-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, add missing PLATFORM(COCOA) guard after r233207
        https://bugs.webkit.org/show_bug.cgi?id=186788
        <rdar://problem/41094167>

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleExtendClassesForParameterCoder):

2018-06-30  Dan Bernstein  <mitz@apple.com>

        Added a missing availability attribute.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:

2018-06-29  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make network process calls only for the process pool that the page belongs to
        https://bugs.webkit.org/show_bug.cgi?id=187206
        <rdar://problem/41659160>

        Reviewed by Chris Dumez.

        Instead of iterating over all process pools, we should resolve which
        process pool the page belongs to and call the network process only for
        that pool. This is especially important since we use WTFMove for the
        completion handlers.

        This patch also renames "callback" to "completionHandler" for
        the functions touched.

        A FIXME comment is added to WebsiteDataStore::getAllStorageAccessEntries()
        where we currently don't have a page ID to do the lookup with.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::updatePrevalentDomainsToPartitionOrBlockCookies):
        (WebKit::WebsiteDataStore::hasStorageAccessForFrameHandler):
        (WebKit::WebsiteDataStore::getAllStorageAccessEntries):
        (WebKit::WebsiteDataStore::grantStorageAccessHandler):
        (WebKit::WebsiteDataStore::hasStorageAccess):
        (WebKit::WebsiteDataStore::requestStorageAccess):
        (WebKit::WebsiteDataStore::grantStorageAccess):

2018-06-29  Chris Dumez  <cdumez@apple.com>

        Add utility methods to WebResourceLoadStatisticsStore to hop back and forth between threads
        https://bugs.webkit.org/show_bug.cgi?id=187200

        Reviewed by Brent Fulgham.

        Add utility methods to WebResourceLoadStatisticsStore to hop back and forth between threads,
        in order the simplify the code a little bit.

        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebResourceLoadStatisticsStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsStore::setShouldSubmitTelemetry):
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::postTask):
        (WebKit::WebResourceLoadStatisticsStore::postTaskReply):
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        (WebKit::WebResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::performDailyTasks):
        (WebKit::WebResourceLoadStatisticsStore::submitTelemetry):
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::logNonRecentUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource):
        (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::scheduleCookiePartitioningUpdate):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearPartitioningStateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningStateReset):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemory):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebResourceLoadStatisticsStore::setTimeToLiveUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setTimeToLiveCookiePartitionFree):
        (WebKit::WebResourceLoadStatisticsStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsStore::setGrandfatheringTime):
        (WebKit::WebResourceLoadStatisticsStore::setMaxStatisticsEntries):
        (WebKit::WebResourceLoadStatisticsStore::setPruneEntriesDownTo):
        (WebKit::WebResourceLoadStatisticsStore::resetParametersToDefaultValues):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-06-29  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Do not crash if there is an attempt to copy a file URL to the clipboard
        https://bugs.webkit.org/show_bug.cgi?id=187183

        Reviewed by Wenson Hsieh.

        r210683 introduced logic to prevent file URLs from being copied to the clipboard
        in unexpected cases. The current logic always crashes the WebProcess if
        webProcessProxy->checkURLReceivedFromWebProcess returns false. Instead of
        crashing, we can fail silently and not copy anything to the clipboard.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::setPasteboardPathnamesForType): Removed call to markCurrentlyDispatchedMessageAsInvalid() which was causing the process to crash.

2018-06-29  Chris Dumez  <cdumez@apple.com>

        Regression(r233359): Caused ITP tests to be flaky
        https://bugs.webkit.org/show_bug.cgi?id=187189

        Reviewed by Youenn Fablet.

        r233359 started using m_resolvedConfiguration.resourceLoadStatisticsDirectory instead of
        m_configuration.resourceLoadStatisticsDirectory for the ITP path. This is consistent
        with what we do for other database paths so that things like '~' in paths get resolved.

        This introduced flakiness because the resourceLoadStatisticsDirectory was never getting
        resolved and m_resolvedConfiguration.resourceLoadStatisticsDirectory was not set.
        Update the WebsiteDataStore so that m_resolvedConfiguration.resourceLoadStatisticsDirectory
        properly gets set to the resolved version of m_configuration.resourceLoadStatisticsDirectory.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):

2018-06-29  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Don't create a WebResourceLoadStatisticsStore for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=187154
        <rdar://problem/41487250>

        Reviewed by Brent Fulgham and Chris Dumez.

        Most of the changes in this patch remove the boolean parameter for tracking
        ephemeral sessions and the IsReadOnly enum.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setResourceLoadStatisticsTestingCallback:]):
            Now returns early for ephemeral sessions.
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::ResourceLoadStatisticsPersistentStorage):
        (WebKit::ResourceLoadStatisticsPersistentStorage::writeMemoryStoreToDisk):
        (WebKit::ResourceLoadStatisticsPersistentStorage::scheduleOrWriteMemoryStore):
        * UIProcess/ResourceLoadStatisticsPersistentStorage.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
            Now returns early for ephemeral sessions.
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):

2018-06-29  Chris Dumez  <cdumez@apple.com>

        Stop using lambdas for WebResourceLoadStatisticsStore to interact with its WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=187165

        Reviewed by Brent Fulgham.

        Stop using lambdas for WebResourceLoadStatisticsStore to interact with its WebsiteDataStore. Instead,
        WebResourceLoadStatisticsStore now holds a weak pointer to its WebsiteDataStore and is able to call
        methods on it directly. Reducing the indirection makes the code less complex and more understandable.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToPartitionOrBlockCookiesHandler):
        (WebKit::WebResourceLoadStatisticsStore::callRemoveDomainsHandler):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):

2018-06-29  Miguel Gomez  <magomez@igalia.com>

        [WPE] Some frames are dropped when using rAF to animate an element
        https://bugs.webkit.org/show_bug.cgi?id=187175

        Always call renderNextFrame in ThreadedCompositor::requestDisplayRefreshMonitorUpdate()
        so we have to process any pending layer flush request.

        Reviewed by Žan Doberšek.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::handleDisplayRefreshMonitorUpdate):

2018-06-28  Chris Dumez  <cdumez@apple.com>

        Make sure the WebResourceLoadStatisticsStore gets destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=187143

        Reviewed by Youenn Fablet.

        Have WebResourceLoadStatisticsStore subclass ThreadSafeRefCounted<WebResourceLoadStatisticsStore, WTF::DestructionThread::Main>
        instead of IPC::Connection::WorkQueueMessageReceiver. This makes sure that the WebResourceLoadStatisticsStore
        objects get destroyed on the main thread, even if the last ref was held by a background thread.

        Also, methods called by IPC are now called on the main thread instead of the background queue. I think it is clearer for all
        of WebResourceLoadStatisticsStore usage to be on the main thread. Expensive work is still done on the background queue, inside
        the persistent / memory store classes.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadStatisticsStore::processWillOpenConnection):
        (WebKit::WebResourceLoadStatisticsStore::processDidCloseConnection):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-06-28  Jiewen Tan  <jiewen_tan@apple.com>

        Add nullptr check for xpc_connection_t in AuthenticationManager::initializeConnection
        https://bugs.webkit.org/show_bug.cgi?id=187110
        <rdar://problem/41536815>

        Reviewed by Brent Fulgham.

        In some rare cases as shown by crash tracers that the passed xpc_connection_t object could be nullptr,
        and xpc_connection_set_event_handler won't do the nullptr check on its parameters. Therefore, we should
        do it by ourselves.

        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::initializeConnection):
        * UIProcess/Authentication/cocoa/AuthenticationChallengeProxyCocoa.mm:
        (WebKit::AuthenticationChallengeProxy::sendClientCertificateCredentialOverXpc const):

2018-06-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] DataTransfer.getData always returns the empty string when dropping text
        https://bugs.webkit.org/show_bug.cgi?id=187130
        <rdar://problem/41014117>

        Reviewed by Ryosuke Niwa.

        Add plumbing to grab information for each item in the pasteboard. See WebCore ChangeLog for more detail.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::allPasteboardItemInfo):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::allPasteboardItemInfo):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-06-28  Youenn Fablet  <youenn@apple.com>

        Early return when handling fetch event in case service worker origin does not match origin of a subresource load
        https://bugs.webkit.org/show_bug.cgi?id=187153
        <rdar://problem/41329832>

        Reviewed by Chris Dumez.

        Stop crashing the service worker process in case a subresource load origin is not matching a service worker origin.
        Instead, just return early so that the load will be handled by the network process.

        Keep crashing in case a navigation load is not matching its service worker origin.
        Add more logging to help with the debugging.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::logValidFetchError):
        (WebKit::isValidFetch):
        (WebKit::WebSWContextManagerConnection::startFetch):

2018-06-28  Jeremy Jones  <jeremyj@apple.com>

        Fullscreen exits when placeholder is removed then added during a single runloop.
        https://bugs.webkit.org/show_bug.cgi?id=187079

        Reviewed by Jer Noble.

        Instead of closing fullscreen as soon as the placeholder is removed from the view hierarchy,
        give the placeholder until the next runloop to be re-added to the view hierarchy.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController placeholderWillMoveToSuperview:]):

2018-06-28  Youenn Fablet  <youenn@apple.com>

        Handle the case of registerMDNSNameCallback called several times
        https://bugs.webkit.org/show_bug.cgi?id=187150
        <rdar://problem/41329832>

        Reviewed by Eric Carlson.

        This is a speculative fix on the basis that registerMDNSNameCallback may be called several times.
        In that case, we would have freed the context after the first call and would reuse it for the second call.

        Instead, keep a map of pending requests and pass to registerMDNSNameCallback an identifier to that map.
        If the map has no value for that identifier, return early.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::~NetworkMDNSRegister):
        (WebKit::pendingRegistrationRequests):
        (WebKit::registerMDNSNameCallback):
        (WebKit::NetworkMDNSRegister::clearPendingRequests):
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        * NetworkProcess/webrtc/NetworkMDNSRegister.h:
        (): Deleted.

2018-06-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix Win Cairo build after r233310.

        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-06-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix Win Cairo build after r233310.

        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-06-28  Chris Dumez  <cdumez@apple.com>

        Split memory store logic out of WebResourceLoadStatisticsStore to clarify threading model
        https://bugs.webkit.org/show_bug.cgi?id=187055
        <rdar://problem/41584026>

        Unreviewed, temporarily disable main thread assertion added to flushAndDestroyPersistentStore()
        in r233310, until Bug 187143 is fixed.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):

2018-06-28  Youenn Fablet  <youenn@apple.com>

        Add sandbox to microdone plugin
        https://bugs.webkit.org/show_bug.cgi?id=187149
        rdar://problem/41538057

        Reviewed by Brent Fulgham.

        * Resources/PlugInSandboxProfiles/cn.microdone.cmb.safari: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-06-28  Brian Burg  <bburg@apple.com>

        Web Inspector: REGRESSION(r223770): "Open Link" context menu action on a linkified URL doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=187146
        <rdar://problem/41369591>

        Reviewed by Joseph Pecoraro.

        When Web Inspector's page receives a navigation request, it's supposed to redirect any
        non-Inspector navigations to be loaded in the inspected page. When I refactored to use
        modern a policy delegate, the one line that redirects the loads was left out.

        No new tests, because inspector tests can't navigate the inspector or inspected pages.

        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController webView:decidePolicyForNavigationAction:decisionHandler:]):

2018-06-28  Jeremy Jones  <jeremyj@apple.com>

        Crash when _topConstraint is null in element fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=187075

        Reviewed by Eric Carlson.

        NSArray can't contain a null pointer, so check for null before creating an array from a pointer.
        Use the recommended +deactivateConstraints: instead of -removeConstraints:.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController showUI]):
        (-[WKFullScreenViewController hideUI]):

2018-06-28  Chris Dumez  <cdumez@apple.com>

        Split memory store logic out of WebResourceLoadStatisticsStore to clarify threading model
        https://bugs.webkit.org/show_bug.cgi?id=187055
        <rdar://problem/41584026>

        Reviewed by Brent Fulgham.

        Split memory store logic out of WebResourceLoadStatisticsStore and into a ResourceLoadStatisticsMemoryStore class
        to clarify the threading model. Previously, some of the methods of the WebResourceLoadStatisticsStore had to be
        called on the main thread and some of them on the background queue, which was confusing and error prone. Now,
        all WebResourceLoadStatisticsStore methods (except for IPC ones which will be addressed in a follow-up) are called
        on the main thread. The ResourceLoadStatisticsMemoryStore objects is constructed / used and destroyed on the
        background queue, similarly to the ResourceLoadStatisticsPersistentStore. The WebResourceLoadStatisticsStore
        objects merely proxies calls from WebKit to those persistent / memory stores and takes care of hopping back and
        forth between the background thread and the work queue.

        While spliting code code, I found several instances where we were calling completion handlers on the wrong thread.
        I fixed those in this patch now that the model is clearer.

        We can likely clean up (organize the code a bit better) in a follow-up). This patch takes care of splitting the
        code as it was. Code that was called on the background queue was moved to ResourceLoadStatisticsMemoryStore class
        and code that was called on the main thread stays in WebResourceLoadStatisticsStore.

        * CMakeLists.txt:
        * UIProcess/Cocoa/ResourceLoadStatisticsMemoryStoreCocoa.mm: Renamed from Source/WebKit/UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm.
        (WebKit::ResourceLoadStatisticsMemoryStore::registerUserDefaultsIfNeeded):
        * UIProcess/ResourceLoadStatisticsMemoryStore.cpp: Added.
        (WebKit::appendWithDelimiter):
        (WebKit::OperatingDate::fromWallTime):
        (WebKit::OperatingDate::today):
        (WebKit::OperatingDate::secondsSinceEpoch const):
        (WebKit::OperatingDate::operator== const):
        (WebKit::OperatingDate::operator< const):
        (WebKit::OperatingDate::operator<= const):
        (WebKit::OperatingDate::OperatingDate):
        (WebKit::mergeOperatingDates):
        (WebKit::pruneResources):
        (WebKit::computeImportance):
        (WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
        (WebKit::ResourceLoadStatisticsMemoryStore::~ResourceLoadStatisticsMemoryStore):
        (WebKit::ResourceLoadStatisticsMemoryStore::setPersistentStorage):
        (WebKit::ResourceLoadStatisticsMemoryStore::calculateAndSubmitTelemetry):
        (WebKit::ResourceLoadStatisticsMemoryStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::ResourceLoadStatisticsMemoryStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::ResourceLoadStatisticsMemoryStore::setShouldSubmitTelemetry):
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::recursivelyGetAllDomainsThatHaveRedirectedToThisDomain):
        (WebKit::ResourceLoadStatisticsMemoryStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsMemoryStore::processStatisticsAndDataRecords):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsMemoryStore::grandfatherExistingWebsiteData):
        (WebKit::ResourceLoadStatisticsMemoryStore::setResourceLoadStatisticsDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::scheduleStatisticsProcessingRequestIfNecessary):
        (WebKit::ResourceLoadStatisticsMemoryStore::cancelPendingStatisticsProcessingRequest):
        (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsMemoryStore::logUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::logNonRecentUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::setPrevalentResource):
        (WebKit::ResourceLoadStatisticsMemoryStore::isPrevalentResource const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isVeryPrevalentResource const):
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsSubFrameUnder):
        (WebKit::ResourceLoadStatisticsMemoryStore::isRegisteredAsRedirectingTo):
        (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::setTimeToLiveUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::setTimeToLiveCookiePartitionFree):
        (WebKit::ResourceLoadStatisticsMemoryStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::ResourceLoadStatisticsMemoryStore::setGrandfatheringTime):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveDataRecords const):
        (WebKit::ResourceLoadStatisticsMemoryStore::setDataRecordsBeingRemoved):
        (WebKit::ResourceLoadStatisticsMemoryStore::ensureResourceStatisticsForPrimaryDomain):
        (WebKit::ResourceLoadStatisticsMemoryStore::createEncoderFromData const):
        (WebKit::ResourceLoadStatisticsMemoryStore::mergeWithDataFromDecoder):
        (WebKit::ResourceLoadStatisticsMemoryStore::clear):
        (WebKit::ResourceLoadStatisticsMemoryStore::wasAccessedAsFirstPartyDueToUserInteraction):
        (WebKit::ResourceLoadStatisticsMemoryStore::mergeStatistics):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldPartitionCookies):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldBlockCookies):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasUserGrantedStorageAccessThroughPrompt):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookiePartitioning):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookiePartitioningForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::clearPartitioningStateForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::resetCookiePartitioningState):
        (WebKit::ResourceLoadStatisticsMemoryStore::processStatistics const):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasHadUnexpiredRecentUserInteraction const):
        (WebKit::ResourceLoadStatisticsMemoryStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor):
        (WebKit::ResourceLoadStatisticsMemoryStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStatisticsExpired const):
        (WebKit::ResourceLoadStatisticsMemoryStore::setMaxStatisticsEntries):
        (WebKit::ResourceLoadStatisticsMemoryStore::setPruneEntriesDownTo):
        (WebKit::ResourceLoadStatisticsMemoryStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsMemoryStore::resetParametersToDefaultValues):
        (WebKit::ResourceLoadStatisticsMemoryStore::logTestingEvent):
        (WebKit::ResourceLoadStatisticsMemoryStore::setLastSeen):
        (WebKit::ResourceLoadStatisticsMemoryStore::setVeryPrevalentResource):
        (WebKit::ResourceLoadStatisticsMemoryStore::removeAllStorageAccess):
        * UIProcess/ResourceLoadStatisticsMemoryStore.h: Added.
        (WebKit::ResourceLoadStatisticsMemoryStore::isEmpty const):
        (WebKit::ResourceLoadStatisticsMemoryStore::setStorageAccessPromptsEnabled):
        (WebKit::ResourceLoadStatisticsMemoryStore::setDebugLogggingEnabled):
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::ResourceLoadStatisticsPersistentStorage):
        (WebKit::ResourceLoadStatisticsPersistentStorage::startMonitoringDisk):
        (WebKit::ResourceLoadStatisticsPersistentStorage::monitorDirectoryForNewStatistics):
        (WebKit::ResourceLoadStatisticsPersistentStorage::scheduleOrWriteMemoryStore):
        * UIProcess/ResourceLoadStatisticsPersistentStorage.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebResourceLoadStatisticsStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsStore::setShouldSubmitTelemetry):
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        (WebKit::WebResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::performDailyTasks):
        (WebKit::WebResourceLoadStatisticsStore::submitTelemetry):
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::logNonRecentUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource):
        (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::scheduleCookiePartitioningUpdate):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearPartitioningStateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningStateReset):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemory):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebResourceLoadStatisticsStore::setTimeToLiveUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::setTimeToLiveCookiePartitionFree):
        (WebKit::WebResourceLoadStatisticsStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::WebResourceLoadStatisticsStore::setGrandfatheringTime):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToPartitionOrBlockCookiesHandler):
        (WebKit::WebResourceLoadStatisticsStore::callRemoveDomainsHandler):
        (WebKit::WebResourceLoadStatisticsStore::setMaxStatisticsEntries):
        (WebKit::WebResourceLoadStatisticsStore::setPruneEntriesDownTo):
        (WebKit::WebResourceLoadStatisticsStore::resetParametersToDefaultValues):
        (WebKit::WebResourceLoadStatisticsStore::logTestingEvent):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::sortedPrevalentResourceTelemetry):
        (WebKit::WebResourceLoadStatisticsTelemetry::calculateAndSubmit):
        * UIProcess/WebResourceLoadStatisticsTelemetry.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-06-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] ASSERTION FAILED: !HashTranslator::equal(KeyTraits::emptyValue(), key) when dragging file into webview
        https://bugs.webkit.org/show_bug.cgi?id=175602

        Reviewed by Carlos Garcia Campos.

        We check using the GdkDragContext to ensure the DroppingContext is still alive (present in
        m_droppingContexts), but access it via the pointer to the DroppingContext that could be
        dangling. This happens on every drag. I can't actually reproduce the original assertion
        since I'm currently working with an asan build, but I imagine it's probably the same issue
        that I'm fixing here.

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

2018-06-27  Timothy Hatcher  <timothy@apple.com>

        Don't expose new semantic -apple-system color keywords on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=187080
        rdar://problem/41505699

        Reviewed by Tim Horton.

        * DerivedSources.make: Use gnu++14, since gnu++17 is giving errors on macOS 10.12.

2018-06-27  Megan Gardner  <megan_gardner@apple.com>

        Fix IBeam issues with iPad apps on Mac
        https://bugs.webkit.org/show_bug.cgi?id=186900

        Reviewed by Wenson Hsieh.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Add functionality to determine what a caret rect should be, but as it is
        expensive, it should only be done for this platform.
        
        * Shared/ios/InteractionInformationRequest.cpp:
        (WebKit::InteractionInformationRequest::isApproximateForRequest):
        * Shared/ios/InteractionInformationRequest.h:

        As there is no way to premptively request information on hover, we need to use 
        the last cached information, but only if it is close to the point we are about
        to request information for. So having a way to determine if a point is very close
        to a previous point is a good idea.

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

        UIKit is using this function to determine if we should show an Ibeam or not.
        So we need to implement it, at least for this platform. 

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

        Pass up the calculated caret rect, but only for iPad apps on Mac.

2018-06-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK][WPE] Use LazyNeverDestroyed<XErrorTrapper> to remove static initializers
        https://bugs.webkit.org/show_bug.cgi?id=187089

        Reviewed by Michael Catanzaro.

        Use LazyNeverDestroyed<XErrorTrapper> instead of global std::unique_ptr<XErrorTrapper>.
        Since this variable's exit time destructor is not important in this code, using
        LazyNeverDestroyed<XErrorTrapper> is fine. This removes the last static initializer
        of libwebkit2gtk.so.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:

2018-06-27  Youenn Fablet  <youenn@apple.com>

        Add a sandbox profile for some additional bank plugins
        https://bugs.webkit.org/show_bug.cgi?id=187105

        Reviewed by Brent Fulgham.

        * Resources/PlugInSandboxProfiles/cfca.com.npCryptoKit.CGB.MAC.sb: Added.
        * Resources/PlugInSandboxProfiles/cfca.com.npP11CertEnroll.MAC.CGB.sb: Added.
        * Resources/PlugInSandboxProfiles/com.apple.BocomSubmitCtrl.sb: Added.
        * Resources/PlugInSandboxProfiles/com.apple.NPSafeInput.sb: Added.
        * Resources/PlugInSandboxProfiles/com.apple.NPSafeSubmit.sb: Added.
        * Resources/PlugInSandboxProfiles/com.cfca.npSecEditCtl.MAC.BOC.plugin.sb: Added.
        * Resources/PlugInSandboxProfiles/com.cmbchina.CMBSecurity.sb: Added.
        * Resources/PlugInSandboxProfiles/com.ftsafe.NPAPI-Core-Safe-SoftKeybaord.plugin.rfc1034identifier.sb: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-06-27  Youenn Fablet  <youenn@apple.com>

        NetworkLoadChecker should not need to hard ref NetworkConnectionToWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=186551

        Reviewed by Daniel Bates.

        Removed the need for NetworkLoadChecker to reference a NetworkConnectionToWebProcess.
        Instead a CSP client is given to NetworkLoadChecker when needed.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::check):
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::contentSecurityPolicy):
        (WebKit::NetworkLoadChecker::addConsoleMessage): Deleted.
        (WebKit::NetworkLoadChecker::sendCSPViolationReport): Deleted.
        (WebKit::NetworkLoadChecker::enqueueSecurityPolicyViolationEvent): Deleted.
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        (WebKit::PingLoad::willPerformHTTPRedirection):
        * NetworkProcess/PingLoad.h:

2018-06-27  Stephan Szabo  <stephan.szabo@sony.com>

        [Wincairo] Add support for context menus to non-legacy minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=186815.

        Reviewed by Ryosuke Niwa.

        * UIProcess/WebPageProxy.h:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::viewWidget):
        * UIProcess/win/PageClientImpl.h:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        (WebKit::WebContextMenuProxyWin::show):
        (WebKit::createMenu):
        (WebKit::createMenuItem):
        (WebKit::populate):
        (WebKit::WebContextMenuProxyWin::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyWin::WebContextMenuProxyWin):
        (WebKit::WebContextMenuProxyWin::~WebContextMenuProxyWin):
        * UIProcess/win/WebContextMenuProxyWin.h:
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::viewWidget):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc):
        (WebKit::WebView::onMenuCommand):
        * UIProcess/win/WebView.h:

2018-06-27  Youenn Fablet  <youenn@apple.com>

        Disable content blockers in NetworkLoadChecker except for ping loads
        https://bugs.webkit.org/show_bug.cgi?id=187083
        <rdar://problem/41440083>

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::enableContentExtensionsCheck):
        * NetworkProcess/PingLoad.cpp:

2018-06-27  Simon Fraser  <simon.fraser@apple.com>

        https://hackernoon.com/ uses lots of layer backing store
        https://bugs.webkit.org/show_bug.cgi?id=186909
        rdar://problem/40257540

        Reviewed by Tim Horton.
        
        PlatformCALayerRemote was actually holding onto backing stores for layers with
        backing store detached, which could increase memory use. When told that backing stores
        are not attached, explicitly throw away the backing, and re-create it (via setNeedsDisplay)
        when attached. This is now similar to what PlatformLayerCACocoa does.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::setNeedsDisplayInRect):
        (WebKit::PlatformCALayerRemote::setNeedsDisplay):
        (WebKit::PlatformCALayerRemote::hasContents const):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:

2018-06-27  Jonathan Bedard  <jbedard@apple.com>

        Enable WebKit iOS 12 build
        https://bugs.webkit.org/show_bug.cgi?id=187024
        <rdar://problem/39759057>

        Reviewed by David Kilzer.

        * Platform/spi/ios/PDFKitSPI.h: Added PDFKit SPI.
        * Platform/spi/ios/UIKitSPI.h: Add new UIKit SPI and UICompositingMode enumeration.
        * UIProcess/ios/WKPDFView.mm: Use PDFKitSPI header.
        * UIProcess/ios/WKSystemPreviewView.mm: Use CoreGraphicsSPI.h.
        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm: Use QuartzCoreSPI.h.

2018-06-27  Timothy Horton  <timothy_horton@apple.com>

        CSS Animation Triggers is not an experimental feature, should be globally off by default

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2018-06-27  Timothy Horton  <timothy_horton@apple.com>

        Promote the Secure Context API feature from experimental-yet-on-by-default to always-on

        Reviewed by Dan Bates.

        * Shared/WebPreferences.yaml:
        Secure Context API is on by default, it's not experimental anymore.

2018-06-27  Timothy Horton  <timothy_horton@apple.com>

        Make Link Preload an on-by-default feature
        https://bugs.webkit.org/show_bug.cgi?id=187104

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferences.yaml:
        This should be on, not experimental. It already shipped on in the past.

2018-06-27  Chris Dumez  <cdumez@apple.com>

        Regression(r233208): Completion handler does not get called on GTK port
        https://bugs.webkit.org/show_bug.cgi?id=187099

        Reviewed by Antti Koivisto.

        Make sure UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler's completion handler
        gets called on non-COCOA ports.

        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-06-27  Tim Horton  <timothy_horton@apple.com>

        When trying to print a very long email on iOS, the print preview is blank
        https://bugs.webkit.org/show_bug.cgi?id=187077
        <rdar://problem/41107013>

        Reviewed by Timothy Hatcher.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF):
        ChildProcessProxy::sendSync has a (surprising) default timeout of 1 second,
        (as opposed to Connection::sendSync's default timeout of ∞ seconds).
        The printing path already waits ∞ seconds for the final PDF, but currently
        uses the default 1 second timeout for page count computation. If page
        count computation takes more than 1 second, the preview will be blank.
        Since the print preview is generated asynchronously, we really want
        to wait until it's done, and not give up after 1 second.

2018-06-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPad apps on macOS] Unable to interact with video elements that have started playing
        https://bugs.webkit.org/show_bug.cgi?id=187073
        <rdar://problem/40591107>

        Reviewed by Tim Horton.

        On iOS, we currently force remote hosting contexts to be non-interactive by passing in `kCAContextIgnoresHitTest`
        when creating the CAContext. However, this flag is not respected by CoreAnimation when running iOS apps on macOS.
        This means all HID events dispatched over a video that has been played (which causes WebKit to insert a
        CALayerHost-backed WKRemoteView in the view hierarchy) will be routed to the context ID of the video's CAContext
        rather than the context ID of the key window containing the WKWebView.

        This subsequently causes all gesture recognizers (hover, touch, tap, long press) to fail recognition when
        running iOS apps on macOS. To address this, we set a flag on WKRemoteView's CALayerHost to prevent hit-testing
        to the remote layer. This allows us to avoid routing HID events to the wrong context, and instead target the
        main UIWindow.

        Manually verified that click, touch, and mouseenter/mouseleave events are dispatched when interacting over a
        video element.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (-[WKRemoteView initWithFrame:contextID:]):

2018-06-26  Commit Queue  <commit-queue@webkit.org>

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

        "This is breaking launching some plugins" (Requested by youenn
        on #webkit).

        Reverted changeset:

        "Remove quarantine for Webex plugin"
        https://bugs.webkit.org/show_bug.cgi?id=187050
        https://trac.webkit.org/changeset/233232

2018-06-26  Timothy Horton  <timothy_horton@apple.com>

        Rearrange some WebPreferences; move two experimental prefs into the experimental section

        * Shared/WebPreferences.yaml:

2018-06-26  Chris Dumez  <cdumez@apple.com>

        Deal better with the network process crashing on startup
        https://bugs.webkit.org/show_bug.cgi?id=187065
        <rdar://problem/41451622>

        Reviewed by Geoffrey Garen.

        When a network process crashes on startup, we would not attempt to relaunch it. If there were web
        processes waiting for a connection to this network process, we would send them an invalid connection
        identifier which would cause them to forcefully crash.

        Instead, we now apply the same policy whether a network process crashes on startup or later:
        - We attempt to relaunch the network process
        - If there were pending connections from WebContent processes, we ask the new Network process instead.

        As a result, WebContent processes no longer crash in this case. Instead, they wait for a valid
        connection to the network process.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _makeNextNetworkProcessLaunchFailForTesting]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessCrashed):
        * UIProcess/WebProcessPool.h:

2018-06-26  Daniel Bates  <dabates@apple.com>

        REGRESSION (r231479): Unable to buy Odeon cinema tickets in STP (bogus 'X-Frame-Options' to 'SAMEORIGIN')
        https://bugs.webkit.org/show_bug.cgi?id=186090
        <rdar://problem/40692595>

        Reviewed by Andy Estes.

        Fixes an issue where a page P delivered with "X-Frame-Options: SAMEORIGIN" loaded in a sub-
        frame would be blocked if we were redirected to it in response to the cross-origin POST
        request regardless of whether P is same-origin with its parent document.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldInterruptLoadForXFrameOptions): Compare the origin
        of the top frame's document as opposed to the source origin. The latter represents the
        origin of the document that initiated the navigation, which can be cross-origin, and
        should not be considered when applying "X-Frame-Options: SAMEORIGIN". This check exists
        as a performance optimization to avoid traversing over all frame ancestors only to find
        out that the innermost frame (the one that made this request) is cross-origin with the
        top-most frame.
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess): Exclude the origin of the
        frame that is making the load request from the list of ancestor origins. This makes the
        X-Frame-Options algorithm in WebKit2 match the logic we do in FrameLoader::shouldInterruptLoadForXFrameOptions().

2018-06-26  Youenn Fablet  <youenn@apple.com>

        Remove quarantine for Webex plugin
        https://bugs.webkit.org/show_bug.cgi?id=187050
        rdar://problem/41478189

        Reviewed by Brent Fulgham.

        Update the Plugin Info.plist to not do quarantine of downloaded files by default.
        Update PluginProcess implementation to reenable quarantine for all plug-ins except cisco webex plug-in.

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::shouldOverrideQuarantine):
        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::shouldOverrideQuarantine):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):

2018-06-26  Jeremy Jones  <jeremyj@apple.com>

        Ensure element fullscreen animation is always visible.
        https://bugs.webkit.org/show_bug.cgi?id=187068
        rdar://problem/36187369

        Reviewed by Eric Carlson.

        The fullscreen animation is important for communicating to users that they are no longer in inline mode.
        If fullscreen animation's inline rect is not visible, animate from a point in the middle of the screen.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (WebKit::safeInlineRect):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):

2018-06-26  Youenn Fablet  <youenn@apple.com>

        Add a sandbox profile for com.google.o1dbrowserplugin plugin
        https://bugs.webkit.org/show_bug.cgi?id=187067

        Reviewed by Brent Fulgham.

        * Resources/PlugInSandboxProfiles/com.google.o1dbrowserplugin.sb: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-06-26  Tim Horton  <timothy_horton@apple.com>

        Promote two more experimental features to traditional features
        https://bugs.webkit.org/show_bug.cgi?id=187063

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:
        Promote some shipped/default-on features to non-experimental.

2018-06-26  Jiewen Tan  <jiewen_tan@apple.com>

        Rollout macOS sandbox change in r232276
        https://bugs.webkit.org/show_bug.cgi?id=186904
        <rdar://problem/41350969>

        Reviewed by Brent Fulgham.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2018-06-26  Aditya Keerthi  <akeerthi@apple.com>

        Tap highlight displayed when tapping a field that is already focussed
        https://bugs.webkit.org/show_bug.cgi?id=187004
        <rdar://problem/41428008>
        Reviewed by Tim Horton.

        In the case where fast-clicking is enabled, _singleTapCommited: could be invoked
        before the tap highlight request, causing _potentialTapInProgress to be set to NO.
        This results in the early return for preventing multiple tap highlights on an
        assisted node to be skipped. Since a tap highlight should never be shown for an
        input field that is already focussed, _potentialTapInProgress can be removed from
        the early return condition.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]):

2018-06-26  Timothy Horton  <timothy_horton@apple.com>

        Rearrange some WebPreferences; move two non-experimental prefs out of the experimental section

        * Shared/WebPreferences.yaml:

2018-06-26  Tim Horton  <timothy_horton@apple.com>

        Promote some experimental features to traditional features
        https://bugs.webkit.org/show_bug.cgi?id=187047

        Reviewed by Simon Fraser.

        * Shared/WebPreferences.yaml:
        Reindent.
        Promote some shipped/default-on features to non-experimental.

2018-06-26  Eric Carlson  <eric.carlson@apple.com>

        [Mac] AirPlay picker uses incorrect theme in Dark mode
        https://bugs.webkit.org/show_bug.cgi?id=187054
        <rdar://problem/41291093>

        Reviewed by Timothy Hatcher.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPlaybackTargetPicker): Pass m_defaultAppearance.

2018-06-26  Chris Dumez  <cdumez@apple.com>

        Resource Load Statistics: Make WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains() wait for the network process before calling its callback
        https://bugs.webkit.org/show_bug.cgi?id=186903
        <rdar://problem/41350182>

        Reviewed by Brady Eidson.

        Follow-up fix after r233180 to address an API test crash. We need to keep the
        NetworkProcessProxy alive during the async updatePrevalentDomainsToPartitionOrBlockCookies
        request to make sure it completes.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToPartitionOrBlockCookies):

2018-06-26  Brent Fulgham  <bfulgham@apple.com>

        Provide a way for Injected Bundles to indicate classes approved for NSSecureCoding
        https://bugs.webkit.org/show_bug.cgi?id=186788
        <rdar://problem/41094167>

        Reviewed by Chris Dumez.

        InjectedBundles support a mechanism to serialize data between the UIProcess and the
        WebContent process hosting the bundle. In some cases, we want to be able to serialize
        a custom data object that is not part of WebKit's native data types.

        After switching to strict NSSecureCoding, WebKit clients attempting to serialize these
        custom objects trigger a failure.

        This patch makes it possible for the InjectedBundle author to specify one (or more) data
        classes that are allowed to be serialized between the two processes.
        
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleExtendClassesForParameterCoder): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        (createWKArray): Added.
        (-[WKWebProcessPlugInController extendClassesForParameterCoder:]): Added.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::extendClassesForParameterCoder): Added.
        (WebKit::InjectedBundle::classesForCoder): New helper function.
        (WebKit::InjectedBundle::setBundleParameter): Modified to use the new set of valid
        classes for NSSecureCoding.

2018-06-26  Eric Carlson  <eric.carlson@apple.com>

        Enable mock capture devices on the iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=186846
        <rdar://problem/41289134>

        Reviewed by Youenn Fablet.

        * Shared/WebPreferences.yaml: Use DEFAULT_MOCK_CAPTURE_DEVICES_ENABLED.
        * Shared/WebPreferencesDefaultValues.h: Define DEFAULT_MOCK_CAPTURE_DEVICES_ENABLED, set to
        true in the iOS simulator only.

2018-06-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] 'deref': is not a member of 'WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains::<lambda_9d761a6dc12d95db7fa2d6f3f5aa26fa>'
        https://bugs.webkit.org/show_bug.cgi?id=187035

        Unreviewed build fix.

        MSVC can't compile the code using `this` in a generalized lambda
        capture in another lambda.

        In this case, there is no need to copy `protectedThis` for the
        inner lambda. Move `protectedThis` of the outer lambda to the
        inner as well as `completionHandler`.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning):
        Moved `protectedThis` from the outer lambda to the inner.
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains):
        Ditto.

2018-06-26  Miguel Gomez  <magomez@igalia.com>

        [GTK] Many webpages can crash the browser in WebCore::CoordinatedGraphicsLayer::transformedVisibleRect
        https://bugs.webkit.org/show_bug.cgi?id=179304

        Reviewed by Michael Catanzaro.

        Add a way to attach to the CompositingCoordinator layers that were not created by it.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::attachLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:

2018-06-25  Tim Horton  <timothy_horton@apple.com>

        WKThumbnailView fallback background is blindingly bright in Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=187017
        <rdar://problem/41036209>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView initWithFrame:]):
        (-[_WKThumbnailView wantsUpdateLayer]):
        (-[_WKThumbnailView updateLayer]):
        Use a semantic color for the WKThumbnailView background color
        instead of flat white.

2018-06-25  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains() wait for the network process before calling its callback
        https://bugs.webkit.org/show_bug.cgi?id=186903
        <rdar://problem/41350182>

        Reviewed by Chris Dumez.

        This patch stores the callback sent to
        WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains(),
        sets up a context ID, and sends that ID to the network process when
        asking it to update cookie partitioning and blocking. The network
        process then tells the UI process when it's done, at which point the
        callback is called.

        This change is meant to address layout test flakiness.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updatePrevalentDomainsToPartitionOrBlockCookies):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updatePrevalentDomainsToPartitionOrBlockCookies):
        (WebKit::NetworkProcessProxy::didUpdatePartitionOrBlockCookies):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning):
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::updatePrevalentDomainsToPartitionOrBlockCookies):
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-06-25  Brent Fulgham  <bfulgham@apple.com>

        Allow access to APTDevice in iOS WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=187021
        <rdar://problem/41339769>

        Reviewed by Youenn Fablet.

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

2018-06-25  Keith Rollin  <krollin@apple.com>
        Unreviewed, rolling out r233087.

        Causes 5% Mac PLT regression.

        Reverted changeset:

        "Recalc styles every time defaultAppearance changes."
        https://bugs.webkit.org/show_bug.cgi?id=186866
        https://trac.webkit.org/changeset/233087

2018-06-25  Youenn Fablet  <youenn@apple.com>

        Add a sandbox profile to Hangout plug-in
        https://bugs.webkit.org/show_bug.cgi?id=187005
        <rdar://problem/41428391>

        Reviewed by Brent Fulgham.

        Add a sandbox profile so that this plug-in can be run when UIProcess is sandboxed.

        * Resources/PlugInSandboxProfiles/com.google.googletalkbrowserplugin.sb: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-06-25  Youenn Fablet  <youenn@apple.com>

        NetworkLoadChecker should not check CORS for 304 responses triggered by WebProcess revalidation
        https://bugs.webkit.org/show_bug.cgi?id=186939
        <rdar://problem/40941725>

        Reviewed by Chris Dumez.

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

2018-06-25  Keith Rollin  <krollin@apple.com>

        Adjust UNEXPORTED_SYMBOL_LDFLAGS for LTO
        https://bugs.webkit.org/show_bug.cgi?id=186949
        <rdar://problem/41386438>

        Reviewed by David Kilzer.

        When building with LTO, WebKit's
        'check-for-weak-vtables-and-externals' script reports weak external
        symbols:

        ERROR: WebKit has a weak external symbol in it (.../OpenSource/WebKitBuild/Release/WebKit.framework/Versions/A/WebKit)
        ERROR: A weak external symbol is generated when a symbol is defined in multiple compilation units and is also marked as being exported from the library.
        ERROR: A common cause of weak external symbols is when an inline function is listed in the linker export file.
        ERROR: symbol __ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE
        ERROR: symbol __ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE
        ERROR: symbol __ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE16_NS_13basic_ostreamIcS2_EE
        ERROR: symbol __ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE
        ERROR: symbol __ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE
        ERROR: symbol __ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE
        Command /bin/sh failed with exit code 1

        Address these by adding those symbols to UNEXPORTED_SYMBOL_LDFLAGS in
        WebKit.xcconfig.

        * Configurations/WebKit.xcconfig:

2018-06-25  Chris Dumez  <cdumez@apple.com>

        Make sure API::IconLoadingClient::getLoadDecisionForIcon()'s completion handler gets called
        https://bugs.webkit.org/show_bug.cgi?id=187007
        <rdar://problem/41293989>

        Reviewed by Brady Eidson.

        Make sure API::IconLoadingClient::getLoadDecisionForIcon()'s completion handler gets called by
        switching its type to WTF::CompletionHandler instead of WTF::Function. This also has the benefit
        of destroying our captured objects when the completion handler gets called by the client on the
        main thread instead of whatever thread the ObjC block gets released on.

        * UIProcess/API/APIIconLoadingClient.h:
        (API::IconLoadingClient::getLoadDecisionForIcon):
        * UIProcess/API/glib/WebKitIconLoadingClient.cpp:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView maybeInstallIconLoadingClient]):
        * UIProcess/Cocoa/IconLoadingDelegate.h:
        * UIProcess/Cocoa/IconLoadingDelegate.mm:
        (WebKit::IconLoadingDelegate::IconLoadingClient::getLoadDecisionForIcon):

2018-06-25  Youenn Fablet  <youenn@apple.com>

        Add API to control mock media devices
        https://bugs.webkit.org/show_bug.cgi?id=186958

        Reviewed by Eric Carlson.

        Add API to clear, set, remove and reset mock media devices.
        The mock media center of UIProcess and all WebProcesses are updated.

        * CMakeLists.txt:
        * UIProcess/API/C/WKMockMediaDevice.cpp: Added.
        (typeFromString):
        (WKAddMockMediaDevice):
        (WKClearMockMediaDevices):
        (WKRemoveMockMediaDevice):
        (WKResetMockMediaDevices):
        * UIProcess/API/C/WKMockMediaDevice.h: Added.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::addMockMediaDevice):
        (WebKit::WebProcessPool::clearMockMediaDevices):
        (WebKit::WebProcessPool::removeMockMediaDevice):
        (WebKit::WebProcessPool::resetMockMediaDevices):
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addMockMediaDevice):
        (WebKit::WebProcess::clearMockMediaDevices):
        (WebKit::WebProcess::removeMockMediaDevice):
        (WebKit::WebProcess::resetMockMediaDevices):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-06-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPad apps on macOS] Click events are broken in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=186964
        <rdar://problem/41369145>

        Reviewed by Tim Horton.

        Tapping in WKWebView currently does not dispatch click events to the page. This is because the long press loupe
        gesture (in the text interaction assistant) has a delay of 0 when running iOS apps on macOS, but on iOS, it's
        0.5. The zero delay on macOS means that the loupe gesture will be recognized before the synthetic click gesture;
        this, in turn, causes the synthetic click gesture to be excluded by the loupe gesture. To address this, we
        simply allow the click and loupe gesture to recognize simultaneously.

        Additionally, a new hover gesture was added recently to handle macOS cursor types when hovering over selectable
        text. This patch also allows other gestures to recognize alongside hover gestures, which matches macOS behavior.

        We don't have the capacity to write automated tests for this yet; I manually tested text selection, editing in
        some text form controls, as well as clicking on links, buttons, and other elements with click event handlers.

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

2018-06-23  Brian Burg  <bburg@apple.com>

        [Mac] Web Automation: include correct key code with synthesized NSEvents used for keystrokes
        https://bugs.webkit.org/show_bug.cgi?id=186937

        Reviewed by Timothy Hatcher.

        In some cases, a missing keyCode for an ASCII letter/number can cause synthesized
        NSEvents to not be converted into a key equivalent action like copy: or paste:.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        Drive by, always initialize keyCode.

        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        (WebKit::keyCodeForCharKey): Compute the keyCode as defined by HLTB headers.
        This only needs to be computed for characters with physical keys, excluding the
        number pad and some traditional virtual keys that do not usually have glyphs.

2018-06-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix GTK debug build after r233131
        https://bugs.webkit.org/show_bug.cgi?id=186899
        <rdar://problem/38222248>

        This assertion was intended to be removed.

        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):

2018-06-21  Brian Burg  <bburg@apple.com>

        Web Automation: key actions should support multiple pressed virtual keys
        https://bugs.webkit.org/show_bug.cgi?id=186899
        <rdar://problem/38222248>

        Reviewed by Timothy Hatcher.

        This patch changes the protocol to allow multiple virtual keys per input source state.
        Chords like Cmd-Shift-A and Shift-F12 must be represented this way as they are encoded
        in the VirtualKey enum rather than as an ASCII char.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::simulateKeyboardInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::performInteractionSequence):

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        Also clean up the signature of WebAutomationSession::platformSimulateKeyboardInteraction
        to use a variant instead of mutually exclusive optional values with different types.

2018-06-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add user-defined literal for ASCIILiteral
        https://bugs.webkit.org/show_bug.cgi?id=186839

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::willPerformHTTPRedirection):
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        (WebKit::NetworkCORSPreflightChecker::wasBlocked):
        (WebKit::NetworkCORSPreflightChecker::cannotShowURL):
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::suggestedFilename const):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::checkRequest):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::willPerformHTTPRedirection):
        (WebKit::PingLoad::didReceiveChallenge):
        (WebKit::PingLoad::timeoutTimerFired):
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::PreconnectTask):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::initialize):
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::toRecordInformation):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::cachesListFilename):
        (WebKit::CacheStorage::cachesOriginFilename):
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::initialize):
        (WebKit::NetworkCache::Statistics::bootstrapFromNetworkCache):
        (WebKit::NetworkCache::Statistics::queryWasEverRequested):
        (WebKit::NetworkCache::Statistics::clear):
        (WebKit::NetworkCache::Statistics::addHashesToDatabase):
        (WebKit::NetworkCache::Statistics::addStoreDecisionsToDatabase):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getExtraInitializationData):
        * Shared/Plugins/Netscape/PluginInformation.cpp:
        (WebKit::pluginInformationBundleIdentifierKey):
        (WebKit::pluginInformationBundleVersionKey):
        (WebKit::pluginInformationBundleShortVersionKey):
        (WebKit::pluginInformationPathKey):
        (WebKit::pluginInformationDisplayNameKey):
        (WebKit::pluginInformationDefaultLoadPolicyKey):
        (WebKit::pluginInformationUpdatePastLastBlockedVersionIsKnownAvailableKey):
        (WebKit::pluginInformationHasSandboxProfileKey):
        (WebKit::pluginInformationFrameURLKey):
        (WebKit::pluginInformationMIMETypeKey):
        (WebKit::pluginInformationPageURLKey):
        (WebKit::pluginInformationPluginspageAttributeURLKey):
        (WebKit::pluginInformationPluginURLKey):
        (WebKit::plugInInformationReplacementObscuredKey):
        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebKeyboardEvent):
        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::WebMemorySampler::sampleWebKit const):
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (debuggableTypeString):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_set_preferred_languages):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext):
        (WebKit::WebAutomationSession::addSingleCookie):
        (WebKit::WebAutomationSession::setSessionPermissions):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::performInteractionSequence):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::getLaunchOptions):
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didStart):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::selectorExceptionMap):
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.cpp:
        (WebKit::WebCredentialsMessengerProxy::makeCredential):
        (WebKit::WebCredentialsMessengerProxy::getAssertion):
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::pluginsDirectories):
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::populateMemoryStoreFromDisk):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::getLaunchOptions):
        (WebKit::ServiceWorkerProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        (WebKit::UserMediaProcessManager::endedCaptureSession):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::goToItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::loadPlainTextString):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::savePDFToFileInDownloadsFolder):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
        * UIProcess/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::notifyPages):
        (WebKit::WebResourceLoadStatisticsTelemetry::calculateAndSubmit):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView copyForWebView:]):
        (-[WKContentView cutForWebView:]):
        (-[WKContentView pasteForWebView:]):
        (-[WKContentView selectAllForWebView:]):
        (-[WKContentView deleteBackward]):
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        * UIProcess/ios/WKLegacyPDFView.mm:
        (-[WKLegacyPDFView _URLForLinkAnnotation:]):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::elementForNodeHandle):
        (WebKit::WebAutomationSessionProxy::didClearWindowObjectForFrame):
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::connectionToServerLost):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentGtk.cpp:
        (webkit_dom_document_get_ready_state):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::uniqueWorldName):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pluginInfo):
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::validateResponse):
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::showPaintRect):
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::initialize):
        (WebKit::RemoteWebInspectorUI::didSave):
        (WebKit::RemoteWebInspectorUI::didAppend):
        (WebKit::RemoteWebInspectorUI::frontendLoaded):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openInNewTab):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::setDockSide):
        (WebKit::WebInspectorUI::setDockingUnavailable):
        (WebKit::WebInspectorUI::setIsVisible):
        (WebKit::WebInspectorUI::showConsole):
        (WebKit::WebInspectorUI::showResources):
        (WebKit::WebInspectorUI::showTimelines):
        (WebKit::WebInspectorUI::showMainResourceForFrame):
        (WebKit::WebInspectorUI::startPageProfiling):
        (WebKit::WebInspectorUI::stopPageProfiling):
        (WebKit::WebInspectorUI::startElementSelection):
        (WebKit::WebInspectorUI::stopElementSelection):
        (WebKit::WebInspectorUI::didSave):
        (WebKit::WebInspectorUI::didAppend):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadStringImpl):
        (WebKit::WebPage::loadAlternateHTMLString):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::computeAutocorrectionContext):
        * WebProcess/WebProcess.cpp:
        (WebKit::getWebCoreMemoryCacheStatistics):
        (WebKit::WebProcess::getWebCoreStatistics):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeProcessName):

2018-06-22  Chris Dumez  <cdumez@apple.com>

        Regression(r230211): Crash under WebInspectorClient::~WebInspectorClient()
        https://bugs.webkit.org/show_bug.cgi?id=186950
        <rdar://problem/40602069>

        Reviewed by Darin Adler.

        Re-introduce null-check that was accidentally dropped in r230211.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::~WebInspectorClient):

2018-06-22  Timothy Hatcher  <timothy@apple.com>

        Corner of two scroll bars is white with dark mode enabled.
        https://bugs.webkit.org/show_bug.cgi?id=186819
        rdar://problem/40434350

        Reviewed by Tim Horton.

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView drawRect:]): Added LocalDefaultSystemAppearance.
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage): Ditto.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::paintControlForLayerInContext): Ditto. Dropped ScrollView argument.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect): Added LocalDefaultSystemAppearance.

2018-06-22  Tim Horton  <timothy_horton@apple.com>

        Make it possible to add a border around loading or failed-to-load images
        https://bugs.webkit.org/show_bug.cgi?id=186614
        <rdar://problem/39050152>

        Reviewed by Zalan Bujtas.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setColorFilterEnabled:]):
        (-[WKWebViewConfiguration _incompleteImageBorderEnabled]):
        (-[WKWebViewConfiguration _setIncompleteImageBorderEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        Plumb the setting to WebKit2.

2018-06-22  Brady Eidson  <beidson@apple.com>

        WKURLSchemeHandler doesn't handle sync XHR.
        <rdar://problem/40955884> and https://bugs.webkit.org/show_bug.cgi?id=186902

        Reviewed by Chris Dumez.

        This patch allows WebProcesses to block on sync loads to a custom scheme,
        and teaches WebURLSchemeTasks how to buffer up data and the response if 
        operating synchronously.

        * Shared/WebErrors.cpp:
        (WebKit::failedCustomProtocolSyncLoad):
        * Shared/WebErrors.h:

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

        * 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):
        (WebKit::WebURLSchemeTask::stop):
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::isSync const):

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::tryLoadingSynchronouslyUsingURLSchemeHandler):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebLoaderStrategy.h:

        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
        (WebKit::WebURLSchemeHandlerProxy::loadSynchronously):
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.h:

2018-06-22  Chris Dumez  <cdumez@apple.com>

        Implement IPC throttling to keep the main thread responsive when a process misbehaves
        https://bugs.webkit.org/show_bug.cgi?id=186607
        <rdar://problem/41073205>

        Reviewed by Geoff Garen and Brady Eidson.

        Implement IPC throttling to keep the main thread responsive when a process misbehaves.
        Instead of doing one main runloop dispatch per incoming message, we now do a single
        runloop dispatch and process incoming messages in batch. We put a limit on the number
        of messages to be processed in a batch (600). If the queue is larger that this limit,
        we'll schedule a 0-timer to process remaining messages, giving the main runloop a chance
        to process other events. Additionally, if an IPC connection keeps hitting this maximum
        batch size limit, we implement back off and we'll further decrease the number of messages
        we process in each batch (going as low as 60). This keeps Safari responsive enough to
        allow the user to close the bad tab (even on older devices such as iPhone 5s).

        Finally, if the incoming message queue becomes too large (50000), we go one step further
        and kill the IPC connection in order to maintain performance / battery life.

        Every time we apply throttling or terminate a connection due to throttling, we do a
        RELEASE_LOG_ERROR() with useful information in order to help diagnose potential issues
        in the future.

        For now, incoming IPC messages throttling is only enabled on the UIProcess' connections
        to the WebProcesses.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::MessagesThrottler::MessagesThrottler):
        (IPC::Connection::MessagesThrottler::scheduleMessagesDispatch):
        (IPC::Connection::MessagesThrottler::numberOfMessagesToProcess):
        (IPC::Connection::dispatchIncomingMessages):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::kill):

2018-06-22  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r231850): Cookie file cannot be read or written by network process
        https://bugs.webkit.org/show_bug.cgi?id=186806
        <rdar://problem/41113791>

        Unreviewed. Fix failure after r233084 by adding missing initialization.

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

2018-06-22  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Home indicator should show and hide with status bar
        https://bugs.webkit.org/show_bug.cgi?id=186942
        <rdar://problem/41302190>

        Reviewed by Tim Horton.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController showUI]):
        (-[WKFullScreenViewController hideUI]):
        (-[WKFullScreenViewController setPrefersHomeIndicatorAutoHidden:]):

2018-06-22  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Add a pinch-to-exit gesture
        https://bugs.webkit.org/show_bug.cgi?id=186821

        Reviewed by Tim Horton.

        Add a pinch gesture recognizer that overrides the pan gesture recognizer when active. Hide the
        WKFullscreenViewController's controls while a dismiss gesture is active.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController setAnimating:]):
        (-[WKFullScreenViewController prefersStatusBarHidden]):
        (-[WKFullScreenViewController gestureRecognizer:shouldReceiveTouch:]):
        (-[WKFullScreenViewController _touchDetected:]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullscreenAnimationController context]):
        (-[WKFullscreenAnimationController updateWithProgress:scale:translation:anchor:]):
        (-[WKFullScreenInteractiveTransition animator]):
        (-[WKFullScreenInteractiveTransition updateInteractiveTransition:withScale:andTranslation:]):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController interactionControllerForDismissal:]):
        (-[WKFullScreenWindowController _startToDismissFullscreenChanged:]):
        (-[WKFullScreenWindowController _dismissFullscreenViewController]):
        (-[WKFullScreenWindowController _interactiveDismissChanged:]):
        (-[WKFullScreenWindowController _interactivePinchDismissChanged:]):

2018-06-22  Brian Burg  <bburg@apple.com>

        [Cocoa] REGRESSION(W3C): actions for key equivalents are not respected
        https://bugs.webkit.org/show_bug.cgi?id=186936

        Reviewed by Timothy Hatcher.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::isSimulatingUserInteraction const):
        This erroneously reported false unless there was both a mouse and key interaction
        being dispatched, which is not possible in the current serial event simulation model.
        As a result, Safari could not tell whether the action came from a simulated event
        or the user, and thus rejected all key equivalents like Cmd-A,V,C,X.

2018-06-22  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Exit fullscreen when opening a new tab
        https://bugs.webkit.org/show_bug.cgi?id=186826
        <rdar://problem/40853211>

        Reviewed by Brent Fulgham.

        Make the fullscreen placeholder view a custom UIView, and exit fullscreen when the
        placeholder is removed from its superview.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenPlaceholderView willMoveToSuperview:]):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        (-[WKFullScreenWindowController placeholderWillMoveToSuperview:]):
        (-[WKFullScreenWindowController _exitFullscreenImmediately]):

2018-06-22  Timothy Horton  <timothy_horton@apple.com>

        Fix the build after r233089

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setColorFilterEnabled:]):
        (-[WKPreferences _colorFilterEnabled]):

2018-06-22  Chris Dumez  <cdumez@apple.com>

        Crash under WebResourceLoadStatisticsStore::mergeStatistics(WTF::Vector<WebCore::ResourceLoadStatistics, 0ul, WTF::CrashOnOverflow, 16ul>&&)
        https://bugs.webkit.org/show_bug.cgi?id=186905
        <rdar://problem/41266775>

        Reviewed by Brent Fulgham.

        I believe the crash was caused by the WebResourceLoadStatisticsStore object being dead
        when mergeStatistics() is called. In particular, the crash was happening when the
        ResourceLoadStatisticsPersistentStorage's FileMonitor would detect a file change and
        we would re-sync statistics from the disk. The FileMonitor's lambda function was
        capturing |this| without ref'ing it, and the FileMonitor monitors the disk and
        calls the lambda on the background queue, while it gets destroyed on the main thread.

        To make lifetime management less complex, the following changes were made:
        - The ResourceLoadStatisticsPersistentStorage object is now always constructed / used
          and destroyed on the background queue. We no longer have to worry about being on
          the right thread in a given method.
        - Now that ResourceLoadStatisticsPersistentStorage is always used from the background
          queue and no longer needs to be thread-safe, drop its ref() / deref() methods and
          use weak pointers instead to make sure the ResourceLoadStatisticsPersistentStorage
          is still alive when a lamdba gets called on the background queue.
        - For write scheduling use WorkQueue::dispatchAfter() and a WeakPtr instead of a
          RunLoop::Timer. This is more convenient to use as the RunLoop::Timer has to be used
          on the main thread.

        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::ResourceLoadStatisticsPersistentStorage):
        (WebKit::ResourceLoadStatisticsPersistentStorage::~ResourceLoadStatisticsPersistentStorage):
        (WebKit::ResourceLoadStatisticsPersistentStorage::startMonitoringDisk):
        (WebKit::ResourceLoadStatisticsPersistentStorage::monitorDirectoryForNewStatistics):
        (WebKit::ResourceLoadStatisticsPersistentStorage::scheduleOrWriteMemoryStore):
        * UIProcess/ResourceLoadStatisticsPersistentStorage.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        (WebKit::WebResourceLoadStatisticsStore::processStatisticsAndDataRecords):
        (WebKit::WebResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
        (WebKit::WebResourceLoadStatisticsStore::applicationWillTerminate):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-06-21  Jer Noble  <jer.noble@apple.com>

        CRASH in WebCore::VideoFullscreenInterfaceMac::~VideoFullscreenInterfaceMac()
        https://bugs.webkit.org/show_bug.cgi?id=186892

        Reviewed by Eric Carlson.

        Protect against m_contentMap being mutated while its contents are being invalidated
        by moving the map into a local variable and iterating over it instead.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::invalidate):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::invalidate):

2018-06-22  Luming Yin  <luming_yin@apple.com>

        Expose colorFilterEnabled SPI in WKPreferencesPrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=186935
        <rdar://problem/41109387>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setColorFilterEnabled:]):
        (-[WKPreferences _colorFilterEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-06-22  Timothy Hatcher  <timothy@apple.com>

        Recalc styles every time defaultAppearance changes.
        https://bugs.webkit.org/show_bug.cgi?id=186866
        rdar://problem/41309805

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setDefaultAppearance):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDefaultAppearance):

2018-06-22  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r231850): Cookie file cannot be read or written by network process
        https://bugs.webkit.org/show_bug.cgi?id=186806
        <rdar://problem/41113791>

        Reviewed by Geoffrey Garen.

        Add defaultSessionPendingCookies to NetworkProcessCreationParameters, so pending cookies of default session 
        can be added right after default session is set. This improves the fix r231850 as it does not send additional 
        message and avoids the regression.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2018-06-22  Brent Fulgham  <bfulgham@apple.com>

        [iOS Debug] Multiple resourceLoadStatistics redirect tests are flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=183216
        <rdar://problem/37992317>

        Reviewed by Chris Dumez.

        Improve consistency of test results by make sure that completion handlers written to run
        on the main thread are only called on the main thread. Add additional assertions to help
        catch any cases where this invariant is not being honored.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess): Use Completion handler and assert
        we are on the right thread.
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::logNonRecentUserInteraction): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setLastSeen): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::isPrevalentResource): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource): 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.
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdate): 
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearPartitioningStateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningStateReset):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent): Update to perform callbacks
        on the main thread (as intended). This function was doing them on a work queue.
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::clearPartitioningStateForDomains): Ditto.
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-06-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r230950): [GTK] WebKit::CoordinatedBackingStoreTile::setBackBuffer(): WebKitWebProcess killed by SIGSEGV (ASSERTION FAILED: it != m_tiles.end())
        https://bugs.webkit.org/show_bug.cgi?id=186206

        Unreviewed manual rollout of r230950

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::layerShouldHaveBackingStore):

2018-06-20  Darin Adler  <darin@apple.com>

        [Cocoa] Use the isDirectory: variants of NSURL methods more to eliminate unnecessary file system activity
        https://bugs.webkit.org/show_bug.cgi?id=186875

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::tempDirectoryFileSystemRepresentation): Use isDirectory:YES to create a URL
        to the temporary directory.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::namesOfPromisedFilesDroppedAtDestination): Use isDirectory:NO to create a URL
        pointing to the write location.
        * UIProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm:
        (WebKit::LocalStorageDatabaseTracker::platformMaybeExcludeFromBackup const): Use isDirectory:YES to
        create a URL for the local storage directory.
        * UIProcess/ios/ResourceLoadStatisticsPersistentStorageIOS.mm:
        (WebKit::ResourceLoadStatisticsPersistentStorage::excludeFromBackup const): Use isDirectory:NO to
        create a URL for the storage directory.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _prepareToDragPromisedBlob:]): Use isDirectory:NO to create a URL for the temporary
        file location.
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _uploadItemForImageData:imageName:successBlock:failureBlock:]): Use isDirectory:NO
        to create a URL for the image file to upload.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorPageURL): Use isDirectory:NO to create a URL for the HTML file.
        (WebKit::WebInspectorProxy::inspectorTestPageURL): Ditto.
        (WebKit::WebInspectorProxy::inspectorBaseURL): Ditto.
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::createIconForFiles): Use isDirectory:NO to create a URL for the image file.
        * WebProcess/WebPage/mac/WebInspectorUIMac.mm:
        (WebKit::webInspectorUILocalizedStringsURL): Use isDirectory:NO to create a URL for the localized
        strings file.

2018-06-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r232995.

        Seems to have caused flakiness

        Reverted changeset:

        "Implement IPC throttling to keep the main thread responsive
        when a process misbehaves"
        https://bugs.webkit.org/show_bug.cgi?id=186607
        https://trac.webkit.org/changeset/232995

2018-06-15  Jer Noble  <jer.noble@apple.com>

        Address fullscreen api CSS env feedback
        https://bugs.webkit.org/show_bug.cgi?id=186684

        Reviewed by Simon Fraser.

        + Update the phishing alert text to be more explicit about the specific threats
          phishing sites represent.
        + Make the top inset static, rather than dynamic.
        + Add bottom, left, and right insets for completeness.
        + Set the fullscreen animation duration as well as delay.
        + Notify the page when the controls show and hide.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::setFullscreenInsets):
        (WebKit::WebFullScreenManagerProxy::setFullscreenAutoHideTiming):
        (WebKit::WebFullScreenManagerProxy::setFullscreenControlsHidden):
        (WebKit::WebFullScreenManagerProxy::setFullscreenInsetTop): Deleted.
        (WebKit::WebFullScreenManagerProxy::setFullscreenAutoHideDelay): Deleted.
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController showUI]):
        (-[WKFullScreenViewController hideUI]):
        (-[WKFullScreenViewController viewWillAppear:]):
        (-[WKFullScreenViewController _effectiveFullscreenInsets]):
        (-[WKFullScreenViewController _updateWebViewFullscreenInsets]):
        (-[WKFullScreenViewController _showPhishingAlert]):
        (-[WKFullScreenViewController _effectiveFullscreenInsetTop]): Deleted.
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didExitFullScreen):
        (WebKit::WebFullScreenManager::setFullscreenInsets):
        (WebKit::WebFullScreenManager::setFullscreenAutoHideTiming):
        (WebKit::WebFullScreenManager::setFullscreenControlsHidden):
        (WebKit::WebFullScreenManager::setFullscreenInsetTop): Deleted.
        (WebKit::WebFullScreenManager::setFullscreenAutoHideDelay): Deleted.
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/FullScreen/WebFullScreenManager.messages.in:

2018-06-21  Commit Queue  <commit-queue@webkit.org>

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

        "Introduced assertion failure in ~DisplayRefreshMonitorMac()."
        (Requested by perarne on #webkit).

        Reverted changeset:

        "DisplayRefreshMonitorMac should hold a weak pointer to
        WebPage."
        https://bugs.webkit.org/show_bug.cgi?id=186683
        https://trac.webkit.org/changeset/232884

2018-06-21  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Page sometimes ends up with an incorrect zoom level after entering fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=186822

        Reviewed by Simon Fraser.

        Set the minimum zoom, maximum zoom, zoom bouncing, and user scalability settings of the
        WKWebView's UIScrollView upon entering fullscreen, and restore those same settings upon
        exit. Override the viewport arguments upon entering fullscreen, restore them upon exit.

        * Platform/IPC/ArgumentCoder.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ViewportArguments>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::forceAlwaysUserScalable const):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setOverrideViewportArguments):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (WebKit::WKWebViewState::applyTo):
        (WebKit::WKWebViewState::store):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::forceAlwaysUserScalable const):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setOverrideViewportArguments):

2018-06-21  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Use secondary glyph style for fullscreen controls
        https://bugs.webkit.org/show_bug.cgi?id=186862
        <rdar://problem/41212210>

        Reviewed by Tim Horton.

        Adopt AVBackgroundView, and use its predefined enums to set the material and tint styles for
        the fullscreen controls.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController loadView]):
        * UIProcess/ios/fullscreen/WKFullscreenStackView.h:
        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm:
        (-[WKFullscreenStackView init]):
        (-[WKFullscreenStackView dealloc]):
        (-[WKFullscreenStackView addArrangedSubview:applyingMaterialStyle:tintEffectStyle:]):
        (-[WKFullscreenStackView layoutSubviews]):
        (+[WKFullscreenStackView baseEffects]): Deleted.
        (+[WKFullscreenStackView configureView:forTintEffectWithColor:filterType:]): Deleted.
        (+[WKFullscreenStackView configureView:withBackgroundFillOfColor:opacity:filter:]): Deleted.
        (+[WKFullscreenStackView secondaryMaterialOverlayView]): Deleted.
        (+[WKFullscreenStackView applyPrimaryGlyphTintToView:]): Deleted.
        (+[WKFullscreenStackView applySecondaryGlyphTintToView:]): Deleted.
        (-[WKFullscreenStackView initWithArrangedSubviews:axis:]): Deleted.
        (-[WKFullscreenStackView setTargetViewForSecondaryMaterialOverlay:]): Deleted.
        (-[WKFullscreenStackView contentView]): Deleted.
        (-[WKFullscreenStackView _setArrangedSubviews:axis:]): Deleted.
        (-[WKFullscreenStackView setBounds:]): Deleted.
        (-[WKFullscreenStackView updateConstraints]): Deleted.

2018-06-21  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Suspend page (and pause video) while phishing warning is presented
        https://bugs.webkit.org/show_bug.cgi?id=186856
        <rdar://problem/41212444>

        Reviewed by Tim Horton.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _showPhishingAlert]):

2018-06-21  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r232989.

        Causes API regressions on macOS

        Reverted changeset:

        "REGRESSION (r231850): Cookie file cannot be read or written
        by network process"
        https://bugs.webkit.org/show_bug.cgi?id=186806
        https://trac.webkit.org/changeset/232989

2018-06-21  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] WebDriver: allow applying host-specific TLS certificates for automated sessions
        https://bugs.webkit.org/show_bug.cgi?id=186884

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        (webkitAutomationSessionCreate): Handle any host-certificate pair that's
        been set for this session, creating a GTlsCertificate object through
        loading from the specified certificate path and marking that certificate
        as allowed for the specified host through the
        webkit_web_context_allow_tls_certificate_for_host() API.

2018-06-21  Chris Dumez  <cdumez@apple.com>

        Regression(r226990) : Crash under WebCore::Page::applicationWillResignActive
        https://bugs.webkit.org/show_bug.cgi?id=186850
        <rdar://problem/37394469>

        Reviewed by Eric Carlson.

        Make sure m_page is not null before calling applicationWillResignActive(). m_page
        gets nulled out when WebPage::close() is called. The crash trace seems to indicate
        we're calling applicationWillResignActive() on a Page that is dead since we crash
        accessing Page::mainFrame().

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

2018-06-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] http/tests/misc/bubble-drag-events.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=182352

        Reviewed by Carlos Garcia Campos.

        PingLoad::didFinish was called twice if it is used with
        NetworkDataTaskSoup. PingLoad is not a ref-counted object. It is
        destructed when PingLoad::didFinish is called.

        PingLoad::didReceiveChallenge calls the ChallengeCompletionHandler
        with AuthenticationChallengeDisposition::Cancel to cancel the
        challenge and calls PingLoad::didFinish.

        NetworkDataTaskSoup::continueAuthenticate calls
        didReceiveChallenge with a ChallengeCompletionHandler which calls
        didCompleteWithError. PingLoad::didCompleteWithError calls
        PingLoad::didFinish.

        didCompleteWithError callback should not be called in the
        ChallengeCompletionHandler.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::continueAuthenticate): Do not call
        didFail() in the ChallengeCompletionHandler. Call
        invalidateAndCancel() instead.

2018-06-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Fixed position elements sometimes flicker when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=186860
        <rdar://problem/39953563>

        Reviewed by Tim Horton.

        Remove conditional guards that are no longer necessary, now that the oldest iOS version our builders support is
        iOS 11. Conditionalizing this logic only for iOS 11+ meant that on watchOS, we're always falling down the path
        where we don't schedule a visible content rect update until the next runloop, which makes it possible for a
        remote layer tree transaction to arrive and cause us to update the scrolling tree with stale viewport geometry.

        Test: WKScrollViewTests.PositionFixedLayerAfterScrolling

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

2018-06-20  Megan Gardner  <megan_gardner@apple.com>

        Restrict Selection in contenteditable the extent of that contenteditable
        https://bugs.webkit.org/show_bug.cgi?id=186792

        Reviewed by Wenson Hsieh.

        We have not been checking to make sure that when we make a selection that it is restricted to 
        a single content editable on iOS. There is functionality to ensure this on mac, so it has been
        exposed and utilized for restricting the extent of a selection.

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

2018-06-19  Dean Jackson  <dino@apple.com>

        Blank viewer comes up and then auto-dismisses when device is not connected to Internet
        https://bugs.webkit.org/show_bug.cgi?id=186825
        <rdar://problem/40294170>

        Reviewed by Tim Horton.

        Handle the case where the network load fails, and send that
        error onto QuickLook.

        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didReceiveResponse): Check for success.
        (WebKit::DownloadClient::processDidCrash): Cancel in the case of a crash.
        (WebKit::DownloadClient::didFail): Propagate the error onto QuickLook.
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource failWithError:]): New method that calls
        the completion handler with the error data.
        (WebKit::SystemPreviewController::fail): New API method.
        * UIProcess/SystemPreviewController.h:

2018-06-19  Chris Dumez  <cdumez@apple.com>

        Implement IPC throttling to keep the main thread responsive when a process misbehaves
        https://bugs.webkit.org/show_bug.cgi?id=186607
        <rdar://problem/41073205>

        Reviewed by Geoffrey Garen.

        Implement IPC throttling to keep the main thread responsive when a process misbehaves.
        Instead of doing one main runloop dispatch per incoming message, we now do a single
        runloop dispatch and process incoming messages in batch. We put a limit on the number
        of messages to be processed in a batch (600). If the queue is larger that this limit,
        we'll schedule a 0-timer to process remaining messages, giving the main runloop a chance
        to process other events. Additionally, if an IPC connection keeps hitting this maximum
        batch size limit, we implement back off and we'll further decrease the number of messages
        we process in each batch (going as low as 60). This keeps Safari responsive enough to
        allow the user to close the bad tab (even on older devices such as iPhone 5s).

        Finally, if the incoming message queue becomes too large (50000), we go one step further
        and kill the IPC connection in order to maintain performance / battery life.

        Every time we apply throttling or terminate a connection due to throttling, we do a
        RELEASE_LOG_ERROR() with useful information in order to help diagnose potential issues
        in the future.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::MessagesThrottler::MessagesThrottler):
        (IPC::Connection::MessagesThrottler::scheduleMessagesDispatch):
        (IPC::Connection::MessagesThrottler::numberOfMessagesToProcess):
        (IPC::Connection::dispatchIncomingMessages):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::kill):

2018-06-18  Jiewen Tan  <jiewen_tan@apple.com>

        Make SecItemShim to not send return value for SecItemAdd
        https://bugs.webkit.org/show_bug.cgi?id=186789
        <rdar://problem/40892596>

        Reviewed by Brent Fulgham.

        Return value of SecItemAdd is often ignored. Even if it isn't, we don't have the ability to serialize SecKeychainItemRef.
        Otherwise, it would go through the weird route of serializing SecKeychainItemRef by asking Keychain for its persistent
        reference. This route contradicts the purpose of SecItemShim, which is to proxy all Keychain operations to UIProcess.

        Also, this patch removes the release assertion on encode(Encoder&, SecAccessControlRef) and decode(Decoder&, RetainPtr<SecAccessControlRef>&)
        as they don't query Keychain.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode):
        (IPC::decode):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):
        (WebKit::webSecItemAdd):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::secItemRequest):
        * UIProcess/mac/SecItemShimProxy.h:
        * UIProcess/mac/SecItemShimProxy.messages.in:

2018-06-19  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r231850): Cookie file cannot be read or written by network process
        https://bugs.webkit.org/show_bug.cgi?id=186806
        <rdar://problem/41113791>

        Reviewed by Geoffrey Garen.

        Default websiteDataStore may be added wrongly to network process before default session was 
        set, as messages were asynchronous, so the cookie storage could be improperly set.   

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2018-06-19  Don Olmstead  <don.olmstead@sony.com>

        Use getCurrentProcessID over getpid
        https://bugs.webkit.org/show_bug.cgi?id=186813

        Reviewed by Alex Christensen.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::initializeTimers):
        (WebKit::WebMemorySampler::stop):
        (WebKit::WebMemorySampler::writeHeaders):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):

2018-06-19  Don Olmstead  <don.olmstead@sony.com>

        WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations does not invoke callback when Service Workers disabled
        https://bugs.webkit.org/show_bug.cgi?id=186809

        Reviewed by Chris Dumez.

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

2018-06-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Vend username text content type when using scribble in login fields
        https://bugs.webkit.org/show_bug.cgi?id=186791
        <rdar://problem/41226935>

        Reviewed by Beth Dakin.

        Vend additional context to Quickboard when focusing an element that is likely to be a username field.

        Test: fast/forms/watchos/username-text-content-type.html

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

        Add a new flag to tell the UI process when the currently focused element is an autofillable username input
        field (using existing app autofill heuristics).

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

        Add new testing SPI to grab the computed text content type for the focused element.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (contentTypeFromFieldName):

        If `autocomplete="username"` is specified, return a username text content type. This was not originally added in
        r197626 because UITextContentTypeUsername was only introduced later, in iOS 11.

        (-[WKContentView textContentTypeForListViewController:]):
        (-[WKContentView textContentTypeForTesting]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2018-06-19  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r232947.

        Caused an API test to time out

        Reverted changeset:

        "Implement IPC throttling to keep the main thread responsive
        when a process misbehaves"
        https://bugs.webkit.org/show_bug.cgi?id=186607
        https://trac.webkit.org/changeset/232947

2018-06-19  Chris Dumez  <cdumez@apple.com>

        HTTPHeaderMap wastes 226KB of HashTable capacity on cnn.com
        https://bugs.webkit.org/show_bug.cgi?id=186735
        <rdar://problem/41189164>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WTF::Persistence::Coder<WebCore::HTTPHeaderMap>::decode):

2018-06-19  Youenn Fablet  <youenn@apple.com>

        Network Preflights do not show in WebInspector after moving CORS checks to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=186312
        <rdar://problem/40495434>

        Reviewed by Chris Dumez.

        Add buffering of all request/response of a given load, including redirections and preflights.
        This buffering is switched on/off by a boolean which is switched on in case Web Inspector is launched.

        Buffering is done in NetworkLoadChecker.
        We add ways to retrieve preflight information from NetworkCORSPreflightChecker.

        Implement LoaderStrategy new methods through sync IPC.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::NetworkCORSPreflightChecker):
        (WebKit::NetworkCORSPreflightChecker::startPreflight):
        (WebKit::NetworkCORSPreflightChecker::willPerformHTTPRedirection):
        (WebKit::NetworkCORSPreflightChecker::didReceiveResponseNetworkSession):
        (WebKit::NetworkCORSPreflightChecker::didCompleteWithError):
        (WebKit::NetworkCORSPreflightChecker::takeInformation):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationRequest):
        (WebKit::NetworkConnectionToWebProcess::takeNetworkLoadIntermediateInformation):
        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformation):
        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationMetrics):
        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationResponse): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::check):
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::checkResponse):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        (WebKit::NetworkLoadChecker::storeRedirection):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::takeNetworkLoadInformation):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        * Scripts/webkit/messages.py:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::intermediateLoadInformationFromResourceLoadIdentifier):
        * WebProcess/Network/WebLoaderStrategy.h:

2018-06-19  Brent Fulgham  <bfulgham@apple.com>

        MAP_JIT is not present for minimal simulator builds
        https://bugs.webkit.org/show_bug.cgi?id=186608

        Reviewed by Darin Adler.

        * Configurations/WebContent-iOS-minimalsimulator.entitlements:

2018-06-18  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make sure to call callbacks even if there is no store (test infrastructure)
        https://bugs.webkit.org/show_bug.cgi?id=186777
        <rdar://problem/41216181>

        Reviewed by Chris Dumez.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsUpdateCookiePartitioning):
        (WKWebsiteDataStoreSetStatisticsShouldPartitionCookiesForHost):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):

2018-06-18  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessPool::networkProcessFailedToLaunch():
        https://bugs.webkit.org/show_bug.cgi?id=186784
        <rdar://problem/33535377>

        Reviewed by Brady Eidson.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _allProcessPoolsForTesting]):
        Add SPI to retrieve all WebProcessPool for testing purposes.

        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::clearCallbackStates):
        Make iteration over completion handlers robust against completion handlers
        getting removed while we iterate.

        (WebKit::NetworkProcessProxy::didClose):
        Ref the WebProcessPool (which keeps the NetworkProcessProxy alive too)
        as several calls within this method might cause the WebProcessPool /
        NetworkProcessProxy to get destroyed.

2018-06-18  Chris Dumez  <cdumez@apple.com>

        Implement IPC throttling to keep the main thread responsive when a process misbehaves
        https://bugs.webkit.org/show_bug.cgi?id=186607

        Reviewed by Geoffrey Garen.

        Implement IPC throttling to keep the main thread responsive when a process misbehaves.
        Instead of doing one main runloop dispatch per incoming message, we now do a single
        runloop dispatch and process incoming messages in batch. We put a limit on the number
        of messages to be processed in a batch (600). If the queue is larger that this limit,
        we'll schedule a 0-timer to process remaining messages, giving the main runloop a chance
        to process other events. Additionally, if an IPC connection keeps hitting this maximum
        batch size limit, we implement back off and we'll further decrease the number of messages
        we process in each batch (going as low as 60). This keeps Safari responsive enough to
        allow the user to close the bad tab (even on older devices such as iPhone 5s).

        Finally, if the incoming message queue becomes too large (50000), we go one step further
        and kill the IPC connection in order to maintain performance / battery life.

        Every time we apply throttling or terminate a connection due to throttling, we do a
        RELEASE_LOG_ERROR() with useful information in order to help diagnose potential issues
        in the future.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::MessagesThrottler::MessagesThrottler):
        (IPC::Connection::MessagesThrottler::scheduleMessagesDispatch):
        (IPC::Connection::MessagesThrottler::numberOfMessagesToProcess):
        (IPC::Connection::dispatchIncomingMessages):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::kill):

2018-06-18  Jiewen Tan  <jiewen_tan@apple.com>

        Add a graceful exit for AuthenticationManager::initializeConnection
        https://bugs.webkit.org/show_bug.cgi?id=186632
        <rdar://problem/41041033>

        Reviewed by Brent Fulgham.

        Add a graceful exit for AuthenticationManager::initializeConnection when the provided IPC connection
        is null or the underlying xpc connection is null.

        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::initializeConnection):

2018-06-18  Youenn Fablet  <youenn@apple.com>

        Validate Cross-Origin-Resource-Policy for resources cached in the MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=186639
        <rdar://problem/41106984>

        Reviewed by Geoffrey Garen.

        Make use of WebCore method to check CORP.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::validateResponse):
        * NetworkProcess/NetworkLoadChecker.h:

2018-06-18  Karl Leplat  <karl.leplat_ext@softathome.com>

        [Threaded paintingEngine] Fix rendering glitches
        https://bugs.webkit.org/show_bug.cgi?id=186764

        Reviewed by Žan Doberšek.

        * Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStoreTile::swapBuffers):
        We call Nicosia::Buffer function waitUntilPaintingComplete()
        in order to synchronize of using Nicosia:buffer between MainThread
        and ThreadedCompositor.


2018-06-17  Chris Dumez  <cdumez@apple.com>

        Crash under SuspendedPageProxy::~SuspendedPageProxy()
        https://bugs.webkit.org/show_bug.cgi?id=186688
        <rdar://problem/41060769>

        Reviewed by Darin Adler.

        Ref the WebProcessProxy before calling suspendedPageWasDestroyed() on it as this
        might cause the WebProcessProxy / WebProcessPool to get destroyed otherwise, and
        we would crash trying to call unregisterSuspendedPageProxy() on the WebProcessPool
        on the next line.

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):

2018-06-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Upstream watchOS source additions to OpenSource (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=186442
        <rdar://problem/40879364>

        Reviewed by Darin Adler.

        Rename a category referencing "Extra zoom mode".

        * UIProcess/ios/WKContentViewInteraction.mm:

2018-06-12  Darin Adler  <darin@apple.com>

        [Cocoa] Make some RetainPtr refinements to get more ready for ARC
        https://bugs.webkit.org/show_bug.cgi?id=186526

        Reviewed by Anders Carlsson.

        * Platform/cf/ModuleCF.cpp:
        (WebKit::Module::load): Use move assignment instead of adoptCF/leakRef.

        * Shared/Cocoa/WKNSURLExtras.mm:
        (+[NSURL _web_URLWithWTFString:]): Cast to NSURL * instead of doing the autorelease
        here, since the NSURL * operator already does what we want.
        (+[NSURL _web_URLWithWTFString:relativeToURL:]): Ditto.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _wk_printedDocument]): Get rid of incorrect use of
        RetainPtr::autorelease. We don't want to null out _printedDocument each time this
        function is called.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (collectIcons): Get rid of unnecessary use of RetainPtr::autorelease in a function
        that returns a RetainPtr.

2018-06-15  Chris Dumez  <cdumez@apple.com>

        Add API test coverage for SW RegistrationDatabase destruction and fix issues found by the test
        https://bugs.webkit.org/show_bug.cgi?id=186681

        Reviewed by Brady Eidson.

        Make sure StorageProcess::unregisterSWServerConnection() does not unnecessarily
        create a SWServer. Otherwise, we were in quick session destroying the SWServer
        and then re-constructing it for the same sessionID, merely to try ot unregister
        a SWServerConnection.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::existingSWOriginStoreForSession const):
        (WebKit::StorageProcess::unregisterSWServerConnection):
        * StorageProcess/StorageProcess.h:

2018-06-15  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Move unrelated features of WorkQueueWin into IPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=186582

        Add EventListener private class to handle signaled tasks for I/O.
        Originally they were in WTF::WorkQueueWin, but those features were not related
        to WorkQueue and only used in IPC::ConnectionWin. Moved logic is more specialized
        than old generalized logic. That was unneeded generalization.

        Reviewed by Brent Fulgham.

        * Platform/IPC/Connection.h:
        (IPC::Connection::EventListener::state):
        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::platformInitialize):
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::readEventHandler):
        (IPC::Connection::writeEventHandler):
        (IPC::Connection::invokeReadEventHandler):
        (IPC::Connection::invokeWriteEventHandler):
        (IPC::Connection::open):
        (IPC::Connection::sendOutgoingMessage):
        (IPC::Connection::EventListener::open):
        (IPC::Connection::EventListener::callback):
        (IPC::Connection::EventListener::close):

2018-06-15  Brady Eidson  <beidson@apple.com>

        Crash in both StorageProcess and UIProcess when using custom WKWebsiteDataStores for data management.
        <rdar://problem/41019893> and https://bugs.webkit.org/show_bug.cgi?id=186682

        Reviewed by Chris Dumez.

        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::didClose): Protect this and the process pool as the cleanup that follows
          might cause either to get destroyed.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply): Protect the operating WebsiteDataStore while async operations
          are in flight. Otherwise if the data store is destroyed, the SessionIDs for those operations will get
          destroyed before they complete.
        (WebKit::WebsiteDataStore::removeData): Ditto.

2018-06-15  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed build fix after r232634.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:

2018-06-15  Per Arne Vollan  <pvollan@apple.com>

        DisplayRefreshMonitorMac should hold a weak pointer to WebPage.
        https://bugs.webkit.org/show_bug.cgi?id=186683

        Reviewed by Brent Fulgham.

        Instead of DisplayRefreshMonitorMac having a RefPtr to WebPage, it should have a weak pointer.
        Having a RefPtr could in theory create reference cycles. This potential problem has not been
        observed in practice, but it is safer to use a weak pointer.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):

2018-06-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WKE] Disable memory pressure handling when running layout tests (WTR)
        https://bugs.webkit.org/show_bug.cgi?id=186663

        Reviewed by Michael Catanzaro.

        r196943 added a mechanism to disable the memory pressure handling
        on Mac. This patch enables using that mechanism also for GTK/WPE.
        To do that the environment variable WEBKIT_DISABLE_MEMORY_PRESSURE_MONITOR
        should bet set to 1.
        We want to use this on the layout tests to avoid flaky tests caused
        by accumulated leaks on the WebProcess by different tests.

        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/wpe/WebProcessPoolWPE.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2018-06-15  Per Arne Vollan  <pvollan@apple.com>

        Rollout r231818, as it introduced regression on tickets.com.
        https://bugs.webkit.org/show_bug.cgi?id=186675

        Unreviewed, rolling out.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::pause): Deleted.
        (WebKit::DisplayLink::resume): Deleted.
        * UIProcess/mac/DisplayLink.h:

2018-06-15  Thibault Saunier  <tsaunier@igalia.com>

        [GTK][WPE]: Avoid using uninitialized launchOptions in getLaunchOptions
        https://bugs.webkit.org/show_bug.cgi?id=185611

        Reviewed by Chris Dumez.

        Otherwise we might segfault.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getLaunchOptions):

2018-06-14  Youenn Fablet  <youenn@apple.com>

        Make NetworkProcess get cache storage parameters at creation of the CacheStorage engine
        https://bugs.webkit.org/show_bug.cgi?id=186166

        Reviewed by Alex Christensen.

        Make CacheStorage::Engine creation asynchronous.
        Update Engine public methods be static methods taking a SessionID, which will be used to create the engine.

        Add IPC methods to retrieve cache storage parameters from NetworkProcess to UIProcess.

        Add NetworkProcessProxy ability to compute the cache storage parameters based on the SessionID.
        For that purpose, make NetworkProcessProxy store a map of SessionID-to-WebsiteDataStore.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::cacheStorageParameters):
        (WebKit::NetworkProcess::setCacheStorageParameters):
        (WebKit::NetworkProcess::cacheStorageDirectory const): Deleted.
        (WebKit::NetworkProcess::cacheStoragePerOriginQuota const): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::from):
        (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::Engine::Engine):
        (WebKit::CacheStorage::Engine::readCachesFromDisk):
        (WebKit::CacheStorage::Engine::defaultEngine): Deleted.
        * NetworkProcess/cache/CacheStorageEngine.h:
        (WebKit::CacheStorage::Engine::shouldPersist const):
        (WebKit::CacheStorage::Engine::weakPtrFactory):
        (WebKit::CacheStorage::Engine::create): Deleted.
        * 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/CacheStorageEngineConnection.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * Shared/WebsiteDataStoreParameters.h:
        (): Deleted.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::addSession):
        (WebKit::NetworkProcessProxy::removeSession):
        (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):

2018-06-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] Add IPC error case for broken pipe
        https://bugs.webkit.org/show_bug.cgi?id=186445

        Add error handling for ERROR_BROKEN_PIPE on IPC::Connection::readEventHandler.

        Reviewed by Ryosuke Niwa.

        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::readEventHandler):

2018-06-14  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Shortcut classification for redirect to prevalent resource
        https://bugs.webkit.org/show_bug.cgi?id=186627
        <rdar://problem/41132308>

        Reviewed by Brent Fulgham.

        This patch shortcuts classification of redirect collusion so that we more seldom
        have to rely on the recursive backtrace of the redirect graph. The initial
        implementation of Resource Load Statistics actually had this classification method.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::markAsPrevalentIfHasRedirectedToPrevalent):
            Iterates through a non-classified resource's data for where it has redirected
            and classifies it as prevalent if has redirected to 
        (WebKit::WebResourceLoadStatisticsStore::processStatisticsAndDataRecords):
            Now calls WebResourceLoadStatisticsStore::markAsPrevalentIfHasRedirectedToPrevalent()
            before regular classification steps. 
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-06-14  Youenn Fablet  <youenn@apple.com>

        Apply CSP checks before Content blocker checks in NetworkLoadChecker as done by CachedResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=186550

        Reviewed by Alex Christensen.

        Do CSP checks and URL upgrade before content blocker checks.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::continueCheckingRequest):

2018-06-14  Brent Fulgham  <bfulgham@apple.com>

        Plug-in Process crashing on Mojave (affects Flash, others)
        https://bugs.webkit.org/show_bug.cgi?id=186628
        <rdar://problem/41120462>

        Reviewed by Eric Carlson.

        Add the missing “com.apple.security.cs.allow-unsigned-executable-memory” entitlement. Also alphabetize
        the entitlements file to make it easier to read.

        * Configurations/PluginService.entitlements:

2018-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] WebDriver: handle acceptInsecureCertificates capability
        https://bugs.webkit.org/show_bug.cgi?id=186560

        Reviewed by Brian Burg.

        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        (webkitAutomationSessionCreate): Check the acceptInsecureCertificates capability and set the TLS error policy in
        the WebContext accordingly if needed.
        * UIProcess/API/glib/WebKitAutomationSessionPrivate.h:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        * UIProcess/Cocoa/AutomationClient.h:
        * UIProcess/Cocoa/AutomationClient.mm:
        (WebKit::AutomationClient::requestAutomationSession): Use SessionCapabilities to fill the session configuration.
        (WebKit::AutomationClient::requestAutomationSessionWithCapabilities): Deleted.

2018-06-13  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Trying to access the remote inspector hits an assertion in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=186588

        Reviewed by Carlos Garcia Campos.

        Make both the WPE and GTK+ ports use /org/webkit/inspector as base prefix
        for resource paths, which avoids needing a switcheroo depending on the port.

        * UIProcess/API/wpe/WebKit2InspectorGResourceBundle.xml:
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * UIProcess/wpe/WebInspectorProxyWPE.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp:
        (WebKit::WebInspectorUI::localizedStringsURL):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL):

2018-06-13  Chris Dumez  <cdumez@apple.com>

        Crash under SWServer::unregisterConnection(Connection&)
        https://bugs.webkit.org/show_bug.cgi?id=186584
        <rdar://problem/40931680>

        Reviewed by Youenn Fablet.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::~StorageToWebProcessConnection):
        (WebKit::StorageToWebProcessConnection::didReceiveMessage):
        (WebKit::StorageToWebProcessConnection::didReceiveSyncMessage):
        (WebKit::StorageToWebProcessConnection::didClose):
        (WebKit::StorageToWebProcessConnection::unregisterSWConnections):
        (WebKit::StorageToWebProcessConnection::establishSWServerConnection):
        * StorageProcess/StorageToWebProcessConnection.h:

2018-06-13  Dean Jackson  <dino@apple.com>

        Disable AR support in WKWebView clients
        https://bugs.webkit.org/show_bug.cgi?id=186611
        <rdar://problem/39544684>

        Reviewed by Jon Lee.

        Since it hasn't been adequately tested, System Preview (AR) should
        be disabled by default for WKWebViews.

        Add a new WebPreference, and SPI into WKWebViewConfiguration. Also
        don't register the WebViewContentProvider if the feature is
        disabled.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _contentProviderRegistry]):
        (-[WKWebViewConfiguration _systemPreviewEnabled]):
        (-[WKWebViewConfiguration _setSystemPreviewEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.h:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):
        (-[WKWebViewContentProviderRegistry init]): Deleted.

2018-06-13  Youenn Fablet  <youenn@apple.com>

        Supported plugin check should be based on plugin identifier
        https://bugs.webkit.org/show_bug.cgi?id=186578
        <rdar://problem/40523828>

        Reviewed by Darin Adler.

        Refactoring to move from Plugin name to Plugin identifier.
        Set built-in pdf plugin identifier.
        This allows making sure that the PDF plug-in check might not change according localization.

        * Scripts/webkit/messages.py:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<PluginInfo>::encode):
        (IPC::ArgumentCoder<PluginInfo>::decode):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::supportedPluginIdentifiers):
        (WebKit::PluginInfoStore::addSupportedPlugin):
        (WebKit::PluginInfoStore::supportedPluginNames): Deleted.
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pluginInfo):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::pluginInfo):
        (WebKit::WebPluginInfoProvider::webVisiblePluginInfo):
        (WebKit::WebPluginInfoProvider::populatePluginCache):
        * WebProcess/Plugins/WebPluginInfoProvider.h:

2018-06-13  Chris Dumez  <cdumez@apple.com>

        PSON: http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-redirect-collusion.html ASSERTS with process swap enabled
        https://bugs.webkit.org/show_bug.cgi?id=186545

        Reviewed by Brady Eidson.

        Move frame navigation logging for ITP purposes from the WebProcess to the UIProcess.
        This information was previously logged in DocumentLoader::willSendRequest() and was getting
        sync'd to the UIProcess at regular intervals or when the layout tests call testRunner's
        statisticsNotifyObserver(). We now do the logging directly in the UIProcess, in
        WebPageProxy::decidePolicyForNavigationAction (which was getting called via IPC from
        DocumentLoader::willSendRequest()).

        This is more efficient and will also be needed soon due to the way process swap on navigation 
        deals with cross-origin redirects. On cross-origin redirect of the main frame, PSON cancels
        the load and started a new load to the redirected to URL in the new WebProcess. As a result,
        the new WebProcess is not aware that the load is a redirect, which is information that ITP
        requires. By moving the ITP logging to the UIProcess, we still have access to this
        information.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        - We now pass the full redirect response the the delegate method instead of a simple
        isRedirect boolean.
        - Log the navigation in the WebResourceLoadStatisticsStore for ITP purposes.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::areDomainsAssociated):
        Equivalent of ResourceLoadObserver's areDomainsAssociated(). Most of the logic was moved
        to ResourceLoadStatistics::areDomainsAssociated() to avoid code duplication.

        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        This is called whenever a WebProcess sends new resource load statistics to the UIProcess.
        Whenever this happens, we call processStatisticsAndDataRecords() right away, which is
        sometimes the tests currently rely on. As a result, we can cancels any pending statistics
        processing request that was scheduled by logFrameNavigation().

        (WebKit::WebResourceLoadStatisticsStore::scheduleStatisticsProcessingRequestIfNecessary):
        (WebKit::WebResourceLoadStatisticsStore::cancelPendingStatisticsProcessingRequest):
        Whenever a navigation is logged and statistics have been updated, we need to make sure we
        schedule a "timer" to process the new data. We do this at most every 5 seconds for performance
        reasons. This 5 second interval matches what the ResourceLoadObserver is using in the WebProcess
        to notify the UIProcess of new data.

        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        This code was moved from ResourceLoadObserver to WebResourceLoadStatisticsStore now that we
        do this logging in the UIProcess instead of the WebProcess. One difference with WebCore is
        that we use WebPageProxy::pageLoadState().url() as mainFrameURL instead of
        WebPageProxy::mainFrame().url(). The reason for that is that WebPageProxy::mainFrame().url()
        becomes empty in case of process swap but ITP still needs the actual main frame URL when the
        navigation was triggered. WebPageProxy::pageLoadState().url() gives us this information.

        * UIProcess/WebResourceLoadStatisticsStore.h:

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        We now pass the full redirect response the the delegate method instead of a simple
        isRedirect boolean.

2018-06-13  Brent Fulgham  <bfulgham@apple.com>

        Crash during interrupted process termination
        https://bugs.webkit.org/show_bug.cgi?id=185373
        <rdar://problem/40019480>

        Reviewed by Alex Christensen.

        It's possible to encounter a crash if a user agent feature (such as Safari's responsiveness timer) decides
        to kill a Web Process around the same time that a user decides to trigger a new page load. One of the two
        termination operations may attempt to call methods on a nulled process pointer.

        We can avoid this by holding our own reference to the terminating process until the termination steps have
        been completed.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageTerminate): Ref<> the active process while the termination call is performed.
        * UIProcess/API/Cocoa/WKWebView.mm:
        ([WKWebView _killWebContentProcessAndResetState]): Ditto.

2018-06-13  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Automation: wrong modifiers sent for 'Help' virtual key
        https://bugs.webkit.org/show_bug.cgi?id=186600
        <rdar://problem/41088912>

        Reviewed by Timothy Hatcher.

        This fixes a hang when running W3C test:

            special_keys.py::test_webdriver_special_key_sends_keydown[HELP-expected2]

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::eventModifierFlagsForVirtualKey):
        The help modifier doesn't seem to be used when pressing the Help key.
        I verified this using the Help key on the Keyboard Viewer, since no
        keyboards from the past decade actually have this physical button.

2018-06-13  Thibault Saunier  <tsaunier@igalia.com>

        [WPE] Build getUserMedia support
        https://bugs.webkit.org/show_bug.cgi?id=186547

        Reviewed by Alejandro G. Castro.

        * SourcesWPE.txt: Compile files necessary for MediaStream/webrtc.

2018-06-13  Andy Estes  <aestes@apple.com>

        [iOS] Synchronize PDF resizing with device rotation
        https://bugs.webkit.org/show_bug.cgi?id=186587
        <rdar://problem/40922462>

        Reviewed by Darin Adler.

        Both -beginPDFViewRotation and -endPDFViewRotation need to be called as part of
        the transition coordinator's -animateAlongsideTransition: block to be synchronized
        with rotation. Additionally, updateBlock needs to be invoked between the two calls
        so that PDFKit can capture the frame geometry before and after the update.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_beginAnimatedResizeWithUpdates:]):
        (-[WKPDFView web_beginAnimatedResize]): Renamed to web_beginAnimatedResizeWithUpdates:.
        (-[WKPDFView web_endAnimatedResize]): Deleted.

2018-06-12  Brent Fulgham  <bfulgham@apple.com>

        Turn CSS Spring Animations and Link Preload off by default for production builds.
        https://bugs.webkit.org/show_bug.cgi?id=186548
        <rdar://problem/41023774>

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml: Switch these features from 'on' to
        DEFAULT_EXPERIMENTAL_FEATURES_ENABLED.

2018-06-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Upstream watchOS source additions to OpenSource (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=186442
        <rdar://problem/40879364>

        Reviewed by Tim Horton.

        Upstream most of the work around form controls on watchOS. Also, rename WKFormControlListViewController.* to
        its intended name, WKQuickboardListViewController.*.

        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/forms/WKDatePickerViewController.h:
        * UIProcess/ios/forms/WKDatePickerViewController.mm:
        (datePickerSetButtonHeight):
        (datePickerVerticalMargin):
        (-[WKDatePickerWheelLabel initWithFrame:]):
        (-[WKDatePickerWheelLabel lastSelectedDate]):
        (-[WKDatePickerWheelLabel setLastSelectedDate:]):
        (-[WKDatePickerWheelLabel needsUpdateForIndex:selectedDate:]):
        (-[WKDatePickerWheel initWithStyle:]):
        (-[WKDatePickerWheel initWithController:style:]):
        (-[WKDatePickerWheel gestureRecognized:]):
        (-[WKDatePickerWheel setDrawsFocusOutline:]):
        (-[WKDatePickerWheel drawsFocusOutline]):
        (-[WKDatePickerWheel gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKDatePickerViewController initWithDelegate:]):
        (-[WKDatePickerViewController viewDidLoad]):
        (-[WKDatePickerViewController prefersStatusBarHidden]):
        (-[WKDatePickerViewController viewWillAppear:]):
        (-[WKDatePickerViewController viewDidAppear:]):
        (-[WKDatePickerViewController viewDidDisappear:]):
        (-[WKDatePickerViewController _handleStatusBarNavigation]):
        (-[WKDatePickerViewController viewWillLayoutSubviews]):
        (-[WKDatePickerViewController becomeFirstResponder]):
        (-[WKDatePickerViewController defaultMinimumDate]):
        (-[WKDatePickerViewController defaultMaximumDate]):
        (-[WKDatePickerViewController _valueForInput]):
        (-[WKDatePickerViewController _dateFromInitialText]):
        (-[WKDatePickerViewController _setButtonPressed]):
        (-[WKDatePickerViewController _updateSelectedPickerViewIndices]):
        (-[WKDatePickerViewController _configurePickerView:]):
        (-[WKDatePickerViewController setMinimumDate:]):
        (-[WKDatePickerViewController minimumDate]):
        (-[WKDatePickerViewController setMaximumDate:]):
        (-[WKDatePickerViewController maximumDate]):
        (-[WKDatePickerViewController setDate:]):
        (-[WKDatePickerViewController setDateFromComponents:]):
        (-[WKDatePickerViewController setDay:month:year:era:]):
        (-[WKDatePickerViewController date]):
        (-[WKDatePickerViewController _dateComponentForDay:month:year:era:]):
        (-[WKDatePickerViewController _adjustDateToValidDateIfNecessary]):
        (-[WKDatePickerViewController _createAndConfigureGranularityLabelWithText:]):
        (-[WKDatePickerViewController _canonicalizeAndUpdateSelectedDate]):
        (-[WKDatePickerViewController numberOfItemsInPickerView:]):
        (-[WKDatePickerViewController pickerView:viewForItemAtIndex:]):
        (-[WKDatePickerViewController didBeginInteractingWithDatePicker:]):
        (-[WKDatePickerViewController pickerView:didSelectItemAtIndex:]):
        (-[WKDatePickerViewController pickerViewWillBeginSelection:]):
        (-[WKDatePickerViewController pickerViewDidEndSelection:]):
        (-[WKDatePickerViewController _dayFromIndex:]):
        (-[WKDatePickerViewController _eraAndYearFromIndex:]):
        (-[WKDatePickerViewController _monthFromIndex:]):
        (-[WKDatePickerViewController _indexFromDay:]):
        (-[WKDatePickerViewController _indexFromYear:era:]):
        (-[WKDatePickerViewController _indexFromMonth:]):
        * UIProcess/ios/forms/WKFormControlListViewController.h: Removed.
        * UIProcess/ios/forms/WKFormControlListViewController.mm: Removed.
        * UIProcess/ios/forms/WKNumberPadViewController.h:
        * UIProcess/ios/forms/WKNumberPadViewController.mm:
        (inputLabelFontSize):
        (-[WKNumberPadViewController initWithDelegate:initialText:inputMode:]):
        (-[WKNumberPadViewController dealloc]):
        (-[WKNumberPadViewController viewDidLoad]):
        (-[WKNumberPadViewController viewWillDisappear:]):
        (-[WKNumberPadViewController viewWillLayoutSubviews]):
        (-[WKNumberPadViewController _reloadHeaderViewFromInputText]):
        (-[WKNumberPadViewController didSelectKey:]):
        (-[WKNumberPadViewController _handleKeyPress:]):
        (-[WKNumberPadViewController _cancelInput]):
        (-[WKNumberPadViewController _deleteLastInputCharacter]):
        (-[WKNumberPadViewController _deleteButtonPressed]):
        (-[WKNumberPadViewController _cancelDeletionTimers]):
        (-[WKNumberPadViewController _startDeletionTimer]):
        (-[WKNumberPadViewController _deletionTimerFired]):
        (-[WKNumberPadViewController addContentViewAnimations:]):
        * UIProcess/ios/forms/WKQuickboardListViewController.h: Added.
        * UIProcess/ios/forms/WKQuickboardListViewController.mm: Added.
        (-[WKQuickboardListItemCell topToLabelBaselineSpecValue]):
        (-[WKQuickboardListItemCell baselineToBottomSpecValue]):
        (-[WKQuickboardListViewController initWithDelegate:]):
        (-[WKQuickboardListViewController updateContextViewIfNeeded]):
        (-[WKQuickboardListViewController prefersStatusBarHidden]):
        (-[WKQuickboardListViewController viewDidLoad]):
        (-[WKQuickboardListViewController viewWillAppear:]):
        (-[WKQuickboardListViewController viewDidDisappear:]):
        (-[WKQuickboardListViewController _handleStatusBarNavigation]):
        (-[WKQuickboardListViewController reloadContextView]):
        (-[WKQuickboardListViewController actionController]):
        (-[WKQuickboardListViewController languageControllerDidChangePrimaryLanguage:]):
        (-[WKQuickboardListViewController headerContentViewHeight]):
        (-[WKQuickboardListViewController headerContentView]):
        (configureStatusBarForController):
        * UIProcess/ios/forms/WKSelectMenuListViewController.h:
        * UIProcess/ios/forms/WKSelectMenuListViewController.mm:
        (-[WKSelectMenuItemCell initWithStyle:reuseIdentifier:]):
        (-[WKSelectMenuItemCell imageView]):
        (-[WKSelectMenuListViewController initWithDelegate:]):
        (-[WKSelectMenuListViewController viewDidLoad]):
        (-[WKSelectMenuListViewController acceptButtonTappedWithCompletion:]):
        (-[WKSelectMenuListViewController shouldShowTrayView]):
        (-[WKSelectMenuListViewController didSelectListItem:]):
        (-[WKSelectMenuListViewController numberOfListItems]):
        (-[WKSelectMenuListViewController heightForListItem:width:]):
        (-[WKSelectMenuListViewController cellForListItem:]):
        (-[WKSelectMenuListViewController selectItemAtIndex:]):
        * UIProcess/ios/forms/WKTimePickerViewController.h:
        * UIProcess/ios/forms/WKTimePickerViewController.mm:
        (-[WKTimePickerViewController initWithDelegate:]):
        (-[WKTimePickerViewController dateFormatter]):
        (-[WKTimePickerViewController timeValueForFormControls]):
        (-[WKTimePickerViewController dateComponentsFromInitialValue]):
        (-[WKTimePickerViewController viewDidAppear:]):
        (-[WKTimePickerViewController viewDidLoad]):
        (-[WKTimePickerViewController becomeFirstResponder]):
        (-[WKTimePickerViewController setHour:minute:]):
        (-[WKTimePickerViewController leftButtonWOTAction]):
        (-[WKTimePickerViewController rightButtonWOTAction]):
        * WebKit.xcodeproj/project.pbxproj:

2018-06-12  Jer Noble  <jer.noble@apple.com>

        Make Modern EME An Experimental Feature Again
        https://bugs.webkit.org/show_bug.cgi?id=186569
        <rdar://problem/41054402>

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2018-06-12  Andy Estes  <aestes@apple.com>

        [watchOS] Enable NetworkActivityTracker
        https://bugs.webkit.org/show_bug.cgi?id=186568
        <rdar://problem/41050624>

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkActivityTracker.h:

2018-06-12  Antti Koivisto  <antti@apple.com>

        Add performance logging for slow cache retrieves
        https://bugs.webkit.org/show_bug.cgi?id=186520
        <rdar://problem/41002070>

        Reviewed by Chris Dumez.

        We sometimes see slow cache retrieves in logs. Add some more logging to better analyze these cases.

        This patch adds timings to all cache storage retrieve operations and passes them up to the client.
        We then log the timings on NetworkResourceLoader levels if needed. Items logged include

        - total retrieve time
        - dispatch delay and number of resources dispatched before this one
        - record I/O time
        - blob I/O time
        - whether cache shrink was in progress
        - whether cache synchronization was in progress
        - cancellation

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::logSlowCacheRetrieveIfNeeded):

        Log if the retrieve took more than 1s.

        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::readRecord):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::completeRetrieve):
        (WebKit::NetworkCache::Cache::retrieveData):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveSubresourcesEntry):

        SpeculativeLoadManager does not records specific timings yet but at least we do log when they occur.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::ReadOperation::cancel):
        (WebKit::NetworkCache::Storage::ReadOperation::finish):

        Record timing info in ReadOperations.

        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::retrieveFromMemory):
        (WebKit::NetworkCache::Storage::retrieve):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2018-06-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.21.4 release.

        * gtk/NEWS: Add release notes for 2.21.4.

2018-06-11  Youenn Fablet  <youenn@apple.com>

        Improve error messages in case FetchEvent.respondWith has a rejected promise
        https://bugs.webkit.org/show_bug.cgi?id=186368

        Reviewed by Chris Dumez.

        Log in JS console in case of failures.
        Rely on ThreadableLoader to log which client actually failed.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didFail):

2018-06-11  Chris Dumez  <cdumez@apple.com>

        http/tests/security/xss-DENIED-script-inject-into-inactive-window2.html times out with PSON enabled
        https://bugs.webkit.org/show_bug.cgi?id=186546

        Reviewed by Brady Eidson.

        Disable process swap on navigation in frames that have opened other frames via
        window.open(). These new windows may have a WindowProxy to their opener, and it
        would therefore be unsafe to process swap at this point.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/API/APINavigation.h:
        (API::Navigation::setHasOpenedFrames):
        (API::Navigation::hasOpenedFrames const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-06-11  Keith Rollin  <krollin@apple.com>

        Add logging around internalError(const URL&)
        https://bugs.webkit.org/show_bug.cgi?id=186369
        <rdar://problem/40872046>

        Reviewed by Brent Fulgham.

        There are times when we receive bug reports where the user says that
        they are simply shown a page saying an internal error occurred. To
        help understand the circumstances of that error, add some logging to
        internalError() in WebErrors.cpp. This logging logs at the Error level
        that internalError() was called and then logs a backtrace.

        * Shared/WebErrors.cpp:
        (WebKit::internalError):

2018-06-11  Tim Horton  <timothy_horton@apple.com>

        Link drag image is inconsistently unreadable in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=186472

        Reviewed by Timothy Hatcher.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::useDefaultAppearance):
        Make defaultAppearance accurate even if useSystemAppearance is false.
        Some parts of WebKit (like the link drag image, but also context menus)
        want to be able to follow the system appearance regardless of whether
        the view or content has opted in.

2018-06-11  Chris Dumez  <cdumez@apple.com>

        http/tests/security/cors-post-redirect-307.html fails with PSON enabled
        https://bugs.webkit.org/show_bug.cgi?id=186441

        Reviewed by Brady Eidson.

        Rename existing flag to something a bit more generic, now that it is used for
        more things than bypassing the navigation policy check.

        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigation):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::goToBackForwardItem):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-06-11  Nan Wang  <n_wang@apple.com>

        AX: [iOS] accessibility sometimes doesn't know process suspension is canceled
        https://bugs.webkit.org/show_bug.cgi?id=186450

        Reviewed by Chris Fleizach.

        There's some early return condition in WebProcess::cancelPrepareToSuspend() which
        could lead to accessibility failing to post process status notificaiton. Fixed it
        by moving the accessibility notification before the early return condition.

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

2018-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API run run javascript from a WebKitWebView in an isolated world
        https://bugs.webkit.org/show_bug.cgi?id=186192

        Reviewed by Michael Catanzaro.

        Add webkit_web_view_run_javascript_in_world() that receives a world name. Also add
        webkit_script_world_new_with_name() to create an isolated world with a name and webkit_script_world_get_name()
        to get the name of a WebKitScriptWorld.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_run_javascript):
        (webkit_web_view_run_javascript_finish):
        (webkit_web_view_run_javascript_in_world):
        (webkit_web_view_run_javascript_in_world_finish):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld): Send RunJavaScriptInMainFrameScriptWorld message to
        the WebProcess.
        * UIProcess/WebPageProxy.h:
        * WebProcess/InjectedBundle/API/glib/WebKitScriptWorld.cpp:
        (webkitScriptWorldCreate):
        (webkit_script_world_new_with_name):
        (webkit_script_world_get_name):
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitScriptWorld.h:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::InjectedBundleScriptWorld::find): Find an InjectedBundleScriptWorld by its name.
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrameScriptWorld): Find the InjectedBundleScriptWorld for the given name
        and run the script in its js context.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add RunJavaScriptInMainFrameScriptWorld message.

2018-06-10  Chris Dumez  <cdumez@apple.com>

        Reload the Web view in case of crash if the client does not implement webViewWebContentProcessDidTerminate delegate
        https://bugs.webkit.org/show_bug.cgi?id=186468

        Reviewed by Geoffrey Garen.

        We now attempt to reload the Web view if the web content process crashes and the client
        does not implement the webViewWebContentProcessDidTerminate delegate (or any of the similar
        delegates in our SPI).

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::processDidCrash):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::processDidTerminate):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        (WKPageSetPageNavigationClient):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/glib/WebKitNavigationClient.cpp:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::processDidTerminate):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::shouldReloadAfterProcessTermination):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):
        (WebKit::WebPageProxy::tryReloadAfterProcessTermination):
        (WebKit::WebPageProxy::resetRecentCrashCountSoon):
        (WebKit::WebPageProxy::resetRecentCrashCount):
        (WebKit::m_configurationPreferenceValues): Deleted.
        * UIProcess/WebPageProxy.h:

2018-06-09  Dan Bernstein  <mitz@apple.com>

        [Xcode] Clean up and modernize some build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=186463

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Removed definition for macOS 10.11.
        * Configurations/BaseTarget.xcconfig: Simplified the definition of WK_PRIVATE_FRAMEWORKS_DIR
          now that WK_XCODE_SUPPORTS_TEXT_BASED_STUBS is true for all supported Xcode versions.
        * Configurations/DebugRelease.xcconfig: Removed definition for macOS 10.11.
        * Configurations/FeatureDefines.xcconfig: Simplified the definitions of ENABLE_APPLE_PAY and
          ENABLE_VIDEO_PRESENTATION_MODE now macOS 10.12 is the earliest supported version.
        * Configurations/Version.xcconfig: Removed definition for macOS 10.11.
        * Configurations/WebKitTargetConditionals.xcconfig: Removed definitions for macOS 10.11.

2018-06-09  Dan Bernstein  <mitz@apple.com>

        Added missing file references to the Configuration group.

        * WebKit.xcodeproj/project.pbxproj:

2018-06-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Upstream watchOS source additions to OpenSource (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=186442
        <rdar://problem/40879364>

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dismissQuickboardViewControllerAndRevealFocusedFormOverlayIfNecessary:]):
        (-[WKContentView quickboard:textEntered:]):
        (-[WKContentView quickboardInputCancelled:]):
        (-[WKContentView viewController:inputContextViewHeightForSize:]):
        (-[WKContentView allowsLanguageSelectionMenuForListViewController:]):
        (-[WKContentView inputContextViewForViewController:]):
        (-[WKContentView inputLabelTextForViewController:]):
        (-[WKContentView initialValueForViewController:]):
        (-[WKContentView shouldDisplayInputContextViewForListViewController:]):
        (-[WKContentView numericInputModeForListViewController:]):
        (-[WKContentView textContentTypeForListViewController:]):
        (-[WKContentView textSuggestionsForListViewController:]):
        (-[WKContentView listViewController:didSelectTextSuggestion:]):
        (-[WKContentView allowsDictationInputForListViewController:]):
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView initWithFrame:]):
        (-[WKScrollView addGestureRecognizer:]):
        (-[WKScrollView _configureDigitalCrownScrolling]):
        (-[WKScrollView _puic_contentOffsetForCrownInputSequencerOffset:]):
        * UIProcess/ios/forms/WKFocusedFormControlView.h:
        * UIProcess/ios/forms/WKFocusedFormControlView.mm:
        (pathWithRoundedRectInFrame):
        (-[WKFocusedFormControlView initWithFrame:delegate:]):
        (-[WKFocusedFormControlView handleWheelEvent:]):
        (-[WKFocusedFormControlView show:]):
        (-[WKFocusedFormControlView hide:]):
        (-[WKFocusedFormControlView delegate]):
        (-[WKFocusedFormControlView setDelegate:]):
        (-[WKFocusedFormControlView dimmingMaskLayer]):
        (-[WKFocusedFormControlView handleTap]):
        (-[WKFocusedFormControlView _wheelChangedWithEvent:]):
        (-[WKFocusedFormControlView didDismiss]):
        (-[WKFocusedFormControlView didSubmit]):
        (-[WKFocusedFormControlView layoutSubviews]):
        (-[WKFocusedFormControlView setHighlightedFrame:]):
        (-[WKFocusedFormControlView computeDimmingViewCutoutPath]):
        (-[WKFocusedFormControlView disengageFocusedFormControlNavigation]):
        (-[WKFocusedFormControlView engageFocusedFormControlNavigation]):
        (-[WKFocusedFormControlView reloadData:]):
        (-[WKFocusedFormControlView setMaskLayerPosition:animated:]):
        (-[WKFocusedFormControlView setHighlightedFrame:animated:]):
        (-[WKFocusedFormControlView submitActionName]):
        (submitActionNameFontAttributes):
        (-[WKFocusedFormControlView setSubmitActionName:]):
        (-[WKFocusedFormControlView scrollViewForCrownInputSequencer]):
        (-[WKFocusedFormControlView updateViewForCurrentCrownInputSequencerState]):
        (-[WKFocusedFormControlView scrollOffsetForCrownInputOffset:]):
        (-[WKFocusedFormControlView _crownInputSequencerTimerFired]):
        (-[WKFocusedFormControlView cancelPendingCrownInputSequencerUpdate]):
        (-[WKFocusedFormControlView scheduleCrownInputSequencerUpdate]):
        (-[WKFocusedFormControlView crownInputSequencerOffsetDidChange:]):
        (-[WKFocusedFormControlView crownInputSequencerDidBecomeIdle:willDecelerate:]):
        (-[WKFocusedFormControlView crownInputSequencerIdleDidChange:]):
        (-[WKFocusedFormControlView suggestions]):
        (-[WKFocusedFormControlView setSuggestions:]):
        (-[WKFocusedFormControlView handleWebViewCredentialsSaveForWebsiteURL:user:password:passwordIsAutoGenerated:]):
        (-[WKFocusedFormControlView selectionWillChange:]):
        (-[WKFocusedFormControlView selectionDidChange:]):
        (-[WKFocusedFormControlView textWillChange:]):
        (-[WKFocusedFormControlView textDidChange:]):

2018-06-08  Per Arne Vollan  <pvollan@apple.com>

        Only display refresh monitors having requested display refresh callback should get notified on screen updates.
        https://bugs.webkit.org/show_bug.cgi?id=186397
        <rdar://problem/40897835>

        Reviewed by Brent Fulgham.

        Since all display refresh monitors in the WebContent process share a single UI process display link,
        we should make sure that only the monitors having requested callback are getting notified on screen
        updates. I have not been able to reproduce a case where a monitor is being notified without having
        requested updates, but we should safeguard the code for future code changes.

        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:

2018-06-08  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Allow TextFieldInputType to show and hide suggestions
        https://bugs.webkit.org/show_bug.cgi?id=186151

        Reviewed by Tim Horton.

        Added WebDataListSuggestionPicker to send messages to the UIProcess in order to update the suggestions view.
        This object is also responsible for forwarding messages from WebKit into the DataListSuggestionsClient, which
        is the TextFieldInputType in this case. The client needs to know when the suggestions are hidden or if an
        suggestion has been selected.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createDataListSuggestionPicker): Responsible for creating WebDataListSuggestionPicker to send/receive messages.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebDataListSuggestionPicker.cpp: Added. Responsible for sending messages to UIProcess and updating the DataListSuggestionsClient.
        (WebKit::WebDataListSuggestionPicker::WebDataListSuggestionPicker):
        (WebKit::WebDataListSuggestionPicker::~WebDataListSuggestionPicker):
        (WebKit::WebDataListSuggestionPicker::handleKeydownWithIdentifier):
        (WebKit::WebDataListSuggestionPicker::didSelectOption):
        (WebKit::WebDataListSuggestionPicker::didCloseSuggestions):
        (WebKit::WebDataListSuggestionPicker::close):
        (WebKit::WebDataListSuggestionPicker::displayWithActivationType):
        * WebProcess/WebCoreSupport/WebDataListSuggestionPicker.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setActiveDataListSuggestionPicker):
        (WebKit::WebPage::didSelectDataListOption): Called by UIProcess when option selected.
        (WebKit::WebPage::didCloseSuggestions): Called by UIProcess if the suggestions view is closed.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-06-08  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] Fix initial value of HANDLE to INVALID_HANDLE_VALUE
        https://bugs.webkit.org/show_bug.cgi?id=186405

        The handle was not initialized at all. Initialized with INVALID_HANDLE_VALUE.

        Reviewed by Per Arne Vollan.

        * Platform/IPC/Attachment.h:
        * Platform/IPC/win/AttachmentWin.cpp:
        (IPC::Attachment::decode):

2018-06-08  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Automation: include browser name and version in listing for automation targets
        https://bugs.webkit.org/show_bug.cgi?id=186204
        <rdar://problem/36950423>

        Reviewed by Darin Adler.

        Add a new delegate method that allows the client to set the name and version
        of the browser as returned in the 'browserName' and 'browserVersion' capabilities.
        If the delegate methods are not implemented, try to get this information from
        the main bundle.

        In the RWI protocol, these fields are added to automation target listings.

        * UIProcess/API/Cocoa/_WKAutomationDelegate.h:
        * UIProcess/Cocoa/AutomationClient.h:
        * UIProcess/Cocoa/AutomationClient.mm:
        (WebKit::AutomationClient::AutomationClient):
        (WebKit::AutomationClient::browserName const):
        (WebKit::AutomationClient::browserVersion const):

2018-06-08  Per Arne Vollan  <pvollan@apple.com>

        Run display links in the UI process when ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING) is true.
        https://bugs.webkit.org/show_bug.cgi?id=186379

        Reviewed by Brent Fulgham.

        Replace __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 with ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/DisplayLink.cpp:
        * UIProcess/mac/DisplayLink.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebProcess/WebPage/DrawingArea.cpp:
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:

2018-06-08  Per Arne Vollan  <pvollan@apple.com>

        Send display link IPC message from display link thread.
        https://bugs.webkit.org/show_bug.cgi?id=186429

        Reviewed by Geoffrey Garen.

        When the display link callback is firing on the display link thread in the UI process,
        we schedule a function to be called on the main thread to send the IPC message to the
        WebContent process. Since Connection::send is thread-safe, we can just send the message
        from the display link thread, instead. This should be a small performance improvement.

        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::displayLinkCallback):
        * UIProcess/mac/DisplayLink.h:

2018-06-07  Chris Dumez  <cdumez@apple.com>

        Add base class to get WeakPtrFactory member and avoid some boilerplate code
        https://bugs.webkit.org/show_bug.cgi?id=186407

        Reviewed by Brent Fulgham.

        Add CanMakeWeakPtr base class to get WeakPtrFactory member and its getter, in
        order to avoid some boilerplate code in every class needing a WeakPtrFactory.
        This also gets rid of old-style createWeakPtr() methods in favor of the newer
        makeWeakPtr().

        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::canAuthenticateAgainstProtectionSpace):
        * NetworkProcess/PreconnectTask.h:
        * NetworkProcess/cache/CacheStorageEngine.h:
        * Shared/Authentication/AuthenticationManager.h:
        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::Attachment):
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::canMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinatorProxy::openPaymentSetup):
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::setAlternateBackForwardListSourcePage):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateWindowAndViewFrames):
        (WebKit::WebViewImpl::setTopContentInset):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        (WebKit::WebViewImpl::prepareForMoveToWindow):
        (WebKit::WebViewImpl::validateUserInterfaceItem):
        (WebKit::WebViewImpl::requestCandidatesForSelectionIfNeeded):
        (WebKit::WebViewImpl::interpretKeyEvent):
        (WebKit::WebViewImpl::firstRectForCharacterRange):
        (WebKit::WebViewImpl::performKeyEquivalent):
        (WebKit::WebViewImpl::keyUp):
        (WebKit::WebViewImpl::keyDown):
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.cpp:
        (WebKit::WebCredentialsMessengerProxy::makeCredential):
        (WebKit::WebCredentialsMessengerProxy::getAssertion):
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.h:
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::setOriginatingPage):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/ProcessAssertion.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::Surface::attachBuffer):
        * UIProcess/gtk/WaylandCompositor.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::displayLinkCallback):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::RemoteLayerTreeDisplayRefreshMonitor):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:

2018-06-07  Dan Bernstein  <mitz@apple.com>

        Don’t install process-webcontent-entitlements.sh into the built XPC services.

        * WebKit.xcodeproj/project.pbxproj:

2018-06-07  Andy Estes  <aestes@apple.com>

        [iOS] Inform the client when PDFKit's extension process crashes
        https://bugs.webkit.org/show_bug.cgi?id=186418
        <rdar://problem/40175864>

        Reviewed by Tim Horton.

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

        Separated the dispatching of delegate methods from the rest of the web
        process-specific processDidTerminate logic.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):

        Minor style fix.

        (-[WKPDFView pdfHostViewControllerExtensionProcessDidCrash:]):

        Called WebPageProxy::dispatchProcessDidTerminate on the main thread.

2018-06-07  Andy Estes  <aestes@apple.com>

        [iOS] Unable to present the share sheet after saving a PDF to Files.app
        https://bugs.webkit.org/show_bug.cgi?id=186413
        <rdar://problem/39937488>

        Reviewed by Tim Horton.

        WKApplicationStateTrackingView (WKPDFView's superclass) keeps track of whether
        it's in a window so that it can suspend and resume the web process accordingly.
        However, in WKPDFView's case, PDFKit's host view is in the window instead of
        WKPDFView itself when a PDF is being displayed (WKPDFView is only in a window as a
        placeholder while the PDF loads). Since WKApplicationStateTrackingView doesn't
        think its in a window, it suspends the web process, preventing messages necessary
        to displaying the share sheet from being delivered.

        Fix this by teaching WKApplicationStateTrackingView to consider the in-windowness
        of the proper content view. For all cases other than WKPDFView, this is |self|.
        For WKPDFView, it is the PDFHostViewController's root view if it exists, otherwise
        it's |self|.

        * UIProcess/ios/WKApplicationStateTrackingView.h:
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView willMoveToWindow:]):
        (-[WKApplicationStateTrackingView didMoveToWindow]):
        (-[WKApplicationStateTrackingView _contentView]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _contentView]):
        (-[WKPDFView web_contentView]):

2018-06-07  Dean Jackson  <dino@apple.com>

        Match HI spec for thumbnail view sizing and location
        https://bugs.webkit.org/show_bug.cgi?id=186412
        <rdar://problem/40226192>

        Reviewed by Tim Horton.

        Use the computed obscured inset to position the QuickLook
        view inside the WKSystemPreviewView.

        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]):
        (-[WKSystemPreviewView _layoutThumbnailView]):

2018-06-07  Tadeu Zagallo  <tzagallo@apple.com>

        Don't try to allocate JIT memory if we don't have the JIT entitlement
        https://bugs.webkit.org/show_bug.cgi?id=182605
        <rdar://problem/38271229>

        Reviewed by Mark Lam.

        Remove processHasEntitlement, which was moved into WTF and update all call sites.

        * Shared/mac/SandboxUtilities.h:
        * Shared/mac/SandboxUtilities.mm:
        (WebKit::processHasEntitlement): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::applicationType):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (applicationHasAppLinkEntitlements):

2018-06-07  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r232544): Pages are blank after homing out and then resuming on iPad
        https://bugs.webkit.org/show_bug.cgi?id=186408
        <rdar://problem/40907111>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]):
        Clients who use _resizeWhileHidingContentWithUpdates don't call
        _endAnimatedResize; the former API is a one-shot. We can't wait for
        _endAnimatedResize to complete the animation (and don't need to, since
        the content is hidden), but instead should just finish it when the
        commit with the resized tiles arrives.

2018-06-07  Jiewen Tan  <jiewen_tan@apple.com>

        Use the same overloaded addInputString in WKContentViewInteraction
        https://bugs.webkit.org/show_bug.cgi?id=186376
        <rdar://problem/18498360>

        Reviewed by Brent Fulgham.

        Different overloaded variants of [UIKeyboardImpl -addInputString] behaves differently. We should use the same
        overloaded variant consistently: [UIKeyboardImpl -addInputString:withFlags:withInputManagerHint:].

        Sadly, there is no test case for this change as:
        1) UIScriptController has troubles simulating '\r' keyboard event, and
        2) API test couldn't simulate proper UI keyboard events.

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

2018-06-07  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r224134) Client certificate challenges don't always appear
        https://bugs.webkit.org/show_bug.cgi?id=186402
        <rdar://problem/35967150>

        Reviewed by Brian Weinstein.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::completeAuthenticationChallenge):
        Add an exception for all TLS-handshake-related challenges, not just server trust.

2018-06-07  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in Document::updateLayout() in WebPage::determinePrimarySnapshottedPlugIn()
        https://bugs.webkit.org/show_bug.cgi?id=186383
        <rdar://problem/40849498>

        Reviewed by Jon Lee.

        The release assert was hit because the descendent elemenet iterator, which instantiates ScriptDisallowedScope,
        was alive as determinePrimarySnapshottedPlugIn invoked Document::updateLayout. Avoid this by copying
        the list of plugin image elements into a vector first.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn): Fixed the release assert, and deployed Ref and RefPtr
        to make this code safe.

2018-06-07  Don Olmstead  <don.olmstead@sony.com>

        [CoordGraphics] Fix compilation errors around USE(COORDINATED_GRAPHICS)
        https://bugs.webkit.org/show_bug.cgi?id=186374

        Reviewed by Žan Doberšek.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::sceneUpdateFinished):

2018-06-07  Brent Fulgham  <bfulgham@apple.com>

        Remove unused debug mode conditions
        https://bugs.webkit.org/show_bug.cgi?id=186358
        <rdar://problem/39117121>

        Reviewed by Zalan Bujtas.

        Remove some unused code paths related to ResourceLoadStatistics debug mode.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::shouldPartitionCookies const):

2018-06-07  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r232520): Crash under IPC::ArgumentCoder<WebCore::Credential>::encodePlatformData
        https://bugs.webkit.org/show_bug.cgi?id=186385
        <rdar://problem/40853796>

        Reviewed by Daniel Bates.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<Credential>::encodePlatformData): Fixed an incorrect cast.

2018-06-06  Per Arne Vollan  <pvollan@apple.com>

        Crash in lambda function WTF::Function<void ()>::CallableWrapper<WebKit::DisplayLink::displayLinkCallback
        https://bugs.webkit.org/show_bug.cgi?id=186370
        <rdar://problem/39791647>

        Reviewed by Brent Fulgham.

        When the display link is firing, the callback function is called on the display link thread, where a lambda function
        is created to be executed on the main thread. The WebPageProxy object is captured as a RefPtr in the lambda. This
        might crash when executing on the main thread, since the WebPageProxy object is possibly deleted then. Capturing
        the WebPageProxy will not prevent the object from being deleted if the destruction of the WebPageProxy object already
        has started on the main thread when the object is captured, which sometimes is the case. Instead, we can create a
        weak pointer to the object, which will work as intended, even if the WebPageProxy object is in the process of being
        deleted. This also matches the display link implementation used when the WebContent process has access to the
        WindowServer. This is not a frequent crash. I have not been able to reproduce it.
 
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::displayLinkCallback):

2018-06-06  Antoine Quint  <graouts@apple.com>

        Rename color-filter to -apple-color-filter and do not expose it to Web content
        https://bugs.webkit.org/show_bug.cgi?id=186306
        <rdar://problem/39874167>

        Reviewed by Simon Fraser.

        Change the ColorFilter setting to no longer be exposed as an experimental feature and ensure it's turned off by default.
        To allow internal clients to use the -apple-color-filter property, we expose a new _colorFilterEnabled property as SPI
        to WKWebViewConfigurationPrivate.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetColorFilterEnabled):
        (WKPreferencesGetColorFilterEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setAttachmentElementEnabled:]):
        (-[WKWebViewConfiguration _colorFilterEnabled]):
        (-[WKWebViewConfiguration _setColorFilterEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

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

        REGRESSION (r232301) - Unable to enter video fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=186357
        <rdar://problem/40838449>

        Reviewed by Jon Lee.

        Only set up the standby fullscreen element if we are in element fullscreen.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::videoControlsManagerDidChange):

2018-06-06  Jeremy Jones  <jeremyj@apple.com>

        attenuationFactor should be in range [0,1]
        https://bugs.webkit.org/show_bug.cgi?id=186320
        rdar://problem/40821456

        Reviewed by Jer Noble.

        If attenuationFactor is outside of this range it can cause false positives.

        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:
        (WebKit::FullscreenTouchSecheuristic::attenuationFactor):

2018-06-06  Tim Horton  <timothy_horton@apple.com>

        Move animated resize into the layer tree transaction, and make it asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=186130
        <rdar://problem/38477288>

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::setScrollPosition):
        (WebKit::RemoteLayerTreeTransaction::dynamicViewportSizeUpdateID const):
        (WebKit::RemoteLayerTreeTransaction::setDynamicViewportSizeUpdateID):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode const):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        Add scrollPosition to the transaction on all platforms, not just Mac.
        Add the optional dynamicViewportSizeUpdateID to the transaction, representing
        the most recent dynamicViewportSizeUpdate that commit contains, if any.

        * Shared/ios/DynamicViewportSizeUpdate.h:
        Added a typedef for DynamicViewportSizeUpdateID, and move the mode enum here.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::dynamicViewportUpdateChangedTarget): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::didCommitLayerTree):
        (WebKit::WebPageProxy::synchronizeDynamicViewportUpdate): Deleted.
        (WebKit::WebPageProxy::dynamicViewportUpdateChangedTarget): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::synchronizeDynamicViewportUpdate): Deleted.
        Remove dynamicViewportUpdateChangedTarget and synchronizeDynamicViewportUpdate.
        Move dynamicViewportSizeUpdateID maintenance into WKWebView.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        Remove _resizeAnimationTransformTransactionID. We now instead pack
        the resize ID inside the transaction, instead of separately sending
        back a transaction ID to wait for.

        (-[WKWebView _didCommitLayerTreeDuringAnimatedResize:]):
        (-[WKWebView _didCommitLayerTree:]):
        Added, factored out of _didCommitLayerTree:.
        If the transaction includes the result of the most recently-sent resize,
        store the requisite adjustments required to counter the new scale and
        scroll offset, update the resizeAnimationView, and, if endAnimatedResize
        has already been called, call _didCompleteAnimatedResize to tear down
        the animation view and put things back together.

        Add some code so that if a commit arrives before the resize, we update
        the scale of the resize animation view to keep the width fitting.

        (activeMaximumUnobscuredSize):
        (activeOrientation):
        Move these because the code that depends on them moved.

        (-[WKWebView _didCompleteAnimatedResize]):
        Broken out of _endAnimatedResize. This can now be called from
        either endAnimatedResize or _didCommitLayerTreeDuringAnimatedResize,
        depending on which is called first.

        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        Don't create a new resize view if we still have one. Otherwise, we'll
        get the view ordering all wrong when making the second one. This
        didn't previously cause trouble, because we don't have a lot of
        WKScrollView subviews, but it totally could.

        Adopt _initialContentOffsetForScrollView just to make this code more clear.

        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:nextValidLayerTreeTransactionID:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:


2018-06-05  Per Arne Vollan  <pvollan@apple.com>

        Move OpenGL display mask to screen data struct.
        https://bugs.webkit.org/show_bug.cgi?id=186198
        <rdar://problem/40724854>

        Reviewed by Brent Fulgham.

        Currently, the OpenGL display mask is a global in the WebContent process. This is not correct in all cases, since
        it is possible to have two Web views in the same WebContent process, displayed on different displays. This can be
        resolved by moving the OpenGL display mask to a new ScreenData struct, containing information specific to each
        display. The display ID of the host window is used to find the OpenGL display mask when needed. This patch makes
        the host window available when creating an IOSurface, in order to find the right OpenGL display mask. If no host
        window is available, the OpenGL display mask of the main display is used.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowScreenDidChange):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::screenPropertiesStateChanged):
        (WebKit::displayReconfigurationCallBack):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::openGLDisplayMaskChanged): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setScreenProperties):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        Remove tracksResourceLoadMilestones support
        https://bugs.webkit.org/show_bug.cgi?id=186329
        <rdar://problem/40829898>

        Reviewed by Darin Adler.

        Remove the mechanism for enabling/disabling the tracking of
        resource-load milestones. This was initially added in order to enable
        the tracking only for Safari. However, the decision has been made to
        enable the tracking for all WebKit clients, so it's now enabled
        unconditionally.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::startTrackingResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::stopTrackingResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::stopAllNetworkActivityTracking):
        (WebKit::NetworkConnectionToWebProcess::stopAllNetworkActivityTrackingForPage):
        (WebKit::networkActivityTrackingEnabled): Deleted.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::tracksResourceLoadMilestones const): Deleted.
        * 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:
        (WKContextConfigurationTracksResourceLoadMilestones): Deleted.
        (WKContextConfigurationSetTracksResourceLoadMilestones): Deleted.
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration tracksResourceLoadMilestones]): Deleted.
        (-[_WKProcessPoolConfiguration setTracksResourceLoadMilestones:]): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2018-06-05  Darin Adler  <darin@apple.com>

        [Cocoa] Retire DispatchPtr, and add more move semantics and simpler #ifs to other smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=186324

        Reviewed by Anders Carlsson.

        * NetworkProcess/cache/NetworkCacheData.h: Use OSObjectPtr instead of
        DispatchPtr and also use an rvalue reference in the constructor.
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::Data): Use adoptOSObject, rvalue reference
        and WTFMove.
        (WebKit::NetworkCache::Data::empty): Use OSObjectPtr.
        (WebKit::NetworkCache::Data::data const): Use adoptOSObject.
        (WebKit::NetworkCache::Data::subrange const): Ditto.
        (WebKit::NetworkCache::concatenate): Ditto.
        (WebKit::NetworkCache::Data::adoptMap): Ditto. Also use WTFMove.

        * NetworkProcess/cache/NetworkCacheIOChannel.h: Use OSObjectPtr.
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::IOChannel): Use adoptOSObject.
        (WebKit::NetworkCache::IOChannel::read): Use OSObjectPtr.

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

        Adjust compile and runtime flags to match shippable state of features
        https://bugs.webkit.org/show_bug.cgi?id=186319
        <rdar://problem/40352045>

        Reviewed by Maciej Stachowiak, Jon Lee, and others.

        Change the default state of various experimental features so that they are off by default in production
        builds, since they are still under development.

        Turn 'CacheAPIEnabled' and 'SubresourceIntegrityEnabled' on by default, since both features have been
        shipping for a full cycle and have proven to be stable in production.

        * Configurations/FeatureDefines.xcconfig: Don't build ENABLE_INPUT_TYPE_COLOR
        or ENABLE_INPUT_TYPE_COLOR_POPOVER.
        * Shared/WebPreferences.yaml: 
2018-06-05  Timothy Hatcher  <timothy@apple.com>

        Clean up LocalDefaultSystemAppearance and prefers-dark-interface media query

        https://bugs.webkit.org/show_bug.cgi?id=186323
        rdar://problem/38382252

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _defaultAppearance]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _defaultAppearance]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::useDefaultAppearance):

2018-06-05  Sihui Liu  <sihui_liu@apple.com>

        [iOS] TestWebKitAPI.WebKit.WKHTTPCookieStoreWithoutProcessPool fails because cookies aren't flushed to file
        https://bugs.webkit.org/show_bug.cgi?id=186303
        <rdar://problem/40468716>

        Reviewed by Geoffrey Garen.

        No matter there is an observer or not, cookies in UI process should always be flushed to 
        file when new process pool is created, such that cookies created via API can be synced to
        network process.

        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::HTTPCookieStore):
        (API::HTTPCookieStore::registerObserver):
        (API::HTTPCookieStore::cookieManagerDestroyed):
        (API::HTTPCookieStore::registerForNewProcessPoolNotifications):

2018-06-05  Jeremy Jones  <jeremyj@apple.com>

        secheuristic should only use touch began and ended, not changed.
        https://bugs.webkit.org/show_bug.cgi?id=186318
        rdar://problem/39781486

        Reviewed by Jer Noble.

        Filter out change events so swiping gestures don't trigger the heuristic.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _touchDetected:]):

2018-06-05  Darin Adler  <darin@apple.com>

        [Cocoa] More preparation for ARC, focusing on WebKit and smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=186314

        Reviewed by Anders Carlsson.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): Use __bridge for cast.
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::overrideSystemProxies): Ditto.
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost): Ditto.
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendMessage): Ditto.
        (IPC::readFromMachPort): Ditto.

        * Platform/mac/StringUtilities.mm:
        (WebKit::formattedPhoneNumberString): Use __bridge for cast and
        CFBridgingRelease instead of an explicit autorelease.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (initializeMethods): Use auto instead of an explicit type so that we get
        the correct type for the result of protocol_copyProtocolList.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]): Added a
        bridging cast to void* because that's needed to call _Block_signature
        under ARC and harmless outside ARC.

        * Shared/API/c/cf/WKStringCF.mm:
        (WKStringCreateWithCFString): Use __bridge for cast.
        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCreateWithCFURL): Ditto.
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::initializeConnection): Ditto.
        * Shared/Cocoa/DataDetectionResult.mm:
        (WebKit::DataDetectionResult::encode const): Ditto.
        (WebKit::DataDetectionResult::decode): Ditto.
        * Shared/Cocoa/WKNSError.mm:
        (-[WKNSError _web_createTarget]): Ditto.
        * Shared/Cocoa/WKNSURLExtras.mm:
        (-[NSURL _web_originalDataAsWTFString]): Ditto.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer): Removed balanced calls to both
        adoptOSObject and xpc_retain and instead rely on the assignment
        operator just added to OSObjectPtr.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler): Use __bridge for cast.
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer): Ditto.
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::decode): Ditto.
        * Shared/mac/ArgumentCodersMac.mm:
        (IPC::isSerializableValue): Ditto.
        (IPC::encode): Ditto.
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::encodeNSError): Ditto. Also use CFSTR("")" instead of @""
        when we need a CFString.
        (IPC::decodeNSError): Ditto.
        (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData): Ditto.
        (IPC::ArgumentCoder<ProtectionSpace>::decodePlatformData): Ditto.
        (IPC::ArgumentCoder<Credential>::encodePlatformData): Ditto.
        (IPC::ArgumentCoder<Credential>::decodePlatformData): Ditto.
        (IPC::ArgumentCoder<ContentFilterUnblockHandler>::encode): Ditto.
        (IPC::ArgumentCoder<ContentFilterUnblockHandler>::decode): Ditto.
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encodePlatformData): Ditto.
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::decodePlatformData): Ditto.
        * Shared/mac/WebHitTestResultData.mm:
        (WebKit::WebHitTestResultData::platformEncode const): Ditto.
        (WebKit::WebHitTestResultData::platformDecode): Ditto.
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextIsPlugInUpdateAvailable): Ditto.
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController certificateChain]): Ditto.
        (didStartProvisionalLoadForFrame): Ditto.
        (didReceiveServerRedirectForProvisionalLoadForFrame): Ditto.
        (didFailProvisionalLoadWithErrorForFrame): Ditto.
        (didCommitLoadForFrame): Ditto.
        (didFinishLoadForFrame): Ditto.
        (didFailLoadWithErrorForFrame): Ditto.
        (canAuthenticateAgainstProtectionSpaceInFrame): Ditto.
        (didReceiveAuthenticationChallengeInFrame): Ditto.
        (didStartProgress): Ditto.
        (didChangeProgress): Ditto.
        (didFinishProgress): Ditto.
        (didChangeBackForwardList): Ditto.
        (processDidCrash): Ditto.
        (setUpPageLoaderClient): Ditto.
        (setUpPagePolicyClient): Ditto.
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
        (createWKArray): Ditto.
        (-[WKBrowsingContextGroup addUserStyleSheet:baseURL:whitelistedURLPatterns:blacklistedURLPatterns:mainFrameOnly:]): Ditto.
        (-[WKBrowsingContextGroup addUserScript:baseURL:whitelistedURLPatterns:blacklistedURLPatterns:injectionTime:mainFrameOnly:]): Ditto.
        * UIProcess/API/Cocoa/WKConnection.mm:
        (didReceiveMessage): Ditto.
        (didClose): Ditto.
        (setUpClient): Ditto.
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (didCreateConnection): Ditto.
        (getInjectedBundleInitializationUserData): Ditto.
        (setUpInjectedBundleClient): Ditto.
        (-[WKProcessGroup _setAllowsSpecificHTTPSCertificate:forHost:]): Ditto.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setAllowsSpecificHTTPSCertificate:forHost:]): Ditto.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setProxyConfiguration:]): Ditto.
        (-[WKWebsiteDataStore _proxyConfiguration]): Ditto.
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView _didTakeSnapshot:]): Ditto.

        * UIProcess/API/Cocoa/_WKUserContentFilter.mm: Added a missing include.

        * UIProcess/Authentication/mac/WebCredentialMac.mm:
        (WebKit::chain): Use __bridge for cast.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):
        Use CFBridgingRelease instead of adoptNS.
        (WebKit::privateBrowsingSession): Use __bridge for cast.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::provideDataForPasteboard): Use __bridge for cast.
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::pluginPathsInDirectory): Ditto.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::recursivelyMapIOSurfaceBackingStore): Ditto.
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture): Ditto.
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): Ditto.
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu): Ditto.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        (didCreatePage): Ditto.
        (willDestroyPage): Ditto.
        (setUpBundleClient): Ditto.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didStartProvisionalLoadForFrame): Ditto.
        (didReceiveServerRedirectForProvisionalLoadForFrame): Ditto.
        (didFinishLoadForFrame): Ditto.
        (globalObjectIsAvailableForFrame): Ditto.
        (didRemoveFrameFromHierarchy): Ditto.
        (didCommitLoadForFrame): Ditto.
        (didFinishDocumentLoadForFrame): Ditto.
        (didFailProvisionalLoadWithErrorForFrame): Ditto.
        (didFailLoadWithErrorForFrame): Ditto.
        (didSameDocumentNavigationForFrame): Ditto.
        (didLayoutForFrame): Ditto.
        (didReachLayoutMilestone): Ditto.
        (didFirstVisuallyNonEmptyLayoutForFrame): Ditto.
        (didHandleOnloadEventsForFrame): Ditto.
        (userAgentForURL): Ditto.
        (setUpPageLoaderClient): Ditto.
        (willSendRequestForFrame): Ditto.
        (didInitiateLoadForResource): Ditto.
        (didFinishLoadForResource): Ditto.
        (didFailLoadForResource): Ditto.
        (setUpResourceLoadClient): Ditto.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize): Ditto.
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::popUpContextMenu): Ditto.

        * WebProcess/Plugins/PDF/PDFPlugin.h: Put functions that return NSData inside
        an #ifdef __OBJC__ and use __bridge for cast.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage): Use __bridge for cast.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::contents const): Added a bridging cast.
        (WebKit::PlatformCALayerRemoteCustom::setContents): Use __bridge for cast.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom): Ditto.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setTopOverhangImage): Ditto.
        (WebKit::WebPage::setBottomOverhangImage): Ditto.

2018-06-05  Youenn Fablet  <youenn@apple.com>

        ServiceWorker registration should store any script fetched through importScripts
        https://bugs.webkit.org/show_bug.cgi?id=182444
        <rdar://problem/37164835>

        Reviewed by Chris Dumez.

        Add C API to kill storage process.
        In case a Storage Process is closed or crashed, ensure that all its related service worker processes also exit.

        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextTerminateStorageProcess):
        * UIProcess/API/C/WKContextPrivate.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::webToStorageProcessConnectionClosed):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::setScriptResource):
        * WebProcess/Storage/WebSWContextManagerConnection.h:

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

        Revise DEFAULT_EXPERIMENTAL_FEATURES_ENABLED to work properly on Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=186286
        <rdar://problem/40782992>

        Reviewed by Dan Bernstein.

        Use the WK_RELOCATABLE_FRAMEWORKS flag (which is always defined for non-production builds)
        to define ENABLE(EXPERIMENTAL_FEATURES) so that we do not need to manually
        change this flag when preparing for a production release.

        * Configurations/FeatureDefines.xcconfig: Use WK_RELOCATABLE_FRAMEWORKS to determine whether
        experimental features should be enabled, and use it to properly define the feature flag.
        * Shared/WebPreferencesDefaultValues.h:

2018-06-04  Chris Dumez  <cdumez@apple.com>

        Rename "Cross-Origin-Options" HTTP header to "Cross-Origin-Window-Policy"
        https://bugs.webkit.org/show_bug.cgi?id=186287
        <rdar://problem/40783352>

        Reviewed by Youenn Fablet.

        * Shared/WebPreferences.yaml:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::frameBecameRemote):

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

        Restored code signing behavior when WK_USE_RESTRICTED_ENTITLEMENTS isn’t set.

        * Configurations/DebugRelease.xcconfig: Use ad-hoc code signing when
          WK_USE_RESTRICTED_ENTITLEMENTS isn’t set.

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

        Removed a reference to a file that was deleted in r231190.

        * WebKit.xcodeproj/project.pbxproj: Removed the reference to WebProcessShim.xcconfig.

2018-06-04  Chris Dumez  <cdumez@apple.com>

        Update Fetch code to provide more useful exception messages
        https://bugs.webkit.org/show_bug.cgi?id=186156

        Reviewed by Youenn Fablet.

        Provide more useful error messages in our Loading / Fetch code.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::didFailFetch):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::didFailFetch):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didFail):
        (WebKit::ServiceWorkerClientFetch::continueLoadingAfterCheckingResponse):
        * WebProcess/Storage/ServiceWorkerClientFetch.h:
        * WebProcess/Storage/ServiceWorkerClientFetch.messages.in:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinish):
        (WebKit::WebServiceWorkerFetchTaskClient::didFail):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:

2018-06-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Remove all uses of the EXTRA_ZOOM_MODE compiler flag
        https://bugs.webkit.org/show_bug.cgi?id=186279

        Reviewed by Tim Horton.

        Replaces uses of ENABLE(EXTRA_ZOOM_MODE) with PLATFORM(WATCHOS).

        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _willStartScrollingOrZooming]):
        (-[WKContentView _didEndScrollingOrZooming]):
        (-[WKContentView _startAssistingKeyboard]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView reloadContextViewForPresentedListViewController]):
        (-[WKContentView _wheelChangedWithEvent:]):
        (-[WKContentView _simulateTextEntered:]):
        (-[WKContentView selectFormAccessoryPickerRow:]):
        (-[WKContentView formInputLabel]):
        (-[WKContentView setTimePickerValueToHour:minute:]):
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView initWithFrame:]):
        (-[WKScrollView addGestureRecognizer:]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel platformSupportsPickerViewController]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformPrefersTextLegibilityBasedZoomScaling const):

2018-06-04  Jeremy Jones  <jeremyj@apple.com>

        Disable keyboard in fullscreen ios.
        https://bugs.webkit.org/show_bug.cgi?id=186058

        Reviewed by Jer Noble.

        Disallow keyboard in ios fullscreen. This will still allow select keys useful for playback.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):

2018-06-04  Youenn Fablet  <youenn@apple.com>

        NetworkCORSPreflightChecker should set the preflight request User-Agent header
        https://bugs.webkit.org/show_bug.cgi?id=186254
        <rdar://problem/40293504>

        Reviewed by Chris Dumez.

        Some servers misbehave if the User-Agent header is not set properly on preflight requests.
        Set it to the same value as the request triggering the preflight.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::startPreflight):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):

2018-06-03  Andy Estes  <aestes@apple.com>

        [Wi-Fi Assertions] Resume assertions when NetworkProcess::cancelPrepareToSuspend is called
        https://bugs.webkit.org/show_bug.cgi?id=186247

        Reviewed by Tim Horton.

        Since we suspended assertions in prepareToSuspend, we need to resume them if
        cancelPrepareToSuspend is called.

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

2018-06-03  Andy Estes  <aestes@apple.com>

        [iOS] Add a needed networking process entitlement
        https://bugs.webkit.org/show_bug.cgi?id=186246
        <rdar://problem/39578861>

        Reviewed by Brent Fulgham.

        Also sorted the existing entitlements.

        * Configurations/Network-iOS.entitlements:

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

        Make sure that the fencePort received over IPC has the expected disposition (SEND)
        https://bugs.webkit.org/show_bug.cgi?id=186211
        <rdar://problem/37814171>

        Reviewed by Geoffrey Garen.

        It is possible (though very unlikely) for a message to be recevied that has the wrong mach port disposition.
        If this happens, we shouldn't manipulate the passed mach_port_t or pass it on to other API. We already
        drop messages that violate this expectation in the IPC layer, but code handling IPC::Attachment data types
        are not checking this value.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTopContentInsetFenced):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::setVideoLayerFrameFenced):

2018-06-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r232275.

        May have caused a ~1% PLT regression on iOS

        Reverted changeset:

        "Store 0-lifetime stylesheets / scripts into the disk cache
        for faster history navigations"
        https://bugs.webkit.org/show_bug.cgi?id=186060
        https://trac.webkit.org/changeset/232275

2018-06-02  Jeremy Jones  <jeremyj@apple.com>

        Make WKWebView firstResponder after entering or exiting fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=186088
        rdar://problem/40387859

        Reviewed by Jer Noble.

        Update first responder when WKWebView moves to a new window, otherwise there won't be a first responder.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):

2018-06-02  Jeremy Jones  <jeremyj@apple.com>

        Exit fullscreen when javascript alerts are presented.
        https://bugs.webkit.org/show_bug.cgi?id=185619
        rdar://problem/35724264

        Reviewed by Jer Noble.

        Prevent users from being trapped in fullscreen by alert cycles.
        Prevent fullscreen from becoming unresponsive due to alerts hidden behind fullscreen.

        Fullscreen exit is initiated here in the UI process so that fullscreen UI is torn down immediately,
        before the alert is shown.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::exitFullscreenImmediately):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        * UIProcess/WebPageProxy.h:

2018-06-02  Youenn Fablet  <youenn@apple.com>

        Add a sandbox profile for com.cisco.webex.plugin.gpc64 plugin
        https://bugs.webkit.org/show_bug.cgi?id=186110

        Reviewed by Brent Fulgham.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: Webex needs to create some symlinks.
        * Resources/PlugInSandboxProfiles/com.cisco.webex.plugin.gpc64.sb: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-06-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] The user should always be able to double tap to zoom to a scale of at least 1
        https://bugs.webkit.org/show_bug.cgi?id=186209
        <rdar://problem/40529255>

        Reviewed by Tim Horton.

        Tweaks the way double-tap-to-zoom scales are determined in extra zoom mode. Rather than zooming to make the 50th
        and 90th percentiles of text in the document legible, only consider the 90th percentile of text size when
        determining zoom scale, and fix the other potential zoom scale at 1; additionally, if the zoom scales are close
        (within 0.3 of each other), snap the lower zoom scale to the higher value.

        This results in the following changes in behavior:
        -   Enables double tap to zoom in cases where all the text in the page is already legible.
        -   On pages with mobile viewports, usually allows the user to toggle between initial scale and a scale of 1.
        -   If a significant portion of text is unusually small, the zoomed-in scale may exceed 1.

        Test: fast/events/extrazoom/double-tap-to-zoom-with-large-text.html

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::computeTextLegibilityScales):

2018-06-01  Jeremy Jones  <jeremyj@apple.com>

        Keyboard focus should exit fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=185617
        rdar://problem/34697938

        Reviewed by Ryosuke Niwa.

        While in element fullscreen, initiating keyboard focus should exit fullscreen in iOS.

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

2018-06-01  Chris Dumez  <cdumez@apple.com>

        Regression(r230567): Unable to log into twitter.com in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=186205
        <rdar://problem/40670799>

        Reviewed by Youenn Fablet.

        We were using the same SWServer for all private sessions and the SWServer's sessionID would
        be legacyPrivateSessionID(). As a result, the service worker's sessionID would be legacyPrivateSessionID()
        as well and would not match the sessionID of its client pages. This sessionID mismatch was 
        causing the breakage.

        Instead of using the same SWServer of all private sessions, we now go back to using a SWServer
        per private session. However, we now make sure that the SWServer gets destroyed whenever its
        corresponding session gets destroyed.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::destroySession):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::from):
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::destroySession):
        (WebKit::StorageProcess::swServerForSession):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):

        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::weakPtrFactory const):
        Fix memory leak caused by a reference cycle between the WebsiteDataStore and its
        WebResourceLoadStatisticsStore, by using WeakPtr to break the cycle. This was causing
        us to leak WebsiteDataStore objects, which would prevent the destruction of sessions.


2018-06-01  Youenn Fablet  <youenn@apple.com>

        Add an option to restrict communication to localhost sockets
        https://bugs.webkit.org/show_bug.cgi?id=186208

        Reviewed by Eric Carlson.

        Implement restriction to localhost sockets by setting any IP address to 127.0.0.1.
        This is done on WebProcess side just before requesting to open the socket by NetworkProcess.

        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
        (WebKit::LibWebRTCNetwork::disableNonLocalhostConnections):
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::disableNonLocalhostConnections):
        (WebKit::LibWebRTCProvider::registerMDNSName):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::prepareSocketAddress):
        (WebKit::LibWebRTCSocketFactory::CreateServerTcpSocket):
        (WebKit::LibWebRTCSocketFactory::CreateUdpSocket):
        (WebKit::LibWebRTCSocketFactory::CreateClientTcpSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:

2018-06-01  Chris Dumez  <cdumez@apple.com>

        Regression(r230876): Swipe navigation snapshot may get removed too early
        https://bugs.webkit.org/show_bug.cgi?id=186168
        <rdar://problem/39743617>

        Reviewed by Tim Horton.

        The swipe navigation snapshot would get removed too early when receiving a paint
        event after requesting a history navigation but before the provisional load has
        actually started. This is because of the asynchronous navigation policy decision
        which occurs after requesting to navigate. To address the issue, we now start
        listening for events only after the provisional load has started.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didStartProvisionalLoadForMainFrame]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame):
        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame):
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):

2018-06-01  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix for r232276.

        iOS sandbox profiles don't preprocess macros. Therefore, remove the whole
        macro condition block.

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

2018-06-01  Sihui Liu  <sihui_liu@apple.com>

        Stop using StorageTracker.db in LocalStorageDatabaseTracker
        https://bugs.webkit.org/show_bug.cgi?id=186104

        Reviewed by Geoffrey Garen.

        Stop using StorageTracker.db and stop caching origins in LocalStorageDatabaseTracker for efficiency 
        and simplicity. Since functions in LocalStorageDatabaseTracker are not frequently called, we get 
        little benefits from caching origins.

        * Platform/Logging.h:
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):
        (WebKit::LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin):
        (WebKit::LocalStorageDatabaseTracker::deleteDatabaseWithOrigin):
        (WebKit::LocalStorageDatabaseTracker::deleteAllDatabases):
        (WebKit::LocalStorageDatabaseTracker::databasesModifiedSince):
        (WebKit::LocalStorageDatabaseTracker::origins const):
        (WebKit::LocalStorageDatabaseTracker::originDetails):
        (WebKit::LocalStorageDatabaseTracker::databasePath const):
        (WebKit::fileCreationTime): Deleted.
        (WebKit::fileModificationTime): Deleted.
        (WebKit::LocalStorageDatabaseTracker::trackerDatabasePath const): Deleted.
        (WebKit::LocalStorageDatabaseTracker::openTrackerDatabase): Deleted.
        (WebKit::LocalStorageDatabaseTracker::importOriginIdentifiers): Deleted.
        (WebKit::LocalStorageDatabaseTracker::updateTrackerDatabaseFromLocalStorageDatabaseFiles): Deleted.
        (WebKit::LocalStorageDatabaseTracker::addDatabaseWithOriginIdentifier): Deleted.
        (WebKit::LocalStorageDatabaseTracker::removeDatabaseWithOriginIdentifier): Deleted.
        (WebKit::LocalStorageDatabaseTracker::pathForDatabaseWithOriginIdentifier): Deleted.
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.h:
        * UIProcess/WebStorage/StorageManager.h:

2018-06-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Crash in WebKitFaviconDatabase when pageURL is unset
        https://bugs.webkit.org/show_bug.cgi?id=186164

        Reviewed by Carlos Garcia Campos.

        PageURL can legitimately be null here if JavaScript does something silly with window.open.

        * UIProcess/API/glib/WebKitFaviconDatabase.cpp:
        (webkitFaviconDatabaseSetIconURLForPageURL):
        (webkitFaviconDatabaseSetIconForPageURL):

2018-05-31  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Automation: use the session delegate to perform window maximize
        https://bugs.webkit.org/show_bug.cgi?id=186167
        <rdar://problem/40544391>

        Reviewed by Timothy Hatcher.

        Add plumbing to hand off window maximizing to the session delegate.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::AutomationSessionClient::requestMaximizeWindowOfPage):

2018-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Try to fix GTK+ build with old versions of GTK+ after r232390.

        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):

2018-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use a popup window with a tree view instead of a menu for option menu default implementation
        https://bugs.webkit.org/show_bug.cgi?id=186146

        Reviewed by Michael Catanzaro.

        It's more convenient to use than the menu.

        * UIProcess/API/gtk/WebKitPopupMenu.cpp:
        (WebKit::menuCloseCallback):
        (WebKit::WebKitPopupMenu::activateItem):
        * UIProcess/API/gtk/WebKitPopupMenu.h:
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::WebPopupMenuProxyGtk):
        (WebKit::WebPopupMenuProxyGtk::selectItem):
        (WebKit::WebPopupMenuProxyGtk::activateItem):
        (WebKit::WebPopupMenuProxyGtk::activateItemAtPath):
        (WebKit::WebPopupMenuProxyGtk::treeViewRowActivatedCallback):
        (WebKit::WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback):
        (WebKit::WebPopupMenuProxyGtk::buttonPressEventCallback):
        (WebKit::WebPopupMenuProxyGtk::keyPressEventCallback):
        (WebKit::WebPopupMenuProxyGtk::createPopupMenu):
        (WebKit::WebPopupMenuProxyGtk::show):
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):
        (WebKit::WebPopupMenuProxyGtk::hidePopupMenu):
        (WebKit::WebPopupMenuProxyGtk::cancelTracking):
        (WebKit::WebPopupMenuProxyGtk::typeAheadFindIndex):
        (WebKit::WebPopupMenuProxyGtk::typeAheadFind):
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:

2018-05-31  Per Arne Vollan  <pvollan@apple.com>

        Add OpenGL display mask to WebPage creation parameters.
        https://bugs.webkit.org/show_bug.cgi?id=186163
        <rdar://problem/40634504>

        Reviewed by Brent Fulgham.

        To make sure the OpenGL display mask is always available, include it in the WebPage creation parameters.
        The OpenGL display mask is sent to the WebProcess when the platform display ID changes, but that is not
        early enough in all cases. If the OpenGL display mask is not set, only OpenGL software rendering is offered
        on some hardware configurations.

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

2018-05-31  Brent Fulgham  <bfulgham@apple.com>

        Add a rule to allow reading files with prefix /private/var/db/CVMS/cvmsCodeSignObj
        https://bugs.webkit.org/show_bug.cgi?id=186157
        <rdar://problem/40666437>

        Reviewed by Eric Carlson.

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

2018-05-31  Megan Gardner  <megan_gardner@apple.com>

        Add setting to allow override screen size to be disabled.
        https://bugs.webkit.org/show_bug.cgi?id=186109

        Reviewed by Andy Estes.

        Pipe the needed settings through to WebCore.

        * Shared/WebPreferences.yaml:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_configurationPreferenceValues):

2018-05-31  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Add JIT entitlements to WebContent process and plugin process on macOS
        https://bugs.webkit.org/show_bug.cgi?id=184485
        <rdar://problem/37556535>

        Reviewed by Dan Bernstein.

        This patch builds on the changes from Bug 185526 to add support for a JIT entitlement. It makes the
        following changes:

        1. Adds a new 'WebContent-OSX.entitlements file that unconditionally adds the JIT entitlement for all builds.
        2. Modifies the PluginService.entitlements to unconditionally add the JIT entitlement.

        * Configurations/PluginService.entitlements: Updated to add the JIT entitlement.
        * Configurations/WebContent-OSX.entitlements: Updated to add the JIT entitlement.
        * Configurations/WebContentService.xcconfig: Updated to use the new 'WebContent-OSX.entitlements' file.
        * WebKit.xcodeproj/project.pbxproj:

2018-05-31  Brent Fulgham  <bfulgham@apple.com>

        Don't attempt to extend sandbox when running tests with mock media devices
        https://bugs.webkit.org/show_bug.cgi?id=186150
        <rdar://problem/40690875>

        Reviewed by Alexey Proskuryakov.

        Avoid attempting to issue a sandbox extension to actual media devices when
        running with Mock capture devices.

        Also handle the 'denyNextRequest' test state outside of the USE(APPLE_INTERNAL_SDK)
        guards, since it is needed for Open Source builds as well.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream):

2018-05-31  Antti Koivisto  <antti@apple.com>

        WebKit memory management: Safari jetsams on some websites when zooming and scrolling
        https://bugs.webkit.org/show_bug.cgi?id=186091
        <rdar://problem/36315010>

        Reviewed by Geoff Garen.

        When zooming a page rapidly the visible rect and the page zoom level may get momentarily out of sync.
        When this happens we may generate tiles for a much larger area than needed and run out of memory
        building the next layer tree transaction. Running out of memory is more likely if the page has lots of
        tiled layers in addition to the main content layer.

        We already have code for dealing with the scale mismatch for zoom-out case (where this would cause
        visibly missing tiles). This patch enables the same exact adjustment for zoom-in case (where the
        symptom is creating too many tiles).

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

        Do some renames to make it clear that this can both expand and contract the visible rect.
        Bail out if there is nothing to do.

        (WebKit::WebPage::updateVisibleContentRects):

        Call adjustExposedRectForNewScale directly and unconditionally.

        (WebKit::adjustExposedRectForBoundedScale): Deleted.

2018-05-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Pass VM& parameter as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=186085

        Reviewed by Saam Barati.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        (WebKit::NPJSObject::construct):
        (WebKit::NPJSObject::invoke):

2018-05-30  Brent Fulgham  <bfulgham@apple.com>

        [macOS] WebProcess needs TCC entitlements for media capture (Take 2)
        https://bugs.webkit.org/show_bug.cgi?id=185526
        <rdar://problem/36674649>

        Reviewed by Alexey Proskuryakov.

        In Bug 181995 I added TCC entitlements for media capture to the macOS entitlements used for
        relocatable builds. These changes also need to apply to system builds of WebKit.

        Previously we had not needed an entitlements file for system builds of WebKit, so only provided
        an entitlements file for our relocatable build targets. Now we need entitlements when building
        on recent macOS targets using internal SDKs.

        Since these various scenarios are beginning to multiple, this patch dynamically generates the
        entitlements file.

        This patch does the following:

        1. Changes the "WebContent-OSX.entitlements" to hold the TCC entitlements needed for media capture, and rename
           to "WebContent-OSX-restricted.entitlements".
        2. Removes the unneeded "com.apple.private.xpc.domain-extension" from WebContent-OSX.entitlement, and dynamically
           adds it using a new build step using the script 'process-webcontent-entitlements.sh'
        3. Updates DebugRelease.xcconfig to use the 'Safari Engineering' signing key for internal builds.
        4. Updates WebContentService.xcconfig to remove the CODE_SIGN_ENTITLEMENTS_OSX_WITH_XPC_DOMAIN_EXTENSION_YES target
           since we no longer need a custom entitlement file for this case.
        5. Updates WebContentService.Development.xcconfig to remove CODE_SIGN_ENTITLEMENTS_COCOA_TOUCH_NO since it is no
           longer needed.
        6. Deletes the file Configurations/WebContent.Development.entitlements since it is no longer needed.
        7. Revises the WebContent process sandbox to allow camera and microphone access without needing TCC
           entitlements, since those cannot be applied without an internal SDK.
        8. Revises the UserMediaProcessManager to not pass dynamic sandbox extensions to the WebContent process
           when building with the public SDK since those entitlements cannot be added or consumed in Open
           Source builds.

        We want to use the TCC entitlements when building with the internal SDK on recent macOS builds.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/WebContent-OSX-restricted.entitlements: Renamed from Source/WebKit/Configurations/WebContent-OSX.entitlements.
        * Configurations/WebContent.Development.entitlements: Removed.
        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:
        * Scripts/process-webcontent-entitlements.sh: Added.
        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream): Don't bother creating and sending sandbox extensions for
        camera and microphone control for builds that cannot support them.
        * WebKit.xcodeproj/project.pbxproj:

2018-05-30  Daniel Bates  <dabates@apple.com>

        NavigationAction does not need to hold initiating DOM Event
        https://bugs.webkit.org/show_bug.cgi?id=185958
        <rdar://problem/40531539>

        Reviewed by Simon Fraser.

        Write in terms of NavigationAction::{keyStateEventData, mouseEventDataForFirstMouseEvent}().

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::mouseButtonForMouseEventData):
        (WebKit::syntheticClickTypeForMouseEventData):
        (WebKit::clickLocationInRootViewCoordinatesForMouseEventData):
        (WebKit::InjectedBundleNavigationAction::modifiersForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::mouseButtonForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::syntheticClickTypeForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::clickLocationInRootViewCoordinatesForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        (WebKit::mouseEventForNavigationAction): Deleted.
        (WebKit::mouseButtonForMouseEvent): Deleted.
        (WebKit::syntheticClickTypeForMouseEvent): Deleted.
        (WebKit::clickLocationInRootViewCoordinatesForMouseEvent): Deleted.

2018-05-30  Andy Estes  <aestes@apple.com>

        [Cocoa] Add an SPI to suppress connection termination errors from CFNetwork when network interfaces change
        https://bugs.webkit.org/show_bug.cgi?id=186107
        <rdar://problem/39338957>

        Reviewed by Brady Eidson.

        Added an SPI which configures a process pool's networking process to set the
        kCFStreamPropertyAutoErrorOnSystemChange to NO on its NSURLSessionConfigurations.
        This instructs CFNetwork to not terminate active connections when the system's
        network interfaces change.

        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::suppressesConnectionTerminationOnSystemChange const):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration suppressesConnectionTerminationOnSystemChange]):
        (-[_WKProcessPoolConfiguration setSuppressesConnectionTerminationOnSystemChange:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2018-05-30  Youenn Fablet  <youenn@apple.com>

        Rename FromOrigin runtime flag to CrossOriginResourcePolicy and enable it by default
        https://bugs.webkit.org/show_bug.cgi?id=186082

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCrossOriginResourcePolicyEnabled):
        (WKPreferencesGetCrossOriginResourcePolicyEnabled):
        (WKPreferencesSetFromOriginResponseHeaderEnabled): Deleted.
        (WKPreferencesGetFromOriginResponseHeaderEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):

2018-05-30  Youenn Fablet  <youenn@apple.com>

        Rename CrossOriginResourcePolicy same to same-origin
        https://bugs.webkit.org/show_bug.cgi?id=186080

        Reviewed by Chris Dumez.

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

2018-05-30  David Kilzer  <ddkilzer@apple.com>

        [iOS] -[WKFullScreenViewController viewWillAppear:] should call [super viewWillAppeear:]
        <https://webkit.org/b/186103>
        <rdar://problem/40655695>

        Reviewed by Eric Carlson.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface):
        Drive-by clean up.  For consistency, we always use the same
        variable in the body of the `if` statement that was used in the
        condition.
        (-[WKFullScreenViewController viewWillAppear:]): Call
        [super viewWillAppeear:] to fulfill API contract.

2018-05-30  Chris Dumez  <cdumez@apple.com>

        Take a background process assertion in WebPageProxy::callAfterNextPresentationUpdate()
        https://bugs.webkit.org/show_bug.cgi?id=186097
        <rdar://problem/40651225>

        Reviewed by Dan Bernstein.

        Refactor fix landed in r232298 so that we rely on the existing Callback infrastructure
        to take a background process assertion.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::callAfterNextPresentationUpdate):

2018-05-30  Aditya Keerthi  <akeerthi@apple.com>

        Fix the ENABLE(DATALIST_ELEMENT) build
        https://bugs.webkit.org/show_bug.cgi?id=186105

        Reviewed by Wenson Hsieh.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:

2018-05-30  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a quick build fix for r232276.

        Enabled SecItemShim again as it turns out to be useful for CFNetwork APIs that
        query Keychains underneath us.

        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):

2018-05-30  Jer Noble  <jer.noble@apple.com>

        Auto-pip should use main content heuristic.
        https://bugs.webkit.org/show_bug.cgi?id=186065
        <rdar://problem/35862502>

        Reviewed by Eric Carlson.

        Make the m_pipStandbyElement clearable, which will allow the auto-pip mechanism to be torn down. Add
        a WebProcess-side notification when the main content changes, to facilitate this.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::videoControlsManagerDidChange):
        (WebKit::WebFullScreenManager::setPIPStandbyElement):
        (WebKit::WebFullScreenManager::didEnterFullScreen):
        (WebKit::WebFullScreenManager::willExitFullScreen):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::videoControlsManagerDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionManager::setUpPlaybackControlsManager):
        (WebKit::PlaybackSessionManager::clearPlaybackControlsManager):
        (WebKit::PlaybackSessionManager::currentPlaybackControlsElement const):

2018-05-30  Jer Noble  <jer.noble@apple.com>

        Fix a few issues in WKFullScreenViewController
        https://bugs.webkit.org/show_bug.cgi?id=186067
        <rdar://problem/40630944>

        Reviewed by Darin Adler.

        The check in setInterface() is checking the wrong pointer:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface):

        The check in -_effectiveFullscreenInsetTop is backwards:
        (-[WKFullScreenViewController _effectiveFullscreenInsetTop]):

2018-05-30  Chris Dumez  <cdumez@apple.com>

        Take a background process assertion in WebPageProxy::callAfterNextPresentationUpdate()
        https://bugs.webkit.org/show_bug.cgi?id=186097
        <rdar://problem/40651225>

        Reviewed by Tim Horton.

        Take a background process assertion in WebPageProxy::callAfterNextPresentationUpdate(). Otherwise,
        apps may get stuck on _doAfterNextPresentationUpdate because the WebProcess got suspended.

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

2018-05-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build
        https://bugs.webkit.org/show_bug.cgi?id=186078

        Unreviewed build fix.

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

2018-05-29  Andy Estes  <aestes@apple.com>

        [Wi-Fi Assertions] Track whether WiFiAssertionHolder should actually hold a Wi-Fi assertion
        https://bugs.webkit.org/show_bug.cgi?id=185983
        <rdar://problem/40205486>

        Reviewed by Tim Horton.

        * Configurations/Network-iOS.entitlements:

        Added a needed entitlement.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/WiFiAssertionHolder.h:
        (WebKit::WiFiAssertionHolder::shouldHoldWiFiAssertion const):

        Track whether WiFiAssertionHolder should actually hold a Wi-Fi assertion.

        * NetworkProcess/cocoa/WiFiAssertionHolder.mm: Renamed from Source/WebKit/NetworkProcess/cocoa/WiFiAssertionHolder.cpp.
        (holdWiFiAssertion):
        (releaseWiFiAssertion):
        (WebKit::WiFiAssertionHolder::WiFiAssertionHolder):
        (WebKit::WiFiAssertionHolder::~WiFiAssertionHolder):

        Changed holdWiFiAssertion() and releaseWiFiAssertion() to take the
        WiFiAssertionHolder as an argument.

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

        Added a needed sandbox extension.

        * WebKit.xcodeproj/project.pbxproj:

2018-05-29  Youenn Fablet  <youenn@apple.com>

        Add a consistency check between URL and CFURL
        https://bugs.webkit.org/show_bug.cgi?id=186057
        <rdar://problem/40258457>

        Reviewed by Geoff Garen.

        * Shared/Cocoa/WKNSURLExtras.mm:
        (+[NSURL _web_URLWithWTFString:relativeToURL:]):
        (urlWithWTFString): Deleted.
        (+[NSURL _web_URLWithWTFString:]): Deleted.

2018-05-29  Alex Christensen  <achristensen@webkit.org>

        Remove unused WebPage::dummy
        https://bugs.webkit.org/show_bug.cgi?id=186068

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dummy): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-05-29  Per Arne Vollan  <pvollan@apple.com>

        Create typedef for HashMap<PlatformDisplayID, ScreenProperties>
        https://bugs.webkit.org/show_bug.cgi?id=186056

        Reviewed by Brent Fulgham.

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

2018-05-25  Jiewen Tan  <jiewen_tan@apple.com>

        Tighten sandbox profiles for Networking Processes to restrict accesses to macOS/iOS Keychains
        https://bugs.webkit.org/show_bug.cgi?id=162948
        <rdar://problem/40558894>

        Reviewed by Brent Fulgham.

        The patch conditionally tighten sandbox profiles for Networking Processes to remove Keychain related
        permissions and some security permisssions that are not needed. Also it conditionally remove the
        Process Privilege for Networking Processes to access Credentials.

        In addition, it remove process privilege assertions for SecItemShim as it is supposed to work in processes
        that don't have privileges to access Keychains and delegate all operations to UI Process via IPC. Also,
        the patch disables SecItemShim for Networking Process conditionally.

        * Configurations/Network-iOS.entitlements:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):
        (WebKit::webSecItemCopyMatching):
        (WebKit::webSecItemAdd):
        (WebKit::webSecItemUpdate):
        (WebKit::webSecItemDelete):
        (WebKit::initializeSecItemShim):

2018-05-29  Chris Dumez  <cdumez@apple.com>

        Store 0-lifetime stylesheets / scripts into the disk cache for faster history navigations
        https://bugs.webkit.org/show_bug.cgi?id=186060
        <rdar://problem/40627270>

        Reviewed by Geoffrey Garen.

        Tweak our storeUnconditionallyForHistoryNavigation logic to match resources whose priority
        is High, not just VeryHigh. Per logic in CachedResource::defaultPriorityForResourceType(Type),
        This now matches stylesheets and scripts in addition to main resources.

        I found that in case of a history navigation to apple.com, a significant number of scripts
        and stylesheets had to be loaded from the network because our previous heuristic decided
        not to store them (because their priority was not VeryHigh and because their max-age was
        0).

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeStoreDecision):

2018-05-28  Jeff Miller  <jeffm@apple.com>

        Expose additional WKMenuItemIdentifier strings
        https://bugs.webkit.org/show_bug.cgi?id=186041

        Reviewed by Dan Bernstein.

        Expose identifiers for media-related menu items.

        * UIProcess/API/Cocoa/WKMenuItemIdentifiers.mm:
        Define new identifiers.

        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h:
        Declare new identifiers.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::menuItemIdentifier):
        Map to new identifiers.

2018-05-29  Geoffrey Garen  <ggaren@apple.com>

        Removed some unused WebSQL trackers
        https://bugs.webkit.org/show_bug.cgi?id=186026

        Reviewed by Dan Bernstein.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::m_nonVisibleProcessCleanupTimer):
        (WebKit::m_webSQLiteDatabaseTracker): Deleted.
        * WebProcess/WebProcess.h:

2018-05-29  Per Arne Vollan  <pvollan@apple.com>

        Follow-up fixes after r228907.
        https://bugs.webkit.org/show_bug.cgi?id=183338

        Reviewed by Brent Fulgham.

        Add screen properties to the WebProcess creation parameters, instead of sending
        them in a message to the WebProcess just after starting it up.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2018-05-29  Sihui Liu  <sihui_liu@apple.com>

        Unable to remove IndexedDB Databases with Cocoa API removeDataOfTypes
        https://bugs.webkit.org/show_bug.cgi?id=185835
        <rdar://problem/39142257>

        Reviewed by Chris Dumez.

        Fix a wrong if condition: databases should be closed and deleted if websiteDataTypes contains 
        WebsiteDataType::IndexedDBDatabases.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::deleteWebsiteDataForOrigins):

2018-05-28  Sam Weinig  <sam@webkit.org>

        Modernize SVGRenderStyleDefs.h
        https://bugs.webkit.org/show_bug.cgi?id=186024

        Reviewed by Daniel Bates.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        Update for new enum names.

2018-05-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.21.3 release.

        * gtk/NEWS: Add release notes for 2.21.3.

2018-05-27  Dan Bernstein  <mitz@apple.com>

        Reverted the changes made for https://webkit.org/b/186016

        They broke the USE(APPLE_INTERNAL_SDK) Sierra build.

2018-05-27  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix warnings about leaks found by clang static analyzer
        <https://webkit.org/b/186009>
        <rdar://problem/40574267>

        Reviewed by Daniel Bates.

        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::WebAutomationSession::platformSimulateKeySequence): Fix
        leak of two WebEvent objects that happened in a loop.
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDelegate previewController:transitionImageForPreviewItem:contentRect:]):
        Fix leak of a UIImage.

2018-05-27  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016

        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.

2018-05-25  Timothy Hatcher  <timothy@apple.com>

        Setting drawsBackground to YES on a WKView doesn't take effect immediately
        https://bugs.webkit.org/show_bug.cgi?id=185885
        rdar://problem/39706506

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Removed setBackgroundExtendsBeyondPage(true)
        since it is now the default.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setDrawsBackground): Make sure updateLayer gets called on the web view
        by calling setNeedsDisplay:YES.
        (WebKit::WebViewImpl::setBackgroundColor): Ditto.
        (WebKit::WebViewImpl::updateLayer): Removed dead code.
        * UIProcess/WebPageProxy.h: Make m_backgroundExtendsBeyondPage default to true. WebKit was
        always turning this on during WKWebView initializtion, which would cause the scroll
        shadow layer to be created, flash black because of no background, then destroyed soon
        after once WebKit's message to turn it on got delivered.
        * WebProcess/WebPage/WebPage.cpp:
        (WebPage::WebPage): Call setBackgroundExtendsBeyondPage earlier to avoid creating the scroll
        shadow layer, since backgroundShouldExtendBeyondPage defautls to false in WebCore for WK1.
        (WebKit::WebPage::setDrawsBackground): Use updateBackgroundRecursively to propagate the
        correct base background color.

2018-05-25  Youenn Fablet  <youenn@apple.com>

        Migrate From-Origin to Cross-Origin-Resource-Policy
        https://bugs.webkit.org/show_bug.cgi?id=185840

        Reviewed by Chris Dumez.

        Do Cross-Origin-Resource-Policy (CORP) checks in NetworkLoadChecker instead of NetworkResourceLoader directly.
        Make sure CORP only applies to no-cors loads.
        Remove ancestor checks and only consider the document origin making the load.
        This means that in case of cross-origin redirection to same-origin, the redirection will be CORP-checked,
        the final response will not be CORP-checked but will be opaque.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::validateCrossOriginResourcePolicyPolicy):
        (WebKit::NetworkLoadChecker::validateResponse):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        Send ancestor information for navigation loads only.

2018-05-25  Daniel Bates  <dabates@apple.com>

        NavigationAction should not hold a strong reference to a Document
        https://bugs.webkit.org/show_bug.cgi?id=185712
        <rdar://problem/40320916>

        Reviewed by Brent Fulgham.

        Update code to make use of NavigationAction::requester().

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-05-25  Tim Horton  <timothy_horton@apple.com>

        Ensure that the Web Content process doesn't sleep during initialization
        https://bugs.webkit.org/show_bug.cgi?id=185975
        <rdar://problem/40548159>

        Reviewed by Geoffrey Garen.

        WebProcessPool::warmInitialProcess isn't worth much (or at least, as much
        as it could be) if the Web Content process goes to sleep in the middle
        of initializeWebProcess.

        Keep the Web Content process alive until it has handled all messages
        sent from WebProcessPool::initializeNewWebProcess.

        This is a significant speedup on some benchmarks I've been running
        that involve prewarming a process long before any content is loaded.

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

2018-05-25  Chris Dumez  <cdumez@apple.com>

        WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback() unexpectedly constructs a process pool
        https://bugs.webkit.org/show_bug.cgi?id=185992

        Reviewed by Geoffrey Garen.

        Update enableResourceLoadStatisticsAndSetTestingCallback() to pass the right parameter to processPools()
        to avoid constructing a process pool when none exist. Also drop the 'resourceLoadStatisticsEnabled'
        flag on the WebProcessPool and have it query its data store instead to know if the feature is enabled.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::setResourceLoadStatisticsEnabled):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):

2018-05-25  Chris Dumez  <cdumez@apple.com>

        Drop support for NSURLCache in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=185990

        Reviewed by Geoffrey Garen.

        Drop support for NSURLCache in WebKit2 now that the WebKit network cache is stable.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        (WebKit::NetworkProcess::clearDiskCache):
        (WebKit::NetworkProcess::platformSetURLCacheSize): Deleted.
        (WebKit::clearNSURLCache): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (): Deleted.
        (WebKit::NetworkSessionCocoa::setUsesNetworkCache): Deleted.
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformSetURLCacheSize): Deleted.
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformSetURLCacheSize): Deleted.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):
        (WebKit::WebProcessPool::isNetworkCacheEnabled): Deleted.
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::suggestedFilenameForResourceWithURL const):
        (WebKit::WebFrame::mimeTypeForResourceWithURL const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getResourceDataFromFrame):
        (WebKit::WebPage::hasLocalDataForURL):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL): Deleted.
        (WebKit::WebPage::cachedResponseMIMETypeForURL): Deleted.
        (WebKit::WebPage::cachedSuggestedFilenameForURL): Deleted.
        (WebKit::WebPage::cachedResponseDataForURL): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformHasLocalDataForURL): Deleted.
        (WebKit::WebPage::cachedSuggestedFilenameForURL): Deleted.
        (WebKit::WebPage::cachedResponseMIMETypeForURL): Deleted.
        (WebKit::WebPage::cachedResponseDataForURL): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::accessibilityRemoteObject):
        (WebKit::WebPage::platformHasLocalDataForURL): Deleted.
        (WebKit::cachedResponseForURL): Deleted.
        (WebKit::WebPage::cachedSuggestedFilenameForURL): Deleted.
        (WebKit::WebPage::cachedResponseMIMETypeForURL): Deleted.
        (WebKit::WebPage::cachedResponseDataForURL): Deleted.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL): Deleted.
        (WebKit::WebPage::cachedResponseMIMETypeForURL): Deleted.
        (WebKit::WebPage::cachedSuggestedFilenameForURL): Deleted.
        (WebKit::WebPage::cachedResponseDataForURL): Deleted.
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL): Deleted.
        (WebKit::WebPage::cachedResponseMIMETypeForURL): Deleted.
        (WebKit::WebPage::cachedSuggestedFilenameForURL): Deleted.
        (WebKit::WebPage::cachedResponseDataForURL): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2018-05-25  Alex Christensen  <achristensen@webkit.org>

        Fix internal iOS builds after r232198
        https://bugs.webkit.org/show_bug.cgi?id=185986

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

2018-05-25  Alex Christensen  <achristensen@webkit.org>

        URL::host should return a StringView to reduce allocations
        https://bugs.webkit.org/show_bug.cgi?id=185986

        Reviewed by Geoff Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::areFrameAncestorsSameSite):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::overrideSystemProxies):
        * Shared/API/APIURL.h:
        (API::URL::host const):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::addSingleCookie):
        (WebKit::WebAutomationSession::deleteAllCookies):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginDidReceiveUserInteraction):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::populatePluginCache):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::needsHiddenContentEditableQuirk):
        (WebKit::needsPlainTextQuirk):
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):

2018-05-25  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.21.2 release.

        * wpe/NEWS: Add release notes for the 2.21.2 release.

2018-05-25  Chris Dumez  <cdumez@apple.com>

        Minor ApplicationCacheStorage clean up
        https://bugs.webkit.org/show_bug.cgi?id=185984

        Reviewed by Youenn Fablet.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyOriginsWithApplicationCache):

2018-05-25  Chris Dumez  <cdumez@apple.com>

        Avoid triggering network cache speculative revalidation for loads allowing expired content
        https://bugs.webkit.org/show_bug.cgi?id=185985

        Reviewed by Antti Koivisto.

        Avoid triggering network cache speculative revalidation for loads allowing expired content
        (e.g. history loads, restoring pages after crash or safari relaunch). This causes us to do
        unnecessary revalidations, it is both wasteful and bad for performance.

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

2018-05-25  David Kilzer  <ddkilzer@apple.com>

        Fix issues with -dealloc methods found by clang static analyzer
        <https://webkit.org/b/185887>

        Reviewed by Joseph Pecoraro.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm: Drive-by fix
        to use `copy` for `mimeType` property.
        (-[_WKPreviewControllerDataSource initWithMIMEType:]): Drive-by
        fix to use `instancetype` instead of `id`.  Use -copy for
        `mimeType` argument to match property definition.
        (-[_WKPreviewControllerDataSource dealloc]): Add.  Release
        `_completionHandler` and `_mimeType` to fix leaks.
        * UIProcess/ios/WKPasswordView.mm:
        (-[WKPasswordView dealloc]): Add.  Release
        `_userDidEnterPassword` to fix leak.
        * UIProcess/ios/fullscreen/WKFullScreenViewController.h:
        Drive-by clean-up to make `location` property `copy` instead of
        `retain`.
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController dealloc]): Release `_target` and
        `_location` to fix leaks.
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullscreenAnimationController dealloc]): Add.  Release
        `_viewController` to fix leak.
        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm:
        (@property secondaryMaterialOverlayView): Mark explicitly as
        `assign` since this isn't a retained variable.
        (@property secondaryMaterialOverlayViewConstraints): Mark
        explicitly as `retain` since there is nothing to keep this
        object alive.
        (+[WKFullscreenStackView secondaryMaterialOverlayView]): Fix
        leak by autoreleasing the return value.
        (-[WKFullscreenStackView dealloc]): Release retained instance
        variables to fix leaks.  Note that `_stackView` and
        `_visualEffectView` are internally retained despite their
        @property declarations.
        (-[WKFullscreenStackView setTargetViewForSecondaryMaterialOverlay:]):
        Retain @property targetViewForSecondaryMaterialOverlay to match
        its declaration.

2018-05-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] Use DEFAULT_EXPERIMENTAL_FEATURES_ENABLED for Web Animations experimental features
        https://bugs.webkit.org/show_bug.cgi?id=185919

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2018-05-24  Dan Bernstein  <mitz@apple.com>

        ProcessLauncherMac.mm contains a couple of meaningless #ifndef directives
        https://bugs.webkit.org/show_bug.cgi?id=185973

        Reviewed by Tim Horton.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Use #if !ASSERT_DISABLED to guard statements that
          are only needed for an assertion, instead of #ifndef _NDEBUG, which is always true.

2018-05-24  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Memory pressure monitor doesn't reliable notify all the subprocesses
        https://bugs.webkit.org/show_bug.cgi?id=184261

        Reviewed by Carlos Garcia Campos.

        On Linux we had two implementations for getting notifications about memory pressure events:
        - The memory cgroup (called systemd here).
        - The UIProcess memory monitor (which delivered events via a shared eventfd)

        The problem with the first is that it was usually not working on a standard machine due to
        the special permissions or configurations required for memory cgroups, so the second one
        (eventfd) was used as a fall-back in that case.
        But this eventfd method is racy with more than one WebKit child process and it wasn't
        reliably delivering the notifications.

        This patch removes the memory cgroup implementation and modifies the UIProcess memory monitor
        to deliver the events via WebKit IPC. This simplifies the code a lot and allows us to have
        only one implementation that should work in any Linux machine.

        The implementation now also triggers the event with information about the criticalness of it.

        Previously a critical event was triggered always at a 95% of pressure.
        Now a non-critical one is triggered at 90% and critical remains at a 95%.

        Start triggering events early should compensate the fact than triggering the event via WebKit IPC is
        a bit slower than doing that via an eventfd (or than listening on the memory cgroup event controller).

        The events are delivered to all WebKit childs: WebProcess, NetworkProcess, StorageProcess, PluginProcess.

        In the case of the StorageProcess a dummy controller is installed, which currently does nothing,
        but leaves a note for a future implementation and at least allows to trigger platformReleaseMemory()
        that on Linux/glibc should end calling malloc_trim()

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didReceiveMessage):
        (WebKit::PluginProcess::initializePluginProcess):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::didReceiveMemoryPressureEvent):
        * Shared/ChildProcess.h:
        * Shared/ChildProcess.messages.in:
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode const):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::initializeProcess):
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::sendMemoryPressureEvent):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::sendMemoryPressureEvent):
        (WebKit::PluginProcessProxy::didFinishLaunching):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendMemoryPressureEvent):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToStorageProcess):
        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::pollIntervalForUsedMemoryPercentage): Fix equation for calculating the interval percentage.
        (WebKit::MemoryPressureMonitor::singleton):
        (WebKit::MemoryPressureMonitor::start):
        * UIProcess/linux/MemoryPressureMonitor.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-05-24  Youenn Fablet  <youenn@apple.com>

        Update plugin search path to look for user installed plugins
        https://bugs.webkit.org/show_bug.cgi?id=185960

        Reviewed by Brent Fulgham.

        Now that UIProcess may be sandboxed, the home directory is no longer the user home directory.
        Update the path to still look for plugins in the user home directory.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::pluginsDirectories):

2018-05-24  Jiewen Tan  <jiewen_tan@apple.com>

        Adopt SecKeyProxy SPI in certificate based challenge response code
        https://bugs.webkit.org/show_bug.cgi?id=185848
        <rdar://problem/34586181>

        Reviewed by Alex Christensen.

        This patch adopts SecKeyProxy SPI in HTTPS client certificate authentication code.
        1) SecKeyProxy is a new SPI to relay crypto operations from one process to another. The owner process of the proxy
        will behave like a server, and other owners of the SecKeys created from the proxy's endpoints will then behave
        like clients. This client-server model allows more restricted sandbox for client processes, and meanwhile permits
        them to relay crypto operations to the server process while maintaining the same SecKey interfaces as used for local operations.
        2) Because of the client-server model, the server process, i.e. the UI Process in our case, needs to keep the proxy
        object alive long enough for the client process, i.e. Network Processes in our case, to finish all operations, and then destroy
        the proxy object afterward. The ideal place to hold such a proxy is WebsiteDataStore such that proxies could live with the
        corresponding network session.
        3) A new class called SecKeyProxyStore is then created to bind the lifetime of SecKeyProxy to the WebsiteDataStore while initializing
        it correctly. At the time the authentication process reaches WebPageProxy::didReceiveAuthenticationChallengeProxy where we have
        accesses to the WebsiteDataStore, we haven't yet been able to determine the Credential to authenticate the challenge. Therefore, we
        have to reserve a place in the WebsiteDataStore ahead and then fill it with the right Credential. That's why SecKeyProxyStore exists.
        In WebPageProxy::didReceiveAuthenticationChallengeProxy, we create a strong reference of SecKeyProxyStore which will eventually hold
        a strong reference of the SecKeyProxy, and move it to the WebsiteDataStore. We also create a weak reference to SecKeyProxyStore
        and move it to the AuthenticationChallenge. In this way, we indirectly bind the lifetime of SecKeyProxy to the WebsiteDataStore through
        the strong reference and also we can initialize the proxy through the weak reference while a credential is finally determined.
        4) Endpoints of the SecKeyProxy will be passed to the Network Process for creating the 'remote' SecKey. However, those endpoints are
        of NSXPCListenerEndpoint type, which can only be passed with xpc connections and are not compatible with our IPC mechanism. In order
        to pass endpoints around, this patch reuses the xpc connection that is used to bootstrap Network Processes from the UI Process. To do
        so, it sends xpc messages at the place where original IPC messages are sent and overwrites the boostrap listener of the xpc connection
        when Network Process is initialized. From the listener, it continues the original authentication code path.
        5) Tests, again, are manually covered by tlstestwebkit.org. Noted, the prompting Keychain dialog in macOS should say Safari instead of
        "com.apple.WebKit.Networking*" now.

        * Shared/AuthenticationManagerCocoa.mm: Added.
        (WebKit::AuthenticationManager::initializeConnection):
        * Shared/Authentication/cocoa/AuthenticationManager.h:
        * Shared/Authentication/cocoa/ClientCertificateAuthenticationXPCConstants.h:
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::useCredential):
        (WebKit::AuthenticationChallengeProxy::setSecKeyProxyStore):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        * UIProcess/Authentication/cocoa/AuthenticationChallengeProxyCocoa.mm: Added.
        (WebKit::AuthenticationChallengeProxy::sendClientCertificateCredentialOverXpc const):
        * UIProcess/Authentication/cocoa/SecKeyProxyStore.h: Added.
        (WebKit::SecKeyProxyStore::create):
        (WebKit::SecKeyProxyStore::isInitialized const):
        (WebKit::SecKeyProxyStore::get const):
        (WebKit::SecKeyProxyStore::weakPtrFactory const):
        * UIProcess/Authentication/cocoa/SecKeyProxyStore.mm: Added.
        (WebKit::SecKeyProxyStore::initialize):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::addSecKeyProxyStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-05-24  Megan Gardner  <megan_gardner@apple.com>

        Fix Issues with Loupe Gesture
        https://bugs.webkit.org/show_bug.cgi?id=185926

        Reviewed by Tim Horton.

        The loupe gesture was not giving us the correct selection in some situations.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView setSelectedTextRange:]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::clearSelection):

2018-05-24  Keith Rollin  <krollin@apple.com>

        Don't track resource load milestones in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=185828
        <rdar://problem/40424197>

        Reviewed by Brent Fulgham.

        Bug 184838 adds the facility for tracing the beginning and ending of
        resources loads and reporting so that historical information can be
        gathered to assess the health of the networking stack. Disable this
        facility for private browsing sessions.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::startTrackingResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::stopTrackingResourceLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):

2018-05-24  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r224908): [macOS] Media playback not honoring custom caption styles
        https://bugs.webkit.org/show_bug.cgi?id=185955
        <rdar://problem/40339278>

        Reviewed by Eric Carlson.

        In r224908 I removed access to the MediaAccessibility mach port, as well as
        read/write access to various preferences associated with that process, as it
        was no longer needed by modern WebKit media routines.

        Detailed testing reveals that read access is still needed to these preferences
        to properly handle custom caption styles.

        This patch re-enables access to the media accessibility preferences.

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

2018-05-24  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r230269): ASSERTION FAILED: sendRightCount == 1 at ProcessLauncherMac.mm(218)
        https://bugs.webkit.org/show_bug.cgi?id=185687
        <rdar://problem/39386361>

        Reviewed by Brady Eidson.

        In r230269 I added an assertion to help identify cases where we were doing bad
        bookkeeping in our port send rights. I assumed that because we were adding
        one send right, that when we went to close down the connection that we should
        have only one send right.
        
        I have since discovered that this assumption is invalid, and that I should
        only be checking that we have AT LEAST ONE send right at the time we attempt
        to remove it.

        This patch changes the assertion to confirm that we have at least one send
        right before we remove the send right.

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

2018-05-24  Chris Dumez  <cdumez@apple.com>

        Some of the work in initializeLogChannelsIfNecessary() is unnecessary for release builds
        https://bugs.webkit.org/show_bug.cgi?id=185951

        Reviewed by Geoffrey Garen.

        Some of the work in initializeLogChannelsIfNecessary() is unnecessary for release builds and slows down
        launch time. In particular, it is unnecessary to read NSDefaults to figure out which logging channels
        should be enabled.

        * Platform/foundation/LoggingFoundation.mm:
        (WebKit::logLevelString):
        * Platform/unix/LoggingUnix.cpp:
        (WebKit::logLevelString):
        * Platform/win/LoggingWin.cpp:
        (WebKit::logLevelString):

2018-05-24  Per Arne Vollan  <pvollan@apple.com>

        Crash under WebKit::PluginProxy::destroy()
        https://bugs.webkit.org/show_bug.cgi?id=185841
        <rdar://problem/39936896>

        Reviewed by Brent Fulgham.

        A release assert in Connection::sencSync is failing since scripts are not allowed in this context,
        and the WebKit process is allowed to process incoming messages while waiting for the sync reply.
        In this context, scripts are disallowed in the method Element::addShadowRoot. To make sure the
        WebContent process will not wait indefinitely for a reply from the Plugin process, use a timeout
        of 1 second when sending the message.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::destroy):

2018-05-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ input method unit tests after r232049.

        Unit tests don't use a WebPageProxy.

        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::isViewFocused const):
        (WebKit::InputMethodFilter::setEnabled):
        * UIProcess/gtk/InputMethodFilter.h:

2018-05-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: implement maximize, minimize and fullscreen window commands
        https://bugs.webkit.org/show_bug.cgi?id=180398

        Reviewed by Brian Burg.

        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::requestMaximizeWindowOfPage): Added to allow clients maximize the window.
        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (WindowStateEvent::WindowStateEvent): Struct to handle window state events.
        (WindowStateEvent::~WindowStateEvent): Complete the event.
        (WindowStateEvent::complete): Call the completion handler is not called already.
        (windowStateEventCallback): Handle window state event changes.
        (webkitWebViewMaximizeWindow): Try to maximize the window and wait for the event.
        (webkitWebViewMinimizeWindow): Try to minimize the window and wait for the event.
        (webkitWebViewRestoreWindow): Try to unmaximize or unminimize the window and wait for the event.
        * UIProcess/API/wpe/WebKitWebViewWPE.cpp:
        (webkitWebViewMaximizeWindow):
        (webkitWebViewMinimizeWindow):
        (webkitWebViewRestoreWindow):
        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::maximizeWindowOfBrowsingContext): Exit fullscreen, restore the window and then
        maximize it.
        (WebKit::WebAutomationSession::maximizeWindowForPage): Ask the client to maximize the window of page.
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/atoms/EnterFullscreen.js:
        (enterFullscreen): Return early if fullscreen is disabled or if window is already in fullscreen.

2018-05-23  Eric Carlson  <eric.carlson@apple.com>

        Avoid loading AVFoundation to check supported MIME types if possible
        https://bugs.webkit.org/show_bug.cgi?id=185839
        <rdar://problem/40182010>

        Reviewed by Jer Noble.
        
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Encode mediaMIMETypes.
        (WebKit::WebProcessCreationParameters::decode): Decode mediaMIMETypes.
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::mediaTypeCache): Static Vector of media MIME types.
        (WebKit::WebProcessProxy::cacheMediaMIMETypes): Cache the type list and pass it to every other
        process proxy.
        (WebKit::WebProcessProxy::cacheMediaMIMETypesInternal): Cache the type list and pass it to the
        web process.
        (WebKit::WebProcessProxy::mediaMIMETypes): Return the cached type list.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess): Set parameters.mediaMIMETypes.

        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in: Add CacheMediaMIMETypes.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Add SetMediaMIMETypes.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Cache the MIME types if the list isn't
        empty, else register with AVFoundationMIMETypeCache to be notified when it loads types.
        AVFoundationMIMETypeCache to 
        (WebKit::WebProcess::platformTerminate): Unregister with AVFoundationMIMETypeCache.
        (WebKit::WebProcess::setMediaMIMETypes): Pass list of types to AVFoundationMIMETypeCache.

2018-05-23  Brian Burg  <bburg@apple.com>

        Web Automation: disable process swap on navigation when an automation session is active
        https://bugs.webkit.org/show_bug.cgi?id=185552

        Reviewed by Tim Horton.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        This is not intended to work right now. Opt out to avoid crashing
        later when a process is deallocated unexpectedly.

2018-05-23  Youenn Fablet  <youenn@apple.com>

        NetworkLoadChecker should check cached redirections
        https://bugs.webkit.org/show_bug.cgi?id=185849

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection):
        Set the resource error url as done by WebCore SubresourceLoader.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        Pass the resource request to dispatchWillSendRedirectedRequest now needs it.
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        Make sure that m_networkLoad is not null before cancelling it since we might be checking a cached redirection.
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        Ensure the redirect response is coming from the Network before adding it to the cache.
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
        Call willSendRedirectedRequest to make sure the cached redirect is validated.
        * NetworkProcess/NetworkResourceLoader.h:

2018-05-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver: implement AutomationSessionClient::didDisconnectFromRemote
        https://bugs.webkit.org/show_bug.cgi?id=185866

        Reviewed by Brian Burg.

        To handle the case of the session being closed by the browser, for example in case of a network process
        crash. This is currently causing WebDriver tests to timeout in the bot.

        * UIProcess/API/glib/WebKitAutomationSession.cpp: Add an implementation of didDisconnectFromRemote() to notify
        the WebContext that the session will be closed.
        * UIProcess/API/glib/WebKitWebContext.cpp: Remove the automation session when closed.
        * UIProcess/API/glib/WebKitWebContextPrivate.h:

2018-05-22  Brent Fulgham  <bfulgham@apple.com>

        Close access to "lsopen" for non-UI process
        https://bugs.webkit.org/show_bug.cgi?id=185890
        <rdar://problem/39686511>

        Reviewed by Alexey Proskuryakov.

        Close down access to 'lsopen' in the iOS sandboxes. These operations are
        performed by the UIProcess on behalf of these helper processes.

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

2018-05-22  Dean Jackson  <dino@apple.com>

        Optimized path zoom animation needs a valid UIImage and CGRect
        https://bugs.webkit.org/show_bug.cgi?id=185883
        <rdar://problem/40306056>

        Reviewed by Jon Lee.

        Take the rectangle that was passed into the ResourceRequest and
        use it for the origin of an animation into QuickLook.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encode):
        (IPC::ArgumentCoder<ResourceRequest>::decode):
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didStart):
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDelegate initWithSystemPreviewController:fromRect:]):
        (-[_WKPreviewControllerDelegate presentingViewController]):
        (-[_WKPreviewControllerDelegate previewController:frameForPreviewItem:inSourceView:]):
        (-[_WKPreviewControllerDelegate previewController:transitionImageForPreviewItem:contentRect:]):
        (WebKit::SystemPreviewController::start):
        (-[_WKPreviewControllerDelegate initWithSystemPreviewController:]): Deleted.
        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit::DownloadProxy::systemPreviewDownloadRect const):
        * UIProcess/SystemPreviewController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::syncRootViewToScreen):
        * UIProcess/WebPageProxy.h:

2018-05-22  Sihui Liu  <sihui_liu@apple.com>

        [iOS] TestWebKitAPI.WebKit.WKHTTPCookieStoreWithoutProcessPool fails because cookies use different files with/without processpool
        https://bugs.webkit.org/show_bug.cgi?id=185831

        Reviewed by Chris Dumez.

        Started to use uiProcessCookieStorageIdentifier for iOS: make sure cookies handled without 
        processpool would use the same storage file as when processpool exists.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2018-05-22  Chris Dumez  <cdumez@apple.com>

        Regression(AsyncPolicyDelegates): Box.app login Window is blank
        https://bugs.webkit.org/show_bug.cgi?id=185832
        <rdar://problem/40307871>

        Reviewed by Geoffrey Garen.

        Moved WeakObjCPtr.h header from WebKit/ to wtf/ so that it can be used in
        WebKitLegacy code.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        * UIProcess/API/Cocoa/WKBrowsingContextControllerInternal.h:
        * UIProcess/API/Cocoa/WKConnection.mm:
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        * UIProcess/API/Cocoa/WKScriptMessage.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        * UIProcess/API/Cocoa/_WKAutomationSession.mm:
        * UIProcess/API/Cocoa/_WKDownload.mm:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/Cocoa/AutomationClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.h:
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/FindClient.h:
        * UIProcess/Cocoa/FullscreenClient.h:
        * UIProcess/Cocoa/IconLoadingDelegate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):
        * UIProcess/ios/WKScrollView.mm:
        * UIProcess/mac/WKInspectorViewController.mm:
        * UIProcess/mac/WKInspectorWKWebView.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:

2018-05-22  Sihui Liu  <sihui_liu@apple.com>

        Conversion between SecurityOriginData and DatabaseIdentifier is asymmetric when port is null
        https://bugs.webkit.org/show_bug.cgi?id=185715

        Reviewed by Geoffrey Garen.

        Add getter for origins in WKWebsiteDataRecord for testing.

        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (-[WKWebsiteDataRecord _originsString]):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:


2018-05-22  Brady Eidson  <beidson@apple.com>

        Rename the "Web content is visible" process assertion.
        https://bugs.webkit.org/show_bug.cgi?id=185878

        Reviewed by Chris Dumez.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):

2018-05-22  Andy Estes  <aestes@apple.com>

        [Wi-Fi Assertions] Drop assertions on process suspension
        https://bugs.webkit.org/show_bug.cgi?id=185844
        <rdar://problem/40352319>

        Reviewed by Daniel Bates.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::NetworkProcess::processDidResume):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformPrepareToSuspend):
        (WebKit::NetworkProcess::platformProcessDidResume):

2018-05-22  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r229093): Re-enable Network Extension support in the WebContent process (Take 2)
        https://bugs.webkit.org/show_bug.cgi?id=185874
        <rdar://problem/40454404>

        Reviewed by Eric Carlson.

        Add back a necessary XPC connection after locking down the network features in r229093.

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

2018-05-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r232052.

        Breaks internal builds.

        Reverted changeset:

        "Use more C++17"
        https://bugs.webkit.org/show_bug.cgi?id=185176
        https://trac.webkit.org/changeset/232052

2018-05-22  Alberto Garcia  <berto@igalia.com>

        [CMake] Properly detect compiler flags, needed libs, and fallbacks for usage of 64-bit atomic operations
        https://bugs.webkit.org/show_bug.cgi?id=182622
        <rdar://problem/40292317>

        Reviewed by Michael Catanzaro.

        Move the test to determine whether we need to link against
        libatomic to the common file WebKitCompilerFlags.cmake so it can
        also be used for JavaScriptCore.

        * CMakeLists.txt:

2018-05-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r231843.

        Broke cross build

        Reverted changeset:

        "[CMake] Properly detect compiler flags, needed libs, and
        fallbacks for usage of 64-bit atomic operations"
        https://bugs.webkit.org/show_bug.cgi?id=182622
        https://trac.webkit.org/changeset/231843

2018-05-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Crash when loading a SVG image
        https://bugs.webkit.org/show_bug.cgi?id=185819

        Reviewed by Brent Fulgham.

        This is happening in WebLoaderStrategy::scheduleLoad() when getting the value of
        FrameLoaderClient::pageID(). SVGImage uses the empty clients for the loader, and
        EmptyFrameLoaderClient::pageID() returns std::nullopt. The same happens with the frameID. This changed in
        r225934, when pageID() and frameID() were changed to return std::optional, EmptyFrameLoaderClient was updated to
        return std::nullopt instead of 0.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad): Use value_or(0) instead of value() to get pageID and frameID from
        FrameLoaderClient.

2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use more C++17
        https://bugs.webkit.org/show_bug.cgi?id=185176

        Reviewed by JF Bastien.

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

2018-05-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Wayland] UI process crash when closing the window
        https://bugs.webkit.org/show_bug.cgi?id=185818

        Reviewed by Michael Catanzaro.

        This happens when a page containing a text field is loaded but the focus remains in the url bar when the window
        is closed. This is because we are sending a notify-in to the IM context, but the focus is still in the URL
        bar. That confuses the wayland input method manager that tries to free the text of the web view IM context that has
        already been deleted.

        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::setEnabled): Only send notify-in if the view is actually focused.

2018-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        Remove unused and no-op WKContextSetCookieStorageDirectory
        https://bugs.webkit.org/show_bug.cgi?id=185857

        Reviewed by Youenn Fablet.

        Deleted C API which didn't do anything useful, and consequently not used by anyone.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetCookieStorageDirectory): Deleted.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.h:

2018-05-21  Chris Nardi  <cnardi@chromium.org>

        Remove dead exception in MediaList.appendMedium
        https://bugs.webkit.org/show_bug.cgi?id=185278

        Reviewed by Chris Dumez.

        Remove code pertaining to an exception being thrown by appendMedium().

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaList.cpp:
        (webkit_dom_media_list_append_medium):

2018-05-21  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Click events only fire once when editing
        https://bugs.webkit.org/show_bug.cgi?id=185777

        Reviewed by Tim Horton.

        gestureRecognizerShouldBegin: was returning false for the single tap gesture when a node was being
        edited. This is an artifact of how the gesture was previously handled with the text selection assistant.
        This condition is now removed, allowing the single tap gesture to go through and correctly propagate the
        click event.

        Also added an early return to _didGetTapHighlightForRequest: in order to prevent the tap highlight from
        being shown when the node is already being assisted.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):

2018-05-21  Daniel Bates  <dabates@apple.com>

        REGRESSION (r231107): CSP report-only policies are ignored for beacon, importScripts, fetch(), EventSource, and XHR
        https://bugs.webkit.org/show_bug.cgi?id=185789
        <rdar://problem/40380175>

        Reviewed by Andy Estes.

        Have NetworkLoadChecker implement the ContentSecurityPolicyClient interface and support logging
        console messages, sending CSP reports, and dispatching SecurityPolicyViolation events.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker): Modified to take a reference to the NetworkConnectionToWebProcess,
        the web page ID, the web frame ID, and the resource load identifier. These details are necessary
        in order to implement the ContentSecurityPolicyClient interface.
        (WebKit::NetworkLoadChecker::isAllowedByContentSecurityPolicy): Added.
        (WebKit::NetworkLoadChecker::continueCheckingRequest): Write in terms of isAllowedByContentSecurityPolicy().
        (WebKit::NetworkLoadChecker::contentSecurityPolicy): Pass ourself as the client so that we receive
        delegate callbacks.
        (WebKit::NetworkLoadChecker::addConsoleMessage): Added.
        (WebKit::NetworkLoadChecker::sendCSPViolationReport): Added.
        (WebKit::NetworkLoadChecker::enqueueSecurityPolicyViolationEvent): Added.
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (NetworkResourceLoader::enqueueSecurityPolicyViolationEvent): Added.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad): Modified to take a reference to the NetworkConnectionToWebProcess and pass
        this through to the NetworkLoadChecker along with the web page ID, web frame ID and resource load identifier.
        * NetworkProcess/PingLoad.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::enqueueSecurityPolicyViolationEvent): Added.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add message EnqueueSecurityPolicyViolationEvent.

2018-05-21  Brian Burg  <bburg@apple.com>

        Web Automation: always return an empty cookie list if document.cookieURL() is empty
        https://bugs.webkit.org/show_bug.cgi?id=185838
        <rdar://problem/37737526>

        Reviewed by Tim Horton.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
        This crashes in CFNetwork code because an empty cookie URL is not a valid input.
        Just return an empty list since there couldn't be any cookies returned.

2018-05-21  Brian Burg  <bburg@apple.com>

        Web Automation: terminate the automation session if the network or storage process crashes
        https://bugs.webkit.org/show_bug.cgi?id=185827
        <rdar://problem/40424020>

        Reviewed by Tim Horton.

        If one of the processes crashes, the page may be in an undefined state and
        automation will fail in unpredictable ways. It's better to just give up immediately.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessFailedToLaunch):
        (WebKit::WebProcessPool::storageProcessCrashed):

2018-05-21  Sihui Liu  <sihui_liu@apple.com>

        Add a diskCacheSizeOverride accessor function on WKContextConfigurationRef
        https://bugs.webkit.org/show_bug.cgi?id=185826
        <rdar://problem/39732113>

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationDiskCacheSizeOverride):
        (WKContextConfigurationSetDiskCacheSizeOverride):
        * UIProcess/API/C/WKContextConfigurationRef.h:

2018-05-21  Jer Noble  <jer.noble@apple.com>

        Complete fix for enabling modern EME by default
        https://bugs.webkit.org/show_bug.cgi?id=185770
        <rdar://problem/40368220>

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2018-05-21  Sam Weinig  <sam@webkit.org>

        Modernize RenderStyleConstants.h - Part 1
        https://bugs.webkit.org/show_bug.cgi?id=185809

        Reviewed by Yusuke Suzuki.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::getPositionInformation):
        Update for new enum names.

2018-05-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.21.2 release.

        * gtk/NEWS: Add release notes for 2.21.2.

2018-05-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r222967.

        It's not ready yet

        Reverted changeset:

        "[GTK][WPE] Add API to configure and enable resource load
        statistics"
        https://bugs.webkit.org/show_bug.cgi?id=177943
        https://trac.webkit.org/changeset/222967

2018-05-18  Commit Queue  <commit-queue@webkit.org>

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

        Caused layout test failures (Requested by realdawei on
        #webkit).

        Reverted changeset:

        "Complete fix for enabling modern EME by default"
        https://bugs.webkit.org/show_bug.cgi?id=185770
        https://trac.webkit.org/changeset/231982

2018-05-18  Brian Burg  <bburg@apple.com>

        [Cocoa] Add missing nullability annotations to _WKAutomationSessionDelegate
        https://bugs.webkit.org/show_bug.cgi?id=185791
        <rdar://problem/40279891>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h: If there is no dialog shown,
        then the delegate methods to return the dialog text may return a nil NSString.

2018-05-18  Youenn Fablet  <youenn@apple.com>

        NetworkLoadChecker should cancel its content extension retrieval task when being destroyed
        https://bugs.webkit.org/show_bug.cgi?id=185661
        <rdar://problem/39985509>

        Reviewed by Chris Dumez.

        Make sure that the Content Extension retrieval callback checks that NetworkLoadChecker is alive.
        This allows stopping NetworkLoadChecker be ref counted.
        This in turns allows NetworkResourceLoader to delete its NetworkLoadChecker when being deleted as well.
        By doing so, we simplify the memory management of NetworkResourceLoader and NetworkLoadChecker.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::weakPtrFactory):
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        * NetworkProcess/PingLoad.h:

2018-05-18  Per Arne Vollan  <pvollan@apple.com>

        WebProcess fails to launch
        https://bugs.webkit.org/show_bug.cgi?id=185140

        Reviewed by Geoffrey Garen.

        If the NSApplication runloop is not used in the WebContent process, launchServicesCheckIn() needs to be called
        in order for enableSandboxStyleFileQuarantine() to succeed. Determine at runtime if launchServicesCheckIn()
        should be called by checking if the NSApplication event loop is running.

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

2018-05-18  Jer Noble  <jer.noble@apple.com>

        Complete fix for enabling modern EME by default
        https://bugs.webkit.org/show_bug.cgi?id=185770
        <rdar://problem/40368220>

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2018-05-18  Brent Fulgham  <bfulgham@apple.com>

        Convert ProcessPrivilege assertions to regular debug-only assertions
        https://bugs.webkit.org/show_bug.cgi?id=185775
        <rdar://problem/40372286>

        Reviewed by Geoffrey Garen.

        In Bug 184322 I added a number of RELEASE_ASSERT checks that certain
        UI-only calls were not being made in the WebContent process.

        Measurements have shown that these RELEASE_ASSERTs have regressed performance
        by around 1% on some benchmarks, so we should convert them to normal asserts.

        This patch changes the RELEASE_ASSERTs into ASSERTs.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::pluginFocusOrWindowFocusChanged):
        (WebKit::WebViewImpl::validateUserInterfaceItem):
        (WebKit::WebViewImpl::startSpeaking):
        (WebKit::WebViewImpl::stopSpeaking):
        (WebKit::applicationFlagsForDrag):
        (WebKit::WebViewImpl::doneWithKeyEvent):
        * UIProcess/Gamepad/mac/UIGamepadProviderMac.mm:
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::enterFullscreen):
        (WebKit::PluginProcessProxy::beginModal):
        (WebKit::PluginProcessProxy::endModal):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::~DisplayLink):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getIsSpeaking):
        (WebKit::WebPageProxy::speak):
        (WebKit::WebPageProxy::stopSpeaking):
        (WebKit::WebPageProxy::startDisplayLink):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):

2018-05-18  Eric Carlson  <eric.carlson@apple.com>

        Handle failure to extend sandbox gracefully
        https://bugs.webkit.org/show_bug.cgi?id=185779
        <rdar://problem/40316349>

        Reviewed by Brent Fulgham.

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

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Don't append
        the request to m_grantedRequests if it failed.
        (WebKit::UserMediaPermissionRequestManagerProxy::grantAccess): Deny request if willCreateMediaStream
        fails.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream): Don't try to extend sandbox if
        we fail to allocate all necessary handles.
        * UIProcess/UserMediaProcessManager.h:
        (WebKit::UserMediaProcessManager::denyNextUserMediaRequest): New, for testing.

2018-05-18  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on for test runners
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Unreviewed. Rolling out the patch for this bug, it caused some flaky timeouts for animation suspension tests.

        * Shared/WebPreferences.yaml:

2018-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Clearing text fields should dispatch input events of type "deleteContent"
        https://bugs.webkit.org/show_bug.cgi?id=185769
        <rdar://problem/40368261>

        Reviewed by Tim Horton.

        When setting the text of the currently focused element to the empty string, just delete the text instead of
        pretending to insert an empty string. This mimics deleting content using the delete key on macOS, and fires an
        input event with inputType "deleteContent" instead of "insertText".

        Test: fast/forms/extrazoom/delete-content-in-text-field.html

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

2018-05-18  Keith Rollin  <krollin@apple.com>

        Renamed "trackNetworkActivity" to "tracksResourceLoadMilestones"
        https://bugs.webkit.org/show_bug.cgi?id=185523
        <rdar://problem/40136361>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::networkActivityTrackingEnabled):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::tracksResourceLoadMilestones const):
        (WebKit::NetworkProcess::trackNetworkActivity const): Deleted.
        * 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:
        (WKContextConfigurationTracksResourceLoadMilestones):
        (WKContextConfigurationSetTracksResourceLoadMilestones):
        (WKContextConfigurationTrackNetworkActivity): Deleted.
        (WKContextConfigurationSetTrackNetworkActivity): Deleted.
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration tracksResourceLoadMilestones]):
        (-[_WKProcessPoolConfiguration setTracksResourceLoadMilestones:]):
        (-[_WKProcessPoolConfiguration trackNetworkActivity]): Deleted.
        (-[_WKProcessPoolConfiguration setTrackNetworkActivity:]): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2018-05-18  Chris Dumez  <cdumez@apple.com>

        Avoid keeping the frame alive when ref'ing a WindowProxy
        https://bugs.webkit.org/show_bug.cgi?id=185737
        <rdar://problem/40004666>

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowScriptNPObject):

2018-05-18  Youenn Fablet  <youenn@apple.com>

        -Wmemset-elt-size warning in LibWebRTCSocket constructor
        https://bugs.webkit.org/show_bug.cgi?id=185555
        <rdar://problem/40217250>

        Reviewed by Darin Adler.

        GetOption implementation was broken in that it was not initializing properly its array of options.
        This patch fixes it by using an array of optional<int> which are initialized by default.
        When no value is set, we return the error code -1.
        In theory, we should go to NetworkProcess to get the actual value.
        Since GetOption is not used in practice, we just do this best effort implementation of storing previously set values.

        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::LibWebRTCSocket):
        (WebKit::LibWebRTCSocket::GetOption):
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:

2018-05-18  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on for test runners
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Reviewed by Jon Lee.

        * Shared/WebPreferences.yaml: Leave Web Animations off by default, it's up to clients
        to turn it on.

2018-05-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Curl] Remove unused SystemProxyWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=185224

        Reviewed by Antti Koivisto.

        SystemProxyWin is not used at the moment. Remove it.

        * NetworkProcess/win/SystemProxyWin.cpp: Removed.
        * NetworkProcess/win/SystemProxyWin.h: Removed.
        * PlatformWin.cmake: Removed SystemProxyWin.cpp.

2018-05-17  Nan Wang  <n_wang@apple.com>

        AX: [macOS] Expose the primary screen height through AX API
        https://bugs.webkit.org/show_bug.cgi?id=185742

        Reviewed by Chris Fleizach.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):

2018-05-17  Alex Christensen  <achristensen@webkit.org>

        Use CompletionHandlers for DelayedReplies
        https://bugs.webkit.org/show_bug.cgi?id=182269

        Reviewed by Youenn Fablet.

        DelayedReplies should be a noncopyable, non-refcountable type.  They should be
        called once and only once.  This is what CompletionHandlers are for.

        No change in behavior.  Just cleaner code.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::SynchronousLoadData::SynchronousLoadData):
        (WebKit::sendReplyToSynchronousRequest):
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        * NetworkProcess/NetworkResourceLoader.h:
        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunctionImpl):
        (IPC::callMemberFunction):
        (IPC::handleMessageDelayed):
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::setInitializationReply):
        (WebKit::PluginControllerProxy::takeInitializationReply):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::destroyPlugin):
        (WebKit::WebProcessConnection::createPlugin):
        (WebKit::WebProcessConnection::createPluginAsynchronously):
        * PluginProcess/WebProcessConnection.h:
        * Scripts/webkit/LegacyMessageReceiver-expected.cpp:
        (Messages::WebPage::GetPluginProcessConnection::send):
        (Messages::WebPage::TestMultipleAttributes::send):
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::DelayedReply): Deleted.
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::~DelayedReply): Deleted.
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::send): Deleted.
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::DelayedReply): Deleted.
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::~DelayedReply): Deleted.
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::send): Deleted.
        * Scripts/webkit/LegacyMessages-expected.h:
        * Scripts/webkit/MessageReceiver-expected.cpp:
        (Messages::WebPage::GetPluginProcessConnection::send):
        (Messages::WebPage::TestMultipleAttributes::send):
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::DelayedReply): Deleted.
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::~DelayedReply): Deleted.
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::send): Deleted.
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::DelayedReply): Deleted.
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::~DelayedReply): Deleted.
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::send): Deleted.
        * Scripts/webkit/Messages-expected.h:
        * Scripts/webkit/messages.py:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::networkProcessCrashed):
        (WebKit::NetworkProcessProxy::networkProcessFailedToLaunch):
        (WebKit::NetworkProcessProxy::didCreateNetworkConnectionToWebProcess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::getStorageProcessConnection):
        (WebKit::StorageProcessProxy::didClose):
        (WebKit::StorageProcessProxy::didCreateStorageToWebProcessConnection):
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::ExceededDatabaseQuotaRecords::createRecord):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::webGLPolicyForURL):
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        (WebKit::WebPageProxy::getToolbarsAreVisible):
        (WebKit::WebPageProxy::getMenuBarIsVisible):
        (WebKit::WebPageProxy::getStatusBarIsVisible):
        (WebKit::WebPageProxy::getWindowFrame):
        (WebKit::WebPageProxy::screenToRootView):
        (WebKit::WebPageProxy::rootViewToScreen):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::reachedApplicationCacheOriginQuota):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessCrashed):
        (WebKit::WebProcessPool::getNetworkProcessConnection):
        (WebKit::WebProcessPool::getStorageProcessConnection):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        (WebKit::WebProcessProxy::getStorageProcessConnection):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::syncTerminateWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingAndDrawToPDF):

2018-05-17  Jer Noble  <jer.noble@apple.com>

        CRASH in -[WKFullScreenViewController _manager]
        https://bugs.webkit.org/show_bug.cgi?id=185745
        <rdar://problem/39195241>

        Reviewed by Eric Carlson.

        Protect against WKFullScreenViewController outliving WKWebView by making its
        _webView property weak. Additionally, add a sanity-check RetainPtr where _webView
        is referenced multiple times within a function.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController initWithWebView:]):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        (-[WKFullScreenWindowController close]):
        (-[WKFullScreenWindowController webViewDidRemoveFromSuperviewWhileInFullscreen]):
        (-[WKFullScreenWindowController _exitFullscreenImmediately]):
        (-[WKFullScreenWindowController _isSecure]):
        (-[WKFullScreenWindowController _serverTrust]):
        (-[WKFullScreenWindowController _updateLocationInfo]):
        (-[WKFullScreenWindowController _manager]):
        (-[WKFullScreenWindowController _startToDismissFullscreenChanged:]):

2018-05-17  Brent Fulgham  <bfulgham@apple.com>

        Correct default for StorageAccess API
        https://bugs.webkit.org/show_bug.cgi?id=185748
        <rdar://problem/40220659>

        Reviewed by Dean Jackson.

        Flip the default state to 'true' so that the new "sticky" state
        for Storage Access API and attributing user interaction for
        Storage Access API use is applied by default.

        * Shared/WebPreferences.yaml:

2018-05-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] Implement and enable FULLSCREEN_API
        https://bugs.webkit.org/show_bug.cgi?id=185676

        Reviewed by Žan Doberšek.

        Do the initial implementation of FULLSCREEN_API for WPE and
        enable the CMake option by default.

        Most of the layout tests (55 of 58) are passing and the feature
        seems to work fine on different websites that use it.

        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::fullScreenManagerProxyClient):
        (WebKit::PageClientImpl::closeFullScreenManager):
        (WebKit::PageClientImpl::isFullScreen):
        (WebKit::PageClientImpl::enterFullScreen):
        (WebKit::PageClientImpl::exitFullScreen):
        (WebKit::PageClientImpl::beganEnterFullScreen):
        (WebKit::PageClientImpl::beganExitFullScreen):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.h:
        (WKWPE::View::isFullScreen):
        (WKWPE::View::setFullScreen):

2018-05-17  Jiewen Tan  <jiewen_tan@apple.com>

        Convert CertificateInfo into Credential in UI Process instead of Networking Process
        https://bugs.webkit.org/show_bug.cgi?id=185662
        <rdar://problem/40275561>

        Reviewed by Alex Christensen.

        Right now we convert CertificateInfo into Credential in the very last stage of client certificate authentication process
        when it reaches Networking Process. This patch moves that conversion earlier in UI Process such that we don't have to
        pass both Credential and CertificateInfo to Networking Process.

        CertificateInfo is only used in macOS for C API specifically. WK2 includes macOS/iOS relies on NSURLCredential/WebCore::Credential
        solely. WK2 has already exercised the ability of using WebCore::Credential to do client certficate authentication. This patch therefore
        takes advantage of that. It converts CertficateInfo objects into Credential objects right after WebCredential is initialized, and then merge
        any code paths that utilizes CertficateInfo into ones that uses WebCore::Credential.

        Covered by existing tests.

        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::useCredentialForChallenge):
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::tryUseCertificateInfoForChallenge): Deleted.
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/AuthenticationManager.messages.in:
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::useCredential):
        * UIProcess/Authentication/WebCredential.cpp:
        (WebKit::WebCredential::WebCredential):
        (WebKit::WebCredential::certificateInfo): Deleted.
        * UIProcess/Authentication/WebCredential.h:
        (WebKit::WebCredential::create):
        * UIProcess/Authentication/mac/WebCredentialMac.mm: Renamed from Source/WebKit/Shared/Authentication/mac/AuthenticationManager.mac.mm.
        (WebKit::leafCertificate):
        (WebKit::chain):
        (WebKit::WebCredential::WebCredential):
        * WebKit.xcodeproj/project.pbxproj:

2018-05-17  Jeremy Jones  <jeremyj@apple.com>

        Ensure valid rects for fullsceen animation.
        https://bugs.webkit.org/show_bug.cgi?id=185736
        rdar://problem/40320174

        Reviewed by Jer Noble.

        Protect against zero width and height since those can make for NANs in the animation transforms.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):

2018-05-17  Jer Noble  <jer.noble@apple.com>

        Turn Modern EME API on by default and remove it as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=185693
        <rdar://problem/39954396>

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2018-05-17  Dean Jackson  <dino@apple.com>

        Safari optimized flow should be releasing viewer to prevent memory growth with subsequent launches/closes
        https://bugs.webkit.org/show_bug.cgi?id=185722
        <rdar://problem/40247351>

        Reviewed by Antoine Quint.

        I made a rookie mistake in the original patch: I was holding a strong
        reference to "self" in a block, which was causing a retain cycle.
        Replace that with a WeakObjCPtr.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):

2018-05-16  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r229093)[macOS] Allow network-outbound for syslog use
        https://bugs.webkit.org/show_bug.cgi?id=185703
        <rdar://problem/39778918>

        Reviewed by Eric Carlson.

        In r229093 I removed the 'network-outbound' permission for syslog use.
        Further testing has shown that this is still needed for subsystem
        logging in our bundle loading code.

        This patch re-enabled network-outbound for syslog.

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

2018-05-16  Andy VanWagoner  <andy@vanwagoner.family>

        Add support for Intl NumberFormat formatToParts
        https://bugs.webkit.org/show_bug.cgi?id=185375

        Reviewed by Yusuke Suzuki.

        Add flag for NumberFormat formatToParts.

        * Configurations/FeatureDefines.xcconfig:

2018-05-16  Andy Estes  <aestes@apple.com>

        [Wi-Fi Assertions] Adopt WiFiAssertionHolderAdditions
        https://bugs.webkit.org/show_bug.cgi?id=185685
        <rdar://problem/40136681>

        Reviewed by Sam Weinig.

        * NetworkProcess/cocoa/WiFiAssertionHolder.cpp:
        (WebKit::WiFiAssertionHolder::WiFiAssertionHolder):
        (WebKit::WiFiAssertionHolder::~WiFiAssertionHolder):
        (WebKit::ensureWiFiManagerClient): Deleted.

2018-05-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Implement WebPage::handleEditingKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=185327

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::handleEditingKeyboardEvent): Copied from WebKitLegacy.

2018-05-16  Sihui Liu  <sihui_liu@apple.com>

        Session cookies aren't reliably set when using default WKWebSiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=185624
        <rdar://problem/39111626>

        Reviewed by Geoffrey Garen.

        Session cookies of default session were set in UI Process when there was no process pool, 
        but they were not synced (or synced slowly to) Network Process. To make these cookies visible
        as soon as they were set through API, we could manually set those cookies in Network Process
        during its initilization. 

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::cookies):
        (API::HTTPCookieStore::setCookie):
        (API::HTTPCookieStore::deleteCookie):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::clearPendingCookies):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-05-16  Chris Nardi  <cnardi@chromium.org>

        Remove Document#selectedStylesheetSet/preferredStylesheetSet
        https://bugs.webkit.org/show_bug.cgi?id=185381

        Reviewed by Darin Adler.

        Make API methods for Document#selectedStylesheetSet/preferredStylesheetSet do nothing.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentGtk.cpp:
        (webkit_dom_document_set_property):
        (webkit_dom_document_get_property):
        (webkit_dom_document_get_preferred_stylesheet_set):
        (webkit_dom_document_get_selected_stylesheet_set):
        (webkit_dom_document_set_selected_stylesheet_set):

2018-05-16  Alberto Garcia  <berto@igalia.com>

        [CMake] Properly detect compiler flags, needed libs, and fallbacks for usage of 64-bit atomic operations
        https://bugs.webkit.org/show_bug.cgi?id=182622

        Reviewed by Michael Catanzaro.

        Move the test to determine whether we need to link against
        libatomic to the common file WebKitCompilerFlags.cmake so it can
        also be used for JavaScriptCore.

        * CMakeLists.txt:

2018-05-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Check TypeInfo first before calling getCallData when we would like to check whether given object is a function
        https://bugs.webkit.org/show_bug.cgi?id=185601

        Reviewed by Saam Barati.

        * WebProcess/Plugins/Netscape/JSNPObject.h:

2018-05-15  Sihui Liu  <sihui_liu@apple.com>

        StorageManager::deleteLocalStorageOriginsModifiedSince: database files get deleted before database connections close
        https://bugs.webkit.org/show_bug.cgi?id=185671

        Reviewed by Geoffrey Garen.

        We should delete database files before closing databases.

        * UIProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::updateDatabaseWithChangedItems):
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasesModifiedSince):
        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince): Deleted.
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.h:
        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):

2018-05-15  Dean Jackson  <dino@apple.com>

        Launch System Preview as the download starts, rather than waiting for a response
        https://bugs.webkit.org/show_bug.cgi?id=185669
        <rdar://problem/40278181>

        Reviewed by Tim Horton.

        We were waiting for the RequestResponse to get a MIME-type before
        launching the system preview. This causes an annoying delay.

        Instead, assume that the system preview is one of the handled
        mime types and launch the viewer immediately. If it gets something it
        didn't expect, it will show an error.

        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didStart):
        (WebKit::DownloadClient::didReceiveResponse):
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        (WebKit::SystemPreviewController::start): Small cleanup to ensure we
        don't try to present twice (this shouldn't happen).

2018-05-15  Dean Jackson  <dino@apple.com>

        Post-review cleanup for 185459
        https://bugs.webkit.org/show_bug.cgi?id=185665
        <rdar://problem/40276689>

        Reviewed by Tim Horton.

        Jon made some comments in 185459 that I'm addressing here.

        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm: Guard the activity token for iOS
        in a way that means it will still work ok on macOS.
        (WebKit::DownloadClient::didStart):
        (WebKit::DownloadClient::processDidCrash):
        (WebKit::DownloadClient::didFinish):
        (WebKit::DownloadClient::didFail):
        (WebKit::DownloadClient::didCancel):
        (WebKit::DownloadClient::takeActivityToken):
        (WebKit::DownloadClient::releaseActivityTokenIfNecessary):
        (WebKit::DownloadClient::releaseActivityToken): Deleted.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm: Add an early return.
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):

2018-05-15  Tadeu Zagallo  <tzagallo@apple.com>

        Update touch event tracking types on every touch
        https://bugs.webkit.org/show_bug.cgi?id=184250
        <rdar://problem/39145092>

        Reviewed by Geoffrey Garen.

        The tracking types for touch events were only update on touchstart, which meant that event
        listeners added after the touchstart would always be treated as passive, even if explicitly
        setting passive to false.

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

2018-05-15  Per Arne Vollan  <pvollan@apple.com>

        Pause display links when window is not visible.
        https://bugs.webkit.org/show_bug.cgi?id=185627
        <rdar://problem/39401106>

        Reviewed by Simon Fraser.

        Pause/resume display links created in the UI process when the window is hidden/shown.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::pause):
        (WebKit::DisplayLink::resume):
        * UIProcess/mac/DisplayLink.h:

2018-05-15  Dean Jackson  <dino@apple.com>

        Provide UIView and UIImage for zoom transition
        https://bugs.webkit.org/show_bug.cgi?id=185655
        <rdar://problem/40267224>

        Reviewed by Antoine Quint.

        Provide a UIView* for the frameForPreviewItem to use as a source view.
        Also implement the transitionImageForPreviewItem delegate, even though
        we're returning nil.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDelegate previewController:frameForPreviewItem:inSourceView:]):
        (-[_WKPreviewControllerDelegate previewController:transitionImageForPreviewItem:contentRect:]):

2018-05-15  Daniel Bates  <dabates@apple.com>

        Fix the Apple Internal build

        Make a similar change to WebKit as I did for LegacyWebKit in r231777. See <rdar://problem/40237873> for more details.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):

2018-05-15  Megan Gardner  <megan_gardner@apple.com>

        Clear selections from web content with single tap
        https://bugs.webkit.org/show_bug.cgi?id=185634

        Reviewed by Tim Horton.
        
        With the switch to the single text selection assistant, we were not correctly clearing the selection when a
        single tap happened.

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

2018-05-15  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose Web Animations CSS integration as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=185647

        Reviewed by Dean Jackson.

        Rename the Web Animations CSS integration flag.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebAnimationsCSSIntegrationEnabled):
        (WKPreferencesGetWebAnimationsCSSIntegrationEnabled):
        (WKPreferencesSetCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled): Deleted.
        (WKPreferencesGetCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setWebAnimationsCSSIntegrationEnabled:]):
        (-[WKPreferences _webAnimationsCSSIntegrationEnabled]):
        (-[WKPreferences _setCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled:]): Deleted.
        (-[WKPreferences _cssAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        (WebKit::InjectedBundle::setWebAnimationsCSSIntegrationEnabled):
        (WebKit::InjectedBundle::setCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:

2018-05-15  Dean Jackson  <dino@apple.com>

        Update animation when presenting QuickLook
        https://bugs.webkit.org/show_bug.cgi?id=185648
        <rdar://problem/39652624>

        Reviewed by Antoine Quint.

        Implement the QuickLook delegate on _WKPreviewControllerDelegate that
        produces a zoom-like animation when the QLPreviewController appears.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDelegate previewController:frameForPreviewItem:inSourceView:]):
        * UIProcess/SystemPreviewController.h: Add a reference back to the page, so that
        the delegate implementation can access the presentingViewController.
        (WebKit::SystemPreviewController::page):

2018-05-14  Dean Jackson  <dino@apple.com>

        Download and present System Preview
        https://bugs.webkit.org/show_bug.cgi?id=185459
        <rdar://problem/40079228>

        Reviewed by Tim Horton.

        Extend DownloadClient so that it can handle the case where
        the download was triggered by a System Preview. In this situation
        the result (and progress) are piped into QuickLook via the SystemPreviewController.

        The DownloadProxy class is also extended to handle the destination
        filename and the size of the content.

        Lastly, SystemPreviewController is updated to have a start(), show()
        and cancel() interface, and no longer adjusts page navigation.

        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm: Handle the SystemPreview case, which
        doesn't have a download delegate, but instead needs to communicate with
        the SystemPreviewController, if one exists.
        (WebKit::DownloadClient::didStart):
        (WebKit::DownloadClient::didReceiveResponse):
        (WebKit::DownloadClient::didReceiveData):
        (WebKit::DownloadClient::didCreateDestination):
        (WebKit::DownloadClient::processDidCrash):
        (WebKit::DownloadClient::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadClient::didFinish):
        (WebKit::DownloadClient::didFail):
        (WebKit::DownloadClient::didCancel):
        (WebKit::DownloadClient::releaseActivityToken):

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm: Implement the new API.
        (-[_WKPreviewControllerDataSource initWithMIMEType:]):
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        (-[_WKPreviewControllerDataSource setProgress:]):
        (-[_WKPreviewControllerDataSource finish:]):
        (-[_WKPreviewControllerDelegate previewControllerDidDismiss:]):
        (WebKit::SystemPreviewController::start):
        (WebKit::SystemPreviewController::updateProgress):
        (WebKit::SystemPreviewController::finish):
        (WebKit::SystemPreviewController::cancel):
        (-[_WKPreviewControllerDataSource initWithURL:]): Deleted.
        (-[_WKPreviewControllerDelegate previewControllerWillDismiss:]): Deleted.
        (WebKit::SystemPreviewController::canPreview const): Deleted.
        (WebKit::SystemPreviewController::showPreview): Deleted.
        * UIProcess/Downloads/DownloadProxy.h: Track the destination file by name
        and size. Also expose a helper to identify system preview downloads.
        (WebKit::DownloadProxy::destinationFilename const):
        (WebKit::DownloadProxy::setDestinationFilename):
        (WebKit::DownloadProxy::expectedContentLength const):
        (WebKit::DownloadProxy::setExpectedContentLength):
        (WebKit::DownloadProxy::bytesLoaded const):
        (WebKit::DownloadProxy::setBytesLoaded):
        (WebKit::DownloadProxy::isSystemPreviewDownload const):

        * UIProcess/SystemPreviewController.cpp: New API.
        (WebKit::SystemPreviewController::canPreview const):
        (WebKit::SystemPreviewController::sendPageBack): Deleted.
        (WebKit::SystemPreviewController::showPreview): Deleted.
        * UIProcess/SystemPreviewController.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_configurationPreferenceValues):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:

2018-05-14  Brady Eidson  <beidson@apple.com>

        Add an API test to guard against regressions while re-entering setDefersLoading:.
        <rdar://problem/37033737> and https://bugs.webkit.org/show_bug.cgi?id=185630

        Reviewed by Chris Dumez.

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

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setDefersLoadingForTesting):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-05-14  Tim Horton  <timothy_horton@apple.com>

        Use the system font by default in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=185638
        <rdar://problem/40230277>

        Reviewed by Wenson Hsieh.

        * Shared/WebPreferencesDefaultValues.h:

2018-05-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r231755.

        Change is not correct

        Reverted changeset:

        "-Wmemset-elt-size warning in LibWebRTCSocket constructor"
        https://bugs.webkit.org/show_bug.cgi?id=185555
        https://trac.webkit.org/changeset/231755

2018-05-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Google search results are excessively zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=185347
        <rdar://problem/39999778>

        Reviewed by Tim Horton.

        Adds a new experimental feature for the "disabled-adaptations" meta tag, and adds plumbing in WebKit to
        propagate disabled adaptation changes to the ViewportConfiguration. The experimental feature is on by default in
        extra zoom mode.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::dispatchDisabledAdaptationsDidChange const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::disabledAdaptationsDidChange):
        * WebProcess/WebPage/WebPage.h:

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

        Overly aggressive timer throttling in service workers
        https://bugs.webkit.org/show_bug.cgi?id=185575
        <rdar://problem/40219038>

        Reviewed by Geoff Garen.

        After ~30 seconds, the system would put the service worker process in "App Nap",
        causing its timers to get aggressively throttled. This happens because the
        service worker processes are WebProcesses that have no visible WebPages.

        To address the issue, we now disable process suppression for all service worker
        processes. This causes those processes to construct a UserActivity which prevents
        App Nap.

        This patch also refactors the code a bit to avoid duplication. The ProcessSuppression
        suppression logic in now all on ChildProcessProxy / ChildProcess.

        * NetworkProcess/NetworkProcess.messages.in:
        * PluginProcess/PluginProcess.messages.in:
        * Shared/ChildProcess.messages.in:
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::setProcessSuppressionEnabled):
        * UIProcess/ChildProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm: Removed.
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::didFinishLaunching):
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/WebProcessProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.messages.in:

2018-05-14  Andy Estes  <aestes@apple.com>

        [Wi-Fi Assertions] Allow clients to specify a context identifier
        https://bugs.webkit.org/show_bug.cgi?id=185620
        <rdar://problem/39915196>

        Reviewed by Brady Eidson.

        Added an SPI on _WKProcessPoolConfiguration that allows clients to specify a
        context identifier.

        * 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 wirelessContextIdentifier]):
        (-[_WKProcessPoolConfiguration setWirelessContextIdentifier:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2018-05-11  Brian Burg  <bburg@apple.com>

        Web Automation: Automation.getBrowsingContext returns window origin that differs from window.screenX/Y
        https://bugs.webkit.org/show_bug.cgi?id=185571
        <rdar://problem/40180785>

        Reviewed by Timothy Hatcher.

        This code path was refactored to use completion handlers. It seems that the window.screenX/Y
        code path converts back to user coordinates but the WebDriver code path does not. Make them
        consistent since that is how it is spec'd and tested.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getWindowFrameWithCallback):
        Convert the window frame to user coordinate space so it's the same as window.screenY.

2018-05-14  Brian Burg  <bburg@apple.com>

        WebDriver: W3C test case actions/key.py::test_lone_keyup_sends_no_events is failing
        https://bugs.webkit.org/show_bug.cgi?id=185577
        <rdar://problem/40185478>

        Reviewed by Timothy Hatcher.

        This test is failing because it expects Release Actions to not emit any
        events if nothing has changed from the initial state. Because the two code paths
        for creating empty states don't actually produce the same empty state, a difference
        in location was detected between the two empty states. This generates a mousemove.

        To fix this, unify the code that creates an empty state. For mouse input sources, always
        initialize the location to (0, 0) so that the mouse input source always has
        a location that is valid to click at.

        * UIProcess/Automation/SimulatedInputDispatcher.h:
        Extract the type enum out of the class to avoid circular definitions of
        SimulatedInputSource and SimulatedInputSourceState.

        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputSourceState::emptyStateForSourceType):
        Take the input source type when generating an empty state. We always want location
        set for a mouse input source, but not set it for other input sources like keys.

        (WebKit::SimulatedInputKeyFrame::keyFrameToResetInputSources):
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        (WebKit::SimulatedInputSource::create):
        (WebKit::SimulatedInputSource::SimulatedInputSource):
        (WebKit::SimulatedInputSourceState::emptyState): Deleted.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::WebAutomationSession):
        (WebKit::WebAutomationSession::inputSourceForType const):
        (WebKit::simulatedInputSourceTypeFromProtocolSourceType):
        (WebKit::WebAutomationSession::performInteractionSequence):
        * UIProcess/Automation/WebAutomationSession.h:

2018-05-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wmemset-elt-size warning in LibWebRTCSocket constructor
        https://bugs.webkit.org/show_bug.cgi?id=185555

        Reviewed by Youenn Fablet.

        Add missing multiplication.

        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::LibWebRTCSocket):

2018-05-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] REGRESSION(r231170) Build broken with Clang 5.0
        https://bugs.webkit.org/show_bug.cgi?id=185198

        Reviewed by Michael Catanzaro.

        * Shared/RTCNetwork.h: With std::optional forward declaration gone,
        explicitly include the WTF Optional.h header.

2018-05-13  Dean Jackson  <dino@apple.com>

        WebKit2_Sim-7606.1.17.4 introduced dep cycle
        https://bugs.webkit.org/show_bug.cgi?id=185588
        <rdar://problem/40196581>

        Reviewed by Tim Horton.

        Soft link AssetViewer.framework to avoid a dependency cycle.

        * Configurations/WebKit.xcconfig:
        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]):

2018-05-11  Daniel Bates  <dabates@apple.com>

        X-Frame-Options: SAMEORIGIN needs to check all ancestor frames
        https://bugs.webkit.org/show_bug.cgi?id=185567
        <rdar://problem/40175008>

        Reviewed by Brent Fulgham.

        Change the behavior of "X-Frame-Options: SAMEORIGIN" to ensure that all ancestors frames
        are same-origin with the document that delivered this header. This prevents an intermediary
        malicious frame from clickjacking a child frame whose document is same-origin with the top-
        level frame. It also makes the behavior of X-Frame-Options in WebKit more closely match
        the behavior of X-Frame-Options in other browsers, including Chrome and Firefox.
        
        Currently a document delivered with "X-Frame-Options: SAMEORIGIN" must only be same-origin
        with the top-level frame's document in order to be displayed. This prevents clickjacking by
        a malicious page that embeds a page delivered with "X-Frame-Options: SAMEORIGIN". However,
        it does not protect against clickjacking of the "X-Frame-Options: SAMEORIGIN" page (victim)
        if embedded by an intermediate malicious iframe, say a "rogue ad", that was embedded in a
        document same origin with the victim page. We should protect against such attacks.

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

2018-05-11  Dean Jackson  <dino@apple.com>

        WKWebViewContentProvider should know what MIME type it was created to handle
        https://bugs.webkit.org/show_bug.cgi?id=185574
        <rdar://problem/40183049>

        Reviewed by Tim Horton.

        Pass the MIME type of the downloaded asset into the WKWebViewContentProvider's
        init method, so it can choose to do something based on that information. The
        PDF and LegacyPDF views don't care because they, clearly, only handle PDF. But
        a WKSystemPreviewView can handle multiple types.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]): Send the MIME type on
        to the WKWebViewContentProvider.
        * UIProcess/Cocoa/WKWebViewContentProvider.h: Add a new parameter to web_initWithFrame.
        * UIProcess/ios/WKLegacyPDFView.mm:
        (-[WKLegacyPDFView web_initWithFrame:webView:mimeType:]):
        (-[WKLegacyPDFView web_initWithFrame:webView:]): Deleted.
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_initWithFrame:webView:mimeType:]):
        (-[WKPDFView web_initWithFrame:webView:]): Deleted.
        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_initWithFrame:webView:mimeType:]):
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]): Actually use
        the MIME type to tell QuickLook what it will be getting, rather than basing it on
        the file extension.
        (-[WKSystemPreviewView web_initWithFrame:webView:]): Deleted.

2018-05-11  Brent Fulgham  <bfulgham@apple.com>

        Allow the WebContent process to read global ViewBridge preferences
        https://bugs.webkit.org/show_bug.cgi?id=185569
        <rdar://problem/40164339>

        Reviewed by Eric Carlson.

        Allow reads of the global /Library/Preferences/com.apple.ViewBridge.plist preference file.

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

2018-05-11  Megan Gardner  <megan_gardner@apple.com>

        Cleanup canPerformActionForWebView in relation to the webSelectionAssistant being removed
        https://bugs.webkit.org/show_bug.cgi?id=185536

        Reviewed by Tim Horton.
        
        The _webSelectionAssistant is now always nil, therefor many of these checks are unnecessary.
        Remove the check for a webSelection and clean up the logic surrounding those checks.

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

2018-05-11  Brady Eidson  <beidson@apple.com>

        Followup to: Make sure history navigations reuse the existing process when necessary.
        https://bugs.webkit.org/show_bug.cgi?id=185532

        Reviewed by Andy Estes.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal): When re-using the same process,
          don't change the policy action.

2018-05-11  Charles Vazac  <cvazac@gmail.com>

        Runtime feature flag for Server-Timing
        https://bugs.webkit.org/show_bug.cgi?id=184758

        Reviewed by Youenn Fablet.

        * Shared/WebPreferences.yaml: Added ServerTimingEnabled.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetServerTimingEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h: WK_EXPORT for WKPreferencesSetServerTimingEnabled.
        * WebProcess/Storage/WebSWContextManagerConnection.cpp: Call setServerTimingEnabled.

2018-05-11  Antti Koivisto  <antti@apple.com>

        Network process should not stat() all cache files on startup to find their sizes
        https://bugs.webkit.org/show_bug.cgi?id=185542
        <rdar://problem/40092953>

        Reviewed by Chris Dumez.

        This is done to compute how much disk space a cache is using. While the operation happens
        in a background priority thread it is still quite a bit of work.

        Large bodies are saved in separate blob files so record file sizes are capped. We can avoid work by
        estimating their size instead of counting it exactly.

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

            Use size estimation if blob storage is in use.
            Remove the code that would delete empty files. Normal cache shrinking handles this.

        (WebKit::NetworkCache::Storage::shouldStoreBodyAsBlob):

2018-05-11  Brady Eidson  <beidson@apple.com>

        Make sure history navigations reuse the existing process when necessary.
        <rdar://problem/39746516> and https://bugs.webkit.org/show_bug.cgi?id=185532

        Reviewed by Ryosuke Niwa.

        If a view navigates to either a data: or blob: URL, it reuses the existing process.
 
        In such cases we need to also ensure that history navigations back will also reuse the existing process.

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

        * UIProcess/API/APINavigation.h:
        (API::Navigation::setTargetItem):

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration pageCacheEnabled]):
        (-[_WKProcessPoolConfiguration setPageCacheEnabled:]):

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

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal): If the current and target back/forward items both
          came from the same process, then reuse the existing process.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        REGRESSION(r231057): Encrypted media content playback failures
        https://bugs.webkit.org/show_bug.cgi?id=185537
        <rdar://problem/40038478>

        Reviewed by Eric Carlson.

        Put access to the SecurityServer back in the sandbox so we can validate the
        signatures of media encoder/decoders.

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

2018-05-11  Youenn Fablet  <youenn@apple.com>

        NetworkCORSPreflightChecker should proceed when having a ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested challenge
        https://bugs.webkit.org/show_bug.cgi?id=185522
        <rdar://problem/39987152>

        Reviewed by Brent Fulgham.

        In case of such challenge, refuse to proceed with authentication since preflight is not using credentials.
        Previously, we were failing right away which is not right in case preflight is the request triggering the connection.

        Manually tested.

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

2018-05-10  Daniel Bates  <dabates@apple.com>

        Use PlatformStrategies to switch between WebKit and WebKitLegacy checking of CSP frame-ancestors and X-Frame-Options
        https://bugs.webkit.org/show_bug.cgi?id=185412

        Reviewed by Ryosuke Niwa.

        Update code for renaming and write in terms of WebLoaderStrategy::shouldPerformSecurityChecks()
        instead of explicitly querying RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess().

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        (WebKit::WebLoaderStrategy::preconnectTo):
        (WebKit::WebLoaderStrategy::shouldPerformSecurityChecks const):
        (WebKit::WebLoaderStrategy::havePerformedSecurityChecks const):
        (WebKit::WebLoaderStrategy::isDoingLoadingSecurityChecks const): Deleted.
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/WebPage/WebPage.cpp:

2018-05-10  Timothy Horton  <timothy_horton@apple.com>

        Fix the build after r231393
        ​https://bugs.webkit.org/show_bug.cgi?id=185519
        <rdar://problem/40131741>

        * Configurations/WebKit.xcconfig:

2018-05-10  John Wilander  <wilander@apple.com>

        Storage Access API: Extend lifetime of cookies on successful user approval
        https://bugs.webkit.org/show_bug.cgi?id=185534
        <rdar://problem/40064547>

        Reviewed by Brent Fulgham.

        * UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm:
        (WebKit::WebResourceLoadStatisticsStore::registerUserDefaultsIfNeeded):
            Picks up the experimental feature flag.
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccessInternal):
            Now updates the domain's user interaction timestamp if the user was
            prompted for this access.
        * UIProcess/WebResourceLoadStatisticsStore.h:

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

        [iOS] Release page load process assertion if the screen is locked
        https://bugs.webkit.org/show_bug.cgi?id=185333

        Reviewed by Geoff Garen.

        We normally take a background process assertion during page loads to allow them to complete
        even if the tab / app is backgrounded. We should however avoid doing so when the backgrounding
        is caused by the screen locking. Keeping the process assertion in this case would prevent the
        whole device from sleeping longer than it should, thus negatively impacting power.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationState):
        (WebKit::NavigationState::releaseNetworkActivityToken):
        (WebKit::NavigationState::didChangeIsLoading):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground):

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

        Remove Unused Chinese/Japanese Reanalyze code
        https://bugs.webkit.org/show_bug.cgi?id=185529

        Reviewed by Wenson Hsieh.
        
        The code for this has actually been completely removed from UIKit. This is unreachable 
        dead code that should be removed if just for cleanliness. 

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView _reanalyzeForWebView:]): Deleted.

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

        [iOS] Apps that are not visible may not get suspended if they trigger page loads while in the background
        https://bugs.webkit.org/show_bug.cgi?id=185318

        Reviewed by Geoffrey Garen.

        Whenever there is a page load going on, we take a background process assertion to delay process
        suspension until this load completes. However, there is also a 3 seconds grace period after
        a load is complete to allow the app to trigger a new load shortly after. This grace period was
        introduced to support use cases where a visible app does loads in an offscreen view. However,
        it can be abused by apps running in the background as they could trigger new page loads while
        in the background to delay process suspension. This patch tightens the policy so that only
        apps that are currently visible get to use this grace period. Apps that are in the background
        get to finish their current load and will then get suspended.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didChangeIsLoading):

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

        'Cross-Origin-Options header implementation follow-up
        https://bugs.webkit.org/show_bug.cgi?id=185520

        Reviewed by Ryosuke Niwa.

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

2018-05-10  Per Arne Vollan  <pvollan@apple.com>

        Drop-down Control borders missing.
        https://bugs.webkit.org/show_bug.cgi?id=185500
        <rdar://problem/40093461>

        Reviewed by Brent Fulgham.

        Open sandbox for reading of some files in temp folder.

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

2018-05-10  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream, iOS] Don't check authorizationStatusForMediaType when using mock capture devices
        https://bugs.webkit.org/show_bug.cgi?id=185516
        <rdar://problem/36328191>

        Reviewed by Youenn Fablet.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest): Don't check
        +[AVCaptureDevice authorizationStatusForMediaType:] when using mock capture devices.

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

        REGRESSION(r230323): UIProcess needs to notify WebContent process of Accessibility setting changes
        https://bugs.webkit.org/show_bug.cgi?id=185515
        <rdar://problem/39627764>

        Reviewed by Chris Fleizach.

        The UIProcess needs to register for relevant Accessibility preference updates so that it can notify the
        WebContent processes that screen properties have changed.

        This is represented by NSWorkspaceAccessibilityDisplayOptionsDidChangeNotification.

        Tested manually with the Accessibility preferences pane.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers): Add notification observer. When the notification
        is received, call 'screenPropertiesStateChanged' to message the information to the WebContent processes.
        (WebKit::WebProcessPool::unregisterNotificationObservers): Clean up observer.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::screenPropertiesStateChanged): Added helper function.
        * UIProcess/WebProcessPool.h:

2018-05-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: implement advance user interactions
        https://bugs.webkit.org/show_bug.cgi?id=174616

        Reviewed by Brian Burg.

        Handle origin in case of mouse move transitions.

        * UIProcess/Automation/Automation.json: Add MouseMoveOrigin enum and pass it as parameter of InputSourceState
        together with optional node handle. Also pass the frame handle to performInteractionSequence command to find the
        node in the current browsing context.
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputKeyFrame::keyFrameToResetInputSources): Ensure we reset the location.
        (WebKit::SimulatedInputDispatcher::resolveLocation): Helper to resolve destination location based on current
        location and mouse move origin.
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState): Use resolveLocation() in mouse transitions.
        (WebKit::SimulatedInputDispatcher::run): Receive and save the frame ID.
        (WebKit::SimulatedInputDispatcher::finishDispatching): Reset the frame ID.
        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::computeElementLayout): Use even numbers for the callback ID to not conflict with
        viewportInViewCenterPointOfElement() callbacks.
        (WebKit::WebAutomationSession::didComputeElementLayout): Handle computeElementLayout() or
        viewportInViewCenterPointOfElement() requests by calling the right callback depending on whether the ID is odd
        or even number.
        (WebKit::WebAutomationSession::viewportInViewCenterPointOfElement): Send ComputeElementLayout message to the
        WebProcess using odd numbers for the callback ID to not conflict with computeElementLayout() callbacks.
        (WebKit::WebAutomationSession::performInteractionSequence): Handle the mouse origin and element handle.
        (WebKit::WebAutomationSession::cancelInteractionSequence): Pass the frame ID to the input dispatcher.
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSessionMacros.h:

2018-05-09  Tim Horton  <timothy_horton@apple.com>

        Remove the unused HAVE_OS_ACTIVITY
        https://bugs.webkit.org/show_bug.cgi?id=185501

        Reviewed by Wenson Hsieh.

        * config.h:

2018-05-09  Chris Dumez  <cdumez@apple.com>

        Add initial support for 'Cross-Origin-Options' HTTP response header
        https://bugs.webkit.org/show_bug.cgi?id=184996
        <rdar://problem/39664620>

        Reviewed by Geoff Garen.

        * Shared/WebPreferences.yaml:
        Add this as an experimental feature, on by default.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::frameBecameRemote):
        Make sure we pass the cross-origin options from the local Window
        to the remote one when transitioning.

2018-05-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] fast/viewport/extrazoom/viewport-change-min-device-width.html sometimes fails
        https://bugs.webkit.org/show_bug.cgi?id=185490
        <rdar://problem/40097629>

        Reviewed by Tim Horton.

        This test is currently flaky due to incorrect logic when computing the unobscured content rect, in the slice of
        time after a frame load has been committed, and before the first visible content rect update from the UI process
        after the frame load has been committed.

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

        In the case where !m_hasReceivedVisibleContentRectsAfterDidCommitLoad, we try to set the unobscured content size
        to be the view size divided by the initial scale. However, in extra zoom mode, `ViewportConfiguration`'s
        `minimumLayoutSize()` is the layout size, which is larger than the size of the view by default, so dividing this
        by the initial scale yields a bogus value. Instead, use `viewLayoutSize()` instead.

        (WebKit::WebPage::updateViewportSizeForCSSViewportUnits):

        We also try to divide the view size by the initial scale when computing the effective viewport size for `vw` and
        `vh`. Additionally, fix the misleading name of a variable (largestUnobscuredRect) that stores a size.

2018-05-09  Brent Fulgham  <bfulgham@apple.com>

        Restrict unarchiving of bundle parameters to a set of known classes
        https://bugs.webkit.org/show_bug.cgi?id=185489
        <rdar://problem/21912401>

        Reviewed by Ryosuke Niwa.

        Stop accepting anything derived from NSObject, and instead only agree to unarchive objects
        from a set of things we actually pass as InjectedBundle parameters.

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

2018-05-09  Richard Houle  <rhoule@apple.com>

        [Cocoa] Some fields are not identified as [WKWebProcessPlugInNodeHandle isTextField]
        https://bugs.webkit.org/show_bug.cgi?id=185260
        <rdar://problem/39290394>

        INPUT element are not considered to be text fields when
        calling -[WKWebProcessPlugInNodeHandle isTextField]
        when they are of type number.

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isTextField const):

2018-05-09  Youenn Fablet  <youenn@apple.com>

        Allow WebResourceLoader to cancel a load served from a service worker
        https://bugs.webkit.org/show_bug.cgi?id=185274

        Reviewed by Chris Dumez.

        Use FetchIdentifier instead of uint64_t.
        Add IPC support for cancelling a fetch from WebProcess to service worker process.
        Ask service worker process to cancel the fetch when its corresponding WebResourceLoader is cancelled.
        No change of behavior as once a WebResourceLoader is cancelled, any related IPC is not processed.
        A follow-up patch should try to cancel the FetchResponse load, meaning to either cancel the network load
        or to abort reading the readable stream.

        * Scripts/webkit/messages.py:
        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::cancelFetch):
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::didReceiveFetchResponse):
        (WebKit::WebSWServerConnection::didReceiveFetchData):
        (WebKit::WebSWServerConnection::didReceiveFetchFormData):
        (WebKit::WebSWServerConnection::didFinishFetch):
        (WebKit::WebSWServerConnection::didFailFetch):
        (WebKit::WebSWServerConnection::didNotHandleFetch):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::didFailFetch):
        (WebKit::StorageProcess::didNotHandleFetch):
        (WebKit::StorageProcess::didReceiveFetchResponse):
        (WebKit::StorageProcess::didReceiveFetchData):
        (WebKit::StorageProcess::didReceiveFetchFormData):
        (WebKit::StorageProcess::didFinishFetch):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::remove):
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::create):
        (WebKit::ServiceWorkerClientFetch::ServiceWorkerClientFetch):
        (WebKit::ServiceWorkerClientFetch::start):
        (WebKit::ServiceWorkerClientFetch::cancel):
        * WebProcess/Storage/ServiceWorkerClientFetch.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::startFetch):
        (WebKit::WebSWClientConnection::cancelFetch):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::cancelFetch):
        (WebKit::WebSWContextManagerConnection::startFetch):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::WebServiceWorkerFetchTaskClient):
        (WebKit::WebServiceWorkerFetchTaskClient::cancel):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::handleFetch):
        (WebKit::WebServiceWorkerProvider::cancelFetch):
        (WebKit::WebServiceWorkerProvider::fetchFinished):
        * WebProcess/Storage/WebServiceWorkerProvider.h:

2018-05-09  Andy Estes  <aestes@apple.com>

        [iOS] Consider the annotation bounds when positioning action sheets near long-pressed PDF links
        https://bugs.webkit.org/show_bug.cgi?id=185472
        <rdar://problem/39967092>

        Reviewed by Daniel Bates.

        Adopted new PDFHostViewControllerDelegate methods that include annotation rects
        when URLs and page indices are long-pressed. This allows us to avoid obscuring
        annotations when positioning action sheet popovers.

        We also no longer need to convert the press location into host view coordinate
        space, as PDFKit now does that for us.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _showActionSheetForURL:atLocation:withAnnotationRect:]):
        (-[WKPDFView pdfHostViewController:didLongPressURL:atLocation:withAnnotationRect:]):
        (-[WKPDFView pdfHostViewController:didLongPressPageIndex:atLocation:withAnnotationRect:]):
        (-[WKPDFView _showActionSheetForURL:atLocation:]): Deleted.
        (-[WKPDFView pdfHostViewController:didLongPressURL:atLocation:]): Deleted.
        (-[WKPDFView pdfHostViewController:didLongPressPageIndex:atLocation:]): Deleted.

2018-05-09  Andy Estes  <aestes@apple.com>

        [iOS] Tell PDFHostViewController when animated resizes begin and end
        https://bugs.webkit.org/show_bug.cgi?id=185477
        <rdar://problem/39875372>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_beginAnimatedResize]):
        (-[WKPDFView web_endAnimatedResize]):

2018-05-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for 2.21.1 release.

        * wpe/NEWS: Added. Add release notes for 2.21.1.

2018-05-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Build cleanly with GCC 8 and ICU 60
        https://bugs.webkit.org/show_bug.cgi?id=185462

        Reviewed by Carlos Alberto Lopez Perez.

        * Platform/IPC/glib/GSocketMonitor.cpp:
        (IPC::GSocketMonitor::start): Silence -Wcast-function-type warning.
        * Shared/API/glib/WebKitContextMenu.cpp:
        (webkit_context_menu_new_with_items): Ditto.

2018-05-08  Sihui Liu  <sihui_liu@apple.com>

        Adopt new async _savecookies SPI for keeping networking process active during flushing cookies
        https://bugs.webkit.org/show_bug.cgi?id=185261
        <rdar://problem/37214391>

        Reviewed by Chris Dumez.

        By adopting new async SPI _savecookies, we can keep networking process active(not suspended)
        until cookies are fully synced to disk with process assertion.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didSyncAllCookies):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::syncAllCookies):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::syncAllCookies):
        (WebKit::NetworkProcessProxy::didSyncAllCookies):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::syncNetworkProcessCookies):

2018-05-08  Per Arne Vollan  <pvollan@apple.com>

        Set colorspace in the PDF plugin.
        https://bugs.webkit.org/show_bug.cgi?id=185445
        <rdar://problem/40030981>

        Reviewed by Simon Fraser.

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

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

        Don't clear selection until we are actually interacting with a Node.
        https://bugs.webkit.org/show_bug.cgi?id=185455

        Reviewed by Wenson Hsieh.
        
        The presence of TextInteractionAssistant should not be used as a proxy for it we are actually editing content.
        We need to check to see if we have an active node, and then we should clear the selection.

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

2018-05-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r231486.

        Caused service worker LayoutTest failures on macOS Debug WK2.

        Reverted changeset:

        "Allow WebResourceLoader to cancel a load served from a
        service worker"
        https://bugs.webkit.org/show_bug.cgi?id=185274
        https://trac.webkit.org/changeset/231486

2018-05-08  Andy Estes  <aestes@apple.com>

        [iOS] _WKWebViewPrintFormatter should return a page count of 0 for PDF documents that do not allow printing
        https://bugs.webkit.org/show_bug.cgi?id=185133

        Reviewed by Andreas Kling.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _ensureDocumentForPrinting]):
        (-[WKPDFView _wk_pageCountForPrintFormatter:]):
        (-[WKPDFView _wk_printedDocument]):

2018-05-08  Andy Estes  <aestes@apple.com>

        [iOS] WKPDFView remains in the view hierarchy after navigating away
        https://bugs.webkit.org/show_bug.cgi?id=185449
        <rdar://problem/39693469>

        Reviewed by Tim Horton.

        WKPDFView removes the PDF host view from the view hierarchy in its -dealloc
        method, and relies on WKWebView releasing its last reference in
        -_setHasCustomContentView:loadedMIMEType: when the user navigates.

        However, WKWPDFView was capturing a strong reference to self in the block passed
        to +[PDFHostViewController createHostView:forExtensionIdentifier:], and PDFKit
        (actually UIKit) is retaining this block beyond its being called. This results in
        the PDF host view remaining as a child of the WKScrollView even after the user
        navigates to another page.

        Changed the aforementioned block to a lambda that captures a weak reference to
        self to prevent WKPDFView from outliving the current navigation.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView retain]):
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):

2018-05-08  John Wilander  <wilander@apple.com>

        Storage Access API: Make user opt-in sticky
        https://bugs.webkit.org/show_bug.cgi?id=185454
        <rdar://problem/40003946>

        Reviewed by Alex Christensen.

        This patch persists the user's choice to opt-in to access under specific domains.
        Such storage access should age out with the accessing domain's cookies and website
        data. The opt-in prompt is still an experimental feature.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccessInternal):
        (WebKit::WebResourceLoadStatisticsStore::hasUserGrantedStorageAccessThroughPrompt const):
        (WebKit::WebResourceLoadStatisticsStore::hasHadUnexpiredRecentUserInteraction const):
        * UIProcess/WebResourceLoadStatisticsStore.h:

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

        Do not apply X-Frame-Options and CSP frame-ancestors to Quick Look-applicable responses in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=185442
        <rdar://problem/40067209>

        Reviewed by Andy Estes.

        Just as we exempt responses in WebContent process that will be handled by Quick Look from the Content
        Security Policy frame-ancestors directive and X-Frame-Options checking we need to do the same when
        such checks are performed in NetworkProcess following r231479.

        HTTP responses that will be previewed using Quick Look are not considered web pages and are subject
        to the security model for Quick Look documents. That is, they are exempt from Content Security Policy
        and X-Frame-Options processing.

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

2018-05-08  Brian Burg  <bburg@apple.com>

        REGRESSION(r230743): Mousemove events are not coalesced properly, mousemove/drag is very laggy
        https://bugs.webkit.org/show_bug.cgi?id=185425
        <rdar://problem/39323336>

        Reviewed by Simon Fraser.

        When mousemove events come in faster than they can be processed, we should coalesce
        pending mousemoves that have not yet been sent to WebProcess. This has the effect of
        processing the most recent mousemove location, which is the old behavior that regressed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMouseEvent):
        If there is >1 event in the mouse queue, then the first one is being processed by WebProcess
        and the second one is eligible for coalescing. Replace it if the last event and new event
        are both mousemoves.

2018-05-08  Per Arne Vollan  <pvollan@apple.com>

        The PDF context menu should not be created in the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=185401

        Reviewed by Tim Horton.

        Send a sync IPC message from the WebContent process to the UI process with the necessary context
        menu information when the menu is requested. The NSMenu will then be created and shown in the
        UI process. The reply will contain the selected menu item index.

        * Shared/mac/PDFContextMenu.h: Added.
        (WebKit::PDFContextMenuItem::encode const):
        (WebKit::PDFContextMenuItem::decode):
        (WebKit::PDFContextMenu::encode const):
        (WebKit::PDFContextMenu::decode):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (-[WKPDFMenuTarget menuItem]):
        (-[WKPDFMenuTarget contextMenuAction:]):
        (WebKit::WebPageProxy::showPDFContextMenu):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::handleContextMenuEvent):

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

        System Preview links should trigger a download
        https://bugs.webkit.org/show_bug.cgi?id=185439
        <rdar://problem/40065545>

        Reviewed by Jon Lee.

        Encode the new field identifying a system preview. And
        if you encounter such a resource request, trigger
        a download.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encode):
        (IPC::ArgumentCoder<ResourceRequest>::decode):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

2018-05-08  John Wilander  <wilander@apple.com>

        Storage Access API: Add a request roundtrip to check whether prompting is needed
        https://bugs.webkit.org/show_bug.cgi?id=185368
        <rdar://problem/40011556>

        Reviewed by Alex Christensen and Youenn Fablet.

        This patch adds an enum WebKit::StorageAccessStatus to handle our three access
        states:
        - WebKit::StorageAccessStatus::CannotRequestAccess.
            This means the domain is blocked from cookie access.
        - WebKit::StorageAccessStatus::RequiresUserPrompt.
            This means that access has not been granted yet and a prompt is required.
        - WebKit::StorageAccessStatus::HasAccess.
            This either means that this domain does not need to ask for access,
            access was already granted, or access was granted now.

        If the call to WebResourceLoadStatisticsStore::requestStorageAccess() comes
        back as WebKit::StorageAccessStatus::RequiresUserPrompt, the WebPageProxy
        prompts the user and if the user said yes, calls a direct
        WebResourceLoadStatisticsStore::grantStorageAccess().

        Existing test cases pass because requestStorageAccessConfirm in WKPage.cpp
        does not have m_client.requestStorageAccessConfirm and thus returns true.

        * UIProcess/Network/NetworkProcessProxy.messages.in:
            Added a missing #endif.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestStorageAccess):
            Here we now handle the various cases encoded in WebKit::StorageAccessStatus.
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
            Now covers the optional prompt case.
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccessInternal):
            Granting access is broken out to allow WebKit::WebPageProxy to call it
            directly.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::requestStorageAccess):
        (WebKit::WebsiteDataStore::grantStorageAccess):
            Piping through calls from from WebKit::WebResourceLoadStatisticsStore
            to WebKit::WebPageProxy.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        Unreviewed, rolling out r231376 and r231458.

        Caused some API tests failures on iOS

        Reverted changesets:

        "[iOS] Apps that are not visible may not get suspended if they
        trigger page loads while in the background"
        https://bugs.webkit.org/show_bug.cgi?id=185318
        https://trac.webkit.org/changeset/231376

        "[iOS] Release page load process assertion if the screen is
        locked"
        https://bugs.webkit.org/show_bug.cgi?id=185333
        https://trac.webkit.org/changeset/231458

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

        Use thumbnails in System Previews
        https://bugs.webkit.org/show_bug.cgi?id=185397
        <rdar://problem/40039376>

        Reviewed by Jon Lee.

        A system preview that goes through the WKWebViewContentProvider will
        show a static thumbnail/snapshot of the item, rather than jumping
        directly to QuickLook.

        This means we have to link to the AssetViewer framework. That provides
        a ASVThumbnailView that will trigger QuickLook for us.

        * Configurations/WebKit.xcconfig: Link to AssetViewer.

        * UIProcess/ios/WKSystemPreviewView.h: Better macro use. Remove some unneeded protocols.
        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]): Update this
        to use an ASVThumbnailView, when on the internal SDK (because it is private).
        (-[WKSystemPreviewView _layoutThumbnailView]): Use the content insets to put
        the thumbnail in the right place.
        (-[WKSystemPreviewView thumbnailView:wantsToPresentPreviewController:forItem:]):
        Delegate method.
        (-[WKSystemPreviewView web_contentView]):
        (-[WKSystemPreviewView web_computedContentInsetDidChange]):
        (-[WKSystemPreviewView numberOfPreviewItemsInPreviewController:]): Deleted.
        (-[WKSystemPreviewView previewController:previewItemAtIndex:]): Deleted.
        (-[WKSystemPreviewView previewControllerWillDismiss:]): Deleted.

2018-05-08  Youenn Fablet  <youenn@apple.com>

        Allow WebResourceLoader to cancel a load served from a service worker
        https://bugs.webkit.org/show_bug.cgi?id=185274

        Reviewed by Chris Dumez.

        Use FetchIdentifier instead of uint64_t.
        Add IPC support for cancelling a fetch from WebProcess to service worker process.
        Ask service worker process to cancel the fetch when its corresponding WebResourceLoader is cancelled.
        No change of behavior as once a WebResourceLoader is cancelled, any related IPC is not processed.
        A follow-up patch should try to cancel the FetchResponse load, meaning to either cancel the network load
        or to abort reading the readable stream.

        * Scripts/webkit/messages.py:
        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::cancelFetch):
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::didReceiveFetchResponse):
        (WebKit::WebSWServerConnection::didReceiveFetchData):
        (WebKit::WebSWServerConnection::didReceiveFetchFormData):
        (WebKit::WebSWServerConnection::didFinishFetch):
        (WebKit::WebSWServerConnection::didFailFetch):
        (WebKit::WebSWServerConnection::didNotHandleFetch):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::didFailFetch):
        (WebKit::StorageProcess::didNotHandleFetch):
        (WebKit::StorageProcess::didReceiveFetchResponse):
        (WebKit::StorageProcess::didReceiveFetchData):
        (WebKit::StorageProcess::didReceiveFetchFormData):
        (WebKit::StorageProcess::didFinishFetch):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::remove):
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::create):
        (WebKit::ServiceWorkerClientFetch::ServiceWorkerClientFetch):
        (WebKit::ServiceWorkerClientFetch::start):
        (WebKit::ServiceWorkerClientFetch::cancel):
        * WebProcess/Storage/ServiceWorkerClientFetch.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::startFetch):
        (WebKit::WebSWClientConnection::cancelFetch):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::cancelFetch):
        (WebKit::WebSWContextManagerConnection::startFetch):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::WebServiceWorkerFetchTaskClient):
        (WebKit::WebServiceWorkerFetchTaskClient::cancel):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::handleFetch):
        (WebKit::WebServiceWorkerProvider::cancelFetch):
        (WebKit::WebServiceWorkerProvider::fetchFinished):
        * WebProcess/Storage/WebServiceWorkerProvider.h:

2018-05-08  Antti Koivisto  <antti@apple.com>

        Don't use mapped cache files in case of Class A/B protected app
        https://bugs.webkit.org/show_bug.cgi?id=185422
        <rdar://problem/34001688>

        Reviewed by Chris Dumez.

        Currently we don't use shared memory maps in these cases. This still leaves us open for crashes
        in the network process when the device is locked.

        This patch disables use of blob storage (mapped cache files) in apps that use class A/B protection.
        Normally we use blobs for resources > 16KB. Since use of shared memory is already disabled,
        the only optimization lost for these apps is body data deduplication.

        Any existing cache entries with blobs are ignored and deleted. New entries are created with
        body data inlined with the metadata.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::Cache::canUseSharedMemoryForBodyData const): Deleted.
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord const):

            Remove the code the prevented use of shared memory in these cases. Non-mapped Data objects
            are never shareable.

        (WebKit::NetworkCache::Entry::setNeedsValidation):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
        (WebKit::NetworkCache::canUseSharedMemoryForPath): Deleted.
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::mayContainBlob const):
        (WebKit::NetworkCache::Storage::shouldStoreBodyAsBlob):
        (WebKit::NetworkCache::shouldStoreBodyAsBlob): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::canUseSharedMemoryForBodyData const): Deleted.

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

        Unreviewed. Add missing exit not included in r231298.

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

2018-05-07  Daniel Bates  <dabates@apple.com>

        Check X-Frame-Options and CSP frame-ancestors in network process
        https://bugs.webkit.org/show_bug.cgi?id=185410
        <rdar://problem/37733934>

        Reviewed by Ryosuke Niwa.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const): Always encode the frame ancestor origins.
        (WebKit::NetworkResourceLoadParameters::decode): Always decode the frame ancestor origins.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldInterruptLoadForXFrameOptions): Added.
        (WebKit::NetworkResourceLoader::shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptions): Added.
        (WebKit::NetworkResourceLoader::didReceiveResponse): Check if the load needs to be interrupted due
        to a violation of the CSP frame-ancestors directive or X-Frame-Options. If there is a violation
        then stop the load.
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry): Ditto.
        (NetworkResourceLoader::addConsoleMessage): Added.
        (NetworkResourceLoader::sendCSPViolationReport): Added.
        * NetworkProcess/NetworkResourceLoader.h:
        * Scripts/webkit/messages.py: Teach the generator about data types MessageLevel and MessageSource
        as they are both defined in file JavaScriptCore/ConsoleTypes.h as opposed to independent headers.
        Also tell the generator that these types should not be forward declared so that we can use these
        types without their JSC:: prefix in WebPage.messages.in.
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage): Route WebPage messages to the appropriate
        web page.
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess): Added message StopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied.
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied): Added.
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::addConsoleMessage):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addConsoleMessage): Added.
        (WebKit::WebPage::sendCSPViolationReport): Added.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add messages AddConsoleMessage and SendCSPViolationReport
        for adding a console message to Web Inspector and sending a CSP report, respectively.

2018-05-07  Daniel Bates  <dabates@apple.com>

        Abstract logic to log console messages and send CSP violation reports into a client
        https://bugs.webkit.org/show_bug.cgi?id=185393
        <rdar://problem/40036053>

        Reviewed by Brent Fulgham.

        For now, build a URL from the source origin associated with the NetworkResourceLoader
        and pass this to the ContentSecurityPolicy constructor.

        Additionally, make NetworkLoadChecker::contentSecurityPolicy() non-const since it returns
        a non-const pointer to a ContentSecurityPolicy object; => callers can mutate this object
        right from under NetworkLoadChecker. Making this non-const makes this clear to a reader.
        Also remove the mutable keyword from the definition of NetworkLoadChecker::m_contentSecurityPolicy.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::contentSecurityPolicy):
        (WebKit::NetworkLoadChecker::contentSecurityPolicy const): Deleted.
        * NetworkProcess/NetworkLoadChecker.h:

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

        WebResourceLoadStatisticsStore::requestStorageAccess should call its completion handler on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=185403

        Reviewed by Brent Fulgham.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):

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

        [iOS] Release page load process assertion if the screen is locked
        https://bugs.webkit.org/show_bug.cgi?id=185333

        Reviewed by Geoffrey Garen.

        We normally take a background process assertion during page loads to allow them to complete
        even if the tab / app is backgrounded. We should however avoid doing so when the backgrounding
        is caused by the screen locking. Keeping the process assertion in this case would prevent the
        whole device from sleeping longer than it should, thus negatively impacting power.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationState):
        (WebKit::NavigationState::releaseNetworkActivityToken):
        (WebKit::NavigationState::didChangeIsLoading):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground):

2018-05-07  Brent Fulgham  <bfulgham@apple.com>

        Add experimental feature to prompt for Storage Access API use
        https://bugs.webkit.org/show_bug.cgi?id=185335
        <rdar://problem/39994649>

        Reviewed by Alex Christensen and Youenn Fablet.

        Create a new experimental feature that gates the ability of WebKit clients to prompt the user when
        Storage Access API is invoked.

        Currently this feature doesn't have any user-visible impact.

        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::requestStorageAccessConfirm):
        * UIProcess/API/C/WKPage.cpp:
        (WebKit::RequestStorageAccessConfirmResultListener::create):
        (WebKit::RequestStorageAccessConfirmResultListener::~RequestStorageAccessConfirmResultListener):
        (WebKit::RequestStorageAccessConfirmResultListener::call):
        (WebKit::RequestStorageAccessConfirmResultListener::RequestStorageAccessConfirmResultListener):
        (WKPageRequestStorageAccessConfirmResultListenerGetTypeID):
        (WKPageRequestStorageAccessConfirmResultListenerCall):
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _storageAccessPromptsEnabled]):
        (-[WKPreferences _setStorageAccessPromptsEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::requestStorageAccessConfirm):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestStorageAccessConfirm):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::update):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestStorageAccess):

2018-05-07  Dean Jackson  <dino@apple.com>

        Use a dark gray for system preview bbackground
        https://bugs.webkit.org/show_bug.cgi?id=185391
        <rdar://problem/40035120>

        Reviewed by Eric Carlson.

        Throw some darker shade at this view.

        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_initWithFrame:webView:]):

2018-05-07  Don Olmstead  <don.olmstead@sony.com>

        [Win] Add missing methods to WebChromeClient
        https://bugs.webkit.org/show_bug.cgi?id=185325

        Reviewed by Brent Fulgham.

        * WebProcess/WebCoreSupport/WebChromeClient.h:

2018-05-07  Megan Gardner  <megan_gardner@apple.com>

        Allow Web Touch events to timeout
        https://bugs.webkit.org/show_bug.cgi?id=185282

        Reviewed by Tim Horton.
        
        This is backwards, fixing.

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

2018-05-07  Don Olmstead  <don.olmstead@sony.com>

        [Win] LoggingWin is missing includes
        https://bugs.webkit.org/show_bug.cgi?id=185326

        Reviewed by Per Arne Vollan.

        * Platform/win/LoggingWin.cpp:

2018-05-07  Daniel Bates  <dabates@apple.com>

        CSP should be passed the referrer
        https://bugs.webkit.org/show_bug.cgi?id=185367

        Reviewed by Per Arne Vollan.

        Pass the referrer through NetworkLoadChecker so that it can pass it to the ContentSecurityPolicy
        object it instantiates.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::contentSecurityPolicy const):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::create):
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):

2018-05-07  Daniel Bates  <dabates@apple.com>

        Substitute CrossOriginPreflightResultCache::clear() for CrossOriginPreflightResultCache::empty()
        https://bugs.webkit.org/show_bug.cgi?id=185170

        Reviewed by Per Arne Vollan.

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

2018-05-07  Brian Burg  <bburg@apple.com>

        Web Inspector: opt out of process swap on navigation if a Web Inspector frontend is connected
        https://bugs.webkit.org/show_bug.cgi?id=184861
        <rdar://problem/39153768>

        Reviewed by Timothy Hatcher.

        We need to track how many frontends are attached to the web page (both local and remote).
        InspectorController propagates this out to WebKit via InspectorClient. This is then
        kept in UIProcess as a member of WebPageProxy. When making a decision whether to use a
        new process for a navigation, return early with "no" if any frontends are open for the
        page being navigated.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::didChangeInspectorFrontendCount):
        (WebKit::WebPageProxy::inspectorFrontendCount const):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::frontendCountChanged):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::inspectorFrontendCountChanged):
        * WebProcess/WebPage/WebPage.h:

2018-05-04  Tim Horton  <timothy_horton@apple.com>

        Shift to a lower-level framework for simplifying URLs
        https://bugs.webkit.org/show_bug.cgi?id=185334

        Reviewed by Dan Bernstein.

        * Configurations/WebKit.xcconfig:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _updateLocationInfo]):

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

        Shutdown WindowServer connections after checking in with launch services
        https://bugs.webkit.org/show_bug.cgi?id=185082
        <rdar://problem/39613173>

        Reviewed by Brent Fulgham.

        When WindowServer access is blocked in the WebContent process, we should shutdown all connections
        after checking in with launch services.

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

2018-05-04  Don Olmstead  <don.olmstead@sony.com>

        [Win][WebKit] Fix forwarding headers for Windows build
        https://bugs.webkit.org/show_bug.cgi?id=184412

        Reviewed by Alex Christensen.

        * PlatformWin.cmake:
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/APIContextMenuClient.h:
        * UIProcess/API/C/WKProcessTerminationReason.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:

2018-05-04  Chris Dumez  <cdumez@apple.com>

        [iOS] Apps that are not visible may not get suspended if they trigger page loads while in the background
        https://bugs.webkit.org/show_bug.cgi?id=185318

        Reviewed by Geoffrey Garen.

        Whenever there is a page load going on, we take a background process assertion to delay process
        suspension until this load completes. However, there is also a 3 seconds grace period after
        a load is complete to allow the app to trigger a new load shortly after. This grace period was
        introduced to support use cases where a visible app does loads in an offscreen view. However,
        it can be abused by apps running in the background as they could trigger new page loads while
        in the background to delay process suspension. This patch tightens the policy so that only
        apps that are currently visible get to use this grace period. Apps that are in the background
        get to finish their current load and will then get suspended.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didChangeIsLoading):

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

        Adjust sandbox profile for simulator.
        https://bugs.webkit.org/show_bug.cgi?id=185319

        Reviewed by Brent Fulgham.

        Disable Kerberos rules, as well as rules related to NSApplication initialization.

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

2018-05-04  Tim Horton  <timothy_horton@apple.com>

        Wasted time dlopening Lookup when tearing down a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=185310
        <rdar://problem/39934085>

        Reviewed by Wenson Hsieh.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKWindowVisibilityObserver dealloc]):
        (-[WKWindowVisibilityObserver startObservingLookupDismissalIfNeeded]):
        (WebKit::WebViewImpl::prepareForDictionaryLookup):
        (-[WKWindowVisibilityObserver startObservingLookupDismissal]): Deleted.
        Avoid un-registering as a Lookup dismissal observer if we never
        registered in the first place, because that involves dlopening Lookup.

2018-05-04  Megan Gardner  <megan_gardner@apple.com>

        Allow Web Touch events to timeout
        https://bugs.webkit.org/show_bug.cgi?id=185282
        <rdar://problem/38728319>

        Reviewed by Tim Horton.
        
        Web Touch events currently never time out, which blocks the user from interacting with the UI Process at all.
        We should allow these events to time out so that the user can interact with the rest of the UI.

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

2018-05-04  Wenson Hsieh  <whsieh@berkeley.edu>

        REGRESSION: [ios-simulator] 3 WKWebViewAutofillTests API test failures seen with 11.3 SDK
        https://bugs.webkit.org/show_bug.cgi?id=184196
        <rdar://problem/39054481>

        Reviewed by Tim Horton.

        Remove an unnecessary call to NSClassFromString, now that trunk WebKit only supports iOS 11.3+.

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

2018-05-04  Youenn Fablet  <youenn@apple.com>

        NetworkProcessProxy::didReceiveAuthenticationChallenge should take an AuthenticationChallenge r-value
        https://bugs.webkit.org/show_bug.cgi?id=185302

        Reviewed by Geoffrey Garen.

        Pass AuthenticationChallenge as an r-value since it comes from IPC.
        No change of behavior.

        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::create):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.h:

2018-05-04  Sihui Liu  <sihui_liu@apple.com>

        Assertion failure in NetworkStorageSession::setCookie: privilege of UI process is not set
        https://bugs.webkit.org/show_bug.cgi?id=185262

        Reviewed by Chris Dumez.

        Fix an assertion failure by setting UI process privileges in constructor of WebsiteDataStore
        because UI process may use the cookie API before creating a WebView.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):

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

        Adjust sandbox rules for simulator.
        https://bugs.webkit.org/show_bug.cgi?id=185275

        Reviewed by Brent Fulgham.

        Enable rules related to CoreMedia for minimal simulator.

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

2018-05-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Epiphany (GNOME Web) says "Error downloading: Service Unavailable." when trying to download an image from discogs.com
        https://bugs.webkit.org/show_bug.cgi?id=174730

        Reviewed by Michael Catanzaro.

        The problem is that we don't send any User-Agent HTTP header for downloads started by WebProcessPool::download().

        * UIProcess/API/glib/WebKitDownload.cpp:
        (webkitDownloadUpdateRequest): Helper to update the cached request.
        (webkitDownloadStarted): Updated the cached request if we have one.
        (webkit_download_get_request): Use webkitDownloadUpdateRequest().
        * UIProcess/API/glib/WebKitDownloadClient.cpp:
        * UIProcess/API/glib/WebKitDownloadPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download): Set the User-Agent HTTP header if there isn't any.

2018-05-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Some event tests failing after r230817
        https://bugs.webkit.org/show_bug.cgi?id=185072

        Reviewed by Michael Catanzaro.

        Do not send mouse move events to the WebProcess for crossing events during testing. WTR never generates crossing
        events and they can confuse tests.

        Fixes: editing/pasteboard/drag-link-with-data-transfer-adds-trusted-link-to-pasteboard.html
               fast/css/user-drag-none.html
               fast/events/context-activated-by-key-event.html
               fast/events/drag-selects-image.html
               fast/events/dropzone-005.html
               fast/events/mouse-click-events.html
               fast/events/mouse-cursor-change.html

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

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

        More aggressively terminate child processes when the connection to their parent process is severed
        https://bugs.webkit.org/show_bug.cgi?id=177972
        <rdar://problem/33317607>

        Reviewed by Geoff Garen.

        More aggressively terminate child processes when the connection to their parent process is severed.
        Previously, we would dispatch to the main thread and then exit the process. This would sometimes
        cause the process to say alive for 10 seconds until our watchdog would forcefully terminate the
        process. This could happen in particular when the main thread is blocked on a synchronous IPC.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didClose): Deleted.
        * PluginProcess/PluginProcess.h:
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::didClose):
        (WebKit::didCloseOnConnectionWorkQueue):
        (WebKit::ChildProcess::terminationTimerFired):
        * Shared/ChildProcess.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::didClose): Deleted.
        * StorageProcess/StorageProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didClose): Deleted.
        * WebProcess/WebProcess.h:

2018-05-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use default std::optional if it is provided
        https://bugs.webkit.org/show_bug.cgi?id=185159

        Reviewed by Michael Catanzaro.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::Handle::decode):
        * Shared/TouchBarMenuItemData.cpp:
        (WebKit::TouchBarMenuItemData::decode):

2018-05-03  Justin Fan  <justin_fan@apple.com>

        [WebGL] Add runtime flag for enabling ASTC support in WebGL
        https://bugs.webkit.org/show_bug.cgi?id=184840

        Reviewed by Myles C. Maxfield.

        Added runtime flag for ASTC support in WebGL, to turn on/off when extension is implemented.

        * Shared/WebPreferences.yaml:

2018-05-03  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix after <https://trac.webkit.org/changeset/231282>.

        * NetworkProcess/NetworkActivityTracker.h:

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

        Ads in NYTimes app are shifted downwards by the scroll view's top content inset
        https://bugs.webkit.org/show_bug.cgi?id=185251
        <rdar://problem/39062357>

        Reviewed by Tim Horton.

        The NYTimes app embeds advertisements in each article's WKWebView by adding views in the WKScrollView's view
        hierarchy. These views are positioned using the bounding client rects of elements in the DOM (via Element
        ::getBoundingClientRect). Prior to r229641, WebKit would report bounding client rects inset by the content
        insets of WKScrollView, which means that if a top content inset X is specified on the scroll view, an element
        that is flush against the top of the viewport will have a bounding client rect top of -X (when it should really
        be 0).

        To account for this, NYTimes adds the scroll view content insets back to the bounding client rect when
        determining the position of each advertisement which, after r229641, causes these views to be shifted downwards
        by an amount equal to the scroll view content inset top.

        This new behavior does not affect Safari, since Safari uses SPI to explicitly set obscured insets. As such, we
        address this by gating the scroll view content inset fix with a linked-on-or-after check.

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

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

        Load hangs if the WebProcess fails to launch
        https://bugs.webkit.org/show_bug.cgi?id=185225
        <rdar://problem/38249058>

        Reviewed by Geoff Garen.

        When a process fails to launch, ChildProcessProxy::didFinishLaunching() gets called with an
        invalid connection identifier. While NetworkProcessProxy::didFinishLaunching() properly deals with
        this situation, WebProcessProxy::didFinishLaunching() does not. As a result, we do not attempt to
        relaunch the process, we do not notify the client and WebPageProxy::m_isValid stays true.

        This patch thus updates WebProcessProxy::didFinishLaunching() to check if the connection identifier
        is valid and treats it as a crash. As a result, the WebPageProxies properly reset their state and
        the client gets notified of the crash so that it can attempt to reload.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _makeNextWebProcessLaunchFailForTesting]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Add SPI to make the next WebProcess launch fail, for the purpose of API testing.

        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:

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

        Unreviewed, rolling out r231223 and r231288.
        https://bugs.webkit.org/show_bug.cgi?id=185256

        The change in r231223 breaks internal builds, and r231288 is a
        dependent change. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Use default std::optional if it is provided"
        https://bugs.webkit.org/show_bug.cgi?id=185159
        https://trac.webkit.org/changeset/231223

        "Use pointer instead of
        std::optional<std::reference_wrapper<>>"
        https://bugs.webkit.org/show_bug.cgi?id=185186
        https://trac.webkit.org/changeset/231288

2018-05-03  Per Arne Vollan  <pvollan@apple.com>

        An error message is written to stderr when the WebContent process is blocking WindowServer access.
        https://bugs.webkit.org/show_bug.cgi?id=184701

        Reviewed by Brent Fulgham.

        Calling 'setApplicationIsDaemon(true)' instead of 'CGSSetDenyWindowServerConnections(true)' to disable
        access to the WindowServer in the WebContent process, will remove this error message. After this change,
        the url of the WebContent process is still showing up in Activity Monitor, which previously was a
        problem when calling 'setApplicationIsDaemon(true)'.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeProcess):

2018-05-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r231253.

        The API test added with this change is crashing on the bots.

        Reverted changeset:

        "Web Inspector: opt out of process swap on navigation if a Web
        Inspector frontend is connected"
        https://bugs.webkit.org/show_bug.cgi?id=184861
        https://trac.webkit.org/changeset/231253

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

        Re-eneable Network Extension support in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=185236
        <rdar://problem/39883004>

        Reviewed by Eric Carlson.

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

2018-05-03  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r231014): Entitlements are not applied to XPC services on macOS
        https://bugs.webkit.org/show_bug.cgi?id=185241

        Reviewed by Dan Bernstein.

        * Configurations/BaseXPCService.xcconfig:
        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:

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

        REGRESSION(r222772): [GTK][WPE] WebProcess from WebKitGtk+ 2.19.9x SIGSEVs in WebKit::WebProcess::ensureNetworkProcessConnection() at Source/WebKit/WebProcess/WebProcess.cpp:1127
        https://bugs.webkit.org/show_bug.cgi?id=183348

        Reviewed by Michael Catanzaro.

        When connection doesn't exit in case of sync message failure, always exit in case of failing to send
        GetNetworkProcessConnection or GetStorageProcessConnection messages. This can happen when the WebView is created
        and destroyed quickly.

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

2018-05-02  Nan Wang  <n_wang@apple.com>

        AX: Missing kAXSWebAccessibilityEventsEnabledNotification causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=185237

        Reviewed by Dan Bernstein.

        When libAccessibility.dylib is missing, the compiler would optimize out the global
        notification and lead to a crash. Fixed it by using the isNullFunction check instead,
        since we are sure the global notification would be there when the corresponding function 
        is available.

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

2018-05-02  Keith Rollin  <krollin@apple.com>

        Add facility for tracking times and results of page and resource loading
        https://bugs.webkit.org/show_bug.cgi?id=184838
        <rdar://problem/36548974>

        Reviewed by Brent Fulgham.

        Add NetworkActivityTracker. The idea behind this facility is to create
        and destroy them around networking activity that we want to track for
        the purpose of measuring overall network health. They can be created
        around the loading of pages or individual resources, and can be
        arranged in a parent/child hierarchy to indicate what pages the
        resources are part of. The NetworkActivity tracker tracks load times
        and results. On Cocoa, it can be integrated with CFNetwork in order to
        associate WebKit activity with low-level networking activity.

        * CMakeLists.txt:
        * Configurations/WebKit.xcconfig:
        * NetworkProcess/NetworkActivityTracker.cpp: Copied from Source/WebKit/NetworkProcess/NetworkLoadParameters.h.
        (WebKit::NetworkActivityTracker::NetworkActivityTracker):
        (WebKit::NetworkActivityTracker::~NetworkActivityTracker):
        (WebKit::NetworkActivityTracker::setParent):
        (WebKit::NetworkActivityTracker::start):
        (WebKit::NetworkActivityTracker::complete):
        * NetworkProcess/NetworkActivityTracker.h: Added.
        (WebKit::NetworkActivityTracker::getPlatformObject):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::pageLoadCompleted):
        (WebKit::networkActivityTrackingEnabled):
        (WebKit::NetworkConnectionToWebProcess::startTrackingResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::stopTrackingResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::stopAllNetworkActivityTracking):
        (WebKit::NetworkConnectionToWebProcess::stopAllNetworkActivityTrackingForPage):
        (WebKit::NetworkConnectionToWebProcess::findRootNetworkActivity):
        (WebKit::NetworkConnectionToWebProcess::findNetworkActivityTracker):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::ResourceNetworkActivityTracker::ResourceNetworkActivityTracker):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::trackNetworkActivity const):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::continueProcessingCachedEntryAfterDidReceiveResponse):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cocoa/NetworkActivityTrackerCocoa.mm: Added.
        (WebKit::NetworkActivityTracker::NetworkActivityTracker):
        (WebKit::NetworkActivityTracker::~NetworkActivityTracker):
        (WebKit::NetworkActivityTracker::setParent):
        (WebKit::NetworkActivityTracker::start):
        (WebKit::NetworkActivityTracker::complete):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationTrackNetworkActivity):
        (WKContextConfigurationSetTrackNetworkActivity):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration trackNetworkActivity]):
        (-[_WKProcessPoolConfiguration setTrackNetworkActivity:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::pageLoadCompleted):
        * WebProcess/Network/WebLoaderStrategy.h:

2018-05-02  Jer Noble  <jer.noble@apple.com>

        Open audio/video sandbox services for minimal simulator
        https://bugs.webkit.org/show_bug.cgi?id=185217
        <rdar://problem/39918909>

        Reviewed by Per Arne Vollan.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/com.apple.WebProcess.sb.in:

2018-05-02  Daniel Bates  <dabates@apple.com>

        Cleanup NetworkResourceLoader::didReceiveResponse()
        https://bugs.webkit.org/show_bug.cgi?id=185209

        Reviewed by Chris Dumez.

        Use early returns to make the control flow easier to read and reason about. Disregarding a
        From-Origin violation, NetworkResourceLoader::didReceiveResponse() only returns NetworkLoadClient::ShouldContinueDidReceiveResponse::No
        when the load is for a main resource and hence it must wait for the embedding client to allow
        the load before continuing with it. With regards to a From-Origin violation, the network
        process schedules to fail the load in a subsequent turn of the event loop before returning
        NetworkLoadClient::ShouldContinueDidReceiveResponse::No. It return NetworkLoadClient::ShouldContinueDidReceiveResponse::No
        solely to tell the NetworkLoadClient to defer assuming the load is allowed (because we will
        fail it on the next turn of the event loop).

        Additionally, remove all logging about the return value as we no longer have a need for
        such logging.

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

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

        Add WKWebsiteDataStorePrivate._proxyConfiguration SPI
        https://bugs.webkit.org/show_bug.cgi?id=185179

        Reviewed by Andy Estes.

        * NetworkProcess/NetworkSessionCreationParameters.h:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode):
        (IPC::decode):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setProxyConfiguration:]):
        (-[WKWebsiteDataStore _proxyConfiguration]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::setProxyConfiguration):
        (WebKit::WebsiteDataStore::proxyConfiguration):

2018-05-02  Youenn Fablet  <youenn@apple.com>

        Use NetworkLoadChecker for navigation loads
        https://bugs.webkit.org/show_bug.cgi?id=184892
        <rdar://problem/39652686>

        Reviewed by Chris Dumez.

        Compute whether a response is same origin in no-cors case.
        This allows providing more precise filtering.
        In case of navigate loads, set the tainting to basic which will make filtering to the minimum.

        Pass the sourceOrigin for navigation loads as well.
        Enable to restrict HTTP response access for navigation load.

        Content Blockers are disabled for now in NetworkLoadChecker for navigation loads.
        They should be reenabled as a follow-up.

        Add a specific case to allow any redirection to about:// URLs.
        While this does not conform with the spec, this keeps the existing WebKit behavior.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::validateResponse):
        (WebKit::NetworkLoadChecker::continueCheckingRequest):
        (WebKit::NetworkLoadChecker::doesNotNeedCORSCheck const):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sanitizeResponseIfPossible):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::isDoingLoadingSecurityChecks const):
        We only do security checks if this runtime flag is on.
        * WebProcess/Network/WebLoaderStrategy.h:

2018-05-02  Jer Noble  <jer.noble@apple.com>

        Make EncryptedMediaAPIEnabled an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=185212

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

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

        Adjust sandbox profile in simulator mode.
        https://bugs.webkit.org/show_bug.cgi?id=185172
        <rdar://problem/39876860>

        Reviewed by Brent Fulgham.

        Fix some sandbox violations.

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

2018-05-02  Brian Burg  <bburg@apple.com>

        Web Inspector: opt out of process swap on navigation if a Web Inspector frontend is connected
        https://bugs.webkit.org/show_bug.cgi?id=184861
        <rdar://problem/39153768>

        Reviewed by Ryosuke Niwa.

        We need to track how many frontends are attached to the web page (both local and remote).
        InspectorController propagates this out to WebKit via InspectorClient. This is then
        kept in UIProcess as a member of WebPageProxy. When making a decision whether to use a
        new process for a navigation, return early with "no" if any frontends are open for the
        page being navigated.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::didChangeInspectorFrontendCount):
        (WebKit::WebPageProxy::inspectorFrontendCount const):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::frontendCountChanged):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::inspectorFrontendCountChanged):
        * WebProcess/WebPage/WebPage.h:

2018-05-02  Jer Noble  <jer.noble@apple.com>

        Adopt -destinationWindowToExitFullScreenForWindow:
        https://bugs.webkit.org/show_bug.cgi?id=185204
        <rdar://problem/22486621>

        Reviewed by Eric Carlson.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController destinationWindowToExitFullScreenForWindow:]):

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

        Disable Media capture rules in sandbox for simulator.
        https://bugs.webkit.org/show_bug.cgi?id=185206
        <rdar://problem/39910015>

        Reviewed by Eric Carlson.

        These rules are not relevant in this case.

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

2018-05-02  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Provide audio route information when invoking AirPlay picker
        https://bugs.webkit.org/show_bug.cgi?id=185199
        <rdar://problem/39853103>

        Reviewed by Jer Noble.

        * Scripts/webkit/messages.py:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showPlaybackTargetPicker):  Pass route sharing policy and routing context UID.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]): Take same.
        (-[WKContentView _showPlaybackTargetPicker:fromRect:]): Deleted.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::showPlaybackTargetPicker): Pass route sharing policy and routing context UID.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.h:
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker showFromView:routeSharingPolicy:routingContextUID:]): Take same.
        (-[WKAirPlayRoutePicker showFromView:]): Deleted.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::showPlaybackTargetPicker):

2018-05-02  Jer Noble  <jer.noble@apple.com>

        Get the WebKit.framework bundle by asking for WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=185175

        Reviewed by Tim Horton.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeSandbox):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * StorageProcess/mac/StorageProcessMac.mm:
        (WebKit::StorageProcess::initializeSandbox):

2018-05-02  Youenn Fablet  <youenn@apple.com>

        Cannot gather srflx or relay ICE candidates on IPv6 network (ICE agent hangs?)
        https://bugs.webkit.org/show_bug.cgi?id=181009
        <rdar://problem/36144555>

        Reviewed by Eric Carlson.

        On iOS/IPv6 networks, STUN servers name resolution returns a zero IPv6 IP address.
        No error is raised which leads to sending STUN requests with that IP address.
        Once the request times out, the ICE candidate gathering finishes with host candidates only.

        This patch makes WebRTC DNS resolver to send only IPv4 resolved addresses.
        STUN is used for NAT traversal which is for IPv4 addresses.
        Not sending IPv6 addresses allows terminating ICE candidate gathering sooner.

        Manually tested on iOS with IPv4/IPv6 and IPv6 networks.

        * NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp:
        (WebKit::resolvedName):

2018-05-02  Youenn Fablet  <youenn@apple.com>

        CacheStorage::Engine should keep a list of initialization callback
        https://bugs.webkit.org/show_bug.cgi?id=185184
        <rdar://problem/38875651>

        Reviewed by Antti Koivisto.

        Keep each initialize callback in a Vector so as to compute the salt only once.
        Call all callbacks then in a loop.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::~Engine):
        (WebKit::CacheStorage::Engine::initialize):
        * NetworkProcess/cache/CacheStorageEngine.h:

2018-05-02  Jer Noble  <jer.noble@apple.com>

        Pipe volume through PlaybackSessionManager/Proxy.
        https://bugs.webkit.org/show_bug.cgi?id=185182

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionModelContext::setVolume):
        (WebKit::PlaybackSessionModelContext::volumeChanged):
        (WebKit::PlaybackSessionManagerProxy::volumeChanged):
        (WebKit::PlaybackSessionManagerProxy::setVolume):
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.messages.in:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionInterfaceContext::volumeChanged):
        (WebKit::PlaybackSessionManager::volumeChanged):
        (WebKit::PlaybackSessionManager::setVolume):

2018-05-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use default std::optional if it is provided
        https://bugs.webkit.org/show_bug.cgi?id=185159

        Reviewed by JF Bastien.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::Handle::decode):
        * Shared/TouchBarMenuItemData.cpp:
        (WebKit::TouchBarMenuItemData::decode):

2018-05-01  Jer Noble  <jer.noble@apple.com>

        Production build error in Migrate Header phase when WK_ALTERNATE_FRAMEWORKS_DIR is set to non-empty value
        https://bugs.webkit.org/show_bug.cgi?id=185171

        Reviewed by Timothy Hatcher.

        * Configurations/BaseTarget.xcconfig:

2018-05-01  Per Arne Vollan  <pvollan@apple.com>

        Use correct runloop type in the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=185140

        Reviewed by Brent Fulgham.

        Use WK_MACOS_* machinery to determine runloop type for the WebContent process.

        * Configurations/WebContentService.xcconfig:

2018-05-01  Oleksandr Skachkov  <gskachkov@gmail.com>

        WebAssembly: add support for stream APIs - JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=183442

        Reviewed by Yusuke Suzuki and JF Bastien.

        Add WEBASSEMBLY_STREAMING_API feature flag

        * Configurations/FeatureDefines.xcconfig:

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

        Use correct runloop type in the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=185140
        <rdar://problem/39585037>

        Reviewed by Brent Fulgham.

        The macOS target version should be used to determine the runloop type.

        * Configurations/WebContentService.xcconfig:

2018-04-30  Michael Saboff  <msaboff@apple.com>

        Eliminate WebProcessShim.dylib
        https://bugs.webkit.org/show_bug.cgi?id=185147

        Reviewed by Ryosuke Niwa.

        * Configurations/WebContentService.xcconfig:
        * Configurations/WebProcessShim.xcconfig: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2018-04-30  Michael Saboff  <msaboff@apple.com>

        Remove unused mac/CookieStorageShimLibrary
        https://bugs.webkit.org/show_bug.cgi?id=185146

        Reviewed by Alex Christensen.

        * Shared/mac/CookieStorageShimLibrary.cpp: Removed.
        * Shared/mac/CookieStorageShimLibrary.h: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2018-04-30  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageContextMenuClient getContextMenuFromProposedMenuAsync
        https://bugs.webkit.org/show_bug.cgi?id=180955

        Reviewed by Andy Estes.

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):

2018-04-30  JF Bastien  <jfbastien@apple.com>

        Use some C++17 features
        https://bugs.webkit.org/show_bug.cgi?id=185135

        Reviewed by Alex Christensen.

        As discussed here [0] let's move WebKit to a subset of C++17. We
        now require GCC 6 [1] which means that, according to [2] we can
        use the following C++17 language features (I removed some
        uninteresting ones):

         - New auto rules for direct-list-initialization
         - static_assert with no message
         - typename in a template template parameter
         - Nested namespace definition
         - Attributes for namespaces and enumerators
         - u8 character literals
         - Allow constant evaluation for all non-type template arguments
         - Fold Expressions
         - Unary fold expressions and empty parameter packs
         - __has_include in preprocessor conditional
         - Differing begin and end types in range-based for
         - Improving std::pair and std::tuple

        Consult the Tony Tables [3] to see before / after examples.

        Of course we can use any library feature if we're willing to
        import them to WTF (and they don't require language support).


          [0]: https://lists.webkit.org/pipermail/webkit-dev/2018-March/029922.html
          [1]: https://trac.webkit.org/changeset/231152/webkit
          [2]: https://en.cppreference.com/w/cpp/compiler_support
          [3]: https://github.com/tvaneerd/cpp17_in_TTs/blob/master/ALL_IN_ONE.md

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

2018-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Respect the existing shrink-to-fit attribute instead of using min-device-width
        https://bugs.webkit.org/show_bug.cgi?id=185132
        <rdar://problem/39834562>

        Reviewed by Tim Horton.

        Remove the experimental feature for `min-device-width`.

        * Shared/WebPreferences.yaml:

2018-04-30  Keith Rollin  <krollin@apple.com>

        Include breadcrumb for tracking resource loading into CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=184837
        rdar://problem/39575411

        Reviewed by Brent Fulgham.

        When starting the network-based loading of a resource, log the
        description provided by NetworkDataTask. On Cocoa, this is implemented
        to return the description property in NSURLSessionTask. This
        information better allows us to track a resource load through the
        WebContent process, the Networking process, and the Cocoa networking
        layers.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::description const):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::description const):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::description const):

2018-04-30  Andy Estes  <aestes@apple.com>

        [iOS] Try to unlock PDF documents before printing them
        https://bugs.webkit.org/show_bug.cgi?id=185084
        <rdar://problem/39356622>

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView pdfHostViewController:documentDidUnlockWithPassword:]):

        Stored the password that successfully unlocked the current PDF document.

        (-[WKPDFView _wk_printedDocument]):

        Used the stored password to unlock the CGPDFDocument we create for printing.

2018-04-28  Andy Estes  <aestes@apple.com>

        [iOS] Present an action sheet when long-pressing on PDF links
        https://bugs.webkit.org/show_bug.cgi?id=185093
        <rdar://problem/39356651>

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView dealloc]):

        Called -[WKActionSheetAssistant cleanupSheet].

        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):

        Created a WKActionSheetAssistant with the host view as the assistant view and
        ourselves as the delegate.

        (-[WKPDFView _URLWithPageIndex:]):

        Added. Creates a URL to the current page with a page number fragment appended.

        (-[WKPDFView _goToURL:atLocation:]):

        Added. Navigates to a URL with a synthetic mouse click at a location in host view
        coordinates.

        (-[WKPDFView pdfHostViewController:goToURL:]):
        (-[WKPDFView pdfHostViewController:goToPageIndex:withViewFrustum:]):

        Called -_goToURL:atLocation:. Used -_URLWithPageIndex: to construct an NSURL from
        a page index.

        (-[WKPDFView _showActionSheetForURL:atLocation:]):

        Added. Populates _positionInformation with a URL and location and calls
        -[WKActionSheetAssistant showLinkSheet].

        (-[WKPDFView pdfHostViewController:didLongPressURL:atLocation:]):
        (-[WKPDFView pdfHostViewController:didLongPressPageIndex:atLocation:]):

        Called -_showActionSheetForURL:atLocation:. Used -_URLWithPageIndex: to construct
        an NSURL from a page index.

        (-[WKPDFView positionInformationForActionSheetAssistant:]):

        Returned _positionInformation.

        (-[WKPDFView actionSheetAssistant:performAction:]):

        Populated the pasteboard with plain text and URL representations of
        _positionInformation.url.

        (-[WKPDFView actionSheetAssistant:openElementAtLocation:]):

        Called -_goToURL:atLocation.

        (-[WKPDFView actionSheetAssistant:shareElementWithURL:rect:]):

        Created a UIWKSelectionAssistant and called -showShareSheetFor:fromRect:.

        (-[WKPDFView actionSheetAssistant:shouldIncludeAppLinkActionsForElement:]):

        Returned API::UIClient::shouldIncludeAppLinkActionsForElement().

        (-[WKPDFView actionSheetAssistant:decideActionsForElement:defaultActions:]):

        Returned API::UIClient::actionsForElement()l

2018-04-28  Andy Estes  <aestes@apple.com>

        [iOS] Allow com.apple.WebKit.Networking to look up com.apple.wifi.manager
        https://bugs.webkit.org/show_bug.cgi?id=185114
        <rdar://problem/39808763>

        Reviewed by Wenson Hsieh.

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

2018-04-28  Brent Fulgham  <bfulgham@apple.com>

        Revise sandboxes to allow additional IOKit property access
        https://bugs.webkit.org/show_bug.cgi?id=185095
        <rdar://problem/39809455>

        Reviewed by Eric Carlson.

        Update the WebContent and Plugin processes to allow additional IOKit property access.

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

2018-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebProcess from WebKitGtk+ 2.19.92 SIGSEVs in WebCore::TextureMapperGL::~TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=184040

        Reviewed by Michael Catanzaro.

        This can happen when using single shared process model or when the process limit is reached in multiple process
        model. In this case, all pages in the same web process with accelerated compositing enabled share the same
        compositing thread. Every page sets its GL context as current when rendering a frame, but not when invalidating
        the threaded compositor when the page is closed. So, if a hidden tab is closed, the threaded compositor is
        invalidated and the GL resources of the current context (the visible page) are destroyed. This is also causing
        the blank pages issue when closing a tab related to another one, the current one stops rendering anything because
        its GL context has been released. We should make the threaded compositor context current when invalidating it.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::invalidate):

2018-04-27  Timothy Hatcher  <timothy@apple.com>

        REGRESSION: Touch events fail to dispatch to the page in all cases.

        https://bugs.webkit.org/show_bug.cgi?id=185097
        rdar://problem/39731995

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        Consult internal gesture recognizers, otherwise NO might get returned.

2018-04-26  Ryosuke Niwa  <rniwa@webkit.org>

        PSON: Triggering a navigation to an invalid URL creates a new WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=185066

        Reviewed by Youenn Fablet.

        Don't create a new WebContent process when the target URL is invalid as well as when the source URL is invalid.

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

2018-04-27  Youenn Fablet  <youenn@apple.com>

        Use NetworkLoadChecker for XHR/fetch loads
        https://bugs.webkit.org/show_bug.cgi?id=184741

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didCompleteWithError):
        Pass the preflight error as completion error if any.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        Set response source to Network so that checks relying on that are correct.
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::validateResponse):
        Adding Oppaqueredirect tainting.
        (NetworkLoadChecker::doesNotNeedCORSCheck):
        Adding a check to only activate CORS checks for CORS enabled schemes.
        Non CORS enabled schemes loads should have failed in WebProcess already.
        (WebKit::NetworkLoadChecker::checkCORSRedirectedRequest):
        Remove Authorization header as done by SubresourceLoader.
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        If error is cancellation, we still want to call the completion handler.
        * NetworkProcess/NetworkResourceLoader.cpp:
        Activate network load checker for all types of loads.
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        Handle manual redirection by directly calling didReceiveResponse.

2018-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add an experimental feature flag for viewport "min-device-width"
        https://bugs.webkit.org/show_bug.cgi?id=185050
        <rdar://problem/39624038>

        Reviewed by Tim Horton.

        Add MinDeviceWidthEnabled as a new experimental feature, on by default in extra zoom mode and off elsewhere.

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

2018-04-27  Daniel Bates  <dabates@apple.com>

        UIDelegate::UIClient::didResignInputElementStrongPasswordAppearance() is applicable to both Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=185079
        <rdar://problem/39794960>

        I inadvertently forgot to move the UIDelegate field webViewDidResignInputElementStrongPasswordAppearanceWithUserInfo
        outside the PLATFORM(MAC)-guard.

        * UIProcess/Cocoa/UIDelegate.h:

2018-04-27  Daniel Bates  <dabates@apple.com>

        UIDelegate::UIClient::didResignInputElementStrongPasswordAppearance() is applicable to both Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=185079
        <rdar://problem/39794960>

        Reviewed by Andy Estes.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didResignInputElementStrongPasswordAppearance):

2018-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename minimumLayoutSize to viewLayoutSize
        https://bugs.webkit.org/show_bug.cgi?id=185050
        <rdar://problem/39624038>

        Reviewed by Tim Horton.

        Renames minimumLayoutSize to viewLayoutSize, since the minimum layout size in ViewportConfiguration is now
        different from the minimum layout size that is currently pushed down from the UI process (e.g. WKWebView SPI) in
        the case where `min-device-width` is used to override the minimum layout size.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        (-[WKWebView activeViewLayoutSize:]):
        (-[WKWebView _dispatchSetViewLayoutSize:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _minimumLayoutSizeOverride]):
        (-[WKWebView _setViewLayoutSizeOverride:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _clearOverrideLayoutParameters]):
        (-[WKWebView _minimumLayoutWidth]):
        (-[WKWebView _setMinimumLayoutWidth:]):
        (-[WKWebView activeMinimumLayoutSize:]): Deleted.
        (-[WKWebView _dispatchSetMinimumLayoutSize:]): Deleted.
        (-[WKWebView _setMinimumLayoutSizeOverride:]): Deleted.
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:minimumLayoutSizeForMinimalUI:maximumUnobscuredSizeOverride:]): Deleted.

        Remove unused SPI that has been deprecated since iOS 9, has a simple drop-in replacement, and no longer has any
        internal clients.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setMinimumSizeForAutoLayout):
        (WebKit::WebViewImpl::minimumSizeForAutoLayout const):
        (WebKit::WebViewImpl::setIntrinsicContentSize):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::viewLayoutSizeDidChange):
        (WebKit::DrawingAreaProxy::minimumLayoutSizeDidChange): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setViewLayoutSize):
        (WebKit::WebPageProxy::setMinimumLayoutSize): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::viewLayoutSize const):
        (WebKit::WebPageProxy::minimumLayoutSize const): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize):
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSize): Deleted.
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::viewLayoutSizeDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::willSendUpdateGeometry):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::minimumLayoutSizeDidChange): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        (WebKit::WebPage::setViewLayoutSize):
        (WebKit::WebPage::setMinimumLayoutSize): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::viewLayoutSize const):
        (WebKit::WebPage::minimumLayoutSize const): Deleted.
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setViewportConfigurationViewLayoutSize):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize): Deleted.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):

2018-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add a mechanism to override default viewport behaviors in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=185050
        <rdar://problem/39624038>

        Reviewed by Tim Horton.

        Remove the forceHorizontalViewportShrinkToFit and minimumAllowedLayoutWidth SPI hooks from WebKit, and
        additionally remove all logic for plumbing viewSize to WebCore. See WebCore/ChangeLog for more information.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode const):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::allowShrinkToFit const):
        (WebKit::operator==):
        (WebKit::VisibleContentRectUpdateInfo::forceHorizontalShrinkToFit const): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView activeMinimumLayoutSize:]):
        (-[WKWebView _dispatchSetMinimumLayoutSize:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _minimumAllowedLayoutWidth]): Deleted.
        (-[WKWebView _setMinimumAllowedLayoutWidth:]): Deleted.
        (-[WKWebView activeMinimumLayoutSizes:]): Deleted.
        (-[WKWebView _dispatchSetMinimumLayoutSize:viewSize:]): Deleted.
        (-[WKWebView _setForceHorizontalViewportShrinkToFit:]): Deleted.
        (-[WKWebView _forceHorizontalViewportShrinkToFit]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSize):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::updateVisibleContentRects):

2018-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r230812): [WPE][GTK] WebKitWebViewSessionState.cpp throws away encoded BackForwardList identifier
        https://bugs.webkit.org/show_bug.cgi?id=184823

        Reviewed by Michael Catanzaro.

        Bump session sate format version to 2 and stop encoding the backfoward list item identifier, since it's always
        regenerated.

        * UIProcess/API/glib/WebKitWebViewSessionState.cpp:
        (encodeBackForwardListItemState): Always encode version 2.
        (encodeBackForwardListState): Ditto.
        (encodeSessionState): Ditto.
        (decodeBackForwardListItemStateV1): Decode list item state for version 1.
        (decodeBackForwardListItemState): Receive the version and call decodeBackForwardListItemStateV1() if it's 1 or
        use the version 2 otherwise.
        (decodeSessionState): Load data for known formats and use the one that worked to decode it.

2018-04-26  Megan Gardner  <megan_gardner@apple.com>

        Add timeout for ensurePositionInformationIsUpToDate
        https://bugs.webkit.org/show_bug.cgi?id=184567

        Reviewed by Wenson Hsieh.
        
        We are having long hang times for WebKit, and this is one of the culprits.
        If we do not get an answer for positionInformation in a reasonable amount of time, we should timeout,
        so as to not hang the UI.

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

2018-04-26  Andy Estes  <aestes@apple.com>

        Try again to fix the iOS build after r231063.

        * Configurations/Base.xcconfig:

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

        WK_COCOA_TOUCH the WK_ACCESSIBILITY_LDFLAGS
        https://bugs.webkit.org/show_bug.cgi?id=185007
        <rdar://problem/39735943>

        Reviewed by Timothy Hatcher.

        * Configurations/WebKit.xcconfig:

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

        Unreviewed build fix; fix iOS TAPI build step after r231063.

        * Configurations/WebKit.xcconfig:

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

        WK_COCOA_TOUCH all the things.
        https://bugs.webkit.org/show_bug.cgi?id=185006

        Reviewed by Tim Horton.

        * Configurations/BaseTarget.xcconfig:
        * Configurations/WebKit.xcconfig:

2018-04-26  Daniel Bates  <dabates@apple.com>

        Remove WebCore::-qualifier in NetworkLoadChecker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=185037

        Reviewed by Youenn Fablet.

        It is unncesssary to qualify WebCore types in NetworkLoadChecker.cpp as it has a
        "using namespace WebCore" directive.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::validateResponse):
        (WebKit::NetworkLoadChecker::continueCheckingRequest): Removed extra space character and unnecessary
        parentheses from the right-hand side of the assignment to m_storedCredentialsPolicy.
        (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad):

2018-04-26  Daniel Bates  <dabates@apple.com>

        Rename NetworkLoadChecker::returnError() to NetworkLoadChecker::accessControlErrorForValidationHandler()
        https://bugs.webkit.org/show_bug.cgi?id=185035

        Reviewed by Youenn Fablet.

        Substitute NetworkLoadChecker::accessControlErrorForValidationHandler() for NetworkLoadChecker::returnError()
        to better describe that it is a convenience function that returns a wrapped ResourceError object,
        that represents an access control error, suitable to be passed directly to a validation handler.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection): Update as needed for renaming.
        (WebKit::NetworkLoadChecker::accessControlErrorForValidationHandler): Use auto -> syntax to avoid the need to
        class-qualify the return type. Also renamed parameter from error to message as it represents the message/description
        for the access control error.
        (WebKit::NetworkLoadChecker::checkRequest): Update as needed for renaming. Also substitute "message" for "error"
        to match the argument of accessControlErrorForValidationHandler() with the same name.
        (WebKit::NetworkLoadChecker::continueCheckingRequest): Update as needed for renaming.
        (WebKit::NetworkLoadChecker::returnError): Deleted; renamed to accessControlErrorForValidationHandler().
        * NetworkProcess/NetworkLoadChecker.h:

2018-04-26  Jiewen Tan  <jiewen_tan@apple.com>

        Remove access to keychain from the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=184428
        <rdar://problem/13150903>

        Part 3.

        Tighten WebContent Process' sandbox profile to all Security.framework services.

        Reviewed by Brent Fulgham.

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

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

        Make cross origin redirection error messages consistent between SubresourceLoader and NetworkLoadChecker
        https://bugs.webkit.org/show_bug.cgi?id=185023

        Reviewed by Chris Dumez.

        Align NetworkLoadChecker with what SubresourceLoader is doing so that we can keep WK1 and WK2 error messages as consistent as possible.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::validateResponse):

2018-04-25  Megan Gardner  <megan_gardner@apple.com>

        Activate selection when interacting with editable content
        https://bugs.webkit.org/show_bug.cgi?id=185017

        Reviewed by Tim Horton.
        
        Fixes a regression from r231016 where selection now does not work when interacting with
        editable content. When we go into editable content, we should turn on the assistant.
        This fulfills the requirement of user interaction as well, so any javascript selections
        after this point should be valid.

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

2018-04-26  Per Arne Vollan  <pvollan@apple.com>

        Disable content filtering in minimal simulator mode
        https://bugs.webkit.org/show_bug.cgi?id=185027
        <rdar://problem/39736091>

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig:

2018-04-26  Brady Eidson  <beidson@apple.com>

        Add a setting for keeping around all processes and always reusing them per-origin.
        <rdar://problem/39695798> and https://bugs.webkit.org/show_bug.cgi?id=185020

        Reviewed by Andy Estes.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:

        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationAlwaysKeepAndReuseSwappedProcesses):
        (WKContextConfigurationSetAlwaysKeepAndReuseSwappedProcesses):
        * UIProcess/API/C/WKContextConfigurationRef.h:

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setAlwaysKeepAndReuseSwappedProcesses:]):
        (-[_WKProcessPoolConfiguration alwaysKeepAndReuseSwappedProcesses]):

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::webProcessDidClose):
        (WebKit::SuspendedPageProxy::destroyWebPageInWebProcess):
        * UIProcess/SuspendedPageProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendedPageClosed):
        (WebKit::WebPageProxy::suspendedPageProcessClosed): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::suspendedPage const):

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::shouldTerminate):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::addProcessToOriginCacheSet):
        (WebKit::WebProcessPool::removeProcessFromOriginCacheSet):
        (WebKit::WebProcessPool::processForNavigation): If a swap will occur, cache the old process.
        (WebKit::WebProcessPool::processForNavigationInternal): Consider re-using a previously cached process.
        * UIProcess/WebProcessPool.h:

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

2018-04-26  Andy VanWagoner  <thetalecrafter@gmail.com>

        [INTL] Implement Intl.PluralRules
        https://bugs.webkit.org/show_bug.cgi?id=184312

        Reviewed by JF Bastien.

        Added Intl.PluralRules feature flag.

        * Configurations/FeatureDefines.xcconfig:

2018-04-26  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WPE] Initial ASYNC_SCROLLING support
        https://bugs.webkit.org/show_bug.cgi?id=184961

        Reviewed by Carlos Garcia Campos.

        Guard RemoteScrollingCoordinator and RemoteScrollingCoordinatorProxy
        usage in WebChromeClient and WebPageProxy, respectively, with
        PLATFORM(COCOA) in addition to the ASYNC_SCROLLING guards.

        Despite enabling the code at build-time, the feature (as intended) is
        not yet used because of the DrawingArea rejection in the WebPage
        constructor.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::updateTouchEventTracking):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createScrollingCoordinator const):

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Build and link against latest WPEBackend and WPEBackend-fdo
        https://bugs.webkit.org/show_bug.cgi?id=184643

        Reviewed by Žan Doberšek.

        Adapt to single-header WPE includes.

        Null-initialize padding to silence -Wmissing-field-initializers. (Yuck.)

        * Shared/NativeWebTouchEvent.h:
        * Shared/wpe/WebEventFactory.cpp:
        * UIProcess/API/glib/WebKitPrivate.cpp:
        * UIProcess/API/wpe/CompositingManagerProxy.cpp:
        * UIProcess/API/wpe/ScrollGestureController.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend):
        * UIProcess/API/wpe/WebKitWebViewBackend.h:
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp:
        (WebKit::AcceleratedSurfaceWPE::initialize):

2018-04-25  Saam Barati  <sbarati@apple.com>

        dlopen the bundle's executable before calling -[NSBundle load] since that will also do a bunch of other things we don't need
        https://bugs.webkit.org/show_bug.cgi?id=184904

        Reviewed by Geoffrey Garen.

        Loading an NSBundle does a lot of work to find the principal class inside
        the bundle. This means it walks all the objective C class names loaded
        by the bundle. Doing this is *really* expensive.
        
        Some users of the injected bundle define a WKBundleInitialize function.
        In such a case, we don't need the principal class, so we can skip loading
        the NSBundle. Now, before we load the bundle, we dlopen and dlsym looking
        for the WKBundleInitialize function. If we find it, we skip loading
        the bundle. If we don't find the WKBundleInitialize function, we fall
        back to loading the bundle and finding the principal class.
        
        This speeds up initializeWebProcess by ~70ms on my MBP.

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

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

        Use NetworkLoadChecker for all subresource loads except fetch/XHR
        https://bugs.webkit.org/show_bug.cgi?id=184870
        <rdar://problem/39370034>

        Reviewed by Chris Dumez.

        Relax rules to check for non HTTP(s) redirections to throw only when WebProcess says to load it after redirection.
        This allows WebProcess to load redirected non HTTP(s) URLs, such as data URLs.
        We keep these checks when WebProcess asks to continue the load and for all PingLoads.

        Update error messages to be more consistent with WK1.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::continueCheckingRequest):
        (WebKit::NetworkLoadChecker::validateResourceResponse):
        (WebKit::NetworkLoadChecker::continueCheckingRequest):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::validateResponse):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::shouldUseNetworkLoadChecker):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):

2018-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        PSON: Don't create a new process when navigating to a blob URL, data URL, and about:blank
        https://bugs.webkit.org/show_bug.cgi?id=184962

        Reviewed by Youenn Fablet.
        <rdar://problem/39715044>

        Build fix. Revert the change in r231019 to remove the empty URL and about:blank check here.
        These checks are for the source / originating URL, not the target URL.

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

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

        WebLoaderStrategy::networkMetricsFromResourceLoadIdentifier should use DoNotProcessIncomingMessagesWhenWaitingForSyncReply
        https://bugs.webkit.org/show_bug.cgi?id=184978
        <rdar://problem/39667094>

        Reviewed by Simon Fraser.

        Use DoNotProcessIncomingMessagesWhenWaitingForSyncReply to keep a consistent state after the sync IPC call.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::responseFromResourceLoadIdentifier):
        (WebKit::WebLoaderStrategy::networkMetricsFromResourceLoadIdentifier):

2018-04-25  Jiewen Tan  <jiewen_tan@apple.com>

        Remove access to keychain from the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=184428
        <rdar://problem/13150903>

        Reviewed by Brent Fulgham.

        This patch does the followings:
        1. Added necessary support to move HTMLKeygenElement's operation from WebContent Process to UI Process.
        2. Craft new SPI copySignedPublicKeyAndChallengeString to supply HTMLKeygenElement with dummy data such
        that WebKitTestRunner tests will not modify the underlying key store (e.g., the macOS Keychain).

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::signedPublicKeyAndChallengeString):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/API/C/WKPageNavigationClient.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::signedPublicKeyAndChallengeString):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::signedPublicKeyAndChallengeString):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::signedPublicKeyAndChallengeString const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2018-04-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] The search field on www.bing.com is missing label text
        https://bugs.webkit.org/show_bug.cgi?id=184975
        <rdar://problem/39723081>

        Reviewed by Tim Horton.

        Adds support for displaying the "aria-label" attribute as the input view's label text in extra zoom mode. Also
        adds support for grabbing the input label's text for testing.

        Test: fast/forms/extrazoom/form-control-label-text.html

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode const):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView formInputLabel]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView formInputLabel]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2018-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        PSON: Don't create a new process when navigating to a blob URL, data URL, and about:blank
        https://bugs.webkit.org/show_bug.cgi?id=184962

        Reviewed by Youenn Fablet.

        Don't create a new WebContent process when navigating to a blob object URL since doing so
        can result in a race condition in which the blog URL is removed from the blob registry of
        the network process by the time the navigation gets commited. This causes a failure in
        fast/dom/HTMLAnchorElement/anchor-download-unset.html and oher layout tests.

        In the future, the network process should verify that a given WebContent process has access
        to a given blob URL. For now, we rely on WebContent process to tell us whether it can
        navigate to a given blob URL or not.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const): Encode newly added treatAsSameOriginNavigation.
        (WebKit::NavigationActionData::decode): Ditto for decoding.
        * Shared/NavigationActionData.h:
        (WebKit::NavigationActionData::treatAsSameOriginNavigation): Added.
        * UIProcess/API/APINavigation.h:
        (API::Navigation::setTreatAsSameOriginNavigation): Added.
        (API::Navigation::treatAsSameOriginNavigation const): Added.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Use the current process when
        treatAsSameOriginNavigation is set to true; i.e. when navigating to a blob URL the current
        document has access.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-04-25  Megan Gardner  <megan_gardner@apple.com>

        Don't activate Selection Assistant unless it is actually needed.
        https://bugs.webkit.org/show_bug.cgi?id=184944
        <rdar://problem/39469671>

        Reviewed by Tim Horton.
        
        Don't activate the selection unless we need to. Activating on init is overeager and allowing Javascript to 
        activate selections without user input.

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

2018-04-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix entitlements and sandbox configurations in WebKit after r230778
        https://bugs.webkit.org/show_bug.cgi?id=184960
        <rdar://problem/39662827>

        Reviewed by Tim Horton.

        Build fixes for watchOS and tvOS after r230778.

        * Configurations/BaseXPCService.xcconfig:
        * Configurations/NetworkService.xcconfig:
        * Configurations/WebContentService.xcconfig:

2018-04-25  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r231008.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create): Forgot to remove an unneeded constructor argument.

2018-04-25  Brent Fulgham  <bfulgham@apple.com>

        Don't Block First Party Cookies on Redirects
        https://bugs.webkit.org/show_bug.cgi?id=184948
        <rdar://problem/39534099>

        Reviewed by Youenn Fablet.

        Top-level navigations should not be subject to cookie blocking behavior. When performing redirects for main frame
        navigation we are blocking cookies, leading to site breakage.
        
        We need to keep track of which NetworkDataTasks are due to a main frame navigation. When a redirect is performed
        on the main frame, we should treat the new origin as the 'first party for cookies' and avoid blocking cookies for
        that URL.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preconnectTo): Use the correct parameter type. We actually serialize
        NetworkResourceLoadParameters over IPC, so we should get access to all the members of this child class.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create): Pass new 'loadIsForNavigation' flag to create methods. 
        (WebKit::NetworkDataTask::NetworkDataTask): Capture 'loadIsForNavigation' in constructor.
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::isTopLevelNavigation const): Added.
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob): Accept new constructor argument.
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::willPerformHTTPRedirection): Retain requester value from old request during redirect.
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (NetworkResourceLoadParameters::decode): Update to pass new flag.
        (NetworkResourceLoadParameters::encode): Ditto.
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/capture/NetworkDataTaskReplay.cpp:
        (WebKit::NetworkCapture::NetworkDataTaskReplay::NetworkDataTaskReplay): Accept new constructor argument.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): Accept new constructor argument.
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl): Accept new constructor argument.
        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup): Accept new constructor argument.
        * NetworkProcess/soup/NetworkDataTaskSoup.h:

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

        Ensure DNT is set for redirections handled in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=184890

        Reviewed by Ryosuke Niwa.

        Compute whether DNT header should be set on requests based on:
        - request has a DNT header
        - session is ephemeral (aka private browsing mode)
        In both cases, we ensure a DNT header is added for any request triggered by a redirection.

        Covered by http/wpt/fetch/dnt-header-after-redirection.html.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::check):
        (WebKit::NetworkLoadChecker::prepareRedirectedRequest):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::willPerformHTTPRedirection):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Remove deprecated functions and properties from the API
        https://bugs.webkit.org/show_bug.cgi?id=179295

        Reviewed by Žan Doberšek.

        * UIProcess/API/glib/WebKitCookieManager.cpp:
        * UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:
        * UIProcess/API/glib/WebKitNavigationPolicyDecision.cpp:
        (webkitNavigationPolicyDecisionGetProperty):
        (webkit_navigation_policy_decision_class_init):
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextGetProperty):
        (webkitWebContextSetProperty):
        (webkit_web_context_class_init):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        (webkitWebViewHandleAuthenticationChallenge):
        (webkitWebViewWebProcessTerminated):
        * UIProcess/API/wpe/WebKitCookieManager.h:
        * UIProcess/API/wpe/WebKitFormSubmissionRequest.h:
        * UIProcess/API/wpe/WebKitNavigationPolicyDecision.h:
        * UIProcess/API/wpe/WebKitSettings.h:
        * UIProcess/API/wpe/WebKitWebContext.h:

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence -Wreturn-type warning
        https://bugs.webkit.org/show_bug.cgi?id=184560

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

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Miscellaneous build cleanups
        https://bugs.webkit.org/show_bug.cgi?id=184399

        Reviewed by Žan Doberšek.

        * PlatformGTK.cmake:

2018-04-25  Dean Jackson  <dino@apple.com>

        Make a better flag for system preview, and disable it where necessary
        https://bugs.webkit.org/show_bug.cgi?id=184968
        <rdar://problem/39686506>

        Reviewed by Eric Carlson.

        Use USE(SYSTEM_PREVIEW).

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry init]):
        * UIProcess/ios/WKSystemPreviewView.mm:

2018-04-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement MouseEvent.buttons
        https://bugs.webkit.org/show_bug.cgi?id=184913

        Reviewed by Žan Doberšek.

        It's currently returning always 0.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::pressedMouseButtons): Helper function to get the pressed mouse buttons.
        (WebKit::WebEventFactory::createWebMouseEvent): Pass presssed mouse buttons to constructor instead of 0.
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction): Include the mouse buttons state in automation
        synthesized events and update m_currentModifiers with the mouse buttons state.
        (WebKit::keyCodeForVirtualKey): Do not set the state here.
        (WebKit::modifiersForKeyCode): Helper to get the modifiers for a key code.
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction): Initialize the modifiers also when
        virtualKey is std::nullopt;

2018-04-24  Nan Wang  <n_wang@apple.com>

        AX: soft link libAccessibility.dylb
        https://bugs.webkit.org/show_bug.cgi?id=184919

        Reviewed by Dan Bernstein.

        Weakly linked libAccessibility.dylib on macOS.

        * Configurations/WebKit.xcconfig:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _updateAccessibilityEventsEnabled]):

2018-04-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Add WKView and WKAPI
        https://bugs.webkit.org/show_bug.cgi?id=182869

        Reviewed by Alex Christensen.

        Resurrected source files for WebKit for Windows port which was
        removed in r139003.

        * PlatformWin.cmake: Renamed the output name of WebKit to WebKit2
        not to conflict WebKitLegacy. Added source files and include paths.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/win/WKAPICastWin.h: Added.
        * UIProcess/API/C/win/WKView.cpp: Added.
        (WKViewCreate):
        (WKViewGetWindow):
        (WKViewGetPage):
        (WKViewSetParentWindow):
        (WKViewWindowAncestryDidChange):
        (WKViewSetIsInWindow):
        (WKViewSetScrollOffsetOnNextResize):
        * UIProcess/API/C/win/WKView.h: Added.
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp: Added.
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        (API::WebsiteDataStore::defaultCacheStorageDirectory):
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        (API::WebsiteDataStore::defaultLocalStorageDirectory):
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp: Added.
        (WebKit::processName):
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::ProcessLauncher::terminateProcess):
        (WebKit::ProcessLauncher::platformInvalidate):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessFailedToLaunch):
        (WebKit::NetworkProcessProxy::didCreateNetworkConnectionToWebProcess):
        * UIProcess/WebsiteData/win/WebsiteDataStoreWin.cpp: Added.
        (WebKit::WebsiteDataStore::platformInitialize):
        (WebKit::WebsiteDataStore::platformDestroy):
        (WebKit::WebsiteDataStore::platformRemoveRecentSearches):
        * UIProcess/win/PageClientImpl.cpp: Added.
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        (WebKit::PageClientImpl::requestScroll):
        (WebKit::PageClientImpl::viewScrollPosition):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::PageClientImpl::processDidExit):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::setCursorHiddenUntilMouseMoves):
        (WebKit::PageClientImpl::didChangeViewportProperties):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        (WebKit::PageClientImpl::screenToRootView):
        (WebKit::PageClientImpl::rootViewToScreen):
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::createColorPicker):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::preferencesDidChange):
        (WebKit::PageClientImpl::didChangeContentSize):
        (WebKit::PageClientImpl::handleDownloadRequest):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::fullScreenManagerProxyClient):
        (WebKit::PageClientImpl::closeFullScreenManager):
        (WebKit::PageClientImpl::isFullScreen):
        (WebKit::PageClientImpl::enterFullScreen):
        (WebKit::PageClientImpl::exitFullScreen):
        (WebKit::PageClientImpl::beganEnterFullScreen):
        (WebKit::PageClientImpl::beganExitFullScreen):
        (WebKit::PageClientImpl::doneWithTouchEvent):
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomContentProvider):
        (WebKit::PageClientImpl::navigationGestureDidBegin):
        (WebKit::PageClientImpl::navigationGestureWillEnd):
        (WebKit::PageClientImpl::navigationGestureDidEnd):
        (WebKit::PageClientImpl::willRecordNavigationSnapshot):
        (WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):
        (WebKit::PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame):
        (WebKit::PageClientImpl::didSameDocumentNavigationForMainFrame):
        (WebKit::PageClientImpl::didChangeBackgroundColor):
        (WebKit::PageClientImpl::isPlayingAudioWillChange):
        (WebKit::PageClientImpl::isPlayingAudioDidChange):
        (WebKit::PageClientImpl::refView):
        (WebKit::PageClientImpl::derefView):
        * UIProcess/win/PageClientImpl.h: Added.
        * UIProcess/win/TextCheckerWin.cpp: Added.
        (WebKit::checkerState):
        (WebKit::TextChecker::state):
        (WebKit::TextChecker::setTestingMode):
        (WebKit::TextChecker::isTestingMode):
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::spellingUIIsShowing):
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        (WebKit::TextChecker::requestCheckingOfString):
        (WebKit::TextChecker::checkTextOfParagraph):
        * UIProcess/win/WebContextMenuProxyWin.cpp: Added.
        (WebKit::WebContextMenuProxyWin::show):
        (WebKit::WebContextMenuProxyWin::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyWin::WebContextMenuProxyWin):
        (WebKit::WebContextMenuProxyWin::~WebContextMenuProxyWin):
        * UIProcess/win/WebContextMenuProxyWin.h: Added.
        (WebKit::WebContextMenuProxyWin::create):
        * UIProcess/win/WebInspectorProxyWin.cpp: Added.
        (WebKit::WebInspectorProxy::platformCreateFrontendPage):
        (WebKit::WebInspectorProxy::platformCreateFrontendWindow):
        (WebKit::WebInspectorProxy::platformCloseFrontendPageAndWindow):
        (WebKit::WebInspectorProxy::platformDidCloseForCrash):
        (WebKit::WebInspectorProxy::platformInvalidate):
        (WebKit::WebInspectorProxy::platformHide):
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::platformBringInspectedPageToFront):
        (WebKit::WebInspectorProxy::platformIsFront):
        (WebKit::WebInspectorProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowWidth):
        (WebKit::WebInspectorProxy::platformStartWindowDrag):
        (WebKit::WebInspectorProxy::platformSave):
        (WebKit::WebInspectorProxy::platformAppend):
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged):
        * UIProcess/win/WebPageProxyWin.cpp: Added.
        (WebKit::WebPageProxy::platformInitialize):
        (WebKit::WebPageProxy::standardUserAgent):
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/win/WebPreferencesWin.cpp: Added.
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey):
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit::WebPreferences::platformGetStringUserValueForKey):
        (WebKit::WebPreferences::platformGetBoolUserValueForKey):
        (WebKit::WebPreferences::platformGetUInt32UserValueForKey):
        (WebKit::WebPreferences::platformGetDoubleUserValueForKey):
        * UIProcess/win/WebProcessPoolWin.cpp: Added.
        (WebKit::WebProcessPool::platformInitialize):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInvalidateContext):
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory):
        (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):
        * UIProcess/win/WebView.cpp: Added.
        (WebKit::WebView::WebViewWndProc):
        (WebKit::WebView::wndProc):
        (WebKit::WebView::registerWebViewWindowClass):
        (WebKit::WebView::WebView):
        (WebKit::WebView::~WebView):
        (WebKit::WebView::initialize):
        (WebKit::WebView::setParentWindow):
        (WebKit::findTopLevelParentWindow):
        (WebKit::WebView::windowAncestryDidChange):
        (WebKit::WebView::onMouseEvent):
        (WebKit::WebView::onWheelEvent):
        (WebKit::WebView::onHorizontalScroll):
        (WebKit::WebView::onVerticalScroll):
        (WebKit::WebView::onKeyEvent):
        (WebKit::drawPageBackground):
        (WebKit::WebView::paint):
        (WebKit::WebView::onPaintEvent):
        (WebKit::WebView::onPrintClientEvent):
        (WebKit::WebView::onSizeEvent):
        (WebKit::WebView::onWindowPositionChangedEvent):
        (WebKit::WebView::onSetFocusEvent):
        (WebKit::WebView::onKillFocusEvent):
        (WebKit::WebView::onTimerEvent):
        (WebKit::WebView::onShowWindowEvent):
        (WebKit::WebView::onSetCursor):
        (WebKit::WebView::updateActiveState):
        (WebKit::WebView::updateActiveStateSoon):
        (WebKit::initCommonControls):
        (WebKit::WebView::initializeToolTipWindow):
        (WebKit::WebView::startTrackingMouseLeave):
        (WebKit::WebView::stopTrackingMouseLeave):
        (WebKit::WebView::shouldInitializeTrackPointHack):
        (WebKit::WebView::close):
        (WebKit::WebView::cursorToShow const):
        (WebKit::WebView::updateNativeCursor):
        (WebKit::WebView::setOverrideCursor):
        (WebKit::WebView::setIsInWindow):
        (WebKit::WebView::setIsVisible):
        (WebKit::WebView::isWindowActive):
        (WebKit::WebView::isFocused):
        (WebKit::WebView::isVisible):
        (WebKit::WebView::isInWindow):
        (WebKit::WebView::setScrollOffsetOnNextResize):
        (WebKit::WebView::setViewNeedsDisplay):
        (WebKit::WebView::createColorChooserProxy):
        (WebKit::WebView::didCommitLoadForMainFrame):
        (WebKit::WebView::customRepresentationZoomFactor):
        (WebKit::WebView::setCustomRepresentationZoomFactor):
        (WebKit::WebView::findStringInCustomRepresentation):
        (WebKit::WebView::countStringMatchesInCustomRepresentation):
        (WebKit::WebView::nativeWindow):
        (WebKit::WebView::windowReceivedMessage):
        * UIProcess/win/WebView.h: Added.
        (WebKit::WebView::create):
        (WebKit::WebView::window const):
        (WebKit::WebView::page const):
        (WebKit::WebView::drawingArea):
        (WebKit::WebView::setWasActivatedByMouseEvent):

2018-04-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Implement Same-Site cookies
        https://bugs.webkit.org/show_bug.cgi?id=159464
        <rdar://problem/27196358>

        Unreviewed build fix.

        WinCairo WebKit2 can't compile since r230921.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::appendCookieHeader):
        CookieJarCurlDatabase::cookieRequestHeaderFieldValue needs
        SameSiteInfo.

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

        Add a new "color-filter" CSS property as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=184940

        Reviewed by Jon Lee.
        
        Add the color-filter property as an experimental feature.

        * Shared/WebPreferences.yaml:

2018-04-24  Saam Barati  <sbarati@apple.com>

        Keep around a pre-warmed process when doing process swap on navigation
        https://bugs.webkit.org/show_bug.cgi?id=184765
        <rdar://problem/39685099>

        Reviewed by Ryosuke Niwa and Brady Eidson.

        This patch makes it so that WebProcessPool prewarms a process when process
        swap on navigation is turned on. When we do a process swap on navigation,
        we first try to grab a prewarmed process before creating a new one.
        
        We try to be smart about when to create these processes. The initial heuristic
        that this patch chooses is when we reach the DidFirstVisuallyNonEmptyLayout
        layout milestone. We're going to try to improve on this heuristic in:
        https://bugs.webkit.org/show_bug.cgi?id=184899
        
        This is a 40% progression on PLT with process swap on navigation turned on.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _prewarmedWebProcessCount]):
        (-[WKProcessPool _webProcessCountIgnoringPrewarmed]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::notifyProcessPoolToPrewarm):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::warmInitialProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        (WebKit::WebProcessPool::processForNavigation):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::m_isInPrewarmedPool):
        (WebKit::m_userMediaCaptureManagerProxy): Deleted.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::isInPrewarmedPool const):
        (WebKit::WebProcessProxy::setIsInPrewarmedPool):

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

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

        This fix was not appropriate (Requested by n_wang on #webkit).

        Reverted changeset:

        "AX: soft link libAccessibility.dylb"
        https://bugs.webkit.org/show_bug.cgi?id=184919
        https://trac.webkit.org/changeset/230971

2018-04-24  Nan Wang  <n_wang@apple.com>

        AX: soft link libAccessibility.dylb
        https://bugs.webkit.org/show_bug.cgi?id=184919

        Reviewed by Chris Fleizach.

        Make sure we soft link the library so that it won't crash
        if it's missing in the system.

        * Configurations/WebKit.xcconfig:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _updateAccessibilityEventsEnabled]):

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

        From-Origin: Support for 'same' and 'same-site' response header, nested frame origin check
        https://bugs.webkit.org/show_bug.cgi?id=184560
        <rdar://problem/38901344>

        Reviewed by Youenn Fablet and Daniel Bates.

        This patch implements significant parts of https://github.com/whatwg/fetch/issues/687.
        We consume the From-Origin response header and only load the resource if:
        - The header is non-existent, empty, or invalid.
        - The header specifies 'same' and the resource's origin matches the originating
          document's origin and the origins up the frame tree.
        - The header specifies 'same-site' and the resource's eTLD+1 matches the originating
          document's eTLD+1 and the eTLD+1 of the documents up the frame tree.

        This feature is experimental and off by default.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
            Support for the two new load parameters:
            - shouldEnableFromOriginResponseHeader
            - frameAncestorOrigins
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::areFrameAncestorsSameSite):
        (WebKit::areFrameAncestorsSameOrigin):
        (WebKit::shouldCancelCrossOriginLoad):
            The three functions above implement the new blocking logic.
        (WebKit::fromOriginResourceError):
            Convenience function that returns an error with the From-Origin error message.
        (WebKit::NetworkResourceLoader::didReceiveResponse):
            Now checks for a From-Origin response header.
        (WebKit::NetworkResourceLoader::didFailLoading):
            Now checks for a From-Origin response header.
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
            Now checks for a From-Origin response header.
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
            Now checks for a From-Origin response header.
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
            Now checks for a From-Origin response header.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Vector<RefPtr<SecurityOrigin>>>::encode):
        (IPC::ArgumentCoder<Vector<RefPtr<SecurityOrigin>>>::decode):
            Now encodes and decodes vectors of RefPtr<WebCore::SecurityOrigin>.
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebPreferences.yaml:
            Added From-Origin support as an experimental feature.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetFromOriginResponseHeaderEnabled):
        (WKPreferencesGetFromOriginResponseHeaderEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
            Sets the two new load parameters:
            - shouldEnableFromOriginResponseHeader
            - frameAncestorOrigins

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

        Don't add system framework paths to FRAMEWORK_SEARCH_PATHS
        https://bugs.webkit.org/show_bug.cgi?id=184786

        Reviewed by Tim Horton.

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

2018-04-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230938.

        Introduced two ProcessSwap API test failures.

        Reverted changeset:

        "Keep around a pre-warmed process when doing process swap on
        navigation"
        https://bugs.webkit.org/show_bug.cgi?id=184765
        https://trac.webkit.org/changeset/230938

2018-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove dead fixed layer code
        https://bugs.webkit.org/show_bug.cgi?id=184912

        Reviewed by Michael Catanzaro.

        Drop the unused fixed layer handling  code in CoordinatedGraphicsScene.
        The m_fixedLayers container can be removed, along with the
        adjustPositionForFixedLayers() method that operated on that container.

        This was the only method that operated with the m_scrollPosition member
        variable and the contentsPosition argument that's passed to the
        CoordinatedGraphicsScene::paintToCurrentGLContext() method. Both of
        these are removed, along with the scrollPosition attribute on the
        CoordinatedGraphicsState struct.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebKit::CoordinatedGraphicsScene::setLayerState):
        (WebKit::CoordinatedGraphicsScene::deleteLayer):
        (WebKit::CoordinatedGraphicsScene::commitSceneState):
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):
        (WebKit::CoordinatedGraphicsScene::adjustPositionForFixedLayers): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::renderLayerTree):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):

2018-04-24  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r230950): Faulty commit sequencing in CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=184917

        Reviewed by Michael Catanzaro.

        After r230950, current animation state for a given layer is also taken
        into account when determining whether or not the layer requires a
        backing store. For that to work properly, all the animation state has
        to be updated before the backing store work. This patch changes the
        order of helper method invocations in
        CoordinatedGraphicsScene::setLayerState() to address that.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::setLayerState):

2018-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove unused fixed layout functionality
        https://bugs.webkit.org/show_bug.cgi?id=184908

        Reviewed by Carlos Garcia Campos.

        Ports using the CoordinatedGraphics subsystem don't expose fixed layout
        support. As such, we're able to remove a lot of unused code and
        unnecessary USE(COORDINATED_GRAPHICS) special cases in generic sections
        in both WebCore and WebKit.

        Remove USE(COORDINATED_GRAPHICS) special-casing from the
        WebPage::setUseFixedLayout() method. This is not possible to enable for
        the GTK+ and WPE ports that use the CoordinatedGraphics subsytem via
        API. Removing all this unlocks removing considerable amounts of dead
        code and complexities in CoordinatedGraphics.

        WebChromeClient::delegatedScrollRequested() method is removed, along
        with the WebPage::pageDidRequestScroll() method that was only called
        from there.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::delegatedScrollRequested): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseFixedLayout):
        (WebKit::WebPage::pageDidRequestScroll): Deleted.
        * WebProcess/WebPage/WebPage.h:

2018-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Avoid painting backing stores for zero-opacity layers
        https://bugs.webkit.org/show_bug.cgi?id=184143

        Reviewed by Carlos Garcia Campos.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::layerShouldHaveBackingStore):
        Mirror CoordinatedGraphicsLayer's backing store requirements.

2018-04-23  Daniel Bates  <dabates@apple.com>

        Implement Same-Site cookies
        https://bugs.webkit.org/show_bug.cgi?id=159464
        <rdar://problem/27196358>

        Reviewed by Brent Fulgham.

        Pass the Same-Site info through the WebKit abstractions.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::logCookieInformation const):
        (WebKit::logBlockedCookieInformation):
        (logCookieInformationInternal):
        (NetworkResourceLoader::logCookieInformation):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode const):
        (WebKit::NetworkCache::SubresourceInfo::decode):
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::isSameSite const):
        (WebKit::NetworkCache::SubresourceInfo::isTopSite const): Returns false; subresources do not represent
        a top-level navigation.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::isThirdPartyRequest):
        (WebKit::updateTaskWithFirstPartyForSameSiteCookies):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::setCookiesFromDOM):
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebKit::WebPlatformStrategies::getRawCookies):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-04-23  Youenn Fablet  <youenn@apple.com>

        Make WebLoaderStrategy send to NetworkResourceLoader necessary parameters to handle full loads in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=184763

        Reviewed by Chris Dumez.

        Set all required NetworkResourceLoadParameters for asynchronous loads.
        This includes preflight policy, CSP response headers, SecurityOrigin and content blockers identifier.

        Update NetworkLoadChecker to handle preflight policy.
        This is not needed right now since sync XHR and ping loads are using the default ConsiderPreflight policy.
        But this will be needed for XHR/fetch/EventSource loads. 

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::validateResponse):
        (WebKit::NetworkLoadChecker::checkCORSRequest):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::create):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):

2018-04-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] REGRESSION(230860) Unable to change time input values using UI
        https://bugs.webkit.org/show_bug.cgi?id=184901
        <rdar://problem/39664797>

        Reviewed by Tim Horton.

        Fixes the bug by falling back to setting the value of the focused input element in the case where the selection
        is not editable. Also adds plumbing to make time pickers testable in extra zoom mode.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setTimePickerValueToHour:minute:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setTimePickerValueToHour:minute:]):

        Add plumbing to make it possible for WebKitTestRunner to simulate picking a time from the given hours and
        minutes. This is currently only implemented for extra zoom mode, but may be implemented for UIKit's time picker
        as well in the future by adjusting -[WKContentView setTimePickerValueToHour:minute:].

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

2018-04-23  Saam Barati  <sbarati@apple.com>

        Keep around a pre-warmed process when doing process swap on navigation
        https://bugs.webkit.org/show_bug.cgi?id=184765

        Reviewed by Ryosuke Niwa.

        This patch makes it so that WebProcessPool prewarms a process when process
        swap on navigation is turned on. When we do a process swap on navigation,
        we first try to grab a prewarmed process before creating a new one.
        
        We try to be smart about when to create these processes. The initial heuristic
        that this patch chooses is when we reach the DidFirstVisuallyNonEmptyLayout
        layout milestone. We're going to try to improve on this heuristic in:
        https://bugs.webkit.org/show_bug.cgi?id=184899
        
        This is a 40% progression on PLT with process swap on navigation turned on.

        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::notifyProcessPoolToPrewarm):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::warmInitialProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        (WebKit::WebProcessPool::processForNavigation):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::m_isInPrewarmedPool):
        (WebKit::m_userMediaCaptureManagerProxy): Deleted.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::isInPrewarmedPool const):
        (WebKit::WebProcessProxy::setIsInPrewarmedPool):

2018-04-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Remove WlUniquePtr<wl_display> footgun
        https://bugs.webkit.org/show_bug.cgi?id=184405

        Reviewed by Carlos Garcia Campos.

        Switch to std::unique_ptr.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::WaylandCompositor):
        * UIProcess/gtk/WaylandCompositor.h:
        (WebKit::WaylandCompositor::DisplayDeleter::operator()):

2018-04-23  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Internal build following r230921
        (https://bugs.webkit.org/show_bug.cgi?id=159464)

        Forward declare some SPI. Add availability guard.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:

2018-04-23  Zalan Bujtas  <zalan@apple.com>

        [LayoutFormattingContext] Initial commit.
        https://bugs.webkit.org/show_bug.cgi?id=184896

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2018-04-23  Daniel Bates  <dabates@apple.com>

        Implement Same-Site cookies
        https://bugs.webkit.org/show_bug.cgi?id=159464
        <rdar://problem/27196358>

        Reviewed by Brent Fulgham.

        Pass the Same-Site info through the WebKit abstractions.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::logCookieInformation const):
        (WebKit::logBlockedCookieInformation):
        (logCookieInformationInternal):
        (NetworkResourceLoader::logCookieInformation):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode const):
        (WebKit::NetworkCache::SubresourceInfo::decode):
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::isSameSite const):
        (WebKit::NetworkCache::SubresourceInfo::isTopSite const): Returns false; subresources do not represent
        a top-level navigation.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::isThirdPartyRequest):
        (WebKit::updateTaskWithFirstPartyForSameSiteCookies):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::setCookiesFromDOM):
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebKit::WebPlatformStrategies::getRawCookies):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-04-23  Chris Dumez  <cdumez@apple.com>

        WebProcessProxy frequently re-takes a process assertion for the network process even though is already has one
        https://bugs.webkit.org/show_bug.cgi?id=184889
        <rdar://problem/38151530>

        Reviewed by Brady Eidson.

        In ProcessThrottler::updateAssertionNow(), if the new process assertion state is the same
        as the existing one, then return early. Otherwise, we would end up calling WebProcessProxy::didSetAssertionState()
        for the same assertion state, which would cause duplicate logging but also some unnecessary work.

        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertionNow):

2018-04-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove unused trajectory cruft in CoordinatedLayerTreeHost, CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=184881

        Reviewed by Michael Catanzaro.

        The CompositingCoordinator::setVisibleContentsRect() method is always
        called with a (0,0) FloatPoint value as the trajectory vector parameter,
        which is already the default value in TiledBackingStore where this ends
        up. Removing this call chain also enables removing some unnecessary and
        odd code in the CoordinatedGraphicsLayer class.

        This doesn't yet touch the trajectory logic in the TiledBackingStore
        class since it's not yet a given this won't be used in the future. But
        if that will be necessary, hope is to not use it this way.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::setVisibleContentsRect):
        (WebKit::CompositingCoordinator::mainContentsLayer): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::didChangeViewport):

2018-04-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WK2] REGRESSION(r230834) 'getpid': identifier not found
        https://bugs.webkit.org/show_bug.cgi?id=184877

        Reviewed by Yusuke Suzuki.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItem): Use WTF::getCurrentProcessID() instead of getpid().
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goToBackForwardItem): Ditto.

2018-04-23  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Drop RefCounted inheritance off of TextureMapperBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=184810

        Reviewed by Carlos Garcia Campos.

        CoordinatedBackingStore should inherit directly from RefCounted<> now
        that TextureMapperBackingStore doesn't anymore.

        * Shared/CoordinatedGraphics/CoordinatedBackingStore.h:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::createBackingStoreIfNeeded):

2018-04-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Unused contentsSize, coveredRect attributes in CoordinatedGraphicsState
        https://bugs.webkit.org/show_bug.cgi?id=184811

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges): Stop setting
        the removed contentsSize and coveredRect attributes. These were only
        ever set to the appropriate values, but were then never used anywhere.

2018-04-22  Matt Baker  <mattbaker@apple.com>

        Web Inspector: WebInspectorProxy releases WKWebInspectorProxyObjCAdapter without removing corresponding observer
        https://bugs.webkit.org/show_bug.cgi?id=184865
        <rdar://problem/37764960>

        Reviewed by Brian Burg.

        Replace the early return removed in https://bugs.webkit.org/show_bug.cgi?id=177661,
        so that WKWebInspectorProxyObjCAdapter and the view controller can be reused
        when reopening the Inspector while the WebView is still alive.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateFrontendPage):

2018-04-22  Paul Knight  <pknight@apple.com>

        Add -[WKInputDelegate _webView:decidePolicyForFocusedElement:] so clients can request default focusing behavior
        https://bugs.webkit.org/show_bug.cgi?id=184844

        Reviewed by Dan Bernstein.

        If a client doesn't implement -[_WKInputDelegate _webView:focusShouldStartInputSession:] the default
        focus behavior only brings up the keyboard if it's already onscreen, the interaction is user driven,
        and other factors that even depend on what feature flags are enabled.

        If a client implements _webView:focusShouldStartInputSession:, they don't have a good way to specifiy
        they'd like to fall back to the default behavior. This makes it difficult for a client to use the
        default in most cases, but sometimes allow programmatic focus from the page, for example.

        Add a new delegate method -_webView:decidePolicyForFocusedElement: that returns a new enum type
        _WKFocusStartsInputSessionPolicy. Clients can return _WKFocusStartsInputSessionPolicyAuto to request
        the default behavior, or _WKFocusStartsInputSessionPolicyAllow / Disallow to directly control whether
        the keyboard appears to assist the focused node.

        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

2018-04-21  Jeremy Jones  <jeremyj@apple.com>

        Disable backward and forward navigation swipes while in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=184656
        rdar://problem/36057535

        Reviewed by Tim Horton.

        Disable navigation swipes while in fullscreen.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::canSwipeInDirection const):

2018-04-21  Youenn Fablet  <youenn@apple.com>

        Activate NetworkLoadChecker for media loads
        https://bugs.webkit.org/show_bug.cgi?id=184841

        Reviewed by Eric Carlson.

        Instantiate a NetworkLoadChecker for NetworkResourceLoader for audio/video loads.

        Move CORS checks for response after handling of 304 checks.
        For 304 checks, we need to do the CORS checks on the validated cached response, not the 304 received response.

        Updated ResourceError argument coder to explicitly pass the error type
        as some errors created by NetworkLoadChecker would otherwise be received as General errors by WebProcess.
        Updated platform data encoding of ResourceError accordingly.

        All changes are covered by regular media loading layout tests.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::shouldUseNetworkLoadChecker):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceError>::encode):
        (IPC::ArgumentCoder<ResourceError>::decode):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceError>::decodePlatformData):
        We need to set the type after decoding the NSError as ResourceError tries to guess the type from NSError data.
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceError>::decodePlatformData):

2018-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Do TLS error checking on GTlsConnection::accept-certificate
        https://bugs.webkit.org/show_bug.cgi?id=184480

        Reviewed by Michael Catanzaro.

        Connect to GTlsConnection::accept-certificate signal instead of SoupMessage::notify::tls-errors to perform the
        TLS errors check.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest): Do not connect to SoupMessage::notify::tls-errors.
        (WebKit::NetworkDataTaskSoup::tlsConnectionAcceptCertificateCallback): Call tlsConnectionAcceptCertificate() is
        the task is still ongoing.
        (WebKit::NetworkDataTaskSoup::tlsConnectionAcceptCertificate): Check TLS errors here.
        (WebKit::NetworkDataTaskSoup::networkEventCallback): Pass the stream to networkEvent.
        (WebKit::NetworkDataTaskSoup::networkEvent): Connect to GTlsConnection::accept-certificate.
        * NetworkProcess/soup/NetworkDataTaskSoup.h:

2018-04-20  Timothy Hatcher  <timothy@apple.com>

        NULL dereference crash sometimes under [super initWithCoder:] in WebView

        https://bugs.webkit.org/show_bug.cgi?id=184851
        rdar://problem/39611236

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView effectiveAppearanceDidChange]):
        Added a null check and call the code later in initialization.

2018-04-20  Tim Horton  <timothy_horton@apple.com>

        Adjust geolocation feature flag
        https://bugs.webkit.org/show_bug.cgi?id=184856

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

2018-04-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix GTK build after r230867.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        (webkit_dom_dom_window_get_self):
        (webkit_dom_dom_window_get_window):
        (webkit_dom_dom_window_get_frames):
        (webkit_dom_dom_window_get_opener):
        (webkit_dom_dom_window_get_parent):
        (webkit_dom_dom_window_get_top):

2018-04-20  Commit Queue  <commit-queue@webkit.org>

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

        Broke the iOS build (Requested by cdumez on #webkit).

        Reverted changeset:

        "Disable backward and forward navigation swipes while in
        fullscreen."
        https://bugs.webkit.org/show_bug.cgi?id=184656
        https://trac.webkit.org/changeset/230873

2018-04-20  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229828): web view doesn’t update or respond to resizing until client calls policy decision handler
        https://bugs.webkit.org/show_bug.cgi?id=184210
        <rdar://problem/39072354>

        Reviewed by Wenson Hsieh.

        r229828 tried to have some API tests happy on iOS by freezing the layer tree
        during the navigation policy decision. However, this is observable by the client
        application and a regression from when the policy delegate was synchronous.

        To address the issue, this patch reverts r229828 and instead updates the iOS
        API tests to wait for the next presentation update after navigating
        before interacting with the view.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::cancelPolicyCheck):
        (WebKit::WebFrameLoaderClient::provisionalLoadStarted):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:

2018-04-20  Brent Fulgham  <bfulgham@apple.com>

        Limit cookie header access to Network process
        https://bugs.webkit.org/show_bug.cgi?id=184764
        <rdar://problem/36785285>

        Reviewed by Youenn Fablet.

        Revise the handling of cookie request headers so that we don't interact with them in the
        WebContent process. They are only needed for interaction with the server and the network
        process, so we should limit their scope to just the Network process.

        Instead, we should handle a token that represents the cookie headers in the WebContent
        process, which can be converted to the relevant cookie data in the network process when
        needed.

        * NetworkProcess/NetworkSocketStream.cpp:
        (WebKit::NetworkSocketStream::sendHandshake):
        * NetworkProcess/NetworkSocketStream.h:
        * NetworkProcess/NetworkSocketStream.messages.in:
        * WebProcess/Network/WebSocketStream.cpp:
        (WebKit::WebSocketStream::networkProcessCrashed):
        (WebKit::WebSocketStream::platformSendHandshake):
        (WebKit::WebSocketStream::didSendHandshake):
        * WebProcess/Network/WebSocketStream.h:
        * WebProcess/Network/WebSocketStream.messages.in:

2018-04-20  Jeremy Jones  <jeremyj@apple.com>

        Disable backward and forward navigation swipes while in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=184656
        rdar://problem/36057535

        Reviewed by Tim Horton.

        Disable navigation swipes while in fullscreen.

        * UIProcess/Cocoa/ViewGestureController.cpp:
        (WebKit::ViewGestureController::canSwipeInDirection const):

2018-04-20  Jeremy Jones  <jeremyj@apple.com>

        Element fullscreen, expose WKWebView _fullScreenPlaceholderView as iOS SPI
        https://bugs.webkit.org/show_bug.cgi?id=184826
        rdar://problem/39600825

        Reviewed by Tim Horton.

        Add _fullScreenPlaceholderView for iOS similar to the one for Mac.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _fullScreenPlaceholderView]):
        (-[WKWebView closeFullScreenWindowController]):
        (-[WKWebView fullScreenPlaceholderView]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.h:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController webViewPlaceholder]):

2018-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Injected bundle form client should be notified when editing text fields
        https://bugs.webkit.org/show_bug.cgi?id=184822
        <rdar://problem/38807319>

        Reviewed by Tim Horton.

        Fixes the bug by making a couple of tweaks: (1) don't use a separate codepath for inserting text in text inputs,
        and (2) force a user typing gesture when inserting text using this codepath (i.e. WKTextInputListViewController).
        Also adds plumbing to enable testing text entry with WKTextInputListViewController in extra zoom mode.

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

        Introduce testing SPI to simulate text entry. Additionally, add a missing availability annotation around testing
        SPI added in 2017 to help test drag and drop for iOS 11.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _simulateTextEntered:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTextAsync):

2018-04-20  Jeremy Jones  <jeremyj@apple.com>

        EnterFullscreen must update the minimum and maximum layout sizes.
        https://bugs.webkit.org/show_bug.cgi?id=184828
        rdar://problem/38435829

        Reviewed by Jon Lee.

        Without this, the WKWebView won't layout to the full size in fullscreen mode.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController enterFullScreen]):

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

        Don't put build products into WK_ALTERNATE_WEBKIT_SDK_PATH for engineering builds
        https://bugs.webkit.org/show_bug.cgi?id=184762

        Reviewed by Dan Bernstein.

        * Configurations/BaseTarget.xcconfig:

2018-04-20  Youenn Fablet  <youenn@apple.com>

        Refactor NetworkResourceLoader to check for m_networkLoadChecker presence before using it
        https://bugs.webkit.org/show_bug.cgi?id=184755

        Reviewed by Chris Dumez.

        Make NetworkResourceLoader always use m_networkLoadChecker if there is one.
        This is only used now for synchronous loads but will be used in the future for asynchronous loads as well.

        Since we call didFail asynchronously to make sync/async handling more consistent,
        We need to keep track of whether we will do clean-up twice.
        A boolean is added for that purpose in NetworkResourceLoader.

        There is a small change of behavior in the way we return an error.
        Instead of returning a platformBadResponseError, we are now returning the error as computed by NetworkLoadChecker.
        This allows getting some more error logging in the JS console.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:

2018-04-20  Timothy Hatcher  <timothy@apple.com>

        Include missing files in WKContentViewInteraction.{mm,h}

        https://bugs.webkit.org/show_bug.cgi?id=184832
        rdar://problem/35377120

        Reviewed by Wenson Hsieh.

        Some WebDriver files were missing and should be included.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):

2018-04-20  Youenn Fablet  <youenn@apple.com>

        WebPage sometimes incorrectly rules out PDF as a mime type that can be showed
        https://bugs.webkit.org/show_bug.cgi?id=184369

        Reviewed by Chris Dumez.

        Use API to check for plugin availability for response at navigation time.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canShowResponse const):
        (WebKit::WebPage::canShowMIMEType const):
        * WebProcess/WebPage/WebPage.h:

2018-04-20  Daniel Bates  <dabates@apple.com>

        Remove Strong Password decoration when text field type changes
        https://bugs.webkit.org/show_bug.cgi?id=184795
        <rdar://problem/38325108>

        Reviewed by Antti Koivisto.

        Add injected bundle API and WebKit UI delegate SPI to notify the embedding client when the
        Strong Password appearance of an HTML input element is resigned.

        We add C SPI for Safari on Mac.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didResignInputElementStrongPasswordAppearance):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didResignInputElementStrongPasswordAppearance):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didResignInputElementStrongPasswordAppearance):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::didResignInputElementStrongPasswordAppearance):
        * WebProcess/InjectedBundle/API/c/WKBundlePageUIClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::didResignInputElementStrongPasswordAppearance):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::inputElementDidResignStrongPasswordAppearance):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2018-04-20  Megan Gardner  <megan_gardner@apple.com>

        Fixes for failing tests associated with switching Text Selection Assistants
        https://bugs.webkit.org/show_bug.cgi?id=184806
        <rdar://problem/39367905>

        Reviewed by Beth Dakin and Wenson Hsieh.
        
        The major fix is the disabling the double tap noneditable text selection gesture.
        The other fixes are small tweaks that shouldn't even be run into with the fix to 
        the double tap gesture, but they are incorrect, so I am taking the opportunity to 
        fix them now, in case we run into them again.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        We should not be allowing a double tap text gestures in non-editable web content.
        We didn't have one with the old assistant. Fortunately, this is easily disabled.
        (-[WKContentView canPerformActionForWebView:withSender:]):
        We should not allow the lookup action if we do not actually have a selection.
        It is meaningless without one.
        (-[WKContentView selectedTextRange]):
        We should not return a selection to UIKit if all we have is caret selection
        in non-editable content. We have this for selections on Mac, but UIKit does
        not know how to properly handle this, and will have incorrect behavior if we 
        return a valid selection.

2018-04-20  Timothy Hatcher  <timothy@apple.com>

        WebEvent fails to convert synthetic WebMouseEvent for automation

        https://bugs.webkit.org/show_bug.cgi?id=184824
        rdar://problem/35377120

        Reviewed by Brian Burg.

        Add WebEvent conversions that existed in PlatformEventFactoryIOS for legacy WebKit,
        but never got added in WebIOSEventFactory and NativeWebMouseEvent for modern WebKit.
        This affected WebDriver, and some events not being deliverd to the page.

        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::nativeEvent const):
        * Shared/ios/NativeWebMouseEventIOS.mm: Added.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/ios/WebIOSEventFactory.h:
        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebMouseEvent):
        * WebKit.xcodeproj/project.pbxproj:

2018-04-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wformat warning

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

2018-04-20  Youenn Fablet  <youenn@apple.com>

        Make PluginData cache its web visible plugins
        https://bugs.webkit.org/show_bug.cgi?id=184421

        Reviewed by Chris Dumez.

        Rename methods.
        Pass an URL instead of relying on Page URL as the page URL
        might not always be the URL we want to check against plugins.
        In particular when navigation is on-going, we want to check the
        plugins against the being navigated URL.

        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::pluginInfo):
        (WebKit::WebPluginInfoProvider::webVisiblePluginInfo):
        * WebProcess/Plugins/WebPluginInfoProvider.h:

2018-04-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r230830.

        Add SimulatedInputDispatcher.cpp to the build.

        * CMakeLists.txt:

2018-04-19  Brady Eidson  <beidson@apple.com>

        Make back forward cache work with process swapping.
        <rdar://problem/38676604> and https://bugs.webkit.org/show_bug.cgi?id=184793

        Reviewed by Chris Dumez.

        We previously saved old processes in "SuspendedPageProxy" objects.
        Now we reuse them when going back or forward.

        * Platform/Logging.h:

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::setSuspendedPage):
        (WebKit::WebBackForwardListItem::loggingString):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::suspendedPage const):

        Teach Navigation objects their source WebBackForwardListItems:
        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::Navigation):
        (API::Navigation::loggingString const):
        * UIProcess/API/APINavigation.h:
        (API::Navigation::create):
        (API::Navigation::targetItem const):
        (API::Navigation::fromItem const):
        (API::Navigation::backForwardListItem): Deleted.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::messageNamesToIgnoreWhileSuspended):
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::webProcessDidClose):
        (WebKit::SuspendedPageProxy::didReceiveMessage):
        (WebKit::SuspendedPageProxy::loggingString const):
        * UIProcess/SuspendedPageProxy.h:
        (WebKit::SuspendedPageProxy::origin const):

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::WebBackForwardList):
        (WebKit::WebBackForwardList::~WebBackForwardList):
        (WebKit::WebBackForwardList::pageClosed):
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        (WebKit::WebBackForwardList::removeAllItems):
        (WebKit::WebBackForwardList::clear):
        (WebKit::WebBackForwardList::restoreFromState):
        (WebKit::WebBackForwardList::filteredItemStates const):
        (WebKit::WebBackForwardList::itemStates const):
        (WebKit::WebBackForwardList::loggingString):
        * UIProcess/WebBackForwardList.h:

        * UIProcess/WebNavigationState.cpp:
        (WebKit::WebNavigationState::createLoadRequestNavigation):
        (WebKit::WebNavigationState::createBackForwardNavigation):
        * UIProcess/WebNavigationState.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::maybeCreateSuspendedPage):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::connectionWillOpen):
        (WebKit::WebPageProxy::attachToProcessForNavigation): Deleted.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::webPageEnteringWebProcess):
        (WebKit::WebProcessLifetimeTracker::connectionWillOpen): Deleted.
        * UIProcess/WebProcessLifetimeTracker.h:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::registerSuspendedPageProxy):
        (WebKit::WebProcessPool::unregisterSuspendedPageProxy):
        * UIProcess/WebProcessPool.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::suspendWebPageProxy):
        (WebKit::WebProcessProxy::updateBackForwardItem):
        (WebKit::WebProcessProxy::frameCreated):
        * UIProcess/WebProcessProxy.h:

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::attachDrawingArea):

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItemFromUIProcess):
        (WebKit::WebBackForwardListProxy::addItem):
        * WebProcess/WebPage/WebBackForwardListProxy.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::goToBackForwardItem):
        (WebKit::WebPage::restoreSessionInternal):
        (WebKit::WebPage::restoreSession):
        (WebKit::WebPage::updateBackForwardListForReattach):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::attachDrawingArea): Force a reattachment of the drawing
          area from a resumed WebProcess to the UIProcess (to make the page cache work)

2018-04-19  Brian Burg  <bburg@apple.com>

        Web Automation: add support for mouse/keyboard interaction sequences
        https://bugs.webkit.org/show_bug.cgi?id=184603
        <rdar://problem/39421839>

        Reviewed by Timothy Hatcher.

        Add new protocol methods and WebKit support for implementing the W3C Actions API.
        This is a generic command for sending low-level mouse, key, and touch events to
        test page behavior when performing drag-and-drop, gestures, or specific keydown/keyups.

        To implement this functionality, this patch adds SimulatedInputDispatcher, a class
        for dispatching input events asynchronously. Similar to the WebDriver specification,
        this is designed as a keyframing API. Callers set up several "input sources" such
        as keyboard or mouse, and then specify the states of that input source over time. The
        dispatcher calculates diffs between the previous and current keyframes and generates
        the appropriate events that would happen if a user caused the state transition.

        For example, if a mouse input source's state changes, the dispatcher sends synthetic mousemove,
        mousedown, or mouseup events depending on the pre- and post-state. This is uninteresting
        and overcomplicated for simple key and mouse presses, but it's really designed with an
        eye towards supporting mousemove interpolation and touch event interpolation in later patches.

        The strategy for dispatching events depends on the input source type; right now, these
        map directly to the existing platformSimulate{Mouse, Keyboard}Interaction methods. In
        the future, the dispatch strategy may be elaborated for interpolated mousemove events.

        This patch depends on support added in bug 184462.

        No tests yet. When this command is hooked up to a driver, the code will be exercised by
        W3C actions test suite, which is fairly complex at this point relative to end-user code.

        * UIProcess/Automation/Automation.json: Add new types and commands.

        * UIProcess/Automation/SimulatedInputDispatcher.h: Added.
        (WebKit::SimulatedInputSourceState::emptyState):
        (WebKit::SimulatedInputSource::create):
        (WebKit::SimulatedInputSource::SimulatedInputSource):
        (WebKit::SimulatedInputDispatcher::Client::~Client):
        Add structs for input source, source state, and keyframe.
        The dispatcher's client interface is implemented by WebAutomationSession.

        (WebKit::SimulatedInputDispatcher::create):
        * UIProcess/Automation/SimulatedInputDispatcher.cpp: Added.
        (WebKit::SimulatedInputKeyFrame::SimulatedInputKeyFrame):
        (WebKit::SimulatedInputKeyFrame::maximumDuration const):
        (WebKit::SimulatedInputKeyFrame::keyFrameFromStateOfInputSources):
        (WebKit::SimulatedInputKeyFrame::keyFrameToResetInputSources):
        (WebKit::SimulatedInputDispatcher::SimulatedInputDispatcher):
        (WebKit::SimulatedInputDispatcher::~SimulatedInputDispatcher):
        (WebKit::SimulatedInputDispatcher::isActive const):
        (WebKit::SimulatedInputDispatcher::keyFrameTransitionDurationTimerFired):
        (WebKit::SimulatedInputDispatcher::isKeyFrameTransitionComplete const):
        (WebKit::SimulatedInputDispatcher::transitionToNextKeyFrame):
        (WebKit::SimulatedInputDispatcher::transitionToNextInputSourceState):
        (WebKit::SimulatedInputDispatcher::transitionBetweenKeyFrames):
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        (WebKit::SimulatedInputDispatcher::run):
        (WebKit::SimulatedInputDispatcher::cancel):
        (WebKit::SimulatedInputDispatcher::finishDispatching):
        The dispatcher handles one interaction at a time. The interaction is described
        by an array of keyframes, and each keyframe has an array of states. The dispatcher
        transitions between keyframes by sequentially and asynchronously emitting events
        that cause each input source state to transition as desired. Keyframe transitions
        are additionally gated by a "maximum duration" timer. Each step that the dispatcher
        executes is asynchronous, so the dispatcher keeps most state in members and uses
        error argument lambdas as completion handlers for various async things.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::WebAutomationSession):
        (WebKit::WebAutomationSession::inputDispatcherForPage):
        (WebKit::WebAutomationSession::inputSourceForType const):
        Add canonical input sources that are used to keep track of state across
        interaction sequences.

        (WebKit::WebAutomationSession::isSimulatingUserInteraction const):
        (WebKit::WebAutomationSession::mouseEventsFlushedForPage):
        (WebKit::WebAutomationSession::keyboardEventsFlushedForPage):
        Remove m_simulatingUserInteraction since it can be computed based on other members.

        (WebKit::WebAutomationSession::willClosePage):
        If the page is being torn down, stop the dispatcher if needed and cancel any
        callbacks waiting for mouse/key events to be retired.

        (WebKit::WebAutomationSession::simulateMouseInteraction):
        (WebKit::WebAutomationSession::simulateKeyboardInteraction):
        Add easy-to-use async methods for simulating mouse and key events. These are
        hooked up to SimulatedInputDispatcher using async completion handlers.

        (WebKit::protocolMouseButtonToWebMouseEventButton):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        Adjust some naming.

        (WebKit::simulatedInputSourceTypeFromProtocolSourceType):
        (WebKit::WebAutomationSession::performInteractionSequence):
        (WebKit::WebAutomationSession::cancelInteractionSequence):
        Add command handlers for the new action commands in Automation protocol.

        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::mouseButtonToGdkButton):
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        (WebKit::WebAutomationSession::platformSimulateKeyStroke): Deleted.
        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        (WebKit::WebAutomationSession::platformSimulateKeyStroke): Deleted.
        Rename the keyboard platform method to match the naming of the mouse platform method.
        Take advantage of the 'using' alias to make the tedious switches easier to read.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        (WebKit::virtualKeyHasStickyModifier):
        (WebKit::keyCodeForVirtualKey):
        (WebKit::eventModifierFlagsForVirtualKey):
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        (WebKit::WebAutomationSession::platformSimulateKeySequence):
        (WebKit::keyHasStickyModifier): Deleted.
        (WebKit::WebAutomationSession::platformSimulateKeyStroke): Deleted.
        Allow the keyboard simulation method to take a virtual key and unichar to better
        match how this is used by the Perform Actions command and its machinery.

        * WebKit.xcodeproj/project.pbxproj:

2018-04-19  Jiewen Tan  <jiewen_tan@apple.com>

        Remove access to keychain from the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=184428
        <rdar://problem/13150903>

        Reviewed by Brent Fulgham.

        Part 1.

        Remove com.apple.identities from WebContent-iOS.entitlements, which is needed to encode/decode NSError’s userInfo[NSErrorClientCertificateChainKey]
        when the corresponding NSErorr is relayed through WebContent Process from Networking Process to UI Process after a HTTPS client certificate
        authentication is rejected becuase of bad certificates. This patch implements corresponding workarounds as well. The workaround works for mac, too.

        Sadly, this change can only be tested manually at this moment. Please refer to the radar for testing steps.

        * Configurations/WebContent-iOS.entitlements:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::encodeNSError):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize):

2018-04-19  David Kilzer  <ddkilzer@apple.com>

        Enable Objective-C weak references
        <https://webkit.org/b/184789>
        <rdar://problem/39571716>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.

2018-04-19  Youenn Fablet  <youenn@apple.com>

        Web Inspector backend should get headers & cookies from network process separately from resource requests
        https://bugs.webkit.org/show_bug.cgi?id=184396
        <rdar://problem/38877384>

        Reviewed by Brian Burg.

        Add support for storing response and network metrics for every resource load.
        This is made conditional on inspector being activated.
        NetworkConnectionToWebProcess keeps a response and network metrics for every load.
        This is cleared when inspector is going away or when a web process requests
        the data.

        WebLoaderStrategy gets this data through synchronous IPC.
        Synchronous IPC is a temporary implementation until Inspector code gets refactored.

        Updated WebLoaderStrategy to pass the sourceOrigin for every NetworkResourceLoader.
        This activates additional sanitization based on cross origin status.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::setCaptureExtraNetworkLoadMetricsEnabled):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationResponse):
        (WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationMetrics):
        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationResponse):
        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationMetrics):
        (WebKit::NetworkConnectionToWebProcess::removeNetworkLoadInformation):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::responseFromResourceLoadIdentifier):
        (WebKit::WebLoaderStrategy::networkMetricsFromResourceLoadIdentifier):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):

2018-04-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add a mechanism to extend the height of the layout viewport in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=184782
        <rdar://problem/38346712>

        Reviewed by Tim Horton.

        In extra zoom mode, at initial scale, fixed position elements may take up a large portion of the viewport. This
        leaves little room for non-fixed-position elements; to improve this experience, we introduce a mechanism to
        extend the height of the layout viewport. By default, the layout viewport size is determined by the FrameView's
        baseLayoutViewportSize, and passed into FrameView::computeUpdatedLayoutViewportRect in the client layer; in
        extra zoom mode, if the layout viewport is shorter than the document width, we try to double the height of the
        layout viewport and clamp to the document height if necessary.

        * Shared/WebPreferences.yaml:

        Add a new preference to determine the factor by which we should expand the height of the layout viewport. By
        default, this is 0 (no increase in layout viewport height); in extra zoom mode, this is 1, which means we'll
        increase the layout viewport's height by 1x the default height.

        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView activeMinimumLayoutSizes:]):

        Fixes a bug when computing the active minimum layout size. If a minimum allowed layout width is specified, we
        clamp the active layout width (normally the view size) so that it is no less than the minimum allowed layout
        width. However, the height is currently unaffected, which causes FrameView::baseLayoutViewportSize to return a
        bogus size, where the width is scaled to 320px but the height isn't. Instead, we should scale the layout height
        to match the new width here.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect const):

        Expand the base viewport layout size if necessary, given the expansion factor in WebPreferences.

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

        Expand the base viewport layout size if necessary, given the expansion factor in Settings.

2018-04-19  Brian Burg  <bburg@apple.com>

        Web Automation: simulated mouse interactions should not be done until associated DOM events have been dispatched
        https://bugs.webkit.org/show_bug.cgi?id=184462
        <rdar://problem/39323336>

        Reviewed by Carlos Garcia Campos and Tim Horton.

        Covered by existing layout tests and actions endpoints in WebDriver test suite.

        In preparation for implementing the W3C WebDriver command "Perform Actions", we need a way to
        know when a simulated mouse event has been fully processed by WebProcess and it is okay to continue
        to dispatch more simulated events.

        This patch makes mouse events go through a queue as they are delivered to WebPageProxy. The approach
        is very similar to how key events are handled. In the key event case, lots of WebEvents can come out
        of typing one keystroke, so these need to be queued up and retired one by one when the WebProcess has
        finished handling each event. In some mouse event cases---particularly fake mouse moves---there can
        also be more than one mouse event waiting to be handled by WebProcess.

        In the past, these queued mouse events were tracked with several member variables as different
        use cases emerged. These are all replaced with ordinary deque operations, such as peeking or
        checking the queue length.

        * Platform/Logging.h: Add logging channel for mouse events.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::AutomationCommandError::toProtocolString): Add type-safe helper class for command errors.
        In future patches we can hide knowledge of how this is sent over the protocol by relying more on
        the convenience constructors and .toProtocolString() method.

        (WebKit::WebAutomationSession::willShowJavaScriptDialog):
        This section needs adjustments. Since performMouseInteraction now depends on key events being processed
        prior to returning from the command, we need to abort any key event callbacks that are pending if an
        alert pops up as a result of sending a mousedown event. Any mouse events that are still queued will
        be handled when the alert is dismissed and the nested run loop exits.

        (WebKit::WebAutomationSession::mouseEventsFlushedForPage):
        (WebKit::WebAutomationSession::keyboardEventsFlushedForPage):
        Modernize this a bit. Don't spread knowledge about how commands are sent back out into event handling code.
        Our wrapper callbacks in performXXXInteraction handle the protocol-specific details of the response.

        (WebKit::WebAutomationSession::performMouseInteraction):
        Add code similar to performKeyboardInteractions so that the command doesn't finish until the mouse
        event has been fully handled. Unlike keyboards, sometimes mouse interactions don't turn into WebEvents
        so we also need to handle the case where there is nothing to be waited on because hit testing did
        not return a target to deliver the event to.

        (WebKit::WebAutomationSession::performKeyboardInteractions):
        Modernize a little bit to use generic callbacks rather than protocol-generated callbacks in the
        event waiting/handling code. Now it matches the types used for the mouse event case.

        * UIProcess/Automation/WebAutomationSession.h:
        (WebKit::AutomationCommandError::AutomationCommandError):
        Add a helper struct to hold an enumerated error name and an optional free-form error message.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::webMouseEventTypeString):
        (WebKit::webKeyboardEventTypeString):
        (WebKit::WebPageProxy::handleMouseEvent):
        (WebKit::WebPageProxy::processNextQueuedMouseEvent):
        Split the old method into handleMouseEvent (called by other code) and processNextQueuedMouseEvent.
        The latter sends the next mouse event to WebProcess, and can be triggered in didReceiveEvent
        if there are more mouse events to be sent to WebProcess.

        (WebKit::WebPageProxy::isProcessingMouseEvents const): Added.
        (WebKit::WebPageProxy::currentlyProcessedMouseDownEvent): Reimplemented on top of the deque.
        (WebKit::WebPageProxy::didReceiveEvent):
        Unify the code paths for different mouse event types to all use the deque. They also will
        notify the automation session if there are no more mouse events to send (i.e., interaction is over).

        (WebKit::WebPageProxy::resetStateAfterProcessExited): Add handling for new map.

2018-04-19  Andy Estes  <aestes@apple.com>

        [iOS] Implement find-in-page in the new WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=184654
        <rdar://problem/39331654>

        Reviewed by Tim Horton.

        This is theoretically covered by existing WKPDFView API tests, but that's currently blocked
        by <rdar://problem/39475542>.

        * UIProcess/ios/WKPDFView.mm:
        (stringCompareOptions):

        Mapped _WKFindOptions to NSStringCompareOptions.

        (-[WKPDFView _resetFind]):

        Cancelled an in-progress search and reset the search state.

        (-[WKPDFView _findString:withOptions:maxCount:completion:]):

        Stored the completion block, find string, and max count, then called
        -[PDFHostViewController findString:withOptions:].

        (-[WKPDFView web_countStringMatches:options:maxCount:]):

        Called -_findString:withOptions:maxCount:completion: with a completion block that calls
        FindClient::didCountStringMatches() with _findStringCount.

        (-[WKPDFView _computeFocusedSearchResultIndexWithOptions:didWrapAround:]):

        Computed the focused search result index, taking _findStringCount and wrap-around into
        account. There are two interesting cases to mention here:

        1. We can't change focus while a search is in progress, because we can't properly handle
        wrap-around without a _findStringCount. If a search is in progress, store the requested
        focus change in _focusedSearchResultPendingOffset, which will be applied once the search
        finishes.

        2. If wrap-around is about to happen but the find options do not allow it, we need to call
        FindClient::didFailToFindString(). Handle this by returning NO, which will tell
        -_focusOnSearchResultWithOptions: to call didFailToFindString() if a search is not in
        progress.

        (-[WKPDFView _focusOnSearchResultWithOptions:]):

        If -_computeFocusedSearchResultIndexWithOptions:didWrapAround: failed while a search is in
        progress, just return early. Otherwise, call FindClient::didFailToFindString(). If
        computing the index did not fail, call -[PDFHostViewController focusOnSearchResultAtIndex:]
        to change focus and then call FindClient::didFindString() to inform the client.

        (-[WKPDFView web_findString:options:maxCount:]):

        If the find string is equal to _findString, change focus. Otherwise, start a new search.

        (-[WKPDFView web_hideFindUI]):

        Called -_resetFind.

        (-[WKPDFView pdfHostViewController:findStringUpdate:done:]):

        Stored the count in _findStringCount and called _findCompletion once the search is done.

2018-04-17  Filip Pizlo  <fpizlo@apple.com>

        The InternalFunction hierarchy should be in IsoSubspaces
        https://bugs.webkit.org/show_bug.cgi?id=184721

        Reviewed by Saam Barati.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::JSNPMethod::subspaceForImpl):
        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        (WebKit::JSNPMethod::create): Deleted.
        (WebKit::JSNPMethod::npIdentifier const): Deleted.
        (WebKit::JSNPMethod::createStructure): Deleted.
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::subspaceForImpl):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        (WebKit::JSNPObject::create): Deleted.
        (WebKit::JSNPObject::npObject const): Deleted.
        (WebKit::JSNPObject::createStructure): Deleted.

2018-04-19  Brady Eidson  <beidson@apple.com>

        Add globally-unique HistoryItem identifiers (and have WebKit2 adopt them).
        <rdar://problem/39533949> and https://bugs.webkit.org/show_bug.cgi?id=184750

        Reviewed by Ryosuke Niwa.

        With process swapping, the assumption that "back/forward items belong to a process" is invalid.

        All HistoryItem/WebBackForwardListItems now need to be uniquely identified across all processes,
        no matter which process they originated from, so there will never be a collision in the UIProcess.

        This allows us to:
        - Have the UIProcess to keep a single process-wide map of all WebBackForwardListItems
        - Get rid of the per-WebProcess WebBackForwardListItem map
        - Simplify a lot of WebBackForwardList(Proxy) code that no longer needs to keep that per-process
          map in sync
        - Get rid of a lot of other ancillary code

        * Shared/SessionState.cpp:
        (WebKit::BackForwardListItemState::decode):
        * Shared/SessionState.h:

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::~WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::itemForID):
        (WebKit::WebBackForwardListItem::highestUsedItemID): Deleted.
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::itemID const):

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

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::itemForID):
        (WebKit::WebBackForwardList::pageClosed):
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::restoreFromState):
        (WebKit::generateWebBackForwardItemID): Deleted.
        * UIProcess/WebBackForwardList.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeCreateSuspendedPage):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::backForwardAddItem):
        (WebKit::WebPageProxy::backForwardGoToItem):
        (WebKit::WebPageProxy::backForwardItemAtIndex):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::backForwardRemovedItem):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
 
        * UIProcess/WebProcessPool.cpp: Explicitly set the UIProcess Process::Identifier so it starts
          at "1" and then the first child process starts at "2", etc etc.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        (WebKit::WebProcessProxy::updateBackForwardItem):
        (WebKit::WebProcessProxy::webBackForwardItem const): Deleted.
        (WebKit::WebProcessProxy::registerNewWebBackForwardListItem): Deleted.
        (WebKit::WebProcessProxy::removeBackForwardItem): Deleted.
        (WebKit::WebProcessProxy::addOrUpdateBackForwardItem): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:

        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toBackForwardListItemState):
        (WebKit::applyFrameState):
        (WebKit::toHistoryItem):
        (WebKit::toPageState): Deleted.
        * WebProcess/WebCoreSupport/SessionStateConversion.h:

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldGoToHistoryItem const):

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItemFromUIProcess):
        (WebKit::WK2NotifyHistoryItemChanged):
        (WebKit::WebBackForwardListProxy::itemForID):
        (WebKit::WebBackForwardListProxy::removeItem):
        (WebKit::WebBackForwardListProxy::addItem): Previously this was a two-step process of adding an item
          to the process and then associating it with the page. Now it's just directly adding it to the page,
          so we don't need to call updateBackForwardItem first.
        (WebKit::WebBackForwardListProxy::goToItem):
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::close):
        (WebKit::historyItemToIDMap): Deleted.
        (WebKit::generateHistoryItemID): Deleted.
        (WebKit::WebBackForwardListProxy::setHighestItemIDFromUIProcess): Deleted.
        (WebKit::updateBackForwardItem): Deleted.
        (WebKit::WebBackForwardListProxy::idForItem): Deleted.
        * WebProcess/WebPage/WebBackForwardListProxy.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        (WebKit::WebPage::goToBackForwardItem):
        (WebKit::WebPage::restoreSessionInternal):
        (WebKit::WebPage::didRemoveBackForwardItem):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-04-19  Youenn Fablet  <youenn@apple.com>

        NetworkProcess should use CSP/content blockers for sync XHR
        https://bugs.webkit.org/show_bug.cgi?id=184760

        Reviewed by Chris Dumez.

        Setting CSP/ContentBlockers parameters for sync XHR loads.
        * NetworkProcess/NetworkResourceLoader.cpp:

2018-04-19  Nan Wang  <n_wang@apple.com>

        AX: AOM: respect the accessibility setting for dispatching the accessible events
        https://bugs.webkit.org/show_bug.cgi?id=184619

        Reviewed by Ryosuke Niwa.

        Linked libAccessibility on iOS and macOS to use the platform accessibility settings
        for allowing dispatching the accessibility events.

        * Configurations/WebKit.xcconfig:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (accessibilityEventsEnabledChangedCallback):
        (-[WKWebView _updateAccessibilityEventsEnabled]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateAccessibilityEventsEnabled):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateAccessibilityEventsEnabled):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-04-18  Chris Dumez  <cdumez@apple.com>

        Rename WindowProxyController to WindowProxy
        https://bugs.webkit.org/show_bug.cgi?id=184756

        Reviewed by Sam Weinig.

        Rename WindowProxyController to WindowProxy for clarity. When the IDL uses WindowProxy, the implementation
        needed use WindowProxyController type, which was a bit confusing.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowScriptNPObject):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::frameBecameRemote):

2018-04-18  Youenn Fablet  <youenn@apple.com>

        Allow SameOrigin credentials handling for synchronous XHR
        https://bugs.webkit.org/show_bug.cgi?id=184723

        Reviewed by Alex Christensen.

        In case of SameOrigin credentials, we need to stop the current load
        in case of cross origin redirection to restart a load with a different session.
        Covered by updated WK2 tests.
        Rebased WK1 tests since this is Wk1 only.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        * NetworkProcess/NetworkResourceLoader.h:

2018-04-18  Chris Dumez  <cdumez@apple.com>

        Set RemoteDOMWindow's initial opener
        https://bugs.webkit.org/show_bug.cgi?id=184716

        Reviewed by Sam Weinig.

        When a frame becomes remote, transfer the frame opener from the old
        frame to the new remote one.

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

2018-04-18  Youenn Fablet  <youenn@apple.com>

        NetworkResourceLoader should not clean itself inside didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=184754

        Reviewed by Chris Dumez.

        Delay the cleanup to after the didReceiveResponse call so that NetworkLoad can terminate its work.
        Covered by XHR sync tests no longer crashing on GuardMalloc bots.

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

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

        Fix rendering of WKRemoteView layers in the simulator
        https://bugs.webkit.org/show_bug.cgi?id=184752

        Reviewed by Tim Horton.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalHostingProcess):

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

        Fix entitlements and sandboxing for iphoneminimalsimulator
        https://bugs.webkit.org/show_bug.cgi?id=184692

        Reviewed by Tim Horton.

        Use the correct implementations for ChildProcess and NetworkProcess
        when building for iphoneminimalsimulator. Stub out imlementations
        which rely on methods not available in the iphoneminimalsimulator SDK.

        * Configurations/Network-OSX.entitlements: Added.
        * Configurations/NetworkService.xcconfig:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::sourceApplicationAuditData const):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::overrideSystemProxies):
        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setApplicationIsDaemon):
        (WebKit::enableSandboxStyleFileQuarantine):
        (WebKit::ChildProcess::initializeSandbox):
        (WebKit::ChildProcess::platformStopRunLoop):
        * Shared/mac/CodeSigning.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox):

2018-04-18  Commit Queue  <commit-queue@webkit.org>

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

        causes mouse clicks to not work on some platforms (Requested
        by brrian on #webkit).

        Reverted changeset:

        "Web Automation: simulated mouse interactions should not be
        done until associated DOM events have been dispatched"
        https://bugs.webkit.org/show_bug.cgi?id=184462
        https://trac.webkit.org/changeset/230743

2018-04-18  Brent Fulgham  <bfulgham@apple.com>

        Avoid crash if ITP Debug mode is on, but ResourceLoadStatistics are not being used
        https://bugs.webkit.org/show_bug.cgi?id=184739
        <rdar://problem/39287964>

        Reviewed by David Kilzer.

        If a user has the ResourceLoadStatistics logic turned off, but has the ITP Debug experimental
        flag turned on, you can cause a crash.

        This is because the WebsiteDataStore for the process doesn't bother creating a ResourceLoadStatisticsStore
        if the statistics machinery is not running. The ITP debug flag was being blindly set without checking
        if the statistics store exists or not, which can cause a crash.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode): Check if the statistics store exists
        before calling functions on it.

2018-04-18  Paul Knight  <pknight@apple.com>

        Add -[_WKInputDelegateDelegate willStartInputSession:] for clients that want to configure input session before assisting form node
        https://bugs.webkit.org/show_bug.cgi?id=184662

        Reviewed by Beth Dakin.

        Clients may wish to configure a WKInputSession before we start assisting
        a node. Add a -[_WKInputDelegateDelegate _webView:willStartInputSession:]
        callback.

        For example, clients that wish to present a custom input view will want
        to configure the WKFormInputSession's customInputView before the
        keyboard is presented. Otherwise the standard keyboard will begin to
        animate and then the custom input view will swap in later.

        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
            Call -_webView:willStartInputSession: before assisting the node.
            Only create the form session if the delegate implements either
            the willStart or didStartInputSession callbacks.

2018-04-18  Chris Dumez  <cdumez@apple.com>

        Add support for converting a local window to a remote window
        https://bugs.webkit.org/show_bug.cgi?id=184515
        <rdar://problem/39011318>

        Reviewed by Ryosuke Niwa.

        Add initial support for process-swapping when navigating cross-origin as a result
        of a window.open(). The window object returned by window.open() is initially same
        origin and is for about:blank. The navigation cross-origin then happens and the
        JS wrappers for the window then point to a cross-origin window which is remote (i.e.
        hosted in another WebProcess).

        The RemoteDOMWindow exposed to JS looks like a regular cross-origin Window with a few
        exceptions due to our incomplete implementation (e.g. w.location returns null) and
        most of its API is currently not functional. The RemoteDOMWindow API will be implemented
        in a follow-up by relying on IPC.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationProcessSwapsOnWindowOpenWithOpener):
        (WKContextConfigurationSetProcessSwapsOnWindowOpenWithOpener):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setProcessSwapsOnWindowOpenWithOpener:]):
        (-[_WKProcessPoolConfiguration processSwapsOnWindowOpenWithOpener]):
        Add ProcessPool configuration flag to turn on processSwap on window.open(), even
        if there is an opener.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        If the navigation was triggered via window.open(), then set up on handler for when
        a DOMWindow is constructed for the main frame in the new process.

        (WebKit::WebPageProxy::didCreateWindow):
        When a Window is constructed for the main frame in a new process on process swap,
        notify the old process that its representation of the window should become remote
        and provide it with the Frame / Window identifiers it needs.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        Do process swapping on cross-origin window.open() if the corresponding setting is
        enabled.

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

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::frameBecameRemote):
        This is called when process swapping has happened due to a window.open() navigation
        cross-origin, when a Frame / Window has been constructed in the new process. We do
        the following:
        - Construct a RemoteFrame / RemoteWindow using the provided global identifiers to
          represent the Frame / Window in the new process.
        - We transfer the WindowProxies from the old Frame's WindowProxyController to the
          new RemoteFrame's WindowProxyController.
        - We update the window proxied by those WindowProxies to be the new RemoteWindow.
        - We detach the old Frame as it is now remote and represented by the new RemoteFrame
          object we constructed.
        - If the old frame was the main frame (always the case currently), we close the page
          as it is no longer needed. The new RemoteFrame is currently owned by the RemoteWindow
          which is kept alive by its JS wrappers.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.21.1 release.

        * gtk/NEWS: Add release notes for 2.21.1.

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

        Unreviewed. Remove symbols from webkitglib-symbols.map.

        Remove symbols not present in WebKit.

        * webkitglib-symbols.map:

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

        Unreviewed. Add missing symbols to webkitglib-symbols.map.

        Add symbols global in JSC and present in WebKit.

        * webkitglib-symbols.map:

2018-04-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKit] Implement InjectedBundleWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=184525

        Reviewed by Konstantin Tokarev.

        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::initialize):

2018-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Programmatically changing focus when an element already has focus is a confusing experience
        https://bugs.webkit.org/show_bug.cgi?id=184635
        <rdar://problem/39440642>

        Reviewed by Tim Horton.

        Currently on iOS, we allow element focus to present UI if the keyboard is already shown. In extra zoom mode,
        this would lead to a confusing experience when the focus form control overlay is disabled, since fullscreen
        input view controllers are swapped out from underneath the user. Currently, this also puts the UI process into a
        bad state where the focused form control overlay is active, but still hidden. This patch makes some tweaks to
        input view controller handling in the UI process to address these issues, and also adds WebKitTestRunner support
        for simulating interactions with select menus in extra zoom mode. See comments below for more detail.

        Test: fast/events/extrazoom/change-focus-during-change-event.html

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        Add new SPI delegate hooks to notify the UI delegate when view controllers are presented or dismissed in extra
        zoom mode. See -presentViewControllerForCurrentAssistedNode and -dismissAllInputViewControllers.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::takeBackgroundActivityTokenForFullscreenInput):
        (WebKit::WebProcessProxy::releaseBackgroundActivityTokenForFullscreenInput):

        See the comment below -dismissAllInputViewControllers.

        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

        In extra zoom mode, when changing focus from one assisted node to another, only allow the second node to be
        assisted if the focused form control overlay is being shown. Otherwise, (i.e. when a fullscreen input view
        controller is being presented), don't allow focus to start an input session.

        Additionally, make a minor tweak to allow the previous node to blur, even if we are not showing the keyboard for
        the new focused element. Without this adjustment, in the case where the page has programmatically focused
        another element while a fullscreen input view controller is presented, we'll show the old view controller for
        the new focused element.

        (-[WKContentView presentViewControllerForCurrentAssistedNode]):
        (-[WKContentView dismissAllInputViewControllers:]):

        Currently, when a fullscreen input view controller is presented, the web process gets backgrounded. This
        prevents event handlers from executing, which leads to strange behaviors in many cases (for instance: if we
        have a multiple select, and the "change" event handler blurs the select, the user may check or uncheck multiple
        items, but only the first change will actually take effect).

        To fix this, we maintain a background activity token while presenting an input view controller.

        (-[WKContentView focusedFormControlViewDidBeginEditing:]):

        Start hiding the focused form overlay when re-presenting an input view controller. This allows us to bail from
        showing fullscreen input UI for another focused element if focus programmatically changes while the current
        fullscreen input view controller is presented, due to the -isHidden check in -_startAssistingNode:.

        (-[WKContentView selectFormAccessoryPickerRow:]):

        Simulate tapping a given row in select menu UI in extra zoom mode.

2018-04-17  Conrad Shultz  <conrad_shultz@apple.com>

        WebKit::DisplayLink maintains a strong reference to WebPageProxy, creating a reference cycle
        https://bugs.webkit.org/show_bug.cgi?id=184718

        Reviewed by Tim Horton.

        It turns out that the m_webPageProxy back-reference in DisplayLink, which was creating a
        reference cycle, wasn't ever read, so we can just remove it.

        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        * UIProcess/mac/DisplayLink.h:

2018-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Double tap to zoom should account for text legibility in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=184631
        <rdar://problem/39303706>

        Reviewed by Tim Horton.

        Implement the text legibility heuristic alluded to in r230506 by iterating through text runs in the document (up
        to a maximum of 200) and building a histogram of font sizes that appear in the document, where each tally
        represents a character.

        The first and second text legibility zoom scales are then computed based on the zoom scales needed to
        make 50% and 90% of the text legible, respectively. Here, a zoom scale that makes text legible is such that the
        text would have an apparent font size of a hard-coded constant (currently, 12) after zooming. This means the
        first and second text legibility scales may end up being close to one another, or even the same (in the case
        where there is only a single font size in the entire document). In this case, we just snap the first scale to
        the second, so that double tapping will only toggle between two zoom scales. In another case where the document
        has no text (e.g. an image document), we just fall back to a zoom scale of 1.

        Test: fast/events/extrazoom/double-tap-to-zoom-on-full-width-text.html

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::computeTextLegibilityScales):

2018-04-17  Megan Gardner  <megan_gardner@apple.com>

        Don't activate selection on become first responder
        https://bugs.webkit.org/show_bug.cgi?id=184719

        Reviewed by Tim Horton.
        
        If we activate the selection immediately on becoming first responder, we cause the selection view to delete itself
        since it is not guaranteed to have selection rects immediately due to async/two process architecture. The selection
        is activated already when the selection rects change, so there is no reason to activate it now. This has likely worked
        in the past because this selection assistant was only for editable text, which would immediately set a caret, which 
        is a selection. Now that this is for non-editable text as well, activating the selection is problematic.

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

2018-04-11  Brian Burg  <bburg@apple.com>

        Web Automation: simulated mouse interactions should not be done until associated DOM events have been dispatched
        https://bugs.webkit.org/show_bug.cgi?id=184462
        <rdar://problem/39323336>

        Reviewed by Carlos Garcia Campos and Tim Horton.

        Covered by existing layout tests and actions endpoints in WebDriver test suite.

        In preparation for implementing the W3C WebDriver command "Perform Actions", we need a way to
        know when a simulated mouse event has been fully processed by WebProcess and it is okay to continue
        to dispatch more simulated events.

        This patch makes mouse events go through a queue as they are delivered to WebPageProxy. The approach
        is very similar to how key events are handled. In the key event case, lots of WebEvents can come out
        of typing one keystroke, so these need to be queued up and retired one by one when the WebProcess has
        finished handling each event. In some mouse event cases---particularly fake mouse moves---there can
        also be more than one mouse event waiting to be handled by WebProcess.

        In the past, these queued mouse events were tracked with several member variables as different
        use cases emerged. These are all replaced with ordinary deque operations, such as peeking or
        checking the queue length.

        * Platform/Logging.h: Add logging channel for mouse events.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::AutomationCommandError::toProtocolString): Add type-safe helper class for command errors.
        In future patches we can hide knowledge of how this is sent over the protocol by relying more on
        the convenience constructors and .toProtocolString() method.

        (WebKit::WebAutomationSession::willShowJavaScriptDialog):
        This section needs adjustments. Since performMouseInteraction now depends on key events being processed
        prior to returning from the command, we need to abort any key event callbacks that are pending if an
        alert pops up as a result of sending a mousedown event. Any mouse events that are still queued will
        be handled when the alert is dismissed and the nested run loop exits.

        (WebKit::WebAutomationSession::mouseEventsFlushedForPage):
        (WebKit::WebAutomationSession::keyboardEventsFlushedForPage):
        Modernize this a bit. Don't spread knowledge about how commands are sent back out into event handling code.
        Our wrapper callbacks in performXXXInteraction handle the protocol-specific details of the response.

        (WebKit::WebAutomationSession::performMouseInteraction):
        Add code similar to performKeyboardInteractions so that the command doesn't finish until the mouse
        event has been fully handled. Unlike keyboards, sometimes mouse interactions don't turn into WebEvents
        so we also need to handle the case where there is nothing to be waited on because hit testing did
        not return a target to deliver the event to.

        (WebKit::WebAutomationSession::performKeyboardInteractions):
        Modernize a little bit to use generic callbacks rather than protocol-generated callbacks in the
        event waiting/handling code. Now it matches the types used for the mouse event case.

        * UIProcess/Automation/WebAutomationSession.h:
        (WebKit::AutomationCommandError::AutomationCommandError):
        Add a helper struct to hold an enumerated error name and an optional free-form error message.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::webMouseEventTypeString):
        (WebKit::webKeyboardEventTypeString):
        (WebKit::WebPageProxy::handleMouseEvent):
        (WebKit::WebPageProxy::processNextQueuedMouseEvent):
        Split the old method into handleMouseEvent (called by other code) and processNextQueuedMouseEvent.
        The latter sends the next mouse event to WebProcess, and can be triggered in didReceiveEvent
        if there are more mouse events to be sent to WebProcess.

        (WebKit::WebPageProxy::isProcessingMouseEvents const): Added.
        (WebKit::WebPageProxy::currentlyProcessedMouseDownEvent): Reimplemented on top of the deque.
        (WebKit::WebPageProxy::didReceiveEvent):
        Unify the code paths for different mouse event types to all use the deque. They also will
        notify the automation session if there are no more mouse events to send (i.e., interaction is over).

        (WebKit::WebPageProxy::resetStateAfterProcessExited): Add handling for new map.

2018-04-17  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Build failure due to presence of Avahi's <dns_sd.h> header
        https://bugs.webkit.org/show_bug.cgi?id=184711

        Unreviewed build fix.

        * NetworkProcess/webrtc/NetworkMDNSRegister.h: Set ENABLE_MDNS only for PLATFORM(COCOA).

2018-04-17  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed rollout of r230632. Regression in memory usage.

        That bug tracked in https://bugs.webkit.org/show_bug.cgi?id=184569.

        * Shared/WebPreferences.yaml:

2018-04-17  Timothy Hatcher  <timothy@apple.com>

        Always use LayerContentsType::IOSurface in minimal simulator mode
        https://bugs.webkit.org/show_bug.cgi?id=184710

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):

2018-04-17  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in InjectedBundle::postSynchronousMessage
        https://bugs.webkit.org/show_bug.cgi?id=184683

        Reviewed by Wenson Hsieh.

        Some injected bundles sends sync message when it's not safe to execute scripts.

        Use DoNotProcessIncomingMessagesWhenWaitingForSyncReply option in InjectedBundle::postSynchronousMessage
        to avoid processing incoming sync IPC messages so that we don't execute arbitrary scripts in those cases.

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

2018-04-17  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab
        https://bugs.webkit.org/show_bug.cgi?id=184678
        <rdar://problem/39422122>

        Reviewed by Alex Christensen.

        Re-introduce synchronous code path which existed pre-r229831 and use it for fragment navigations.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2018-04-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] GObject introspection annotation fixes: BackForwardList, NetworkProxySettings
        https://bugs.webkit.org/show_bug.cgi?id=184658

        Reviewed by Carlos Garcia Campos.

        Thanks to Dylan Simon for recommending these annotation fixes.

        * UIProcess/API/glib/WebKitBackForwardList.cpp:
        * UIProcess/API/glib/WebKitNetworkProxySettings.cpp:

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

        [macOS] Don't establish unneeded Dock connections (Follow-up)
        https://bugs.webkit.org/show_bug.cgi?id=184664
        <rdar://problem/16863698>

        Reviewed by Per Arne Vollan.

        Because the Plugin process is driven by NSApplication's run loop, we aren't
        setting the 'don't connect to the dock' setting early enough.

        This patch sets the flag in XPCServiceMain for those services that
        are linked to AppKit.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess): Remove unneeded code.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (main):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Remove unneeded code.

2018-04-17  Saam Barati  <sbarati@apple.com>

        Add system trace points for process launch and for initializeWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=184669

        Reviewed by Simon Fraser.

        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::ProcessLauncher):
        (WebKit::ProcessLauncher::didFinishLaunchingProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-04-16  Timothy Hatcher  <timothy@apple.com>

        Unreviewed 32-bit build fix for r230673.

        https://bugs.webkit.org/show_bug.cgi?id=184657
        rdar://problem/39463307

        * Configurations/PluginProcessShim.xcconfig: Use the correct names.

2018-04-16  Andy Estes  <aestes@apple.com>

        [iOS] Enable WKPDFView by default
        https://bugs.webkit.org/show_bug.cgi?id=184675
        <rdar://problem/27885452>

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry init]):

2018-04-16  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Don't establish unneeded Dock connections
        https://bugs.webkit.org/show_bug.cgi?id=184664
        <rdar://problem/16863698>

        Reviewed by Simon Fraser.

        There is no reason for the WebContent or Plugin processes to interact with
        the Dock. We should tell AppKit that we don't want this connection, and to
        avoid creating such connections.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess): Tell NSApplication to
        not create a Dock connection.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Ditto.

2018-04-16  Megan Gardner  <megan_gardner@apple.com>

        Switch to UIWKTextInteractionAssistant for non-editable text
        https://bugs.webkit.org/show_bug.cgi?id=182834

        Reviewed by Beth Dakin.
        
        Switch to only using one assistant for text selection.

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

2018-04-16  Youenn Fablet  <youenn@apple.com>

        Use NetworkLoadChecker to handle synchronous HTTP loads
        https://bugs.webkit.org/show_bug.cgi?id=184240

        Reviewed by Chris Dumez.

        For every NetworkResourceLoader synchronous load, we create a NetworkLoadChecker.
        NetworkLoadChecker handles all security checks in that case.
        This allows supporting cross-origin loads for synchronous XHR.

        Updated NetworkCORSPreflightChecker to return the result as a ResourceError.
        This is used to convey any error message from NetworkProcess to the JS console.
        Ensure NetworkCORSPreflightChecker computes correctly Access-Control-Request-Headers value
        by providing the headers set by the application plus Referrer/Origin.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::~NetworkCORSPreflightChecker):
        (WebKit::NetworkCORSPreflightChecker::willPerformHTTPRedirection):
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        (WebKit::NetworkCORSPreflightChecker::didCompleteWithError):
        (WebKit::NetworkCORSPreflightChecker::wasBlocked):
        (WebKit::NetworkCORSPreflightChecker::cannotShowURL):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::validateCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebLoaderStrategy.h:

2018-04-16  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Automation: add SPI to terminate automation session and disconnect the remote end
        https://bugs.webkit.org/show_bug.cgi?id=184523
        <rdar://problem/39368599>

        Reviewed by Simon Fraser.

        When a user breaks the automation glass pane and chooses "Stop Session", there is no way
        for Safari to actually disconnect the remote connection using automation-related ObjC SPI.
        This can lead to sessions getting stuck and safaridriver is unable to request a new session.

        Expose the -terminate method as SPI. This disconnects the remote connection and then notifies
        the session delegate that the remote disconnected. At that point, Safari can uninstall
        the session from the process pool and tear down other session state.

        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.mm:
        (-[_WKAutomationSession terminate]):

2018-04-16  Timothy Hatcher  <timothy@apple.com>

        Clean up OTHER_LDFLAGS for WebKit processes
        https://bugs.webkit.org/show_bug.cgi?id=184657

        Reviewed by Jer Noble.

        * Configurations/PluginProcessShim.xcconfig:
        * Configurations/PluginService.32.xcconfig:
        * Configurations/PluginService.64.xcconfig:
        * Configurations/WebContentService.xcconfig:

2018-04-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Install files needed for WebKitWebExtensions
        https://bugs.webkit.org/show_bug.cgi?id=179915

        Reviewed by Žan Doberšek.

        * PlatformWPE.cmake: Install pkg-config file, injected bundle, and API headers.
        * UIProcess/API/glib/WebKitWebContext.cpp: Load the injected bundle when installed.
        * wpe/wpe-web-extension.pc.in: Added.

2018-04-14  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GTK][WPE] Build is broken after r230640
        https://bugs.webkit.org/show_bug.cgi?id=184623

        Reviewed by Žan Doberšek.

        UIProcess/SuspendedPageProxy.cpp was not included to CMake build in r230640.

        * CMakeLists.txt: Added UIProcess/SuspendedPageProxy.cpp to WebKit_SOURCES.

2018-04-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230447.

        Caused flaky selection test failures on iOS

        Reverted changeset:

        "Switch to UIWKTextInteractionAssistant for non-editable text"
        https://bugs.webkit.org/show_bug.cgi?id=182834
        https://trac.webkit.org/changeset/230447

2018-04-13  Chris Dumez  <cdumez@apple.com>

        Split WindowProxy handling out of ScriptController and into a new class owned by AbstractFrame
        https://bugs.webkit.org/show_bug.cgi?id=184591

        Reviewed by Sam Weinig.

        Split WindowProxy handling out of ScriptController and into a new class owned by AbstractFrame.
        RemoteFrames do not need a ScriptController but do need to maintain WindowProxies.
        This is work towards fixing Bug 184515.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowScriptNPObject):

2018-04-13  Brady Eidson  <beidson@apple.com>

        Introduce SuspendedPageProxy to keep old web processes around after their WebPageProxy has been swapped to a new one.
        https://bugs.webkit.org/show_bug.cgi?id=184559

        Reviewed by Alex Christensen.

        Before this patch, when a WebPageProxy navigates and is swapped to a new process, the old process almost always goes away.

        This is not desirable for a few reasons:
        1 - We can't keep the PageCache working for back/forward scenarios
        2 - We throw away a "foo.com" web process, meaning the next time we need to host a "foo.com" web page we have to launch
            and initialize a new web process.

        This patch adds a SuspendedPageProxy object to keep around the old web process and to manage communication with it.

        For now, a WebPageProxy keeps exactly one "suspended page" representing the most recently visited page and its process.
        Additionally, that process is never reused.

        So no benefit is achieved with this patch, but it enables future benefits.

        * Platform/Logging.h:

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::setSuspendedPage):
        * Shared/WebBackForwardListItem.h:

        New object to represent the state of a WebPageProxy in an old web process that is not currently hosting the view.
        * UIProcess/SuspendedPageProxy.cpp: Added.
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::webProcessDidClose):
        (WebKit::SuspendedPageProxy::didFinishLoad):
        (WebKit::SuspendedPageProxy::didReceiveMessage):
        (WebKit::SuspendedPageProxy::loggingString const):
        * UIProcess/SuspendedPageProxy.h: Copied from Source/WebKit/Platform/Logging.h.
        (WebKit::SuspendedPageProxy::create):
        (WebKit::SuspendedPageProxy::page const):
        (WebKit::SuspendedPageProxy::process const):
        (WebKit::SuspendedPageProxy::item const):
        (WebKit::SuspendedPageProxy::finishedSuspending const):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::attachToProcessForNavigation):
        (WebKit::WebPageProxy::maybeCreateSuspendedPage):
        (WebKit::WebPageProxy::suspendedPageProcessClosed):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::suspendWebPageProxy):
        (WebKit::WebProcessProxy::suspendedPageWasDestroyed):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::didReceiveMessage): Optionally pass WebPageProxy messages along to SuspendedPageProxy objects.
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::maybeShutDown):
        (WebKit::WebProcessProxy::canTerminateChildProcess): Don't terminate child processes if they still have suspended pages.
        * UIProcess/WebProcessProxy.h:

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setIsSuspended):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isSuspended const): For now, used only by WebProcess::updateActivePages. Will have more uses soon.
        * WebProcess/WebPage/WebPage.messages.in:

        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateActivePages): Allow the UIProcess to request an update of the web processes user visible name.

2018-04-13  Daniel Bates  <dabates@apple.com>

        Inline NetworkLoad::sharedWillSendRedirectedRequest() into NetworkLoad::willPerformHTTPRedirection()
        https://bugs.webkit.org/show_bug.cgi?id=184593

        Reviewed by Alex Christensen.

        Following the removal of the pre-Network Session code in r227364, NetworkLoad::sharedWillSendRedirectedRequest()
        is only referenced from NetworkLoad::willPerformHTTPRedirection(). We should inline its
        implementation into the NetworkLoad::willPerformHTTPRedirection(), remove a function call,
        and the cognitive load to follow such a function call when reading the code.

        No functionality changed. So, no new tests.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::willPerformHTTPRedirection): Moved the implementation of NetworkLoad::sharedWillSendRedirectedRequest()
        into this function.
        (WebKit::NetworkLoad::sharedWillSendRedirectedRequest): Deleted. Moved its implementation
        into NetworkLoad::willPerformHTTPRedirection().
        * NetworkProcess/NetworkLoad.h:

2018-04-13  Daniel Bates  <dabates@apple.com>

        Inline NetworkLoad::sharedDidReceiveResponse() into NetworkLoad::notifyDidReceiveResponse()
        https://bugs.webkit.org/show_bug.cgi?id=184592

        Reviewed by Alex Christensen.

        Following the removal of the pre-Network Session code in r227364, NetworkLoad::sharedDidReceiveResponse()
        is only referenced from NetworkLoad::notifyDidReceiveResponse(). We should inline its
        implementation into the NetworkLoad::notifyDidReceiveResponse(), remove a function
        call, and the cognitive load to follow such a function call when reading the code.

        No functionality changed. So, no new tests.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::notifyDidReceiveResponse): Moved the implementation of NetworkLoad::sharedDidReceiveResponse()
        into this function.
        (WebKit::NetworkLoad::sharedDidReceiveResponse): Deleted. Moved its implementation into
        NetworkLoad::notifyDidReceiveResponse().
        * NetworkProcess/NetworkLoad.h:

2018-04-13  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r230468): Improper assertion firing under STP
        <rdar://problem/39411676>

        Unreviewed, rolling out an improper assertion.

        I added an assertion in Bug 184322 that should not have been added. I did not notice that this
        call stack was always used in builds where NSApp is still active. Builds where we stop relying
        on AppKit runloops uses a different code path to shut down.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::stopNSAppRunLoop):

2018-04-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn CSS Animations and CSS Transitions as Web Animations on by default
        https://bugs.webkit.org/show_bug.cgi?id=184569
        <rdar://problem/38671301>

        Reviewed by Jon Lee.

        * Shared/WebPreferences.yaml:

2018-04-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Convert GStreamerUtilities in GStreamerCommon and include the GStreamer smart pointer traits
        https://bugs.webkit.org/show_bug.cgi?id=184533

        Reviewed by Philippe Normand.

        Renamed GStreamerUtilities* files into GStreamerCommon* and
        modified files including them accordingly. Include
        GRefPtrGStreamer.h and GUniquePtrGStreamer.h in GStreamerCommon.h
        to avoid problems destroying objects when those files are
        forgotten to be included.

        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        * UIProcess/wpe/WebProcessPoolWPE.cpp:
        * WebProcess/soup/WebProcessSoup.cpp:

2018-04-12  Beth Dakin  <bdakin@apple.com>

        Fix the MOBILE_WIFI build
        https://bugs.webkit.org/show_bug.cgi?id=184571
        -and corresponding-
        <rdar://problem/39398181>

        Reviewed by Jer Noble.

        * config.h:

2018-04-12  Beth Dakin  <bdakin@apple.com>

        Use -iframework to ensure that frameworks from user paths and system paths are 
        ordered appropriately
        https://bugs.webkit.org/show_bug.cgi?id=184557
        -and corresponding-
        rdar://problem/39386359

        Reviewed by Dean Jackson.

        * Configurations/WebKit.xcconfig:

2018-04-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Suppress UI for inputs of type file in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=184556
        <rdar://problem/39062239>

        Reviewed by Andy Estes.

        When running in this mode, we don't have the facilities to present document picker UI. For now, just make this
        feature fail gracefully.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel presentWithParameters:resultListener:]):
        (-[WKFileUploadPanel platformSupportsPickerViewController]):

2018-04-12  Megan Gardner  <megan_gardner@apple.com>

        Remove block selection code
        https://bugs.webkit.org/show_bug.cgi?id=184470

        Reviewed by Timothy Hatcher.
        
        Remove block selection code that isn't run and is currently not even used.
        Had to put this back in for a bug in the mid-year release, but we're past that
        so it's time for this to go away.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::stopAssistingNode):
        (WebKit::PageClientImpl::didUpdateBlockSelectionWithTouch): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toSelectionHandlePosition): Deleted.
        (-[WKContentView _didUpdateBlockSelectionWithTouch:withFlags:growThreshold:shrinkThreshold:]): Deleted.
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]): Deleted.
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::saveImageToLibrary):
        (WebKit::WebPageProxy::updateBlockSelectionWithTouch): Deleted.
        (WebKit::WebPageProxy::didUpdateBlockSelectionWithTouch): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::rangeAtWordBoundaryForPosition):
        (WebKit::distanceBetweenRectsForPosition): Deleted.
        (WebKit::rectsEssentiallyTheSame): Deleted.
        (WebKit::unionDOMRanges): Deleted.
        (WebKit::computeEdgeCenter): Deleted.
        (WebKit::WebPage::expandedRangeFromHandle): Deleted.
        (WebKit::WebPage::contractedRangeFromHandle): Deleted.
        (WebKit::WebPage::computeExpandAndShrinkThresholdsForHandle): Deleted.
        (WebKit::WebPage::rangeForBlockAtPoint): Deleted.
        (WebKit::shouldExpand): Deleted.
        (WebKit::WebPage::changeBlockSelection): Deleted.
        (WebKit::WebPage::updateBlockSelectionWithTouch): Deleted.
        
2018-04-12  Megan Gardner  <megan_gardner@apple.com>

        Don't have selections get stuck in editable elements
        https://bugs.webkit.org/show_bug.cgi?id=184483

        Reviewed by Timothy Hatcher.
        
        When selecting in editable elements, if the keyboard does not come up, which is not required,
        then the selections are stuck in that element. If you try and select something in web content,
        it will only select in the editable element. By clearing the assisted node when clearing a selection,
        it no longer sticks. Also, textSelectionAssistant should not be used as if we are currently editing. 
        Change it to the function we created for that purpose in a pervious patch.

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

2018-04-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Move libWPEWebInspectorResources.so to pkglibdir
        https://bugs.webkit.org/show_bug.cgi?id=184379

        Reviewed by Žan Doberšek.

        This is important to allow parallel installation.

        * PlatformWPE.cmake:

2018-04-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Improve include hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=184376

        Reviewed by Žan Doberšek.

        Install our headers under /usr/include/wpe-webkit-0.1/wpe instead of
        /usr/include/wpe-0.1/WPE/wpe. Too much WPE, not enough WebKit!

        * PlatformWPE.cmake:
        * wpe/wpe-webkit.pc.in:

2018-04-11  Andy Estes  <aestes@apple.com>

        [iOS] Add a mechanism for holding Wi-Fi assertions
        https://bugs.webkit.org/show_bug.cgi?id=184520
        <rdar://problem/39025726>

        Reviewed by Sam Weinig.

        Add plumbing for holding a Wi-Fi assertion on iOS as long as there are active
        network data tasks. This functionality is turned off by default right now.

        * Configurations/Network-iOS.entitlements:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/WiFiAssertionHolder.cpp: Added.
        (WebKit::ensureWiFiManagerClient): Create a global WiFiManagerClient when needed.
        (WebKit::WiFiAssertionHolder::WiFiAssertionHolder): If this is the first active
        Wi-Fi assertion holder, set the client's type to kWiFiClientTypeBackground.
        (WebKit::WiFiAssertionHolder::~WiFiAssertionHolder): If the last active Wi-Fi
        assertion holder is being destroyed, set the client's type back to
        kWiFiClientTypeNormal.
        * NetworkProcess/cocoa/WiFiAssertionHolder.h: Added.
        * Platform/Logging.h: Added a logging channel for Wi-Fi assertions.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * WebKit.xcodeproj/project.pbxproj:

2018-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use always complex text code path
        https://bugs.webkit.org/show_bug.cgi?id=183285

        Reviewed by Michael Catanzaro.

        Now that we have branched for 2.20, it's a good time to try using complex text path always. We can simply force
        it for GTK+ port and see how it works for the whole release cycle and if we don't notice any issues or
        performance regressions we release 2.22 with complex text path forced. A debug env variable is added to switch
        back to auto without having to recompile. After 2.22 is released we can make a final decision and remove the env
        variable.

        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Force complex text code path unless
        WEBKIT_FORCE_COMPLEX_TEXT is present and set to 0.

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

        [WPE] Make WebKitWebViewBackend object mandatory for webkit_web_view_new*() constructors
        https://bugs.webkit.org/show_bug.cgi?id=184513

        Reviewed by Michael Catanzaro.

        webkit_web_view_new*() constructors should always expect a non-null
        WebKitWebViewBackend object, forcing the user to specify how the
        wpe_view_backend object is managed for the WebKitWebView that's being
        created.

        webkitWebViewBackendCreateDefault() and the default
        _WebKitWebViewBackend() constructor are removed. WPE-specific
        webkit_web_view_new*() entrypoints are updated to bail if the passed-in
        WebKitWebViewBackend object is null. Documentation is updated
        accordingly.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewConstructed):
        * UIProcess/API/wpe/WebKitWebViewBackend.cpp:
        (webkitWebViewBackendCreateDefault): Deleted.
        * UIProcess/API/wpe/WebKitWebViewBackendPrivate.h:
        * UIProcess/API/wpe/WebKitWebViewWPE.cpp:
        (webkit_web_view_new):
        (webkit_web_view_new_with_context):
        (webkit_web_view_new_with_related_view):
        (webkit_web_view_new_with_settings):
        (webkit_web_view_new_with_user_content_manager):

2018-04-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl][WebKit] Implement NetworkDataTaskCurl
        https://bugs.webkit.org/show_bug.cgi?id=184488

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp: Added.
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl):
        (WebKit::NetworkDataTaskCurl::~NetworkDataTaskCurl):
        (WebKit::NetworkDataTaskCurl::resume):
        (WebKit::NetworkDataTaskCurl::suspend):
        (WebKit::NetworkDataTaskCurl::cancel):
        (WebKit::NetworkDataTaskCurl::invalidateAndCancel):
        (WebKit::NetworkDataTaskCurl::state const):
        (WebKit::NetworkDataTaskCurl::createCurlRequest):
        (WebKit::NetworkDataTaskCurl::curlDidSendData):
        (WebKit::NetworkDataTaskCurl::curlDidReceiveResponse):
        (WebKit::NetworkDataTaskCurl::curlDidReceiveBuffer):
        (WebKit::NetworkDataTaskCurl::curlDidComplete):
        (WebKit::NetworkDataTaskCurl::curlDidFailWithError):
        (WebKit::NetworkDataTaskCurl::shouldRedirectAsGET):
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCurl::tryHttpAuthentication):
        (WebKit::NetworkDataTaskCurl::restartWithCredential):
        (WebKit::NetworkDataTaskCurl::appendCookieHeader):
        (WebKit::NetworkDataTaskCurl::handleCookieHeaders):
        * NetworkProcess/curl/NetworkDataTaskCurl.h: Added.
        * PlatformWin.cmake:

2018-04-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Support pushing input view controllers onto the navigation stack
        https://bugs.webkit.org/show_bug.cgi?id=184397
        <rdar://problem/39265294>

        Reviewed by Timothy Hatcher.

        Currently, all input view controllers in extra zoom mode are presented modally. However, the latest iteration of
        the HI specification depicts most of these view controllers (with the exception of time pickers) being presented
        and dismissed via navigation stack. Since WebKit's iOS API surface doesn't force clients to embed WKWebViews
        within a view controller with a corresponding UINavigationController, we cannot always guarantee that UI
        presented when focusing form controls in a web view will be pushed onto the navigation stack; as such, the
        approach taken in this patch will automatically allow WKWebView clients that already embed WKWebViews within a
        UINavigationController to hook into this behavior, with modal presentation as a fallback.

        At a high level, this patch makes the following tweaks to implement this behavior:

        1. Store the currently presented view controller using a single member variable
           (_presentedFullScreenInputViewController) instead of having one for each type. This makes bookkeepping around
           which view controller to present or dismiss much more straightforward.

        2. Replace WKFocusedFormControlViewController with just WKFocusedFormControlView. This addresses problems with
           pushing an input view controller onto the navigation stack after presenting the focused form control view
           controller modally. Now, we'll only need to present or push one view controller on the navigation stack.

        3. Remove -handleWheelEvent: forwarding to date and time pickers. Pushing date picker view controllers onto the
           navigation stack rather than presenting them modally means that we end up in a state where neither the
           WKContentView nor WKTimePickerViewController are first responder, which renders time pickers unusable.
           Instead, have the WKTimePickerViewController actually become first responder when presenting.

        4. Lastly, and most importantly: change -presentViewControllerForCurrentAssistedNode and
           -dismissAllInputViewControllers to try and push onto a navigation stack if possible, and fall back to modal
           presentation.

        * UIProcess/ios/WKContentViewInteraction.h:

        Remove the separate member variables for each type of input view controller, and instead have one to keep track
        of the current (and only) presented input view controller.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _willStartScrollingOrZooming]):
        (-[WKContentView _didEndScrollingOrZooming]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _stopAssistingNode]):

        Boilerplate renaming of _focusedFormControlViewController => _focusedFormControlView.

        (-[WKContentView reloadContextViewForPresentedListViewController]):

        Adjust for consolidation of the different input view controller member variables to a single member (see changes
        in WKContentViewInteraction.h).

        (-[WKContentView addFocusedFormControlOverlay]):
        (-[WKContentView removeFocusedFormControlOverlay]):
        (-[WKContentView presentViewControllerForCurrentAssistedNode]):
        (-[WKContentView dismissAllInputViewControllers:]):

        Add an `animated` argument. In the case where a different view controller was presented after presenting the
        input view controller, this allows us to dismiss the other view controller with animation, and directly reveal
        the web view or focus overlay underneath.

        (-[WKContentView focusedFormControlViewDidSubmit:]):
        (-[WKContentView focusedFormControlViewDidCancel:]):
        (-[WKContentView focusedFormControlViewDidBeginEditing:]):
        (-[WKContentView rectForFocusedFormControlView:]):
        (-[WKContentView nextRectForFocusedFormControlView:]):
        (-[WKContentView previousRectForFocusedFormControlView:]):
        (-[WKContentView scrollViewForFocusedFormControlView:]):
        (-[WKContentView actionNameForFocusedFormControlView:]):
        (-[WKContentView focusedFormControlViewDidRequestNextNode:]):
        (-[WKContentView focusedFormControlViewDidRequestPreviousNode:]):
        (-[WKContentView hasNextNodeForFocusedFormControlView:]):
        (-[WKContentView hasPreviousNodeForFocusedFormControlView:]):
        (-[WKContentView focusedFormControllerDidUpdateSuggestions:]):

        Boilerplate renaming of focus overlay delegate methods.

        (-[WKContentView _wheelChangedWithEvent:]):

        Remove event forwarding hacks for date and time inputs, now that they directly become first responder.

        (-[WKContentView presentFocusedFormControlViewController:]): Deleted.
        (-[WKContentView dismissFocusedFormControlViewController:]): Deleted.

        Renamed to -addFocusedFormControlOverlay and -removeFocusedFormControlOverlay.

        (-[WKContentView dismissAllInputViewControllers]): Deleted.
        (-[WKContentView focusedFormControlControllerDidSubmit:]): Deleted.
        (-[WKContentView focusedFormControlControllerDidCancel:]): Deleted.
        (-[WKContentView focusedFormControlControllerDidBeginEditing:]): Deleted.
        (-[WKContentView rectForFocusedFormControlController:inCoordinateSpace:]): Deleted.
        (-[WKContentView nextRectForFocusedFormControlController:inCoordinateSpace:]): Deleted.
        (-[WKContentView previousRectForFocusedFormControlController:inCoordinateSpace:]): Deleted.
        (-[WKContentView scrollViewForFocusedFormControlController:]): Deleted.
        (-[WKContentView actionNameForFocusedFormControlController:]): Deleted.
        (-[WKContentView focusedFormControlControllerDidRequestNextNode:]): Deleted.
        (-[WKContentView focusedFormControlControllerDidRequestPreviousNode:]): Deleted.
        (-[WKContentView hasNextNodeForFocusedFormControlController:]): Deleted.
        (-[WKContentView hasPreviousNodeForFocusedFormControlController:]): Deleted.
        * UIProcess/ios/forms/WKFocusedFormControlViewController.h: Removed.
        * UIProcess/ios/forms/WKFocusedFormControlViewController.mm: Removed.

        Completely remove WKFocusedFormControlViewController; instead, just directly place the focused form overlay in
        the WKWebView's hierarchy. In the case where we have a navigation stack to push to, we can no longer modally
        present the focused form overlay as a separate view controller using the UINavigationController, and then
        immediately push the input view controller on top of the navigation stack, since the navigation stack isn't
        updated until after the animation of the focused form overlay presentation is complete. Rather than hack around
        this limitation by dispatch_after-ing after presenting the overlay's view controller, we should just make the
        overlay a view. This also fixes the case where a client embedding a WKWebView that is smaller than the bounds of
        the screen will no longer see the entire screen dim when focusing an input, but instead, just the web content.

        * WebKit.xcodeproj/project.pbxproj:

2018-04-11  Youenn Fablet  <youenn@apple.com>

        Pass FetchOptions and SecurityOrigin as load parameters from WebProcess to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=184374

        Reviewed by Chris Dumez.

        Pass full FetchOptions parameters as part of NetworkResourceLoadParameters.
        This will allow handling redirection mode as well as credentials in case of cross origin redirections.
        In case of SameOrigin credentials and there is a redirection from same-origin to cross-origin,
        we will be able to stop using credentials without going to WebProcess.

        To handle properly cross-origin checks, we have to be able to use SecurityOrigin as in WebProcess.
        We make WebProcess sends Origin Access White list information to NetworkProcess.
        This allows supporting the white list when doing loading in NetworkProcess.
        This only works consistently if all WebProcesses share the same whitelist.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::addOriginAccessWhitelistEntry):
        (WebKit::NetworkConnectionToWebProcess::removeOriginAccessWhitelistEntry):
        (WebKit::NetworkConnectionToWebProcess::resetOriginAccessWhitelists):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::continueCheckingRequest):
        (WebKit::NetworkLoadChecker::checkCORSRequest):
        (WebKit::NetworkLoadChecker::checkCORSRedirectedRequest):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        (WebKit::NetworkLoadChecker::doesNotNeedCORSCheck const):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::create):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        (WebKit::PingLoad::willPerformHTTPRedirection):
        * NetworkProcess/PingLoad.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::removeOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::resetOriginAccessWhitelists):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::startPingLoad):

2018-04-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] WaylandCompositorDisplay leaks its wl_display
        https://bugs.webkit.org/show_bug.cgi?id=184406

        Reviewed by Carlos Garcia Campos.

        Since we allocate our own wl_display here, need to chain up to the parent constructor
        passing NativeDisplayOwned::Yes, or it won't ever be released. Move the initialize call to
        the create function to ensure it's called after the constructor completes.

        * WebProcess/gtk/WaylandCompositorDisplay.cpp:
        (WebKit::WaylandCompositorDisplay::create): Fix a log message (drive-by).
        (WebKit::WaylandCompositorDisplay::WaylandCompositorDisplay):

2018-04-11  Youenn Fablet  <youenn@apple.com>

        Use more r-values in NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=184478

        Reviewed by Chris Dumez.

        Pass load parameters as r-values to remove some unneeded copies.
        Ditto for ResourceRequest inside NetworkResourceLoader.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::validateCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:

2018-04-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Missing label when focusing a <select> with a title attribute but no associated <label>
        https://bugs.webkit.org/show_bug.cgi?id=184352
        <rdar://problem/39237683>

        Reviewed by Andy Estes.

        Currently, AssistedNodeInformation only sends the `title` of input elements to the UI process. This means that
        any information requested in the UI process that is dependent on the `title` of the focused element is broken
        in the case of select elements. An existing example of this is the title of the table view controller used to
        present select menus on iPad.

        To fix this, we simply send the `title` of the focused element across, as long as the focused element is an
        HTMLElement. This ensures that there's label text when focusing unlabeled select elements with titles in extra
        zoom mode, and also fixes a currenly broken codepath where we show the title of the select in the presented view
        controller's title.

        Test: fast/forms/ios/ipad/select-with-title.html

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

        Add new testing SPI to fetch the title of the UITableViewController presented for the currently focused select
        element.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectFormPopoverTitle]):
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl selectFormPopoverTitle]):
        * UIProcess/ios/forms/WKFormSelectPopover.h:
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]):
        (-[WKSelectPopover tableViewController]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:

        Always send the title across if the focused node is an HTMLElement.

        (WebKit::WebPage::getAssistedNodeInformation):

2018-04-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230508.

        Breaks internal builds.

        Reverted changeset:

        "Remove block selection code"
        https://bugs.webkit.org/show_bug.cgi?id=184470
        https://trac.webkit.org/changeset/230508

2018-04-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations on by default
        https://bugs.webkit.org/show_bug.cgi?id=184491

        Reviewed by Simon Fraser.

        * Shared/WebPreferences.yaml:

2018-04-10  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r230468

        Roll out an assertion added in r230468 that should not be present
        until https://bugs.webkit.org/show_bug.cgi?id=184451 is landed.

        * Shared/mac/HangDetectionDisablerMac.mm:
        (WebKit::setClientsMayIgnoreEvents):

2018-04-10  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed follow-up to r230468.

        Switch some RELEASE_ASSERTs in hot codepaths to normal DEBUG asserts.

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

2018-04-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Add UserAgentWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=184438

        Reviewed by Michael Catanzaro.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformUserAgent const):
        Use WebCore::standardUserAgentForURL.

2018-04-10  Megan Gardner  <megan_gardner@apple.com>

        Remove block selection code
        https://bugs.webkit.org/show_bug.cgi?id=184470

        Reviewed by Timothy Hatcher.
        
        Remove block selection code that isn't run and is currently not even used.
        Had to put this back in for a bug in the mid-year release, but we're past that
        so it's time for this to go away.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::stopAssistingNode):
        (WebKit::PageClientImpl::didUpdateBlockSelectionWithTouch): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toSelectionHandlePosition): Deleted.
        (-[WKContentView _didUpdateBlockSelectionWithTouch:withFlags:growThreshold:shrinkThreshold:]): Deleted.
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]): Deleted.
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::saveImageToLibrary):
        (WebKit::WebPageProxy::updateBlockSelectionWithTouch): Deleted.
        (WebKit::WebPageProxy::didUpdateBlockSelectionWithTouch): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::rangeAtWordBoundaryForPosition):
        (WebKit::distanceBetweenRectsForPosition): Deleted.
        (WebKit::rectsEssentiallyTheSame): Deleted.
        (WebKit::unionDOMRanges): Deleted.
        (WebKit::computeEdgeCenter): Deleted.
        (WebKit::WebPage::expandedRangeFromHandle): Deleted.
        (WebKit::WebPage::contractedRangeFromHandle): Deleted.
        (WebKit::WebPage::computeExpandAndShrinkThresholdsForHandle): Deleted.
        (WebKit::WebPage::rangeForBlockAtPoint): Deleted.
        (WebKit::shouldExpand): Deleted.
        (WebKit::WebPage::changeBlockSelection): Deleted.
        (WebKit::WebPage::updateBlockSelectionWithTouch): Deleted.

2018-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add a mechanism to zoom to fixed scales when double tapping in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=184435
        <rdar://problem/38726260>

        Reviewed by Dean Jackson.

        Adds support for an alternate codepath when computing a zoom rect when double tapping that doesn't take the hit-
        tested node into account, and instead cycles the zoom scale between 2 fixed values (in addition to the initial
        scale). In the next patch, these fixed scales will be determined by computing zoom scales needed to make most of
        the text on the page legible (i.e. the first text legibility zoom scale), and another to make all of the text on
        the page legible, with the exception of outliers (this is the second text legibility zoom scale).

        See comments below for more detail.

        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/Cocoa/ViewGestureController.messages.in:
        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/SmartMagnificationController.messages.in:
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::didCollectGeometryForSmartMagnificationGesture):
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::dispatchDidCollectGeometryForSmartMagnificationGesture):

        Rename the boolean `isReplacedElement` argument to `fitEntireRect` instead. The UI process only uses this on iOS
        to determine whether or not to fit the entire element rect to the viewport and add padding. This patch renames
        this variable because we are not zooming to a replaced element in the case where text legibility on the page
        (rather than element geometry) is being used to figure out the zoom scale, but we still want to fit the entire
        target rect to the viewport.

        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):

        If text legiblity zoom scaling is preferred, then compute first and second-level text legibility zoom scales to
        zoom to upon double tap (where the second zoom scale is greater than the first). To choose a target zoom
        scale, choose the lowest target zoom scale that is at least a small amount less than the current scale. If
        neither of the two scales fulfill this description, then zoom back out to the initial scale. This has the effect
        of consistently cycling between all three zoom scales as the user double taps.

        (WebKit::ViewGestureGeometryCollector::computeTextLegibilityScales):

        Introduce a new helper method that computes and caches target scales to zoom to when double tapping to zoom. If
        a cached pair of target scales is already present, it skips this computation and immediately returns it.

        (WebKit::ViewGestureGeometryCollector::computeZoomInformationForNode):
        (WebKit::ViewGestureGeometryCollector::computeMinimumAndMaximumViewportScales const):

        Factor out logic to compute min and max zoom scales into a separate helper, and call it from both
        computeZoomInformationForNode and computeTextLegibilityScales.

        (WebKit::ViewGestureGeometryCollector::mainFrameDidLayout):

        Invalidate cached text legibility scales when layout is triggered.

        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameDidLayout):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::viewportConfiguration const):

        Expose WebPage's ViewportConfiguration as a const reference.

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

        Adds a platform hook for opting into text-legibility-based zoom scaling instead of regular hit-testing-based
        zoom scaling heuristics.

2018-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix availability annotations for _WKAttachment SPI
        https://bugs.webkit.org/show_bug.cgi?id=184473
        <rdar://problem/39319732>

        Reviewed by Dan Bernstein.

        _WKAttachmentInfo is available in WK_MAC_TBA and WK_IOS_TBA, but the SPI method -[_WKAttachment requestInfo:]
        is currently available in macOS 10.13.4 and iOS 11.3. Instead, the availability of this SPI should match the
        availability of the SPI object it depends on.

        * UIProcess/API/Cocoa/_WKAttachment.h:

2018-04-10  Chris Dumez  <cdumez@apple.com>

        Avoid constructing a service worker RegistrationStore for private sessions
        https://bugs.webkit.org/show_bug.cgi?id=184463
        <rdar://problem/36613948>

        Reviewed by Youenn Fablet.

        Avoid constructing a service worker RegistrationStore for private sessions since there
        is no need for persistence and the registrationDatabaseDirectory is the empty string in
        such cases.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::initializeWebsiteDataStore):

2018-04-10  Andy Estes  <aestes@apple.com>

        [iOS] Navigate to URL and page number annotations in WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=184410

        Reviewed by Timothy Hatcher.

        Implemented navigation to URL and page number (same-document) link annotations in PDFs.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _scrollToURLFragment:]):
        (-[WKPDFView web_didSameDocumentNavigation:]):
        (-[WKPDFView pdfHostViewController:updatePageCount:]):
        (-[WKPDFView pdfHostViewController:goToURL:]):
        (-[WKPDFView pdfHostViewController:goToPageIndex:withViewFrustum:]):

2018-04-10  Andy Estes  <aestes@apple.com>

        [iOS] WKPDFView should conform to _WKWebViewPrintProvider
        https://bugs.webkit.org/show_bug.cgi?id=184471

        Reviewed by Dan Bernstein.

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

        The print provider will always be either _contentView or _customContentView, but
        might not be _currentContentView.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _wk_pageCountForPrintFormatter:]):

        Asked _hostViewController for the page count, clamped to 1 if
        -[_WKWebViewPrintFormatter snapshotFirstPage] is YES.

        (-[WKPDFView _wk_printedDocument]):

        Created a CGPDFDocumentRef from _data and returned it.

2018-04-10  Youenn Fablet  <youenn@apple.com>

        Beacon redirect responses should be CORS validated
        https://bugs.webkit.org/show_bug.cgi?id=184378

        Reviewed by Chris Dumez.

        Add CORS checks to any redirection response if mode is CORS.
        Update response tainting and redirected accordingly.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::validateResponse):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::willPerformHTTPRedirection):

2018-04-10  Sihui Liu  <sihui_liu@apple.com>

        Loading of multipart response was cancelled because of content policy set in WebFrameLoaderClient::dispatchDecidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=184268
        <rdar://problem/39144446>

        Reviewed by Chris Dumez.

        Webpage for multipart stream responses failed to refresh because content policy was set to 
        be ignore when provisonalDocumentLoader was null and navigation ID could not be retrieved. 
        As loading should not stop in this case, we set navigation ID 0 and still ask for content 
        policy.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):

2018-04-10  Andy Estes  <aestes@apple.com>

        [iOS] Use PDFKit to render PDFs in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=184387

        Reviewed by Beth Dakin.

        Adopted PDFHostViewController for rendering PDFs in WKWebView.

        This patch implements rendering the PDF document and page number indicator. Link
        navigation, find-in-page, and printing will be implemented in follow-up patches.

        WKLegacyPDFView is still the default PDF view.

        * Configurations/WebKit.xcconfig:

        Linked WebKit with PDFKit on iOS.

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

        When WKPDFView loads a PDF document, it replaces itself with a view vended by
        PDFHostViewController as the WKScrollView's content view. Abstracted WKWebView's
        concept of the "current content view" to be either the WKContentView or a view of
        the custom content view's choosing (-web_contentView).

        (-[WKWebView scrollViewWillBeginZooming:withView:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):

        Forwarded these calls to _customContentView if it responds to the equivalent
        WKWebViewContentProvider selectors.

        * UIProcess/Cocoa/WKWebViewContentProvider.h:

        Defined new protocol selectors.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry init]):
        * UIProcess/ios/WKLegacyPDFView.h:
        * UIProcess/ios/WKLegacyPDFView.mm:

        Changed ENABLE(WKPDFVIEW) to ENABLE(WKLEGACYPDFVIEW).

        (-[WKLegacyPDFView web_contentView]):

        Added. Returns self as the content view.

        * UIProcess/ios/WKPDFView.h: Added.
        * UIProcess/ios/WKPDFView.mm: Added.
        (-[WKPDFView dealloc]):

        Removed the host view and page number indicator from their superviews.

        (-[WKPDFView gestureRecognizerShouldBegin:]):

        Forwarded to _hostViewController.

        (-[WKPDFView web_initWithFrame:webView:]):

        Set ours and the scroll view's background color to UIColor.grayColor to match
        WKLegacyPDFView.

        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):

        Created a PDFHostViewController and set its root view as the scroll view's content
        view after removing the WKPDFView itself. This allows WKPDFView to act as a
        placeholder content view until the PDF is loaded. Added the host view controller's
        page number indicator to the fixed overlay view. Finally, loaded the PDF document
        by calling -[PDFHostViewController setDocumentData:withScrollView:].

        (-[WKPDFView _offsetForPageNumberIndicator]):

        Computed an offset for the page number indicator like WKLegacyPDFView did, taking
        into account the overlaid accessory views inset, computed unobscured safe area
        inset, and computed obscured inset.

        (-[WKPDFView _movePageNumberIndicatorToPoint:animated:]):

        Moved the page number indicator using the margin and animation duration from
        WKLegacyPDFView.

        (-[WKPDFView _updateLayoutAnimated:]):

        Added a convenience method to update the PDF view layout and position the page
        number indicator.

        (-[WKPDFView web_setMinimumSize:]):

        Updated our own frame in case we are still the placeholder content view.
        Called -_updateLayoutAnimated:.

        (-[WKPDFView web_setOverlaidAccessoryViewsInset:]):

        Stored the inset and called -_updateLayoutAnimated:.

        (-[WKPDFView web_computedContentInsetDidChange]):

        Called -_updateLayoutAnimated:.

        (-[WKPDFView web_setFixedOverlayView:]):

        Stored the fixed overlay view.

        (-[WKPDFView web_didSameDocumentNavigation:]):
        (-[WKPDFView web_countStringMatches:options:maxCount:]):
        (-[WKPDFView web_findString:options:maxCount:]):
        (-[WKPDFView web_hideFindUI]):

        Added FIXMEs.

        (-[WKPDFView web_contentView]):

        If there is a host view controller, return its root view. Otherwise, return self.

        (-[WKPDFView web_scrollViewDidScroll:]):
        (-[WKPDFView web_scrollViewWillBeginZooming:withView:]):
        (-[WKPDFView web_scrollViewDidEndZooming:withView:atScale:]):
        (-[WKPDFView web_scrollViewDidZoom:]):

        Called -[PDFHostViewController updatePDFViewLayout].

        (-[WKPDFView web_dataRepresentation]):

        Returned _data.

        (-[WKPDFView web_suggestedFilename]):

        Returned _suggestedFilename.

        (-[WKPDFView web_isBackground]):

        Returned self.isBackground.

        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_contentView]):

        Added. Returns self as the content view.

        * WebKit.xcodeproj/project.pbxproj:

2018-04-10  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Race condition when destroying webprocesses
        https://bugs.webkit.org/show_bug.cgi?id=184445

        Reviewed by Carlos Garcia Campos.

        Ensure that the WebProcess is properly closing its pages when it's exiting because
        the UIProcess has invalidated the IPC connection.

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

2018-04-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add missing availability macros after r230462
        https://bugs.webkit.org/show_bug.cgi?id=184426

        Reviewed by Timothy Hatcher.

        Annotate new SPI added in r230462 with the appropriate availability macros.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2018-04-09  Brent Fulgham  <bfulgham@apple.com>

        Add ProcessPrivilege assertions to places that access NSApp
        https://bugs.webkit.org/show_bug.cgi?id=184322
        <rdar://problem/39194560>

        Reviewed by Per Arne Vollan.

        Add ProcessPrivilege assertions to places where we interact with NSApp so
        that we can prevent accidentally using them in the WebContent process.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::stopNSAppRunLoop):
        * Shared/mac/HangDetectionDisablerMac.mm:
        (WebKit::setClientsMayIgnoreEvents):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::pluginFocusOrWindowFocusChanged):
        (WebKit::WebViewImpl::validateUserInterfaceItem):
        (WebKit::WebViewImpl::startSpeaking):
        (WebKit::WebViewImpl::stopSpeaking):
        (WebKit::applicationFlagsForDrag):
        (WebKit::WebViewImpl::doneWithKeyEvent):
        * UIProcess/Gamepad/mac/UIGamepadProviderMac.mm:
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::enterFullscreen):
        (WebKit::PluginProcessProxy::beginModal):
        (WebKit::PluginProcessProxy::endModal):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::~DisplayLink):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::setCursor):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getIsSpeaking):
        (WebKit::WebPageProxy::speak):
        (WebKit::WebPageProxy::stopSpeaking):
        (WebKit::WebPageProxy::startDisplayLink):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):

2018-04-09  John Wilander  <wilander@apple.com>

        Refactor Ignore HSTS code
        https://bugs.webkit.org/show_bug.cgi?id=184433
        <rdar://problem/39298238>

        Reviewed by Darin Adler.

        This patch refactors our ignore HSTS code. The convenience functions are moved
        out of CFNetwork SPI in PAL, and into where they are used. It also switches
        from performSelector: calls to straight function calls, after checking that
        there is a responder.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (schemeWasUpgradedDueToDynamicHSTS):
        (setIgnoreHSTS):
        (ignoreHSTS):
            Add convenience functions here since they were moved out of
            CFNetworkSPI.h.

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Rename UNUSED to BUNUSED
        https://bugs.webkit.org/show_bug.cgi?id=184093

        Reviewed by Yusuke Suzuki.

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

2018-04-09  Timothy Hatcher  <timothy@apple.com>

        Add support for setting a background color on WKWebView and WKView
        https://bugs.webkit.org/show_bug.cgi?id=184426

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKViewPrivate.h: Added _backgroundColor property.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _backgroundColor]): Added. Call through to WebViewImpl.
        (-[WKWebView _setBackgroundColor:]): Added. Call through to WebViewImpl.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Added _backgroundColor property.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _backgroundColor]): Added. Call through to WebViewImpl.
        (-[WKView _setBackgroundColor:]): Added. Call through to WebViewImpl.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setBackgroundColor): Added.
        (WebKit::WebViewImpl::backgroundColor const): Added.
        (WebKit::WebViewImpl::updateLayer): Use m_backgroundColor when set.

2018-04-09  Yousuke Kimoto <yousuke.kimoto@sony.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Add WebKit Shared/win event files for wincairo webkit
        https://bugs.webkit.org/show_bug.cgi?id=183043

        Reviewed by Brent Fulgham.

        * Shared/NativeWebKeyboardEvent.h:
        (WebKit::NativeWebKeyboardEvent::nativeEvent const):
        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::nativeEvent const):
        * Shared/NativeWebTouchEvent.h:
        * Shared/NativeWebWheelEvent.h:
        (WebKit::NativeWebWheelEvent::nativeEvent const):
        * Shared/win/NativeWebKeyboardEventWin.cpp: Copied from Source/WebKit/Shared/NativeWebMouseEvent.h.
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/win/NativeWebMouseEventWin.cpp: Copied from Source/WebKit/Shared/NativeWebMouseEvent.h.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/win/NativeWebTouchEventWin.cpp: Copied from Source/WebKit/Shared/NativeWebTouchEvent.h.
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/win/NativeWebWheelEventWin.cpp: Copied from Source/WebKit/Shared/NativeWebMouseEvent.h.
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
        * Shared/win/WebEventFactory.cpp: Added.
        (WebKit::relativeCursorPosition):
        (WebKit::point):
        (WebKit::horizontalScrollChars):
        (WebKit::verticalScrollLines):
        (WebKit::clickCount):
        (WebKit::IsKeyInDownState):
        (WebKit::modifiersForEvent):
        (WebKit::modifiersForCurrentKeyState):
        (WebKit::keyboardEventTypeForEvent):
        (WebKit::isSystemKeyEvent):
        (WebKit::isKeypadEvent):
        (WebKit::textFromEvent):
        (WebKit::unmodifiedTextFromEvent):
        (WebKit::keyIdentifierFromEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/win/WebEventFactory.h: Copied from Source/WebKit/Shared/NativeWebMouseEvent.h.
        (WebKit::createNativeEvent):

2018-04-09  Brent Fulgham  <bfulgham@apple.com>

        WebCore::EventHandler::targetPositionInWindowForSelectionAutoscroll is directly accessing NSScreen
        https://bugs.webkit.org/show_bug.cgi?id=184344
        <rdar://problem/39224969>

        Reviewed by Per Arne Vollan.

        The implementation of targetPositionInWindowForSelectionAutoscroll uses the display ID to get the
        screen boundaries of the current display. This causes a bunch of interaction with NSScreen that
        we do not want to allow in the WebContent process.

        Instead, we should just use the cached screen information the WebContent process already possesses.

        This patch makes the following changes:
        1. We now retrieve the screen rect of the page's display from the cache, rather than interacting with
           the WindowServer directly.
        2. Add a new 'toUserSpaceForPrimaryScreen' so we don't have to deal with a nil NSWindow when computing
           the user space version of the coordinates. A nil Window just means we want to get coordinates in
           terms of the primary display.
        3. Keep track of the primary display so we can refer to it later.
        4. Modify the IPC messages to include the primary display's ID so we can easily access it later.
        5. Modify the PlatformScreen methods to actually use the primary display when appropriate, rather
           than whichever screen happened to hash to the lowest value.

        Reviewed by Per Arne Vollan.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::displayReconfigurationCallBack): Update for new getScreenProperties implementation.
        (WebKit::WebProcessPool::initializeNewWebProcess): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setScreenProperties): Ditto.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Ditto.

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Add API version to library soname and pkg-config files
        https://bugs.webkit.org/show_bug.cgi?id=180608

        Reviewed by Žan Doberšek.

        * PlatformWPE.cmake:
        * wpe/wpe-webkit.pc.in:

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

        Fix the selection assistant selectionView build
        https://bugs.webkit.org/show_bug.cgi?id=184423
        <rdar://problem/39288235>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didExitStableState]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _updateChangedSelection:]):

2018-04-09  Megan Gardner  <megan_gardner@apple.com>

        Switch to UIWKTextInteractionAssistant for non-editable text
        https://bugs.webkit.org/show_bug.cgi?id=182834

        Switch to only using one assistant for text selection.

        Reviewed by Timothy Hatcher and Andy Estes.

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

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, move 'using namespace' back to the right place after r230429

        * Shared/glib/ProcessExecutablePathGLib.cpp:

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r230390.

        Broke accelerated compositing

        Reverted changeset:

        "[GTK] WaylandCompositorDisplay leaks its wl_display"
        https://bugs.webkit.org/show_bug.cgi?id=184406
        https://trac.webkit.org/changeset/230390

2018-04-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Disable fast clicking by default in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=184411
        <rdar://problem/38726867>

        Reviewed by Andy Estes.

        As it turns out, existing fast-clicking heuristics don't work so well in extra zoom mode. Even at device-width,
        since the page is scaled to fit within the viewport, having single taps take precedence over double taps leads
        to a confusing experience when trying to double tap to zoom further on content that contains links and other
        click targets. Revert to legacy behavior here by disabling these heuristics.

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

2018-04-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add an SPI hook for clients to opt in to focus overlay UI
        https://bugs.webkit.org/show_bug.cgi?id=184370
        <rdar://problem/39250494>

        Reviewed by Timothy Hatcher and Andy Estes.

        Add a new SPI hook for internal clients to opt in to showing the focused form control overlay. By default, the
        overlay is not shown.

        * UIProcess/API/Cocoa/_WKInputDelegate.h:

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Use GNU install directories
        https://bugs.webkit.org/show_bug.cgi?id=184377

        Reviewed by Carlos Garcia Campos.

        Merge ProcessExecutablePathGtk and ProcessExecutablePathWPE into ProcessExecutablePathGLib.
        WPE will now load its secondary processes from PKGLIBEXECDIR, like WebKitGTK+.

        * PlatformWPE.cmake:
        * Shared/glib/ProcessExecutablePathGLib.cpp: Renamed from Source/WebKit/Shared/gtk/ProcessExecutablePathGtk.cpp.
        (WebKit::getExecutablePath):
        (WebKit::findWebKitProcess):
        (WebKit::executablePathOfWebProcess):
        (WebKit::executablePathOfPluginProcess):
        (WebKit::executablePathOfNetworkProcess):
        (WebKit::executablePathOfStorageProcess):
        * Shared/wpe/ProcessExecutablePathWPE.cpp: Removed.
        * SourcesGTK.txt:
        * SourcesWPE.txt:

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] WaylandCompositorDisplay leaks its wl_display
        https://bugs.webkit.org/show_bug.cgi?id=184406

        Reviewed by Carlos Garcia Campos.

        * WebProcess/gtk/WaylandCompositorDisplay.cpp:
        (WebKit::WaylandCompositorDisplay::create): Fix a log message (drive-by).
        (WebKit::WaylandCompositorDisplay::WaylandCompositorDisplay): Fix the leak.

2018-04-08  Zan Dobersek  <zdobersek@igalia.com>

        Non-Cocoa ports use default directory for ServiceWorker data during testing
        https://bugs.webkit.org/show_bug.cgi?id=183784

        Reviewed by Youenn Fablet.

        Add API to WKWebsiteDataStore that enables setting and retrieving the
        service worker registration directory for a given data store object.
        This enables setting the temporary directory for testing purposes in
        WebKitTestRunner.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreCopyServiceWorkerRegistrationDirectory):
        (WKWebsiteDataStoreSetServiceWorkerRegistrationDirectory):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2018-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] WebKit should link to WebCore as a PRIVATE library if WebCore is a static library
        https://bugs.webkit.org/show_bug.cgi?id=184127

        Reviewed by Konstantin Tokarev.

        * CMakeLists.txt: Link with WebCore as private,
        WebCoreHeaderInterface as public to WebKit if WebCore is a static
        library.
        * CMakeLists.txt:
        * PlatformGTK.cmake: Added PRIVATE keyword for WebKit_LIBRARIES.
        * PlatformWPE.cmake: Ditto.
        * PlatformWin.cmake: Ditto.

2018-04-08  Andy Estes  <aestes@apple.com>

        [iOS] WKContentView and WKLegacyPDFView should share application state tracking logic
        https://bugs.webkit.org/show_bug.cgi?id=184402

        Reviewed by Dan Bernstein.

        WKContentView and WKLegacyPDFView have nearly identical logic for tracking
        application foreground state. Let's share it so we can more easily create new
        content views with proper application state tracking.

        * UIProcess/ios/WKApplicationStateTrackingView.h: Added.
        * UIProcess/ios/WKApplicationStateTrackingView.mm: Added.
        (-[WKApplicationStateTrackingView initWithFrame:webView:]):
        (-[WKApplicationStateTrackingView willMoveToWindow:]):
        (-[WKApplicationStateTrackingView didMoveToWindow]):
        (-[WKApplicationStateTrackingView _applicationDidEnterBackground]):
        (-[WKApplicationStateTrackingView _applicationDidCreateWindowContext]):
        (-[WKApplicationStateTrackingView _applicationDidFinishSnapshottingAfterEnteringBackground]):
        (-[WKApplicationStateTrackingView _applicationWillEnterForeground]):
        (-[WKApplicationStateTrackingView isBackground]):

        Moved common logic from WKContentView and WKLegacyPDFView into
        WKApplicationStateTrackingView.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        (-[WKContentView willMoveToWindow:]):
        (-[WKContentView _applicationDidCreateWindowContext]):
        (-[WKContentView didMoveToWindow]): Deleted.
        (-[WKContentView isBackground]): Deleted.
        (-[WKContentView _applicationDidEnterBackground]): Deleted.
        (-[WKContentView _applicationDidFinishSnapshottingAfterEnteringBackground]): Deleted.
        (-[WKContentView _applicationWillEnterForeground]): Deleted.

        Made WKContentView a subclass of WKApplicationStateTrackingView.

        * UIProcess/ios/WKLegacyPDFView.h:
        * UIProcess/ios/WKLegacyPDFView.mm:
        (-[WKLegacyPDFView web_initWithFrame:webView:]):
        (-[WKLegacyPDFView web_isBackground]):
        (-[WKLegacyPDFView _applicationWillEnterForeground]):
        (-[WKLegacyPDFView willMoveToWindow:]): Deleted.
        (-[WKLegacyPDFView didMoveToWindow]): Deleted.
        (-[WKLegacyPDFView _applicationDidEnterBackground]): Deleted.
        (-[WKLegacyPDFView _applicationDidCreateWindowContext]): Deleted.
        (-[WKLegacyPDFView _applicationDidFinishSnapshottingAfterEnteringBackground]): Deleted.

        Made WKLegacyPDFView a subclass of WKApplicationStateTrackingView.

        * WebKit.xcodeproj/project.pbxproj:

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

        [Cocoa] Keep library validation disabled for WebContent.Development
        https://bugs.webkit.org/show_bug.cgi?id=184393

        Reviewed by Anders Carlsson.

        * Configurations/WebContent.Development.entitlements: Added. Includes the
          com.apple.security.cs.disable-library-validation entitlement set to true.
        * Configurations/WebContentService.Development.xcconfig: Set CODE_SIGN_ENTITLEMENTS to the
          above.
        * WebKit.xcodeproj/project.pbxproj: Added reference to new file.

2018-04-06  Brian Burg  <bburg@apple.com>

        REGRESSION(r228371): WebAutomationSession::deleteAllCookies doesn't delete some cookies
        https://bugs.webkit.org/show_bug.cgi?id=184334
        <rdar://problem/39212863>

        Reviewed by Timothy Hatcher.

        When WebDriver adds a cookie for 'localhost', it actually uses the domain '.localhost' per RFC.
        When deleting cookies, we first fetch all cookies matching the document's hostname, and
        then delete them one by one. However, this code path does not add the dot prefix. This causes
        no cookies to match the requested domain, and thus none of them are deleted.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::domainByAddingDotPrefixIfNeeded): Extract this helper method.
        (WebKit::WebAutomationSession::addSingleCookie): Use helper method.
        (WebKit::WebAutomationSession::deleteAllCookies): Add a dot prefix when
        requesting to delete all cookies for a hostname.

2018-04-06  Youenn Fablet  <youenn@apple.com>

        Response headers should be filtered when sent from NetworkProcess to WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=184310

        Reviewed by Ryosuke Niwa.

        Pass destination parameter to NetworkResourceLoader.
        Use new sanitization routine to filter response headers as needed:
        - Cross-origin routines are filtered by removing any non CORS allowed headers.
        - Same-origin responses are filtered by removing non used headers, except when filtering would be visible by JS (XHR, fetch).
        In all cases, Set-Cookie/Set-Cookie2 headers are filtered out.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::sanitizeResponseIfPossible):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updatePreferencesStore):

2018-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        Make all sync IPCs during ScriptDisallowedScope set DoNotProcessIncomingMessagesWhenWaitingForSyncReply
        https://bugs.webkit.org/show_bug.cgi?id=182449
        <rdar://problem/39222541>

        Reviewed by Chris Dumez.

        Release assert that a sync IPC inside ScriptDisallowedScope sets DoNotProcessIncomingMessagesWhenWaitingForSyncReply
        to avoid executing arbitrary scripts as a result of processing incoming sync IPCs.

        * Platform/IPC/Connection.h:
        (IPC::Connection::sendSync): Added the release assertion.

2018-04-05  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r230223): LayoutTest http/tests/contentextensions/css-display-none-overflows-rule-data-1.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=184306

        Reviewed by Ryosuke Niwa.

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

2018-04-05  Brent Fulgham  <bfulgham@apple.com>

        WebContent process is calling CGDisplayUsesInvertedPolarity
        https://bugs.webkit.org/show_bug.cgi?id=184337
        <rdar://problem/39215702>

        Reviewed by Zalan Bujtas.

        The PlatformScreenMac code is still calling display-related routines directly, specifically
        CGDisplayUsesInvertedPolarity and CGDisplayUsesForceToGray. These should be brokered from
        the UIProcess.
        
        There's also no reason to avoid the brokering behavior on current WebKit builds. Remove
        the compile guards so all macOS builds use this behavior.
        
        Finally, add some ProcessPrivilege assertions to guard against accidentally calling these
        routines in the future.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess): Activate screen brokering code for all builds.
        * WebProcess/WebProcess.cpp: Ditto.
        * WebProcess/WebProcess.h: Ditto.
        * WebProcess/WebProcess.messages.in: Ditto.

2018-04-05  Brady Eidson  <beidson@apple.com>

        Process Swap on Navigation causes many webpages to hang due to attempted process swap for iframe navigations.
        <rdar://problem/39162236> and https://bugs.webkit.org/show_bug.cgi?id=184318

        Reviewed by Andy Estes.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision): Don't consider a swap if the navigation is not in the main frame.

2018-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        WebContent process sometimes hangs in WebProcess::ensureNetworkProcessConnection
        https://bugs.webkit.org/show_bug.cgi?id=184326

        Reviewed by Chris Dumez.

        The hang was caused by UI process never sending the reply back to GetNetworkProcessConnection
        due to m_pendingOutgoingMachMessage being set and the event handler for DISPATCH_MACH_SEND_POSSIBLE
        never getting called. This is because the event handler registration happens asynchronously,
        and may not have completed by the time we send the first IPC to the web content process
        in which case it can timeout and we may never get the callback.

        Fixed the hang by waiting for the event handler registration to be completed using
        dispatch_source_set_registration_handler. To do this, this patch adds a new boolean instance variable,
        m_isInitializingSendSource, to Connection which is set to true between the time mach port is created
        and until the event handler registration has been completed. platformCanSendOutgoingMessages returns
        false while m_isInitializingSendSource is set to prevent the attempt to send messages like we do when
        m_pendingOutgoingMachMessage is set to true.

        * Platform/IPC/Connection.h:
        (IPC::Connection::m_isInitializingSendSource): Added.
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate): Set m_isInitializingSendSource to false.
        (IPC::Connection::sendMessage): Assert that m_isInitializingSendSource is false.
        (IPC::Connection::platformCanSendOutgoingMessages const): Return false if m_isInitializingSendSource
        is set to true.
        (IPC::Connection::sendOutgoingMessage): Assert that m_isInitializingSendSource is false.
        (IPC::Connection::initializeSendSource): Set m_isInitializingSendSource to true temporarily until
        dispatch_source_set_registration_handler's callback is called. Resume and send any pending outgoing
        messages.
        (IPC::Connection::resumeSendSource): Extracted from initializeSendSource.

2018-04-05  Youenn Fablet  <youenn@apple.com>

        WebRTC data channel only applications require capture permissions for direct connections
        https://bugs.webkit.org/show_bug.cgi?id=174500
        <rdar://problem/34134281>

        Unreviewed.
        Changed the code to suppress: "error: unused variable 'error' [-Werror,-Wunused-variable]"
        Added some logging to this error case as a side bonus.

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

2018-04-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r229831): Test WebKit2.ProvisionalURLAfterWillSendRequestCallback times out since r229831
        https://bugs.webkit.org/show_bug.cgi?id=184293

        Reviewed by Alex Christensen.

        The problem is that after willSendRequest callback changes the request, the load is cancelled while
        transitioning to committed state. This happens because the load is not waiting for the response policy check, so
        it continues and when transitioning to committed, FrameLoader::closeURL() invalidates the current policy check
        that causes a load failure. The new request returned by the API doesn't have any requester, so it's no longer
        considered a main resource load. In the network process the resource load task doesn't wait for the response
        policy and continues the load, sending the data to the web process. Once the first data is received, the load
        transitions to commit, but the response policy check is still ongoing. This can only happen when using the C API
        (I don't know about the Cocoa API), but not with the GLib API because it doesn't allow to create a new request,
        only to modify the passed in one. With the C API we loss other internal things of the request like the priority,
        but I guess the most important one is the requester.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):

2018-04-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230283.

        Caused webkitpy test failures.

        Reverted changeset:

        "Use CompletionHandlers for DelayedReplies"
        https://bugs.webkit.org/show_bug.cgi?id=182269
        https://trac.webkit.org/changeset/230283

2018-04-04  Youenn Fablet  <youenn@apple.com>

        webrtc/video-update-often.html is flakily crashing on iOS simulator Debug
        https://bugs.webkit.org/show_bug.cgi?id=184022

        Reviewed by Jer Noble.

        Remove client context once the new context identifier is set.
        Covered by test no longer crashing locally.

        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionManager::setUpPlaybackControlsManager):

2018-04-04  Youenn Fablet  <youenn@apple.com>

        WebRTC data channel only applications require capture permissions for direct connections
        https://bugs.webkit.org/show_bug.cgi?id=174500
        <rdar://problem/34134281>

        Reviewed by Eric Carlson.

        Add support for MDNS registration and resolution by NetworkProcess.
        WebProcess gives instruction to do the actual registrations/resolutions.

        * CMakeLists.txt:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::mdnsRegister):
        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp: Added.
        (WebKit::NetworkMDNSRegister::NetworkMDNSRegister):
        (WebKit::NetworkMDNSRegister::~NetworkMDNSRegister):
        (WebKit::NetworkMDNSRegister::unregisterMDNSNames):
        (WebKit::PendingRegistrationRequest::PendingRegistrationRequest):
        (WebKit::registerMDNSNameCallback):
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        (WebKit::PendingResolutionRequest::PendingResolutionRequest):
        (WebKit::PendingResolutionRequest::~PendingResolutionRequest):
        (WebKit::PendingResolutionRequest::timeout):
        (WebKit::resolveMDNSNameCallback):
        (WebKit::NetworkMDNSRegister::resolveMDNSName):
        * NetworkProcess/webrtc/NetworkMDNSRegister.h: Added.
        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in: Added.
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebRTCMDNSICECandidatesEnabled):
        (WKPreferencesGetWebRTCMDNSICECandidatesEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
        (WebKit::LibWebRTCNetwork::mdnsRegister):
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::unregisterMDNSNames):
        (WebKit::LibWebRTCProvider::registerMDNSName):
        (WebKit::LibWebRTCProvider::resolveMDNSName):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.cpp: Added.
        (WebKit::WebMDNSRegister::finishedRegisteringMDNSName):
        (WebKit::WebMDNSRegister::finishedResolvingMDNSName):
        (WebKit::WebMDNSRegister::unregisterMDNSNames):
        (WebKit::WebMDNSRegister::registerMDNSName):
        (WebKit::WebMDNSRegister::resolveMDNSName):
        * WebProcess/Network/webrtc/WebMDNSRegister.h: Added.
        * WebProcess/Network/webrtc/WebMDNSRegister.messages.in: Added.

2018-04-04  Alex Christensen  <achristensen@webkit.org>

        Use CompletionHandlers for DelayedReplies
        https://bugs.webkit.org/show_bug.cgi?id=182269

        Reviewed by Youenn Fablet.

        DelayedReplies should be a noncopyable, non-refcountable type.  They should be
        called once and only once.  This is what CompletionHandlers are for.

        No change in behavior.  Just cleaner code.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::SynchronousLoadData::SynchronousLoadData):
        (WebKit::sendReplyToSynchronousRequest):
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        * NetworkProcess/NetworkResourceLoader.h:
        * Platform/IPC/Connection.h:
        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunctionImpl):
        (IPC::callMemberFunction):
        (IPC::handleMessageDelayed):
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::setInitializationReply):
        (WebKit::PluginControllerProxy::takeInitializationReply):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::destroyPlugin):
        (WebKit::WebProcessConnection::createPlugin):
        (WebKit::WebProcessConnection::createPluginAsynchronously):
        * PluginProcess/WebProcessConnection.h:
        * Scripts/webkit/messages.py:
        (message_to_struct_declaration):
        (generate_message_handler):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::networkProcessCrashed):
        (WebKit::NetworkProcessProxy::networkProcessFailedToLaunch):
        (WebKit::NetworkProcessProxy::didCreateNetworkConnectionToWebProcess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::getStorageProcessConnection):
        (WebKit::StorageProcessProxy::didClose):
        (WebKit::StorageProcessProxy::didCreateStorageToWebProcessConnection):
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::ExceededDatabaseQuotaRecords::createRecord):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::webGLPolicyForURL):
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        (WebKit::WebPageProxy::getToolbarsAreVisible):
        (WebKit::WebPageProxy::getMenuBarIsVisible):
        (WebKit::WebPageProxy::getStatusBarIsVisible):
        (WebKit::WebPageProxy::getWindowFrame):
        (WebKit::WebPageProxy::screenToRootView):
        (WebKit::WebPageProxy::rootViewToScreen):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::reachedApplicationCacheOriginQuota):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessCrashed):
        (WebKit::WebProcessPool::getNetworkProcessConnection):
        (WebKit::WebProcessPool::getStorageProcessConnection):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        (WebKit::WebProcessProxy::getStorageProcessConnection):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::syncTerminateWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingAndDrawToPDF):

2018-04-04  Alex Christensen  <achristensen@webkit.org>

        Remove legacyCustomProtocolManager from NetworkSessionCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=182178

        Reviewed by Youenn Fablet.

        Now that we only make NetworkSessions in the NetworkProcess, we don't need to pass this parameter around.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

2018-04-04  Alex Christensen  <achristensen@webkit.org>

        Move PingHandle to WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=184145

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:

2018-04-04  Brent Fulgham  <bfulgham@apple.com>

        Failures from mach port reference handling should be fatal
        https://bugs.webkit.org/show_bug.cgi?id=184202
        <rdar://problem/37771114>

        Reviewed by Anders Carlsson.

        Update for new location of MachSendRight.h. Switch to
        #pragma once in a few places.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate): Adopt new 'safe mach_port_t deallocation' function.
        (IPC::Connection::initializeSendSource): Ditto.
        (IPC::Connection::receiveSourceEventHandler): Ditto.
        * Platform/SharedMemory.h:
        * Platform/cocoa/SharedMemoryCocoa.cpp:
        (WebKit::SharedMemory::Handle::clear): Ditto.
        (WebKit::makeMemoryEntry): Ditto.
        (WebKit::SharedMemory::createSendRight const): Ditto.
        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginProcess.h:
        (WebKit::PluginProcess::compositingRenderServerPort const):
        * Scripts/messages.py:
        (headers_for_type): Update for new location of MachSendRight.
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::encode const):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebProcessCreationParameters.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * UIProcess/DrawingAreaProxy.cpp:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Ditto. Remove uneeded mach_port_dealloc called after
        xpc_dictionary_set_mach_send. While '..._set_mach_send' retains the send right, it gets automatically
        released when the message is handled. We only want to manually deallocate the send right if
        the message failed to send.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * UIProcess/mac/WKViewLayoutStrategy.mm:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::addFence):
        (WebKit::DrawingArea::updateGeometry):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateGeometry):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTopContentInsetFenced):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::compositingRenderServerPort const):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::setVideoLayerFrameFenced):

2018-04-04  Beth Dakin  <bdakin@apple.com>

        Fix the print formatter build
        https://bugs.webkit.org/show_bug.cgi?id=184289
        -and corresponding-
        rdar://problem/39164641

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webViewPrintFormatter]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/_WKWebViewPrintFormatter.h:
        * UIProcess/_WKWebViewPrintFormatter.mm:
        * UIProcess/_WKWebViewPrintFormatterInternal.h:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKPDFView.mm:

2018-04-04  Andy Estes  <aestes@apple.com>

        [iOS] Rename WKPDFView to WKLegacyPDFView
        https://bugs.webkit.org/show_bug.cgi?id=184286

        Rubber-stamped by Wenson Hsieh.

        A series of upcoming patches will implement a new WKPDFView based on PDFKit.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry init]):
        * UIProcess/ios/WKLegacyPDFView.h: Renamed from Source/WebKit/UIProcess/ios/WKPDFView.h.
        * UIProcess/ios/WKLegacyPDFView.mm: Renamed from Source/WebKit/UIProcess/ios/WKPDFView.mm.
        (-[WKLegacyPDFView _computeMatchesForString:options:maxCount:completionHandler:]):
        * WebKit.xcodeproj/project.pbxproj:

2018-04-04  Yousuke Kimoto  <yousuke.kimoto@sony.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Add WebKit Shared/win files for wincairo webkit
        https://bugs.webkit.org/show_bug.cgi?id=183044

        Reviewed by Alex Christensen.

        * Shared/win/ChildProcessMainWin.cpp: Added.

2018-04-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Remove effective font size constraints when determining focus zoom scale
        https://bugs.webkit.org/show_bug.cgi?id=184287
        <rdar://problem/39063886>

        Reviewed by Timothy Hatcher.

        As it turns out, form controls on some important websites can be very wide, with a small font size, which
        renders the approach taken in <https://trac.webkit.org/r230171> moot, since we'll just end up zooming to a scale
        that is too large anyways. To mitigate this for now, remove the minimum font scaling threshold while we think of
        more clever ways to account for this scenario.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):

2018-04-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] WebFrameLoaderClient: 'getpid': identifier not found
        https://bugs.webkit.org/show_bug.cgi?id=184291

        Reviewed by Konstantin Tokarev.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        Use WTF::getCurrentProcessID() instead of getpid().
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Ditto.

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

        ASSERTION FAILED: !m_mainFrame->coreFrame()->loader().frameHasLoaded() || !m_pendingNavigationID when reloading page while a page is loading
        https://bugs.webkit.org/show_bug.cgi?id=153210

        Reviewed by Alex Christensen.

        The assert happens when WebPage::reload() is called twice and the first time the reload is ignored by
        FrameLoader because the document URL is empty. In that case the pending navigation is not reset, because
        FrameLoader::reload() returns before creating the document loader.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reload): Check if the pending navigation has been reset after calling FrameLoader::reload()
        and reset it otherwise.

2018-04-03  Youenn Fablet  <youenn@apple.com>

        Make NetworkProcess get ContentBlocker information from UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=184205
        <rdar://problem/39146551>

        Unreviewed.
        Updated decode/encode methods to not hit null identifier assertion.

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

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

        [iOS] WKWebView shouldn't know about WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=184283

        Reviewed by Timothy Hatcher.

        WKWebView shouldn't be checking if _customContentView is a particular kind of
        class (e.g., WKPDFView). Instead, it should interact with the _customContentView
        using the WKWebViewContentProvider protocol.

        Reimplement -_isBackground, -_isDisplayingPDF, -_dataForDisplayedPDF, and
        -_suggestedFilenameForDisplayedPDF using new WKWebViewContentProvider protocol
        methods that WKPDFView implements.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isBackground]):
        (-[WKWebView _isDisplayingPDF]):
        (-[WKWebView _dataForDisplayedPDF]):
        (-[WKWebView _suggestedFilenameForDisplayedPDF]):
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_dataRepresentation]):
        (-[WKPDFView web_suggestedFilename]):
        (-[WKPDFView web_isBackground]):
        (-[WKPDFView suggestedFilename]): Deleted.
        (-[WKPDFView pdfDocument]): Deleted.
        (-[WKPDFView isBackground]): Deleted.

2018-04-03  Brent Fulgham  <bfulgham@apple.com>

        Guard against keychain/certificate access outside the network process
        https://bugs.webkit.org/show_bug.cgi?id=184214
        <rdar://problem/38734795>

        Reviewed by Youenn Fablet.

        Use the ProcessPrivilege assertions to guard against accessing the Keychain from
        a non-Networking process.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode): Assert if we access the keychain from a proces other than the Network or UI process.
        (IPC::decode): Ditto.

2018-04-03  Youenn Fablet  <youenn@apple.com>

        NetworkResourceLoader does not need to expose all redirect response headers
        https://bugs.webkit.org/show_bug.cgi?id=184114
        <rdar://problem/39010557>

        Reviewed by Ryosuke Niwa.

        WebProcess instructs NetworkProcess whether to sanitize response headers based on a runtime flag.
        We sanitize redirection response headers in case this is not related to a navigation load.
        Navigation loads may currently require the full response for content blockers.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::sanitizeRedirectResponseIfPossible):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetRestrictedHTTPResponseAccess):
        (WKPreferencesGetRestrictedHTTPResponseAccess):
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        (WebKit::WebLoaderStrategy::preconnectTo):

2018-04-03  Youenn Fablet  <youenn@apple.com>

        Make NetworkProcess get ContentBlocker information from UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=184205

        Reviewed by Alex Christensen.

        Make NetworkProcess get content blockers from UIProcess directly.
        Before that patch, WebProcess sent content blockers to NetworkProcess for each PingLoad.
        Instead, WebProcess sends the content blocker identifier for each PingLoad and NetworkProcess fetches the content blocker once.

        This is both more efficient than passing them for each PingLoad and safer in the sense
        that a compromised WebProcess will not be able to bypass any of these.
        In the future, NetworkProcess should get the content blocker identifier directly from the WebPageID attached to the request.

        Covered by existing beacon+content blocker tests.

        Did some refactoring to add a typed content blocker identifier.
        Once NetworkProcess fetches a given content blocker, the content blocker will send any modification to NetworkProcess.
        Introduced NetworkContentRuleListManager to handle the content blockers in NetworkProcess.

        * CMakeLists.txt:
        * DerivedSources.make:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::continueCheckingRequest):
        (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::setContentExtensionController):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkUserContentController):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkContentRuleListManager.cpp: Added.
        (WebKit::NetworkContentRuleListManager::contentExtensionsBackend):
        (WebKit::NetworkContentRuleListManager::addContentRuleLists):
        (WebKit::NetworkContentRuleListManager::removeContentRuleList):
        (WebKit::NetworkContentRuleListManager::removeAllContentRuleLists):
        (WebKit::NetworkContentRuleListManager::remove):
        * NetworkProcess/NetworkContentRuleListManager.h: Added.
        * NetworkProcess/NetworkContentRuleListManager.messages.in: Added.
        * NetworkProcess/PingLoad.cpp:
        * Scripts/webkit/messages.py:
        * Shared/UserContentControllerIdentifier.h: Added.
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::contentExtensionRules):
        (WebKit::NetworkProcessProxy::didDestroyWebUserContentControllerProxy):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::get):
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::~WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::removeProcess):
        (WebKit::WebUserContentControllerProxy::addUserContentWorldUse):
        (WebKit::WebUserContentControllerProxy::removeUserContentWorldUses):
        (WebKit::WebUserContentControllerProxy::addUserScript):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
        (WebKit::WebUserContentControllerProxy::addUserScriptMessageHandler):
        (WebKit::WebUserContentControllerProxy::removeUserMessageHandlerForName):
        (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers):
        (WebKit::WebUserContentControllerProxy::addContentRuleList):
        (WebKit::WebUserContentControllerProxy::removeContentRuleList):
        (WebKit::WebUserContentControllerProxy::removeAllContentRuleLists):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::create):
        (WebKit::WebUserContentControllerProxy::addNetworkProcess):
        (WebKit::WebUserContentControllerProxy::removeNetworkProcess):
        (WebKit::WebUserContentControllerProxy::contentExtensionRules):
        (WebKit::WebUserContentControllerProxy::identifier const):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::startPingLoad):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::getOrCreate):
        (WebKit::WebUserContentController::WebUserContentController):
        (WebKit::WebUserContentController::~WebUserContentController):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userContentControllerIdentifier const):

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

        [Mac] Prioritize file promises over filenames during drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=184237
        <rdar://problem/38278076>

        Reviewed by Wenson Hsieh.

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

2018-04-03  Brady Eidson  <beidson@apple.com>

        Make SessionStorage work with process swapping.
        https://bugs.webkit.org/show_bug.cgi?id=184270

        Reviewed by Andy Estes.

        Due to a minor process accounting error, WebPageProxys weren't always being reconnected with their
        WebsiteDataStore's StorageManager when doing process swaps.

        Fix that error, and SessionStorage "just works."

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::webProcessWillShutDown):
        (WebKit::WebPageProxy::processDidTerminate): For NavigationSwap termination, make sure to tell the 
          process lifetime tracker that this page was removed.

        * UIProcess/WebProcessLifetimeObserver.h:
        (WebKit::WebProcessLifetimeObserver::webPageWasInvalidated): Renamed from "webPageWasRemoved"
        (WebKit::WebProcessLifetimeObserver::webPageWasRemoved): Deleted.

        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::webPageLeavingWebProcess): Renamed from "webProcessWillShutDown"
        (WebKit::WebProcessLifetimeTracker::pageWasInvalidated):
        (WebKit::WebProcessLifetimeTracker::webProcessWillShutDown): Deleted.
        * UIProcess/WebProcessLifetimeTracker.h:

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::webPageWasInvalidated):
        (WebKit::WebsiteDataStore::webPageWasRemoved): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-04-03  Commit Queue  <commit-queue@webkit.org>

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

        it is breaking internal bots (Requested by youenn on #webkit).

        Reverted changeset:

        "Make NetworkProcess get ContentBlocker information from
        UIProcess"
        https://bugs.webkit.org/show_bug.cgi?id=184205
        https://trac.webkit.org/changeset/230210

2018-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Update time picker to use platform view controller
        https://bugs.webkit.org/show_bug.cgi?id=184252
        <rdar://problem/38804795>

        Reviewed by Andy Estes.

        Adjust for some small WKTimePickerViewController changes, and remove some files that we no longer need.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView presentViewControllerForCurrentAssistedNode]):
        (-[WKContentView textInputController:didCommitText:]): Deleted.
        (-[WKContentView textInputController:didCommitText:withSuggestion:]): Deleted.
        (-[WKContentView textInputControllerDidRequestDismissal:]): Deleted.
        * UIProcess/ios/forms/WKTextFormControlViewController.h: Removed.
        * UIProcess/ios/forms/WKTextFormControlViewController.mm: Removed.
        * UIProcess/ios/forms/WKTextSuggestionButton.h: Removed.
        * UIProcess/ios/forms/WKTextSuggestionButton.mm: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2018-04-03  Ross Kirsling  <ross.kirsling@sony.com>

        Xcode prepends line comments from WTF/Compiler.h to *.sb files
        https://bugs.webkit.org/show_bug.cgi?id=184166

        Reviewed by Brent Fulgham.

        * DerivedSources.make:
        Strip ;-comments from *.sb.in files before preprocessing so we can stop treating Platform.h/Compiler.h as C89.

2018-04-03  Chris Dumez  <cdumez@apple.com>

        Drop MainFrame class
        https://bugs.webkit.org/show_bug.cgi?id=184191

        Reviewed by Darin Adler.

        Drop MainFrame class and move contents into Page / Frame since there is a 1:1
        relationship between the Page and the MainFrame.

        This is ground work for introducing LocalFrame / RemoteFrame concepts.

        * Shared/WebRenderLayer.cpp:
        * Shared/WebRenderObject.cpp:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::paymentCoordinator):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageInstallPageOverlay):
        (WKBundlePageUninstallPageOverlay):
        (WKBundlePageInstallPageOverlayWithAnimation):
        (WKBundlePageUninstallPageOverlayWithAnimation):
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::~WebInspectorClient):
        (WebKit::WebInspectorClient::highlight):
        (WebKit::WebInspectorClient::hideHighlight):
        (WebKit::WebInspectorClient::showPaintRect):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::hideFindUI):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updatePreferences):
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebInspector.cpp:
        * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrame const):
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        (WebKit::WebPage::plugInIntersectsSearchRect):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp:
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):
        (WebKit::WebPage::dataDetectorsDidPresentUI):
        (WebKit::WebPage::dataDetectorsDidChangeUI):
        (WebKit::WebPage::dataDetectorsDidHideUI):
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebStorage/StorageAreaMap.cpp:

2018-04-03  Youenn Fablet  <youenn@apple.com>

        Make NetworkProcess get ContentBlocker information from UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=184205

        Reviewed by Alex Christensen.

        Make NetworkProcess get content blockers from UIProcess directly.
        Before that patch, WebProcess sent content blockers to NetworkProcess for each PingLoad.
        Instead, WebProcess sends the content blocker identifier for each PingLoad and NetworkProcess fetches the content blocker once.

        This is both more efficient than passing them for each PingLoad and safer in the sense
        that a compromised WebProcess will not be able to bypass any of these.
        In the future, NetworkProcess should get the content blocker identifier directly from the WebPageID attached to the request.

        Covered by existing beacon+content blocker tests.

        Did some refactoring to add a typed content blocker identifier.
        Once NetworkProcess fetches a given content blocker, the content blocker will send any modification to NetworkProcess.
        Introduced NetworkContentRuleListManager to handle the content blockers in NetworkProcess.

        * CMakeLists.txt:
        * DerivedSources.make:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::continueCheckingRequest):
        (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::setContentExtensionController):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkUserContentController):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkContentRuleListManager.cpp: Added.
        (WebKit::NetworkContentRuleListManager::contentExtensionsBackend):
        (WebKit::NetworkContentRuleListManager::addContentRuleLists):
        (WebKit::NetworkContentRuleListManager::removeContentRuleList):
        (WebKit::NetworkContentRuleListManager::removeAllContentRuleLists):
        (WebKit::NetworkContentRuleListManager::remove):
        * NetworkProcess/NetworkContentRuleListManager.h: Added.
        * NetworkProcess/NetworkContentRuleListManager.messages.in: Added.
        * NetworkProcess/PingLoad.cpp:
        * Scripts/webkit/messages.py:
        * Shared/UserContentControllerIdentifier.h: Added.
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::contentExtensionRules):
        (WebKit::NetworkProcessProxy::didDestroyWebUserContentControllerProxy):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::get):
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::~WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::removeProcess):
        (WebKit::WebUserContentControllerProxy::addUserContentWorldUse):
        (WebKit::WebUserContentControllerProxy::removeUserContentWorldUses):
        (WebKit::WebUserContentControllerProxy::addUserScript):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
        (WebKit::WebUserContentControllerProxy::addUserScriptMessageHandler):
        (WebKit::WebUserContentControllerProxy::removeUserMessageHandlerForName):
        (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers):
        (WebKit::WebUserContentControllerProxy::addContentRuleList):
        (WebKit::WebUserContentControllerProxy::removeContentRuleList):
        (WebKit::WebUserContentControllerProxy::removeAllContentRuleLists):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::create):
        (WebKit::WebUserContentControllerProxy::addNetworkProcess):
        (WebKit::WebUserContentControllerProxy::removeNetworkProcess):
        (WebKit::WebUserContentControllerProxy::contentExtensionRules):
        (WebKit::WebUserContentControllerProxy::identifier const):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::startPingLoad):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::getOrCreate):
        (WebKit::WebUserContentController::WebUserContentController):
        (WebKit::WebUserContentController::~WebUserContentController):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userContentControllerIdentifier const):

2018-04-02  Beth Dakin  <bdakin@apple.com>

        Fix the managed configurations build
        https://bugs.webkit.org/show_bug.cgi?id=184253
        -and corresponding-
        rdar://problem/39078586

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView _defineForWebView:]):

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

        [Enchant] Clean up TextCheckerEnchant
        https://bugs.webkit.org/show_bug.cgi?id=184233

        Reviewed by Michael Catanzaro.

        Use TextCheckerEnchant as a singleton now, instead of implementing the singleton here.

        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        (WebKit::TextChecker::setSpellCheckingLanguages):
        (WebKit::TextChecker::loadedSpellCheckingLanguages):
        (WebKit::enchantTextChecker): Deleted.

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

        [GTK] NetworkProcess from WebKitGtk+ 2.19.9x SIGSEVs in NetworkStorageSession (secret search callback)
        https://bugs.webkit.org/show_bug.cgi?id=183346

        Reviewed by Michael Catanzaro.

        Pass the request cancellable to NetworkStorageSession::getCredentialFromPersistentStorage().

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

2018-04-02  Brady Eidson  <beidson@apple.com>

        Process swapping on navigation needs to handle server redirects.
        <rdar://problem/38690465> and https://bugs.webkit.org/show_bug.cgi?id=184142

        Reviewed by Alex Christensen.

        The same rules we apply to process swapping for basic navigations need to apply
        to server redirects as well.

        There's three interesting cases we need to support that are covered by new API tests:
        1 - The initial load in a WKWebView redirects cross-origin.
        2 - A WKWebView is showing content from a.com, we start a load to b.com, and that redirects to c.com
        3 - A WKWebView is showing content from a.com, we start a load to a.com, that that redirects to b.com.

        Supporting all 3 of these brought their own little challenges.

        By teaching Navigation objects more about redirects I was able to support all 3 cases.

        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::Navigation):
        (API::Navigation::setCurrentRequest):
        (API::Navigation::appendRedirectionURL):
        (API::Navigation::loggingString const):
        (API::Navigation::loggingURL const): Deleted.
        * UIProcess/API/APINavigation.h:
        (API::Navigation::originalRequest const):
        (API::Navigation::currentRequest const):
        (API::Navigation::currentRequestProcessIdentifier const):
        (API::Navigation::setCurrentRequestIsRedirect):
        (API::Navigation::currentRequestIsRedirect const):
        (API::Navigation::request const): Deleted.

        * UIProcess/API/Cocoa/WKNavigation.mm:
        (-[WKNavigation _request]):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess): If this continued navigation is currently in a server
          redirect, save off a lambda to synthesize a "did receive server redirect" callback once the new WebProcess is running.
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Possibly ignore this notification if it is really a
          cross-origin redirect that is just starting back up in a new WebProcess.
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::resetStateAfterProcessExited): Do not clear pageLoadState if the process is exitting for
          a navigation swap, as we will need to pick up where we left off when the load continues in a new WebProcess.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation): If a process has never committed any provisional load, it can always
          be used to continue a navigation.
        * UIProcess/WebProcessPool.h:

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::didCommitProvisionalLoad):
        (WebKit::WebProcessProxy::hasCommittedAnyProvisionalLoads const):

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-04-02  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Replace video with a placeholder image during fullscreen transition
        https://bugs.webkit.org/show_bug.cgi?id=184188
        <rdar://problem/38940307>

        Reviewed by Youenn Fablet.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::willExitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::preparedToExitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::willExitFullscreen):
        * WebProcess/cocoa/VideoFullscreenManager.h:
        * WebProcess/cocoa/VideoFullscreenManager.messages.in:
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::willExitFullscreen):

2018-04-02  Brian Burg  <bburg@apple.com>

        [Cocoa] Fix some internal builds that consume WebDriver atoms
        https://bugs.webkit.org/show_bug.cgi?id=184197

        Reviewed by Dan Bernstein.

        * WebKit.xcodeproj/project.pbxproj:
        Use a Run Script phase to copy WebDriver atoms to WebKit.framework
        private headers during the installhdrs phase.

2018-04-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230174.

        Caused LayoutTests to exit early with assertion failures.

        Reverted changeset:

        "Process swapping on navigation needs to handle server
        redirects."
        https://bugs.webkit.org/show_bug.cgi?id=184142
        https://trac.webkit.org/changeset/230174

2018-04-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Update date picker UI to latest specifications
        https://bugs.webkit.org/show_bug.cgi?id=184234
        <rdar://problem/38804760>

        Reviewed by Timothy Hatcher.

        Rename WKTextFormControlListViewControllerDelegate to WKTextInputListViewControllerDelegate and adjust for the
        new initializer of WKDatePickerViewController.

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

2018-04-02  Brady Eidson  <beidson@apple.com>

        Process swapping on navigation needs to handle server redirects.
        <rdar://problem/38690465> and https://bugs.webkit.org/show_bug.cgi?id=184142

        Reviewed by Alex Christensen.

        The same rules we apply to process swapping for basic navigations need to apply
        to server redirects as well.

        There's three interesting cases we need to support that are covered by new API tests:
        1 - The initial load in a WKWebView redirects cross-origin.
        2 - A WKWebView is showing content from a.com, we start a load to b.com, and that redirects to c.com
        3 - A WKWebView is showing content from a.com, we start a load to a.com, that that redirects to b.com.

        Supporting all 3 of these brought their own little challenges.

        By teaching Navigation objects more about redirects I was able to support all 3 cases.

        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::Navigation):
        (API::Navigation::setCurrentRequest):
        (API::Navigation::appendRedirectionURL):
        (API::Navigation::loggingString const):
        (API::Navigation::loggingURL const): Deleted.
        * UIProcess/API/APINavigation.h:
        (API::Navigation::originalRequest const):
        (API::Navigation::currentRequest const):
        (API::Navigation::currentRequestProcessIdentifier const):
        (API::Navigation::setCurrentRequestIsRedirect):
        (API::Navigation::currentRequestIsRedirect const):
        (API::Navigation::request const): Deleted.

        * UIProcess/API/Cocoa/WKNavigation.mm:
        (-[WKNavigation _request]):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess): If this continued navigation is currently in a server
          redirect, save off a lambda to synthesize a "did receive server redirect" callback once the new WebProcess is running.
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Possibly ignore this notification if it is really a
          cross-origin redirect that is just starting back up in a new WebProcess.
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::resetStateAfterProcessExited): Do not clear pageLoadState if the process is exitting for
          a navigation swap, as we will need to pick up where we left off when the load continues in a new WebProcess.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation): If a process has never committed any provisional load, it can always
          be used to continue a navigation.
        * UIProcess/WebProcessPool.h:

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::didCommitProvisionalLoad):
        (WebKit::WebProcessProxy::hasCommittedAnyProvisionalLoads const):

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-04-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Zoom level is sometimes excessive when zooming to focused form controls
        https://bugs.webkit.org/show_bug.cgi?id=184222
        <rdar://problem/39063886>

        Reviewed by Timothy Hatcher.

        Upon interactively focusing an element, we zoom and scroll to reveal that element. The heuristics introduced in
        <https://trac.webkit.org/r168744> work by computing a target scale, and then a point to zoom to given that
        scale. Currently, this scale is dependent on the computed font size of the form control, such that the form
        control would be scaled to have an effective font size of 16.

        However, in extra zoom mode, applying these same heuristics (ironically) results in excessive zoom levels, since
        scaling the font up to 16 would cause most form controls to zoom so far in that we lose context of surrounding
        elements such as labels and other form controls; the fact that the element is highlighted by the focused form
        control overlay makes this even more confusing, since part of the focus overlay highlight rect often ends up
        outside the viewport.

        To fix this, we make a couple of tweaks to focus rect zooming in extra zoom mode. (1) Instead of computing
        target zoom level based on font size, try to zoom such that the focused element rect fills up most of the
        viewport (similar to double-tap zooming). This ensures that the focused form control overlay's highlight rect
        makes sense in most cases, with few exceptions (e.g. the element frame is larger than the viewport). (2)
        Introduce a minimum legible font size of 11, and compute the minimium scale needed such that the form control
        font would appear to be at least this legible font size. Then, clamp the target scale chosen by (1) to this
        minimum scale.

        One additional consideration for (1) is that naively scaling to fit the element rect to the viewport (with some
        fixed margins) would cause the viewport scale to always change when moving focus between form controls of
        different dimensions, even if the current scale is more or less appropriate for all the focusable elements. To
        address this, instead of computing a single target zoom scale for an element rect, compute a range of possible
        target zoom scales (where the minimum and maximum values depend on the margin we add around the element rect).
        If the current scale already falls within this target scale range, then we won't bother adjusting the scale at
        all (unless the font size is too small — see (2)). If the current scale falls outside the target scale range, we
        then make the minimal adjustment needed to ensure that the element rect fits well within the viewport without
        being too small.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):

        Move some logic around so that the target scale is computed after computing the visible size. Also renames some
        constants local to this function (WKWebViewStandardFontSize, kMinimumHeightToShowContentAboveKeyboard,
        UIWebFormAnimationDuration, CaretOffsetFromWindowEdge) such that they now share a consistent naming style.

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

        Enable Legacy EME for all WebKit & WebKitLegacy clients
        https://bugs.webkit.org/show_bug.cgi?id=184018
        <rdar://problem/34887387>

        Reviewed by Eric Carlson.

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

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

        REGRESSION (229680): Fullscreen video does not work (youtube, netflix)
        https://bugs.webkit.org/show_bug.cgi?id=184235

        Reviewed by Eric Carlson.

        Enable the Fullscreen API by default.

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

2018-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] MSVC can't compile WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent
        https://bugs.webkit.org/show_bug.cgi?id=184120

        Reviewed by Alex Christensen.

        It seems that MSVC can't compile the code using `this` in a
        generalized lambda capture in another lambda.

        In this case, there is no need to copy `protectedThis` for the
        inner lambda. Move `protectedThis` of the outer lambda to the
        inner as well as `callback`.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        Moved `protectedThis` from the outer lambda to the inner.

2018-04-02  Dan Bernstein  <mitz@apple.com>

        Build fix after r230121

        * Configurations/WebKit.xcconfig: Disabled framework header postprocessing when building for
          iOS 11.*
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h: Reverted r230159.

2018-04-02  Dan Bernstein  <mitz@apple.com>

        Fixed the build when BOOL is not bool.
        <rdar://problem/39094484>

        Reviewed by Jer Noble.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController videoControlsManagerDidChange]): Removed the write-only ivar
          _hasControlsManager, the assignment to which was causing the compiler error.

2018-04-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix.

        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h: Update availability annotation.

2018-04-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] DragAndDropHandler.cpp should include GUniquePtrGtk.h
        https://bugs.webkit.org/show_bug.cgi?id=184119

        Reviewed by Daniel Bates.

        * UIProcess/gtk/DragAndDropHandler.cpp:

2018-04-02  Frederic Wang  <fwang@igalia.com>

        Fix warnings for unused lambda captures in Source/WebKit
        https://bugs.webkit.org/show_bug.cgi?id=173555

        Reviewed by Konstantin Tokarev.

        When release logs are disabled, several lambda captures are unused, causing compilation
        failures with -Wunused-lambda-capture. This patch marks the corresponding variables as unused
        in order to fix these warnings.

        Based on initial patch by: Konstantin Tokarev  <annulen@yandex.ru>

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):

2018-04-02  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Make libwebrtc backend buildable for GTK  port
        https://bugs.webkit.org/show_bug.cgi?id=178860

        Reviewed by Youenn Fablet.

        * CMakeLists.txt: Add RTC network classes to the compilation and
        the libwebrtc includes.
        * PlatformGTK.cmake: Add the libwebrtc directory.
        * SourcesGTK.txt: Add RTC files to the compilation.

2018-03-30  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229828): Facebook login popup is blank
        https://bugs.webkit.org/show_bug.cgi?id=184206
        <rdar://problem/39057006>

        Reviewed by Wenson Hsieh.

        Add assertion to make sure we never try to do a policy check to
        a resource response while a policy check for a navigation is
        pending. This assertion was being hit by several of our redirection
        tests without my fix.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):

2018-03-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230125.

        Build fix broke more builds.

        Reverted changeset:

        "Unreviewed build fix, remove unused lambda capture."
        https://trac.webkit.org/changeset/230125

2018-03-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix, remove unused lambda capture.

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

2018-03-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Adopt list view controller UI for numeric input types
        https://bugs.webkit.org/show_bug.cgi?id=184184
        <rdar://problem/37238916>

        Reviewed by Timothy Hatcher.

        Remove existing logic for presenting a number pad view controller, since number pads will now be handled as a
        special case of general text form controls in extra zoom mode.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView presentViewControllerForCurrentAssistedNode]):
        (-[WKContentView dismissAllInputViewControllers]):
        (-[WKContentView _wheelChangedWithEvent:]):

2018-03-30  Dan Bernstein  <mitz@apple.com>

        Update availability annotations to match the macOS 10.13.4 and iOS 11.3 GM SDKs
        https://bugs.webkit.org/show_bug.cgi?id=184173

        Reviewed by Alex Christensen.

        Changed WK_MAC_TBA and WK_IOS_TBA to 10.13.4 and 11.3, respectively, in all declarations that
        appear in the GM SDKs.

        * Shared/API/Cocoa/_WKNSWindowExtras.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKOpenPanelParameters.h:
        * UIProcess/API/Cocoa/WKOpenPanelParametersPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionConfiguration.h:
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownloadDelegate.h:
        * UIProcess/API/Cocoa/_WKFocusedElementInfo.h:
        * UIProcess/API/Cocoa/_WKFullscreenDelegate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:

2018-03-30  Youenn Fablet  <youenn@apple.com>

        NetworkLoadChecker should upgrade redirects if needed
        https://bugs.webkit.org/show_bug.cgi?id=184098

        Reviewed by Chris Dumez.

        In case of redirections, upgrade URL according CSP.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::contentSecurityPolicy const):

2018-03-30  JF Bastien  <jfbastien@apple.com>

        Update messages.py codegen for String, fix tests
        https://bugs.webkit.org/show_bug.cgi?id=184179
        <rdar://problem/39041352>

        Reviewed by Mark Lam.

        I updated some of the code in
        https://trac.webkit.org/changeset/230097 and auto-magically used a
        script to update copyright headers... and that broke the tests
        which checked for a particular date. Update all of the headers.

        Part of this change updates the code generated by messages.py

        * Scripts/webkit/LegacyMessageReceiver-expected.cpp:
        * Scripts/webkit/MessageReceiver-expected.cpp:
        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp:
        * Scripts/webkit/MessagesSuperclass-expected.h:
        * Scripts/webkit/messages.py:
        * Scripts/webkit/messages_unittest.py:
        (GeneratedFileContentsTest.assertGeneratedFileContentsEqual):
        generate a better error message

2018-03-29  JF Bastien  <jfbastien@apple.com>

        Use Forward.h instead of forward-declaring WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=184172
        <rdar://problem/39026146>

        Reviewed by Yusuke Suzuki.

        As part of #184164 I'm changing WTF::String, and the forward
        declarations are just wrong because I'm making it templated. We
        should use Forward.h anyways, so do that instead.

        * Scripts/webkit/LegacyMessages-expected.h:
        * Scripts/webkit/Messages-expected.h:
        * Scripts/webkit/MessagesSuperclass-expected.h:
        * UIProcess/WebOpenPanelResultListenerProxy.h:

2018-03-29  Brian Burg  <bburg@apple.com>

        Web Automation: clipToViewport is ignored for element screenshots
        https://bugs.webkit.org/show_bug.cgi?id=184158
        <rdar://problem/39014307>

        Reviewed by Timothy Hatcher.

        In §19.2 Take Element Screenshot, step 5.2 says that we should clip
        the element screenshot rect with the visible viewport rect. We don't
        do that right now even though we pass over clipToViewport.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::snapshotRectForScreenshot):
        Clip the rect to viewport if needed.

        (WebKit::WebAutomationSessionProxy::takeScreenshot):
        This scrollIntoView is misplaced; by this point we have already done
        the math to figure out the screenshot rect. Move it before computing the rect.

2018-03-29  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r230035): ASSERT(MACH_PORT_VALID(m_sendPort)) hit in IPC::Connection::initializeSendSource()
        https://bugs.webkit.org/show_bug.cgi?id=184122
        <rdar://problem/39003606>

        Reviewed by Chris Dumez.

        One of the new assertions added in r230035 begin firing while running tests locally. This was happening
        because the WebInspector was attempting to open a new connection to a web process that had already
        terminated its mach port connection (a dead port).
        
        We should avoid opening new connections when the port we were given is already dead.

        * Platform/IPC/Connection.h:
        (IPC::Connection::identifierIsValid): Added.
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInitialize): Do not perform initialization on a dead (or null) port.
        (IPC::Connection::open): Add some assertions that ports are in a valid state.
        (IPC::Connection::sendOutgoingMessage): Assert that the send port is not dead.
        (IPC::Connection::receiveSourceEventHandler): Assert that the receive port is valid.
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching): Treat a dead port as a signal that the
        child process failed to launch.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching): Ditto.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching): Ditto.
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::didFinishLaunching): Ditto.
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection): Ditto.
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureNetworkProcessConnection): Ditto.
        (WebKit::WebProcess::ensureWebToStorageProcessConnection): Ditto.

2018-03-29  Youenn Fablet  <youenn@apple.com>

        Synchronize SecurityOrigin related scheme registries with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=184140

        Reviewed by Chris Dumez.

        Add syncing of scheme registries that are used by SecurityOrigin and ContentSecurityPolicy
        so that we can properly use them in NetworkProcess as we do in WebProcess.
        The registries that are not synced are:
        - URLSchemeAsEmptyDocument
        - URLSchemeDomainRelaxationForbidden
        - URLSchemeAsCachePartitioned
        - URLSchemeAsCanDisplayOnlyIfCanRequest

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::registerURLSchemeAsSecure const):
        (WebKit::NetworkProcess::registerURLSchemeAsBypassingContentSecurityPolicy const):
        (WebKit::NetworkProcess::registerURLSchemeAsLocal const):
        (WebKit::NetworkProcess::registerURLSchemeAsNoAccess const):
        (WebKit::NetworkProcess::registerURLSchemeAsDisplayIsolated const):
        (WebKit::NetworkProcess::registerURLSchemeAsCORSEnabled const):
        (WebKit::NetworkProcess::registerURLSchemeAsCanDisplayOnlyIfCanRequest const):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsSecure):
        (WebKit::WebProcessPool::registerURLSchemeAsBypassingContentSecurityPolicy):
        (WebKit::WebProcessPool::registerURLSchemeAsLocal):
        (WebKit::WebProcessPool::registerURLSchemeAsNoAccess):
        (WebKit::WebProcessPool::registerURLSchemeAsDisplayIsolated):
        (WebKit::WebProcessPool::registerURLSchemeAsCORSEnabled):
        (WebKit::WebProcessPool::registerURLSchemeAsCanDisplayOnlyIfCanRequest):

2018-03-29  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r229480): ERROR: Unhandled web process message 'WebCookieManager:SetHTTPCookieAcceptPolicy'
        https://bugs.webkit.org/show_bug.cgi?id=184124
        <rdar://problem/38998971>

        Reviewed by Chris Dumez.

        Cookie accept policy messages were still being sent to the WebContent process after
        I removed cookie access in r229480. The WebContent process no longer recognizes these
        messages, and generates logging to that effect.
        
        This patch stops sending these unnecessary messages to the WebContent process. Only the
        Network process needs to receive this information.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):

2018-03-29  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE] Floating point exception in WebEventFactory::createWebWheelEvent
        https://bugs.webkit.org/show_bug.cgi?id=184037

        Reviewed by Žan Doberšek.

        * Shared/wpe/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebWheelEvent): Use std::copysign() to avoid division by 0.

2018-03-28  Zalan Bujtas  <zalan@apple.com>

        Make it possible to override the screen size
        https://bugs.webkit.org/show_bug.cgi?id=184111
        <rdar://problem/38972181>

        Reviewed by Tim Horton.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::overrideScreenSize):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::overrideScreenSize const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::overrideScreenSize const):

2018-03-28  Chris Dumez  <cdumez@apple.com>

        Do process swap when opening a cross-origin URL via window.open(url, '_blank', 'noopener')
        https://bugs.webkit.org/show_bug.cgi?id=183962
        <rdar://problem/38817833>

        Reviewed by Brady Eidson.

        Swap WebProcess on for the initial navigation in a new Window that was opened
        via window.open(), when the new URL is cross-origin compared to the opener's
        origin. For now, we only swap process if 'noopener' property is set when calling
        window.open(). This is because we do not support the remote DOMWindows yet.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/API/APINavigation.h:
        (API::Navigation::setIsCrossOriginWindowOpenNavigation):
        (API::Navigation::isCrossOriginWindowOpenNavigation const):
        (API::Navigation::setOpener):
        (API::Navigation::opener const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-03-28  Per Arne Vollan  <pvollan@apple.com>

        Adopt WEBPROCESS_WINDOWSERVER_BLOCKING compiler guard in WebProcess.
        https://bugs.webkit.org/show_bug.cgi?id=183959
        <rdar://problem/38965719>

        Reviewed by Brent Fulgham.

        Use the compile guard to guard the call to CGSSetDenyWindowServerConnections.

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

2018-03-28  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r230045.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: Add missing include (breaks iOS).

2018-03-28  Brent Fulgham  <bfulgham@apple.com>

        Protect against invalid mach ports returned by mach_port_request_notification
        https://bugs.webkit.org/show_bug.cgi?id=184106
        <rdar://problem/37865316>

        Reviewed by Chris Dumez.

        * Platform/IPC/Connection.h:
        (IPC::Connection::Identifier::Identifier): Use default initializer syntax.
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open): Drive-by-fix: Include formatted mach error message in logging.
        (IPC::Connection::receiveSourceEventHandler): Check return value from 'mach_port_request_notification'
        and clean up if it experienced an error.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Ditto.

2018-03-28  Dean Jackson  <dino@apple.com>

        WKWebViewContentProvider shouldn't be a UIScrollViewDelegate
        https://bugs.webkit.org/show_bug.cgi?id=184107
        <rdar://problem/38967492>

        Reviewed by Tim Horton.

        There is no need for this class to be a UIScrollViewDelegate. Instead
        the protocol should have an optional method that is effectively
        scrollViewDidScroll.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewDidScroll:]): Call web_scrollViewDidScroll
        if it exists.
        * UIProcess/Cocoa/WKWebViewContentProvider.h: Remove UIScrollViewDelegate
        and add an optional web_scrollViewDidScroll.
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_scrollViewDidScroll:]): Renamed from scrollViewDidScroll.
        (-[WKPDFView scrollViewDidScroll:]): Deleted.
        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView scrollViewDidScroll:]): Deleted.

2018-03-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Make boosted text autosizing values switchable at runtime
        https://bugs.webkit.org/show_bug.cgi?id=184092
        <rdar://problem/38939917>

        Reviewed by Tim Horton.

        Add a private web view preference to switch between normal and boosted text autosizing mode. By default, we use
        normal text autosizing values.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setShouldEnableTextAutosizingBoost:]):
        (-[WKPreferences _shouldEnableTextAutosizingBoost]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-03-28  Brent Fulgham  <bfulgham@apple.com>

        Avoid uninitialized mach ports
        https://bugs.webkit.org/show_bug.cgi?id=184090
        <rdar://problem/37261129>

        Reviewed by Chris Dumez.

        It is possible for mach_port_allocate to return an error, but we rarely check its return value. The value
        of the argument passed to mach_port_allocate is not guaranteed to be valid when it returns an error, so
        there is a potential for us to try to use invalid ports.

        We should always check return values, and ensure that the mach port variables we seek to initialize are
        kept in a valid state.

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess): Initialize new port to a safe default and
        check the return state of the allocation function.
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open): Ditto.
        (IPC::Connection::initializeSendSource): Ditto.
        (IPC::readFromMachPort): Ditto.
        (IPC::Connection::receiveSourceEventHandler): Ditto.
        * Platform/SharedMemory.h:
        * Platform/cocoa/SharedMemoryCocoa.cpp:
        (WebKit::makeMemoryEntry): Ditto.
        * Platform/mac/MachUtilities.cpp:
        (setMachPortQueueLength): Ditto.
        (setMachExceptionPort): Ditto.
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection): Ditto.
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::createStorageToWebProcessConnection): Ditto.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Ditto.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openFrontendConnection): Ditto.

2018-03-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fails to build webkitgtk+ after git-svn-id: http://svn.webkit.org/repository/webkit/trunk@229877 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        https://bugs.webkit.org/show_bug.cgi?id=184081

        Unreviewed, switch to use UNUSED_PARAM()

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

2018-03-28  Tim Horton  <timothy_horton@apple.com>

        Make use of HAVE(CORE_ANIMATION_RENDER_SERVER) in more places
        https://bugs.webkit.org/show_bug.cgi?id=184072
        <rdar://problem/38946530>

        Reviewed by Dan Bernstein.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalHostingProcess):
        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshot::clearImage):

2018-03-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Revert an unnecessary workaround when zooming focused form controls
        https://bugs.webkit.org/show_bug.cgi?id=184067
        <rdar://problem/38805254>

        Reviewed by Tim Horton.

        Reverts an unintended change introduced in r227984.

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

2018-03-28  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Remove UpdateAtlas
        https://bugs.webkit.org/show_bug.cgi?id=184042

        Reviewed by Žan Doberšek.

        Remove all the code related to UpdateAtlas handling.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::updateTilesIfNeeded):
        (WebKit::CoordinatedGraphicsScene::commitSceneState):
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):
        (WebKit::CoordinatedGraphicsScene::syncUpdateAtlases): Deleted.
        (WebKit::CoordinatedGraphicsScene::createUpdateAtlas): Deleted.
        (WebKit::CoordinatedGraphicsScene::removeUpdateAtlas): Deleted.
        (WebKit::CoordinatedGraphicsScene::releaseUpdateAtlases): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::renderLayerTree):
        (WebKit::ThreadedCompositor::releaseUpdateAtlases): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::delegatedScrollRequested):
        (WebKit::WebChromeClient::resetUpdateAtlasForTesting): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::resetUpdateAtlasForTesting): Deleted.
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::CompositingCoordinator):
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        (WebKit::CompositingCoordinator::clearPendingStateChanges):
        (WebKit::CompositingCoordinator::renderNextFrame):
        (WebKit::CompositingCoordinator::purgeBackingStores):
        (WebKit::CompositingCoordinator::createUpdateAtlas): Deleted.
        (WebKit::CompositingCoordinator::removeUpdateAtlas): Deleted.
        (WebKit::CompositingCoordinator::getCoordinatedBuffer): Deleted.
        (): Deleted.
        (WebKit::CompositingCoordinator::scheduleReleaseInactiveAtlases): Deleted.
        (WebKit::CompositingCoordinator::releaseInactiveAtlasesTimerFired): Deleted.
        (WebKit::CompositingCoordinator::releaseAtlases): Deleted.
        (WebKit::CompositingCoordinator::clearUpdateAtlases): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::clearUpdateAtlases): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::releaseUpdateAtlases): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setIsDiscardable):

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

        REGRESSION(r229998): WebDriver: MiniBrowser is crashing in a lot of tests after r229998
        https://bugs.webkit.org/show_bug.cgi?id=184075

        Reviewed by Žan Doberšek.

        This is because we are using a value after it has been moved.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext): Save a reference to page in a local variable
        before using it when it's also going to be moved in the lambda capture.

2018-03-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix typo in variable name

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

2018-03-27  Per Arne Vollan  <pvollan@apple.com>

        The layout test fast/canvas/webgl/read-pixels-test.html is timing out.
        https://bugs.webkit.org/show_bug.cgi?id=183923
        <rdar://problem/38756869>

        Reviewed by Brent Fulgham.

        Send OpenGL display mask to the WebContent process when the display ID is changing.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowScreenDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::openGLDisplayMaskChanged):

2018-03-27  Youenn Fablet  <youenn@apple.com>

        Move request checking out of PingLoad for future reuse in NetworkLoad
        https://bugs.webkit.org/show_bug.cgi?id=183865

        Reviewed by Chris Dumez.

        Introduce NetworkLoadChecker as a way to validate requests before sending them in the network process.
        Validation encompasses: CORS checks, CSP and Content Extensions on both main request and redirected requests if any.

        Make PingLoad use NetworkLoadChecker. Future patch should make NetworkLoad to use it as well whenever needed.

        Make NetworkCORSPreflightChecker takes a CompletionHandler instead of a Function.
        Ensure this callback is called even if preflight is not completed by returning a Canceled error.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::~NetworkCORSPreflightChecker):
        (WebKit::NetworkCORSPreflightChecker::returnResult):
        (WebKit::NetworkCORSPreflightChecker::willPerformHTTPRedirection):
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        (WebKit::NetworkCORSPreflightChecker::didCompleteWithError):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkLoadChecker.cpp: Added.
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::check):
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::returnError):
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::checkCORSRequest):
        (WebKit::NetworkLoadChecker::checkCORSRedirectedRequest):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        (WebKit::NetworkLoadChecker::doesNotNeedCORSCheck const):
        (WebKit::NetworkLoadChecker::contentSecurityPolicy const):
        (WebKit::NetworkLoadChecker::contentExtensionsBackend):
        (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad):
        * NetworkProcess/NetworkLoadChecker.h: Added.
        (WebKit::NetworkLoadChecker::setCSPResponseHeaders):
        (WebKit::NetworkLoadChecker::setContentExtensionRuleLists):
        (WebKit::NetworkLoadChecker::url const):
        (WebKit::NetworkLoadChecker::storedCredentialsPolicy const):
        (WebKit::NetworkLoadChecker::isChecking const):
        (WebKit::NetworkLoadChecker::isRedirected const):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        (WebKit::PingLoad::~PingLoad):
        (WebKit::PingLoad::willPerformHTTPRedirection):
        (WebKit::PingLoad::didReceiveChallenge):
        (WebKit::PingLoad::wasBlocked):
        (WebKit::PingLoad::cannotShowURL):
        (WebKit::PingLoad::timeoutTimerFired):
        (WebKit::PingLoad::currentURL const):
        * NetworkProcess/PingLoad.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-03-27  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement authenticatorGetAssertion
        https://bugs.webkit.org/show_bug.cgi?id=183881
        <rdar://problem/37258628>

        Reviewed by Brent Fulgham.

        * Shared/WebPreferences.yaml:
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.cpp:
        (WebKit::WebCredentialsMessengerProxy::makeCredential):
        (WebKit::WebCredentialsMessengerProxy::getAssertion):
        (WebKit::WebCredentialsMessengerProxy::getAssertionReply):
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.h:
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.messages.in:
        * WebProcess/CredentialManagement/WebCredentialsMessenger.cpp:
        (WebKit::WebCredentialsMessenger::getAssertion):
        (WebKit::WebCredentialsMessenger::getAssertionReply):
        * WebProcess/CredentialManagement/WebCredentialsMessenger.messages.in:

2018-03-27  Chris Dumez  <cdumez@apple.com>

        Avoid constructing SecurityOrigin objects from non-main threads
        https://bugs.webkit.org/show_bug.cgi?id=184024

        Reviewed by Youenn Fablet.

        Avoid constructing SecurityOrigin objects from non-main threads as much as possible.

        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::mayHaveServiceWorkerRegisteredForOrigin const):
        (WebKit::WebSWClientConnection::matchRegistration):
        (WebKit::WebSWClientConnection::getRegistrations):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWOriginTable.cpp:
        (WebKit::WebSWOriginTable::contains const):
        * WebProcess/Storage/WebSWOriginTable.h:

2018-03-27  Chris Dumez  <cdumez@apple.com>

        Move online state detection from the WebProcess to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=183989
        <rdar://problem/37093299>

        Reviewed by Youenn Fablet.

        Move online state detection from the WebProcess to the NetworkProcess. This avoid executing the same (expensive) code in
        EACH web process whenever a network interface's state changes. Now, the Network Process monitors network interfaces
        and determines the online state whenever an interface's state changes. If the onLine state changes, it notifies all
        its connected WebProcesses via IPC.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::setOnLineState):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::setOnLineState):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::isOnLine const):
        (WebKit::WebLoaderStrategy::addOnlineStateChangeListener):
        (WebKit::WebLoaderStrategy::setOnLineState):
        * WebProcess/Network/WebLoaderStrategy.h:

2018-03-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add support for new focused form control overlay behaviors
        https://bugs.webkit.org/show_bug.cgi?id=184043
        <rdar://problem/38758727>

        Reviewed by Tim Horton.

        See below for more details.

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

        Suppress focused form control navigation while the scroll view is undergoing a scroll or zoom animation (e.g.,
        when moving from one focused form control to another).

        (-[WKContentView textInputController:didCommitText:withSuggestion:]):

        When dismissing an input view controller, allow focused form control navigation only after updating assisted
        node information to ensure that focus rects aren't stale as the user begins to navigate between forms.

        (-[WKContentView rectForFocusedFormControlController:inCoordinateSpace:]):
        (-[WKContentView nextRectForFocusedFormControlController:inCoordinateSpace:]):
        (-[WKContentView previousRectForFocusedFormControlController:inCoordinateSpace:]):
        (-[WKContentView scrollViewForFocusedFormControlController:]):
        (-[WKContentView highlightedRectForFocusedFormControlController:inCoordinateSpace:]): Deleted.

        Implement some new focused form overlay delegate hooks to vend the scroll view, as well as the rects of next and
        previous focusable form controls.

2018-03-27  Brent Fulgham  <bfulgham@apple.com>

        Further refine cookie read/write logging
        https://bugs.webkit.org/show_bug.cgi?id=184044
        <rdar://problem/38915610>

        Reviewed by Chris Dumez.

        Cookie logging was passing the partition, rather than the first party, when logging, which
        prevented logging in cases where partitioning or blocking was active. This patch corrects
        these calls so that logging is generated in these cases, too.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM): Call log routines if needed.
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM): Ditto.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::escapeIDForJSON): Make available to use in multiple functions.
        (WebKit::NetworkResourceLoader::logCookieInformation const): Revise to use shared
        convenience functions.
        (WebKit::logBlockedCookieInformation): Added.
        (WebKit::logCookieInformationInternal): Added.
        (WebKit::NetworkResourceLoader::logCookieInformation): Revise to use shared
        convenience functions.
        * NetworkProcess/NetworkResourceLoader.h:

2018-03-27  Brian Burg  <bburg@apple.com>

        Web Automation: support enter/exit fullscreen and hide/restore window operations
        https://bugs.webkit.org/show_bug.cgi?id=182837
        <rdar://problem/37580732>

        Reviewed by Tim Horton.

        The W3C specification is more explicit about when to exit fullscreen and
        restore the window for a browsing context. So, WebKit needs to have support
        for performing these operations on behalf of a driver.

        Based on prototyping, it is sufficient to use a JavaScript atom to enter
        fullscreen mode. This is included in the patch as EnterFullscreen.js and
        can be used to implement the §10.7.5 Fullscreen Window command.

        Other window operations cannot be peformed from JavaScript, so we need to
        delegate these operations to the session client (i.e., Safari).
        This patch adds session client callouts for restoring, minimizing, and
        switching to a browsing context.

        Exiting fullscreen happens implicitly (per specification) when setting a
        window frame without an actual frame, or when switching/restoring/minimizing a window.
        If needed, a driver can call Set Window Rect in this way to unfullscreen a context.
        Similarly, a driver can restore a minimized window using Set Window Rect.

        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::requestHideWindowOfPage):
        (API::AutomationSessionClient::requestRestoreWindowOfPage):
        (API::AutomationSessionClient::requestSwitchToPage):
        Add new API client methods.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        Add new Cocoa API delegate methods.

        * UIProcess/Automation/Automation.json:
        Make the switch to browsing context command asynchronous, since this functionality
        is not always synchronous, and we prefer to use completion handlers in the delegates.

        Add new protocol method for hiding the window of a browsing context.
        This is expected to minimize/miniaturize a window for desktop window managers.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        Make this function asynchronous. Call out to the session client.

        (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext):
        Follow the steps in the specification to restore window and exit fullscreen.

        (WebKit::WebAutomationSession::hideWindowOfBrowsingContext):
        Exit fullscreen and call out to the session client.

        (WebKit::WebAutomationSession::exitFullscreenWindowForPage):
        This is a little strange. Because there is no async API for exiting fullscreen
        from C++ code, we hook into willEnterFullScreen and didExitFullScreen and send
        out the response if the page exited fullscreen after we requested it to do so.
        Because the W3C specification mandates that drivers only process one command at
        a time, there will only ever be one callback installed by this method at a time.

        (WebKit::WebAutomationSession::restoreWindowForPage):
        (WebKit::WebAutomationSession::hideWindowForPage):
        Call out to the session client.

        (WebKit::WebAutomationSession::didEnterFullScreenForPage):
        (WebKit::WebAutomationSession::didExitFullScreenForPage):
        Add methods to be called by instrumentation hooks in WebFullScreenManagerProxy.

        * UIProcess/Automation/atoms/EnterFullscreen.js: Added.
        (enterFullscreen):

        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::AutomationSessionClient::requestSwitchToPage):
        (WebKit::AutomationSessionClient::requestHideWindowOfPage):
        (WebKit::AutomationSessionClient::requestRestoreWindowOfPage):
        (WebKit::AutomationSessionClient::isShowingJavaScriptDialogOnPage):
        Add boilerplate to convert C++ API client to Objective-C delegate methods.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::didEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::didExitFullScreen):
        Notify the automation session if the page is under automation and
        enters or exits fullscreen.

        * WebKit.xcodeproj/project.pbxproj:
        Add EnterFullscreen.js to the list of WebDriver atoms. These are copied
        as WebKit2 private headers and used by driver implementations.

2018-03-27  Eric Carlson  <eric.carlson@apple.com>

        Make AVFoundationEnabled preference available on iOS
        https://bugs.webkit.org/show_bug.cgi?id=183876
        <rdar://problem/38726459>

        Reviewed by Youenn Fablet.

        * Shared/WebPreferences.yaml: Set AVFoundationEnabled with DEFAULT_AVFOUNDATION_ENABLED.
        * Shared/WebPreferencesDefaultValues.h:

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setAVFoundationEnabled:]): Enable for iOS.
        (-[WKPreferences _avFoundationEnabled]): Ditto.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-03-26  Tim Horton  <timothy_horton@apple.com>

        Adopt WK_ALTERNATE_FRAMEWORKS_DIR in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=184030
        <rdar://problem/38895281>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/BaseTarget.xcconfig:
        * Configurations/WebKit.xcconfig:

2018-03-26  Tim Horton  <timothy_horton@apple.com>

        Add and adopt HAVE(CORE_ANIMATION_RENDER_SERVER)
        https://bugs.webkit.org/show_bug.cgi?id=184026
        <rdar://problem/38883321>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2018-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Refactor input view controller presentation and dismissal helpers
        https://bugs.webkit.org/show_bug.cgi?id=184020
        Work towards <rdar://problem/38758727>

        Reviewed by Tim Horton.

        We currently have separate presentation and dismissal helpers for each type of view controller corresponding to
        a focused element type. This is excessive, considering that all of these helpers are only invoked from one place
        (either -presentViewControllerForCurrentAssistedNode or -dismissAllInputViewControllers), with the exception of
        the focused form control overlay.

        This refactoring allows us to then adjust the timing of first responder restoration logic, such that the focused
        form control view controller can receive forwarded events from the web view. See below for more detail.

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

        Remove logic to restore the web view as first responder.

        (-[WKContentView presentViewControllerForCurrentAssistedNode]):
        (-[WKContentView dismissAllInputViewControllers]):

        Restore first responder after dismissing a view controller that was presented when focusing a form control, only
        if the web view was first responder before presentation.

        (-[WKContentView presentDatePickerViewController:]): Deleted.
        (-[WKContentView dismissDatePickerViewController:]): Deleted.
        (-[WKContentView presentTimePickerViewController:]): Deleted.
        (-[WKContentView dismissTimePickerViewController:]): Deleted.
        (-[WKContentView presentSelectMenuViewController:]): Deleted.
        (-[WKContentView dismissSelectMenuViewController:]): Deleted.
        (-[WKContentView dismissNumberPadViewController:]): Deleted.
        (-[WKContentView presentNumberPadViewController:]): Deleted.
        (-[WKContentView presentTextInputViewController:]): Deleted.
        (-[WKContentView dismissTextInputViewController:]): Deleted.

2018-03-06  Brian Burg  <bburg@apple.com>

        Web Automation: provide a way to ask clients for a new tab or window
        https://bugs.webkit.org/show_bug.cgi?id=183381
        <rdar://problem/38167301>

        Reviewed by Timothy Hatcher.

        Add support for specifying browsing context options when requesting
        a new browsing context from the automation session client/delegate.
        This is currently just used for specifying tab vs window, but could
        also be used for things like toggling certain browser chrome or features.

        There is no guarantee that the client has a notion of tabs vs windows,
        so this option is purely advisory and should not cause the command to
        fail if it cannot be honored.

        This behavior caused by specifying this option is client-specific, so no
        new tests are included in WebKit for this change.

        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::didRequestNewPageWithOptions):
        (API::AutomationSessionClient::didRequestNewWindow): Deleted.
        Add options parameter.

        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        Adjust to new signature. More work is needed to plumb this information
        to the public API for GTK/WPE and support it in WebKitGTK driver.

        * UIProcess/Automation/Automation.json: Add new optional parameter.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::createBrowsingContext):
        Convert the protocol option to an API option.

        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::toAPI):
        (WebKit::AutomationSessionClient::didRequestNewPageWithOptions):
        (WebKit::AutomationSessionClient::didRequestNewWindow): Deleted.
        Convert the internal option to a Cocoa SPI option and pass it along.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        Adjust delegate methods to include options. Clients need to adopt the new signature(s).

2018-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add plumbing for next and previous focusable element rects
        https://bugs.webkit.org/show_bug.cgi?id=184016
        Work towards <rdar://problem/38758727>

        Reviewed by Tim Horton.

        When building up AssistedNodeInformation, we currently compute the element rect of the current focused element,
        as well as flags indicating whether or not there are next or previous focusable elements. For
        <rdar://problem/38758727>, we additionally send the rects of the next or previous focusable elements as well.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode const):
        (WebKit::AssistedNodeInformation::decode):

        IPC support for nextNodeRect and previousNodeRect.

        * Shared/AssistedNodeInformation.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::elementRectInRootViewCoordinates):

        Add a helper to compute an element's rect in root view coordinates. We use this to compute the rects of the
        current focused element as well as those of the next and previous elements, if any.

        (WebKit::WebPage::getAssistedNodeInformation):
        (WebKit::hasAssistableElement): Deleted.

        Since we need the next or previous focusable element to get its rect, we don't need this helper anymore.

2018-03-26  Chris Dumez  <cdumez@apple.com>

        Use SecurityOriginData more consistently in Service Worker code
        https://bugs.webkit.org/show_bug.cgi?id=183969

        Reviewed by Darin Adler.

        Use SecurityOriginData more consistently in Service Worker code to avoid constructing
        SecurityOrigin objects unnecessarily.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginCopyDatabaseIdentifier):
        * StorageProcess/ServiceWorker/WebSWOriginStore.cpp:
        (WebKit::WebSWOriginStore::addToStore):
        (WebKit::WebSWOriginStore::removeFromStore):
        * StorageProcess/ServiceWorker/WebSWOriginStore.h:
        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        (WebKit::WebSWServerConnection::registerServiceWorkerClient):
        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::connectionToContextProcessWasClosed):
        (WebKit::StorageProcess::needsServerToContextConnectionForOrigin const):
        (WebKit::StorageProcess::createStorageToWebProcessConnection):
        (WebKit::StorageProcess::deleteWebsiteDataForOrigins):
        (WebKit::StorageProcess::serverToContextConnectionForOrigin):
        (WebKit::StorageProcess::createServerToContextConnection):
        (WebKit::StorageProcess::swContextConnectionMayNoLongerBeNeeded):
        * StorageProcess/StorageProcess.h:
        * UIProcess/API/APIFrameInfo.cpp:
        (API::FrameInfo::create):
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerDeleteEntriesForOrigin):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerClearCacheForOrigin):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveFetchCacheForOrigin):
        (WKWebsiteDataStoreGetFetchCacheSizeForOrigin):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::create):
        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
        (WebKit::ServiceWorkerProcessProxy::getLaunchOptions):
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::getStorageProcessConnection):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::updateProcessAssertions):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyOriginsWithApplicationCache):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::enumerateMediaDevices):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::registerServiceWorkerClient):
        (WebKit::WebSWClientConnection::matchRegistration):
        (WebKit::WebSWClientConnection::whenRegistrationReady):
        (WebKit::WebSWClientConnection::getRegistrations):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::fetchWebsiteData):
        * WebProcess/WebStorage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::securityOrigin const):
        * WebProcess/WebStorage/StorageAreaImpl.h:
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::didDestroyStorageAreaMap):

2018-03-26  Brent Fulgham  <bfulgham@apple.com>

        Warn against cookie access in the WebContent process using ProcessPrivilege assertions
        https://bugs.webkit.org/show_bug.cgi?id=183911
        <rdar://problem/38762306>

        Reviewed by Youenn Fablet.

        Add a set of ProcessPrivilege assertions to enforce the rule that the WebContent process
        should never call Cookie API directly. That should only happen in the Networking or
        UIProcess. 

        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applyCookieBlockingPolicy):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::setSharedHTTPCookieStorage):
        (WebKit::NetworkProcess::syncAllCookies):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeProcess):
        * Shared/cf/CookieStorageUtilsCF.mm:
        (WebKit::cookieStorageFromIdentifyingData):
        (WebKit::identifyingDataFromCookieStorage):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::privateBrowsingSession):
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/mac/WebCookieManagerProxyMac.mm:
        (WebKit::WebCookieManagerProxy::persistHTTPCookieAcceptPolicy):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createNetworkingContext):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
        (WebKit::WebFrameNetworkingContext::storageSession const):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeProcess):

2018-03-26  Alex Christensen  <achristensen@webkit.org>

        Merge ResourceHandleClient::willCacheResponseAsync with ResourceHandleClient::willCacheResponse
        https://bugs.webkit.org/show_bug.cgi?id=183965

        Reviewed by Chris Dumez.

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

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

        [GTK][WPE] Add API to convert between DOM and JSCValue
        https://bugs.webkit.org/show_bug.cgi?id=183448

        Reviewed by Michael Catanzaro.

        Add methods to get a JSCValue for a WebKitDOMObject and to create a WebKitDOMNode from a JSCValue. Deprecate
        most of the GTK+ DOM bindings API and move the non-deprecated parts to glib dir to be exposed by WPE too.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * WebProcess/InjectedBundle/API/glib/DOM/DOMObjectCache.cpp: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/DOMObjectCache.cpp.
        * WebProcess/InjectedBundle/API/glib/DOM/DOMObjectCache.h: Copied from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/DOMObjectCache.h.
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMDocument.cpp: Added.
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapDocument):
        (webkit_dom_document_class_init):
        (webkit_dom_document_init):
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMDocumentPrivate.h: Copied from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentPrivate.h.
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMElement.cpp: Added.
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapElement):
        (webkit_dom_element_class_init):
        (webkit_dom_element_init):
        (webkit_dom_element_html_input_element_is_user_edited):
        (webkit_dom_element_html_input_element_get_auto_filled):
        (webkit_dom_element_html_input_element_set_auto_filled):
        (webkit_dom_element_html_input_element_set_editing_value):
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMElementPrivate.h: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementPrivate.h.
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMNode.cpp: Added.
        (_WebKitDOMNodePrivate::~_WebKitDOMNodePrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapNode):
        (webkitDOMNodeConstructor):
        (webkitDOMNodeFinalize):
        (webkit_dom_node_init):
        (webkit_dom_node_class_init):
        (webkitDOMNodeSetCoreObject):
        (webkitDOMNodeGetCoreObject):
        (webkit_dom_node_for_js_value):
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMNodePrivate.h: Copied from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodePrivate.h.
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMObject.cpp: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMObject.cpp.
        (webkitDOMObjectSetProperty):
        (webkit_dom_object_class_init):
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMPrivate.cpp: Added.
        (WebKit::wrap):
        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMPrivate.h: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/DOMObjectCache.h.
        * WebProcess/InjectedBundle/API/glib/WebKitFrame.cpp:
        (webkit_frame_get_js_value_for_dom_object):
        (webkit_frame_get_js_value_for_dom_object_in_script_world):
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (webkit_web_page_class_init):
        (webkitWebPageCreate):
        (webkit_web_page_get_dom_document):
        * WebProcess/InjectedBundle/API/gtk/DOM/GObjectEventListener.cpp:
        (WebKit::GObjectEventListener::handleEvent):
        * WebProcess/InjectedBundle/API/gtk/DOM/GObjectNodeFilterCondition.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/GObjectXPathNSResolver.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttr.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttr.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBlob.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBlob.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCDATASection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCDATASection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRule.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRule.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRuleList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRuleList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleDeclaration.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleDeclaration.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleSheet.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleSheet.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValue.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValue.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRect.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRect.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMComment.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMComment.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMImplementation.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMImplementation.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDeprecated.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentGtk.cpp: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp.
        (webkitDOMDocumentDOMEventTargetInit):
        (webkitDOMDocumentInstallProperties):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementGtk.cpp: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp.
        (webkitDOMElementDOMEventTargetInit):
        (webkitDOMElementInstallProperties):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEventTarget.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEventTarget.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFile.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFile.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFileList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFileList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAppletElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAppletElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCanvasElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCanvasElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCollection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCollection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDocument.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDocument.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMapElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMapElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollection.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPrivate.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLQuoteElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLQuoteElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTitleElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTitleElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyboardEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyboardEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNamedNodeMap.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNamedNodeMap.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNode.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeFilter.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeFilter.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeGtk.cpp: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNode.cpp.
        (webkitDOMNodeDOMEventTargetInit):
        (webkitDOMNodeInstallProperties):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeIterator.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeIterator.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMObject.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivateGtk.cpp: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivate.cpp.
        (WebKit::wrapNodeGtk):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivateGtk.h: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivate.h.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMProcessingInstruction.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMProcessingInstruction.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRange.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRange.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheet.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheet.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheetList.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheetList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMText.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMText.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTreeWalker.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTreeWalker.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEvent.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEvent.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathExpression.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathExpression.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathNSResolver.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathNSResolver.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathResult.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathResult.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/docs/webkitdomgtk-4.0-sections.txt:
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.h:
        * WebProcess/InjectedBundle/API/wpe/DOM/WebKitDOMDefines.h: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentPrivate.h.
        * WebProcess/InjectedBundle/API/wpe/DOM/WebKitDOMDocument.h: Added.
        * WebProcess/InjectedBundle/API/wpe/DOM/WebKitDOMElement.h: Added.
        * WebProcess/InjectedBundle/API/wpe/DOM/WebKitDOMNode.h: Added.
        * WebProcess/InjectedBundle/API/wpe/DOM/WebKitDOMObject.h: Copied from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMObject.h.
        * WebProcess/InjectedBundle/API/wpe/DOM/webkitdom.h: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodePrivate.h.
        * WebProcess/InjectedBundle/API/wpe/WebKitFrame.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitWebHitTestResult.h: Added.
        * WebProcess/InjectedBundle/API/wpe/WebKitWebPage.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitWebProcessEnumTypes.cpp.template: Added.
        * WebProcess/InjectedBundle/API/wpe/WebKitWebProcessEnumTypes.h.template: Copied from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMObjectPrivate.h.
        * WebProcess/InjectedBundle/API/wpe/webkit-web-extension.h:

2018-03-26  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Clean up CoordinatedGraphicsScene construct-time initializations
        https://bugs.webkit.org/show_bug.cgi?id=184002

        Reviewed by Carlos Garcia Campos.

        Move the CoordinatedGraphicsScene constant-expression initializations
        from constructor to the point of declaration.

        Default the CoordinatedGraphicsScene destructor.

        The m_scrollPosition member variable is unused in this class, while the
        similarly-named m_renderedContentsScrollPosition tracks scroll position
        of the scene. Remove the latter and use m_scrollPosition in its place.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::CoordinatedGraphicsScene):
        (WebKit::CoordinatedGraphicsScene::adjustPositionForFixedLayers):
        (WebKit::CoordinatedGraphicsScene::commitSceneState):
        (WebKit::CoordinatedGraphicsScene::~CoordinatedGraphicsScene): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:

2018-03-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] WebKitWebProcessEnumTypes.h missing from webkit-web-extension.h
        https://bugs.webkit.org/show_bug.cgi?id=183998

        Reviewed by Carlos Garcia Campos.

        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:

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

        [GTK] Unresolved type warnings when generating gir
        https://bugs.webkit.org/show_bug.cgi?id=183926

        Reviewed by Michael Catanzaro.

        Skip deprecated functions using JSC C API from introspection.

        * UIProcess/API/glib/WebKitJavascriptResult.cpp:
        * UIProcess/API/glib/WebKitWebView.cpp:
        * WebProcess/InjectedBundle/API/glib/WebKitFrame.cpp:

2018-03-25  Commit Queue  <commit-queue@webkit.org>

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

        Caused many layout tests to crash on Apple High Sierra,
        Sierra, iOS Simulator and GTK Linux Debug test bots (Requested
        by dydz on #webkit).

        Reverted changeset:

        "Use SecurityOriginData more consistently in Service Worker
        code"
        https://bugs.webkit.org/show_bug.cgi?id=183969
        https://trac.webkit.org/changeset/229954

2018-03-23  Brian Burg  <bburg@apple.com>

        Web Automation: remove unnecessary member variable WebAutomationSession
        https://bugs.webkit.org/show_bug.cgi?id=183971

        Reviewed by Timothy Hatcher.

        The concept of the "active" browsing context is something in the WebDriver
        specification, but we were a bit too literal when first implementing this.
        There's no actual need for this on the browser side since most commands
        require implicitly switching to the target window passed in with the
        Automation command. The driver, however, still needs to track the current
        browsing context and current top-level browsing context.

        For returning whether a browsing context is active,  we can just look at
        the page's activity state to know whether the page is active or not. For
        a normal browser, only one page is going to be visible and focused at a time.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::buildBrowsingContextForPage):
        Consult the page's activity state to determine whether it's active.

        (WebKit::WebAutomationSession::createBrowsingContext):
        (WebKit::WebAutomationSession::closeBrowsingContext):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::handleRunOpenPanel):
        Stop reading and writing the current browsing context handle.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isViewFocused const):
        (WebKit::WebPageProxy::isViewWindowActive const):
        Add new accessor.

2018-03-25  Tim Horton  <timothy_horton@apple.com>

        Add and adopt ENABLE(AIRPLAY_PICKER)
        https://bugs.webkit.org/show_bug.cgi?id=183992

        Reviewed by Daniel Bates.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showPlaybackTargetPicker:fromRect:]):
        * UIProcess/ios/forms/WKAirPlayRoutePicker.h:
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:

2018-03-25  Tim Horton  <timothy_horton@apple.com>

        Move WKAnimationDelegate to its own header
        https://bugs.webkit.org/show_bug.cgi?id=183976
        <rdar://problem/38822299>

        Reviewed by Dan Bernstein.

        * Shared/RemoteLayerTree/WKAnimationDelegate.h: Added.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        RemoteLayerTreeHost uses a forward declaration of WKAnimationDelegate,
        so we're just getting lucky that an -invalidate method exists on
        some other object. Instead, move WKAnimationDelegate to its own
        header, and include it in the places we use it.

2018-03-24  Tim Horton  <timothy_horton@apple.com>

        Adopt WK_PLATFORM_NAME in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=183978

        Reviewed by Dan Bernstein.

        * Configurations/WebKit.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:
        * mac/MigrateHeadersFromWebKitLegacy.make:
        * mac/postprocess-framework-headers.sh:

2018-03-24  Tim Horton  <timothy_horton@apple.com>

        Ignore sandbox_init_with_parameters deprecation warnings
        https://bugs.webkit.org/show_bug.cgi?id=183979

        Reviewed by Dan Bernstein.

        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::initializeSandbox):

2018-03-24  Chris Dumez  <cdumez@apple.com>

        Use SecurityOriginData more consistently in Service Worker code
        https://bugs.webkit.org/show_bug.cgi?id=183969

        Reviewed by Darin Adler.

        Use SecurityOriginData more consistently in Service Worker code to avoid constructing
        SecurityOrigin objects unnecessarily.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginCopyDatabaseIdentifier):
        * StorageProcess/ServiceWorker/WebSWOriginStore.cpp:
        (WebKit::WebSWOriginStore::addToStore):
        (WebKit::WebSWOriginStore::removeFromStore):
        * StorageProcess/ServiceWorker/WebSWOriginStore.h:
        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        (WebKit::WebSWServerConnection::registerServiceWorkerClient):
        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::connectionToContextProcessWasClosed):
        (WebKit::StorageProcess::needsServerToContextConnectionForOrigin const):
        (WebKit::StorageProcess::createStorageToWebProcessConnection):
        (WebKit::StorageProcess::deleteWebsiteDataForOrigins):
        (WebKit::StorageProcess::serverToContextConnectionForOrigin):
        (WebKit::StorageProcess::createServerToContextConnection):
        (WebKit::StorageProcess::swContextConnectionMayNoLongerBeNeeded):
        * StorageProcess/StorageProcess.h:
        * UIProcess/API/APIFrameInfo.cpp:
        (API::FrameInfo::create):
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerDeleteEntriesForOrigin):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerClearCacheForOrigin):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveFetchCacheForOrigin):
        (WKWebsiteDataStoreGetFetchCacheSizeForOrigin):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::create):
        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
        (WebKit::ServiceWorkerProcessProxy::getLaunchOptions):
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::getStorageProcessConnection):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::updateProcessAssertions):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyOriginsWithApplicationCache):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::enumerateMediaDevices):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::registerServiceWorkerClient):
        (WebKit::WebSWClientConnection::matchRegistration):
        (WebKit::WebSWClientConnection::whenRegistrationReady):
        (WebKit::WebSWClientConnection::getRegistrations):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::fetchWebsiteData):
        * WebProcess/WebStorage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::securityOrigin const):
        * WebProcess/WebStorage/StorageAreaImpl.h:
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::didDestroyStorageAreaMap):

2018-03-24  Tim Horton  <timothy_horton@apple.com>

        Fix the !ENABLE(MEDIA_STREAM) build
        https://bugs.webkit.org/show_bug.cgi?id=183977

        Reviewed by Wenson Hsieh.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        * WebProcess/cocoa/UserMediaCaptureManager.messages.in:

2018-03-24  Tim Horton  <timothy_horton@apple.com>

        WKFileUploadPanel shouldn't depend on WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=183981

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _uploadItemForImageData:imageName:successBlock:failureBlock:]):
        Just use the underlying WebCore function instead of the
        unnecessary NSFileManager category method.

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

        Fix the build with no pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=183973

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2018-03-23  Megan Gardner  <megan_gardner@apple.com>

        Enable unified text selection in select cases for gradual testing
        https://bugs.webkit.org/show_bug.cgi?id=183967
        <rdar://problem/38815328>

        Reviewed by Tim Horton.
        
        Enable in select places for a more gradual switch, as this is a big change and we want to make sure
        it works before switching completely.

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

2018-03-23  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Pick up ITP debug mode flag from defaults
        https://bugs.webkit.org/show_bug.cgi?id=183956
        <rdar://problem/38559574>

        Reviewed by Brent Fulgham.

        * UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm:
        (WebKit::WebResourceLoadStatisticsStore::registerUserDefaultsIfNeeded):

2018-03-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Adopt list view controller UI for select menus
        https://bugs.webkit.org/show_bug.cgi?id=183944
        <rdar://problem/38799062>

        Reviewed by Tim Horton.

        Move UIProcess/WKSelectMenuListViewController.* to UIProcess/ios/forms, where it was intended to go.

        * UIProcess/ios/forms/WKSelectMenuListViewController.h: Renamed from Source/WebKit/UIProcess/WKSelectMenuListViewController.h.
        * UIProcess/ios/forms/WKSelectMenuListViewController.mm: Renamed from Source/WebKit/UIProcess/WKSelectMenuListViewController.mm.
        * WebKit.xcodeproj/project.pbxproj:

2018-03-23  Chris Dumez  <cdumez@apple.com>

        Promptly terminate service worker processes when they are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=183873
        <rdar://problem/38676995>

        Reviewed by Youenn Fablet.

        The StorageProcess now keeps track of service worker clients for each security
        origin. When there is no longer any clients for a given security origin, the
        StorageProcess asks the service worker process for the given origin to terminate
        and severs its connection to it.

        * Shared/Storage/StorageProcessCreationParameters.h:
        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::connectionMayNoLongerBeNeeded):
        (WebKit::WebSWServerToContextConnection::terminate):
        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::connectionToContextProcessWasClosed):
        (WebKit::StorageProcess::needsServerToContextConnectionForOrigin const):
        (WebKit::StorageProcess::initializeWebsiteDataStore):
        (WebKit::StorageProcess::swServerForSession):
        (WebKit::StorageProcess::swContextConnectionMayNoLongerBeNeeded):
        (WebKit::StorageProcess::disableServiceWorkerProcessTerminationDelay):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _disableServiceWorkerProcessTerminationDelay]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore):
        (WebKit::WebProcessPool::disableServiceWorkerProcessTerminationDelay):
        * UIProcess/WebProcessPool.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::terminateProcess):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2018-03-23  Brady Eidson  <beidson@apple.com>

        Go to back/forward list items after a process-swapped navigation.
        <rdar://problem/38690544> and https://bugs.webkit.org/show_bug.cgi?id=183920

        Reviewed by Andy Estes.

        This takes the initial work of "process swap a normal navigation" and extends it to
        process swapping for back/forward item navigations.

        * Scripts/webkit/messages.py:

        Make sure state objects are serialized to the UI Process back/forward list items, as otherwise
        they will be lost in process-swap scenarios:
        * Shared/SessionState.cpp:
        (WebKit::PageState::encode const):
        (WebKit::PageState::decode):
        * Shared/SessionState.h:

        Make a new variant of APINavigation specifically for back/forward list items.
        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::Navigation):
        (API::Navigation::loggingURL const):
        * UIProcess/API/APINavigation.h:
        (API::Navigation::create):
        (API::Navigation::backForwardListItem):
        (API::Navigation::backForwardFrameLoadType const):

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGoToBackForwardListItem):

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController goToBackForwardListItem:]):

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

        * UIProcess/WebNavigationState.cpp:
        (WebKit::WebNavigationState::createLoadRequestNavigation):
        (WebKit::WebNavigationState::createBackForwardNavigation):
        * UIProcess/WebNavigationState.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess): Handle back/forward navigations differently than others.
        (WebKit::WebPageProxy::restoreFromSessionState):
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addOrUpdateBackForwardItem): Renamed from "addBackForwardItem" for clarity
        (WebKit::WebProcessProxy::addBackForwardItem): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):

        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toPageState):
        (WebKit::toHistoryItem):

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::updateBackForwardItem):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goToBackForwardItem): Combined "goBack" and "goForward" with this method,
          passing the appropriate FrameLoadType around as needed to remember the specific type.
        (WebKit::WebPage::goForward): Deleted.
        (WebKit::WebPage::goBack): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-03-23  Megan Gardner  <megan_gardner@apple.com>

        Don't use the presence of a textSelectionAssistant as a proxy for if we are in content editable.
        https://bugs.webkit.org/show_bug.cgi?id=183804

        Reviewed by Tim Horton.

        We need to stop using the presence of a textSelectionAssistant as a proxy for if we are selecting in a content editable
        or not. As we are planning on switching to only using a textSelectionAssistant for selection, these checks need to 
        be more direct in checking what we actually need to know i.e. are we selecting in a content editable.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (hasAssistedNode):
        (-[WKContentView inputView]):
        (-[WKContentView _selectionClipRect]):
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView webSelectionRects]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _autofillContext]):

2018-03-23  Youenn Fablet  <youenn@apple.com>

        WebProcessPool should not ask to register all clients for each service worker process creation
        https://bugs.webkit.org/show_bug.cgi?id=183941

        Reviewed by Chris Dumez.

        Call registerServiceWorkerClients when there is no service worker process.
        Update service worker clients to register all of them no matter the session ID.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::registerServiceWorkerClients):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-03-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Adopt list view controller UI for select menus
        https://bugs.webkit.org/show_bug.cgi?id=183944
        <rdar://problem/38799062>

        Reviewed by Andy Estes.

        Rename WKSelectMenuViewController to WKSelectMenuListViewController, and also rename the relevant
        WebKitAdditions harness files. See corresponding changes for more details.

        * UIProcess/WKSelectMenuListViewController.h: Renamed from Source/WebKit/UIProcess/ios/forms/WKSelectMenuViewController.h.
        * UIProcess/WKSelectMenuListViewController.mm: Renamed from Source/WebKit/UIProcess/ios/forms/WKSelectMenuViewController.mm.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView presentSelectMenuViewController:]):
        (-[WKContentView dismissSelectMenuViewController:]):
        (-[WKContentView selectMenu:didSelectItemAtIndex:]):
        (-[WKContentView numberOfItemsInSelectMenu:]):
        (-[WKContentView selectMenu:displayTextForItemAtIndex:]):
        (-[WKContentView selectMenu:didCheckItemAtIndex:checked:]):
        (-[WKContentView selectMenuUsesMultipleSelection:]):
        (-[WKContentView selectMenu:hasSelectedOptionAtIndex:]):
        (-[WKContentView _wheelChangedWithEvent:]):

        Overriding wheel events and re-dispatching them is no longer needed after r229437, so we can just remove special
        handling for select menus here.

        (-[WKContentView didCancelSelectionInSelectMenu:]): Deleted.
        (-[WKContentView selectMenuSupportsMultipleSelection:]): Deleted.
        (-[WKContentView selectMenu:hasCheckedOptionAtIndex:]): Deleted.
        (-[WKContentView startingIndexForSelectMenu:]): Deleted.

        The starting index for a select menu is no longer relevant when using list view controllers for input, so we can
        just remove this delegate hook altogether.

        * WebKit.xcodeproj/project.pbxproj:

2018-03-23  Youenn Fablet  <youenn@apple.com>

        CacheStorage::Caches should clear m_caches when clearing its representation even though it is not yet initialized
        https://bugs.webkit.org/show_bug.cgi?id=183945

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::clearMemoryRepresentation):
        In case we clear Caches in the middle of the initialization, m_caches might not be empty
        but m_isInitialized is not yet set to true since we are computing the Caches size.
        Update the assertion and clear m_caches in that case.

2018-03-23  David Kilzer  <ddkilzer@apple.com>

        Stop using dispatch_set_target_queue()
        <https://webkit.org/b/183908>
        <rdar://problem/33553533>

        Reviewed by Daniel Bates.

        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::IOChannel): Remove the call to
        dispatch_set_target_queue() since this is handled in the
        dispatch_io_create() call above.

2018-03-23  Youenn Fablet  <youenn@apple.com>

        CacheStorage::Engine should not ref itself when hopping to a background thread
        https://bugs.webkit.org/show_bug.cgi?id=183925
        <rdar://problem/38580483>

        Reviewed by Chris Dumez.

        Add support for weak pointers to CacheStorage Engine.
        Use weak pointer when hopping to background threads.
        Store callbacks in CacheStorage::Engine maps to keep them being destroyed in the main thread only.
        Made some callbacks CompletionHandler as a bonus.

        Made sure to use just one Engine for all private sessions.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::~Engine):
        (WebKit::CacheStorage::Engine::from):
        (WebKit::CacheStorage::Engine::initialize):
        (WebKit::CacheStorage::Engine::writeFile):
        (WebKit::CacheStorage::Engine::readFile):
        * NetworkProcess/cache/CacheStorageEngine.h:
        (WebKit::CacheStorage::Engine::weakPtrFactory):

2018-03-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2018-03-23  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Avoid software color conversion inside BitmapTextureGL
        https://bugs.webkit.org/show_bug.cgi?id=183892

        Remove the UpdateContentsFlag parameter when calling BitmapTexture::updateContents().

        Reviewed by Žan Doberšek.

        * Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStoreTile::swapBuffers):

2018-03-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Fix -Wswitch warnings after r229778
        https://bugs.webkit.org/show_bug.cgi?id=183927

        Reviewed by Carlos Garcia Campos.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse): Log a warning if Suspend is
        received as a PolicyAction
        * UIProcess/API/glib/WebKitNavigationClient.cpp: Ignore the ProcessSwap termination reason,
        which should be invisible to WebKit clients

2018-03-22  Chris Dumez  <cdumez@apple.com>

        Include security origin in the service worker process name
        https://bugs.webkit.org/show_bug.cgi?id=183913

        Reviewed by Youenn Fablet.

        Include security origin in the service worker process name to facilitate debugging. This way, we
        can differentiate which service worker process is used for which origin in activity monitor.

        * Shared/ChildProcess.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getExtraInitializationData):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::getLaunchOptions):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeProcessName):

2018-03-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence unused variable warning

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

2018-03-22  Dan Bernstein  <mitz@apple.com>

        WKWebView doesn’t expose its spellCheckerDocumentTag
        https://bugs.webkit.org/show_bug.cgi?id=183797
        <rdar://problem/38678089>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _spellCheckerDocumentTag]): Added this getter which calls through to the WebViewImpl.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared _spellCheckerDocumentTag property.

2018-03-22  Chris Dumez  <cdumez@apple.com>

        Use the same SWServer for all ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=183921
        <rdar://problem/36873075>

        Reviewed by Youenn Fablet.

        Use the same SWServer for all ephemeral sessions. SWServers never go away and we create
        one per sessionID. When browsing doing private browsing in Safari (and other fetching
        favorite icons), the sessionID is ephemeral and keeps changing. This means that we kept
        constructing new SWServers that would never go away. Each SWServer has a thread so we
        would eventually hit the thread limit for the storage process.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::swServerForSession):

2018-03-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix format string warnings in service worker code

        On Linux x86_64, uint64_t is unsigned long, not unsigned long long.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::didFinishFetch):
        (WebKit::WebSWServerConnection::didFailFetch):
        (WebKit::WebSWServerConnection::didNotHandleFetch):

2018-03-22  Daniel Bates  <dabates@apple.com>

        Expose SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest() as WebKit SPI
        https://bugs.webkit.org/show_bug.cgi?id=183907
        <rdar://problem/38759127>

        Reviewed by Alex Christensen.

        Adds both modern Objective-C SPI and C SPI to allow an embedding client to register a scheme
        whose content should be displayed/loaded if and only if it can be requested. Disregarding an
        app that enables universal access, by using this SPI WebKit will refuse to display cross-origin
        content for the registered schemes.

        We need to add C SPI for embedding clients that have not transitioned to the modern Objective-
        C API/SPI.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextRegisterURLSchemeAsCanDisplayOnlyIfCanRequest):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _registerURLSchemeAsCanDisplayOnlyIfCanRequest:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsCanDisplayOnlyIfCanRequest):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::registerURLSchemeAsCanDisplayOnlyIfCanRequest const):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-03-22  Tim Horton  <timothy_horton@apple.com>

        Improve readability of WebCore's OTHER_LDFLAGS
        https://bugs.webkit.org/show_bug.cgi?id=183909
        <rdar://problem/38760992>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:

2018-03-22  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Make TextureMapperContextAttributes thread-specific
        https://bugs.webkit.org/show_bug.cgi?id=183895

        Reviewed by Carlos Garcia Campos.

        CoordinatedGraphicsScene, as an implementor of the
        TextureMapperPlatformLayerProxy::Compositor interface, doesn't have to
        implement the texmapGL() method anymore.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::onNewBufferAvailable):
        (WebKit::CoordinatedGraphicsScene::texmapGL): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:

2018-03-21  Frederic Wang  <fwang@igalia.com>

        Unreviewed, update comment added in r229801.

        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::didFindString): Remove "On Mobile" and mention bug 183889.

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

        Regression(r229831): ProcessSwap.Basic API test is crashing
        https://bugs.webkit.org/show_bug.cgi?id=183884

        Reviewed by Brady Eidson.

        This code should only be called for navigation policy decisions.
        It used to work without this check because of an early return, which
        was dropped in r229831.

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

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

        [Extra zoom mode] Add new SPI hooks for clients to vend an input session context view
        https://bugs.webkit.org/show_bug.cgi?id=183866
        <rdar://problem/38692256>

        Reviewed by Tim Horton.

        Add new SPI hooks to _WKInputDelegate allowing internal clients to provide a view that gives additional context
        when editing form controls, on top of the default label or placeholder text displayed by WebKit. The height
        delegate is invoked first, giving the client an opportunity to lay out the context view to fit the given size;
        the actual view is then queried.

        If the view changes, clients may tell WebKit to reload the context view via SPI on WKFormInputSession; this call
        to reload is plumbed through to the currently presented list view controller (at the moment, this is only the
        text input list view controller).

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

        Add the new SPI hooks, described above.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession reloadFocusedElementContextView]):

        Plumb the context view reload hook through WKContentView to WKTextInputListViewController.

        (-[WKContentView setupInteraction]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView reloadContextViewForPresentedListViewController]):
        (-[WKContentView focusedFormControllerDidUpdateSuggestions:]):

        Slight tweak to only reload text suggestions if we are not blurring the focused element. Without this extra
        condition, the list view controller's inner table view would get reloaded when the form input session's text
        suggestions are set to nil when the list view controller is dismissed, causing a visible stutter in the
        dismissal animation of view controller.

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

        WebKitTestRunner crashed in com.apple.WebKit: WebKit::WebProcessPool::terminateServiceWorkerProcesses
        https://bugs.webkit.org/show_bug.cgi?id=183875

        Reviewed by Brent Fulgham.

        Protect |this| while we're iterating over m_serviceWorkerProcesses and terminating
        each service worker process. It is possible for the WebProcess pool to get destroyed
        as a result of terminating a service worker process.

        This change is covered by layout tests that are currently crashing on the ASAN bots.

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

2018-03-21  Eric Carlson  <eric.carlson@apple.com>

        Fix typo in inactive media stream timeout default value
        https://bugs.webkit.org/show_bug.cgi?id=183872
        <rdar://problem/38723903>

        Reviewed by Jer Noble.

        * Shared/WebPreferences.yaml: Fix typo.
        * Shared/WebPreferencesDefaultValues.h: Ditto.

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

        Make policy decisions asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=180568
        <rdar://problem/37131297>

        Reviewed by Alex Christensen.

        Get rid of synchronous IPC and synchronous code paths for policy delegates.
        Policy decisions are now all made asynchronously and rely on asynchronous
        IPC.

        This code change is based on work by Alex Christensen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        ScrollViewInsetTests.RestoreInitialContentOffsetAfterCrash API test is failing with async delegates
        https://bugs.webkit.org/show_bug.cgi?id=183787

        Reviewed by Wenson Hsieh.

        Without asynchronous policy delegates, when the client requests a navigation, we would:
        1. Do a synchronous navigation policy check
        2. If the client allows the navigation, start the provisional load

        Starting the provisional load would freeze the layer tree until first meaningful
        layout via WebFrameLoaderClient::provisionalLoadStarted() -> WebPage::didStartPageTransition().

        When constructing a WebView and then requesting a load right away. This would make sure
        we do not commit a layer tree for the initial about:blank page because the layer tree
        would be frozen until we have something meaningful to show for the following load.

        However, with asynchronous policy delegates, we are able to do a layer tree commit
        during the asynchronous navigation policy check because the layer tree is not frozen
        yet (provisional load has not started) and the process is not stuck on synchronous
        IPC. When constructing a WebView and then requesting a load right away, this would
        allow a layer tree commit for about:blank to happen before we've even started the
        load. This would cause some API tests to fail on iOS.

        To address the issue, we try and maintain pre-existing behavior by freezing the
        layer tree during navigation policy decision.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::didDecidePolicyForNavigationAction):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartNavigationPolicyCheck):
        (WebKit::WebPage::didCompleteNavigationPolicyCheck):
        * WebProcess/WebPage/WebPage.h:

2018-03-21  Brent Fulgham  <bfulgham@apple.com>

        Allow the WebContent process to read ViewBridge preferences
        https://bugs.webkit.org/show_bug.cgi?id=183862
        <rdar://problem/38459456>

        Reviewed by Eric Carlson.

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

2018-03-21  Frederic Wang  <fwang@igalia.com>

        [iOS] Text highlighted by the Find UI overlaps with NBC news header on google.com
        https://bugs.webkit.org/show_bug.cgi?id=183658

        Reviewed by Tim Horton.

        On Mobile, many sites have overlay headers or footers that may overlap with the highlighted
        text inside a scrollable overflow node. To workaround that issue, this commit changes the
        behavior so that the text is revealed at the center of the overflow node.

        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::didFindString): Use alignCenterAlways instead of alignToEdgeIfNeeded.

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

        [GTK][WPE] JSC bindings not introspectable
        https://bugs.webkit.org/show_bug.cgi?id=136989

        Reviewed by Michael Catanzaro.

        Deprecate the functions that are not introspectable due to JSC C API in GTK+ port and remove them in WPE
        port. Add alternative functions using the new JSC GLib API. We no longer need to keep a global context attached
        to every view. We can simply create a temporary global context on demand and release it after 1 second. This
        also allows us to remove WebPageProxy::javascriptGlobalContext() and all the related code.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * UIProcess/API/glib/WebKitJavascriptResult.cpp:
        (_WebKitJavascriptResult::_WebKitJavascriptResult):
        (webkitJavascriptResultCreate):
        (webkit_javascript_result_get_global_context):
        (webkit_javascript_result_get_value):
        (webkit_javascript_result_get_js_value):
        * UIProcess/API/glib/WebKitJavascriptResultPrivate.h:
        (SharedJavascriptContext::singleton):
        (SharedJavascriptContext::SharedJavascriptContext):
        (SharedJavascriptContext::getOrCreateContext):
        (SharedJavascriptContext::releaseContext):
        * UIProcess/API/glib/WebKitUserContentManager.cpp:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_get_javascript_global_context):
        (webkitWebViewRunJavaScriptCallback):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitJavascriptResult.h:
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/APIViewClient.h:
        (API::ViewClient::handleDownloadRequest):
        * UIProcess/API/wpe/PageClientImpl.cpp:
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.cpp:
        * UIProcess/API/wpe/WPEView.h:
        * UIProcess/API/wpe/WebKitJavascriptResult.h:
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        * WebProcess/InjectedBundle/API/glib/WebKitFrame.cpp:
        (webkit_frame_get_js_context):
        (webkit_frame_get_js_context_for_script_world):
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitFrame.h:

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

        [GTK][WPE] Initial implementation of JavaScriptCore glib bindings
        https://bugs.webkit.org/show_bug.cgi?id=164061

        Reviewed by Michael Catanzaro.

        Set decorator and deprecation_guard options in API docs config files, since they are no longer common to all
        libraries.

        * PlatformGTK.cmake:

2018-03-21  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Simplify CoordinatedGraphicsScene activation
        https://bugs.webkit.org/show_bug.cgi?id=183772

        Reviewed by Carlos Garcia Campos.

        Simplify CoordinatedGraphicsScene::setActive() into a simple setter of
        the m_isActive member variable. We don't have to call renderNextFrame()
        anymore as that was only necessary to unblock CoordinatedLayerTreeHost,
        but that can be avoided if m_isWaitingForRenderer in that class is
        initialized to false.

        CoordinatedGraphicsSceneClient::renderNextFrame() virtual method and its
        ThreadedCompositor implementation are removed. renderNextFrame() in the
        CoordinatedGraphicsScene class can also be removed, along with the
        unused dispatchOnMainThread() and dispatchOnClientRunLoop() methods and
        the associated m_clientRunLoop member variable.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::CoordinatedGraphicsScene):
        (WebKit::CoordinatedGraphicsScene::dispatchOnMainThread): Deleted.
        (WebKit::CoordinatedGraphicsScene::dispatchOnClientRunLoop): Deleted.
        (WebKit::CoordinatedGraphicsScene::renderNextFrame): Deleted.
        (WebKit::CoordinatedGraphicsScene::setActive): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        (WebKit::CoordinatedGraphicsSceneClient::~CoordinatedGraphicsSceneClient):
        (WebKit::CoordinatedGraphicsScene::setActive):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::m_displayRefreshMonitor):
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing):
        (WebKit::ThreadedCompositor::renderNextFrame): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2018-03-21  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Have TextureMapperLayer::applyAnimationsRecursively() return running animation status
        https://bugs.webkit.org/show_bug.cgi?id=183771

        Reviewed by Carlos Garcia Campos.

        In CoordinatedGraphicsScene::paintToCurrentGLContext(), retrieve
        information about any running animation in the scene via the
        TextureMapperLayer::applyAnimationsRecursively() call. Use that boolean
        value at the end up the method, instead of again traversing the
        TextureMapperLayer tree to determine whether any running animations are
        present.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):

2018-03-20  Tim Horton  <timothy_horton@apple.com>

        Enable the minimal simulator feature flag when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=183807

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2018-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Expose content attributes on _WKLinkIconParameters
        https://bugs.webkit.org/show_bug.cgi?id=183768

        Reviewed by Alex Christensen.

        Added _WKLinkIconParameters.attributes to expose content attributes of a link element
        which defined a favicon, touch icon, or pre-compressed touch icon.

        * UIProcess/API/Cocoa/_WKLinkIconParameters.h:
        (_WKLinkIconParameters.attributes): Added.
        * UIProcess/API/Cocoa/_WKLinkIconParameters.mm:
        (_WKLinkIconParameters._attributes): Added.
        (-[_WKLinkIconParameters _initWithLinkIcon:]): Convert the hash map from WebCore to a NSDictionary.
        (-[_WKLinkIconParameters attributes]): Added.

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

        Add AssistedNodeInformation plumbing for form control placeholder text and label text
        https://bugs.webkit.org/show_bug.cgi?id=183802
        <rdar://problem/38686273>

        Reviewed by Tim Horton.

        Surfaces some additional information about the currently focused element to the input delegate in the UI process.
        See comments below for more details.

        Test: WebKit.FocusedElementInfo

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

        Add `placeholder` and `label` to AssistedNodeInformation, which capture the value of the placeholder attribute
        and the text of the first associated label element for the focused form control. Also add boilerplate encoder/
        decoder support for these members.

        * UIProcess/API/Cocoa/_WKFocusedElementInfo.h:

        Augment _WKFocusedElementInfo to include placeholder and label.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]):
        (-[WKFocusedElementInfo label]):
        (-[WKFocusedElementInfo placeholder]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

        For input elements and textareas, set the placeholder to the value of the placeholder attribute. For all
        elements with associated labels, grab the inner text of the first label that is not empty, ignoring all labels
        that are `display: none` (i.e. not being rendered).

2018-03-20  Brady Eidson  <beidson@apple.com>

        First piece of process swapping on navigation.
        https://bugs.webkit.org/show_bug.cgi?id=183665

        Reviewed by Andy Estes.

        This patch adds the first pieces of the following feature:
        "When a navigation originating inside a WKWebView goes to a different origin,
         swap to a new WebProcess for that navigation"

        There are significant bugs to be resolved and significant optimizations to be made.
        Which is why the feature is disabled by default.

        Besides the core logic implementing the feature, this patch does a lot of related 
        work such as:
        - Removing some now-invalid ASSERTs
        - Adding some ASSERTs
        - Update various switch states to handle the new "Suspend" policy and "NavigationSwap"
          process termination reason

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

        * NetworkProcess/capture/NetworkDataTaskReplay.cpp:
        (WebKit::NetworkCapture::NetworkDataTaskReplay::didReceiveResponse):

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNSURLSessionResponseDisposition):

        * Platform/Logging.h:

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

        * Shared/ProcessTerminationReason.h: Add "NavigationSwap" as a process termination reason.

        * UIProcess/API/APINavigation.h:

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::wkProcessTerminationReason):

        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::create):
        (WebKit::WebFramePolicyListenerProxy::policyListenerType const):

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        (WebKit::WebFrameProxy::activePolicyListenerProxy):
        * UIProcess/WebFrameProxy.h:

        * UIProcess/WebNavigationState.cpp:
        (WebKit::WebNavigationState::navigation):
        (WebKit::WebNavigationState::takeNavigation):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::attachToProcessForNavigation): Pretend that the existing process 
          terminated using the new "NavigationSwap" reason, then manually start the next load.
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigation):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::processDidTerminate):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation): Determine which process should be used
          for a proposed navigation, creating a new one if necessary.
        * UIProcess/WebProcessPool.h:

        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::SessionStorageNamespace::setAllowedConnection):

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

2018-03-20  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerClientFetch::didReceiveData should check for m_encodedDataLength
        https://bugs.webkit.org/show_bug.cgi?id=183668

        Reviewed by Chris Dumez.

        Crash happens when releasing a RefPtr<SharedBuffer> buffer that is null.
        It happens because ServiceWorkerClientFetch can call m_loader->didReceiveBuffer at two different places.
        Either when receiving an IPC call or as part of completion handler for the response validation check.
        At each call site, we release the buffer to pass it to the loader and we set m_encodedLength to zero.
        The fix is to add the m_encodedLength check like done in the case of response validation check completion handler.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveData):

2018-03-20  Jeff Miller  <jeffm@apple.com>

        Expose aggressiveTileRetentionEnabled in WKPreferences SPI to match C SPI
        https://bugs.webkit.org/show_bug.cgi?id=183790

        Reviewed by Alex Christensen.
        
        Expose this property on macOS only.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setAggressiveTileRetentionEnabled:]):
        (-[WKPreferences _aggressiveTileRetentionEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-03-20  Tim Horton  <timothy_horton@apple.com>

        Add and adopt WK_PLATFORM_NAME and adjust default feature defines
        https://bugs.webkit.org/show_bug.cgi?id=183758
        <rdar://problem/38017644>

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2018-03-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r229726 and r229763.

        Caused some API test failures on iOS

        Reverted changesets:

        "Make policy decisions asynchronous"
        https://bugs.webkit.org/show_bug.cgi?id=180568
        https://trac.webkit.org/changeset/229726

        "Rebaseline three webarchive tests for WK2 after r229726."
        https://bugs.webkit.org/show_bug.cgi?id=180568
        https://trac.webkit.org/changeset/229763

2018-03-20  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Grant IOKit preference access for the Home button
        https://bugs.webkit.org/show_bug.cgi?id=183754
        <rdar://problem/38179704>

        Reviewed by Eric Carlson.

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

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

        [Extra zoom mode] Adopt updated input view controller machinery for text input
        https://bugs.webkit.org/show_bug.cgi?id=183765
        <rdar://problem/36926269>

        Reviewed by Tim Horton.

        Adopt new classes for extra zoomed text inputs. Massage WKTextInputViewController into WKTextInputListView-
        Controller and introduce WKFormControlListViewController, the eventual replacement for the base class
        WKTextFormControlViewController that will act as the base class of all list-view-controller-based input UI in
        extra zoom mode.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView presentTextInputViewController:]):
        (-[WKContentView dismissTextInputViewController:]):
        (-[WKContentView focusedFormControllerDidUpdateSuggestions:]):
        (-[WKContentView _wheelChangedWithEvent:]):
        * UIProcess/ios/forms/WKFormControlListViewController.h: Copied from Source/WebKit/UIProcess/ios/forms/WKTextInputViewController.h.
        * UIProcess/ios/forms/WKFormControlListViewController.mm: Renamed from Source/WebKit/UIProcess/ios/forms/WKTextInputViewController.mm.
        * UIProcess/ios/forms/WKTextInputListViewController.h: Copied from Source/WebKit/UIProcess/ios/forms/WKTextInputViewController.h.
        * UIProcess/ios/forms/WKTextInputListViewController.mm: Renamed from Source/WebKit/UIProcess/ios/forms/WKTextInputViewController.h.
        * WebKit.xcodeproj/project.pbxproj:

2018-03-19  Megan Gardner  <megan_gardner@apple.com>

        Clear style colors when setting default appearance
        https://bugs.webkit.org/show_bug.cgi?id=183759

        Reviewed by Tim Horton.

        Colors are cached and need to be cleared and recalculated.

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

2018-03-19  Chris Dumez  <cdumez@apple.com>

        WKWebView.ClearAppCache is a flaky API test failure on High Sierra.
        https://bugs.webkit.org/show_bug.cgi?id=181546
        <rdar://problem/36444327>

        Reviewed by Ryosuke Niwa.

        in LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(), add origin
        to originIdentifiersToDelete if we cannot determine the last modification
        time of the database file. This likely means the database file does not
        exist. However, we still needs to make sure the origin gets removed from
        the origins database and there may be *.wal / *.shm variants of the database
        that are still on disk and need to be deleted.

        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):

2018-03-19  Chris Dumez  <cdumez@apple.com>

        Have one service worker process per security origin
        https://bugs.webkit.org/show_bug.cgi?id=183600
        <rdar://problem/35280128>

        Reviewed by Brady Eidson.

        Split service workers from different origins into their own processes
        for security reasons.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        * StorageProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::connectionToContextProcessFromIPCConnection):
        (WebKit::StorageProcess::didClose):
        (WebKit::StorageProcess::connectionToContextProcessWasClosed):
        (WebKit::StorageProcess::needsServerToContextConnectionForOrigin const):
        (WebKit::StorageProcess::didReceiveMessage):
        (WebKit::StorageProcess::createStorageToWebProcessConnection):
        (WebKit::StorageProcess::serverToContextConnectionForOrigin):
        (WebKit::StorageProcess::createServerToContextConnection):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:
        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::didReceiveMessage):
        (WebKit::StorageToWebProcessConnection::didClose):
        * StorageProcess/StorageToWebProcessConnection.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextTerminateServiceWorkerProcess):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _terminateServiceWorkerProcesses]):
        (-[WKProcessPool _webPageContentProcessCount]):
        (-[WKProcessPool _serviceWorkerProcessCount]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        (WebKit::NetworkProcessProxy::canAuthenticateAgainstProtectionSpace):
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::create):
        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
        * UIProcess/ServiceWorkerProcessProxy.h:
        (isType):
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::getStorageProcessConnection):
        (WebKit::StorageProcessProxy::didFinishLaunching):
        (WebKit::StorageProcessProxy::establishWorkerContextConnectionToStorageProcess):
        (WebKit::StorageProcessProxy::establishWorkerContextConnectionToStorageProcessForExplicitSession):
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getStorageProcessConnection):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::updateServiceWorkerUserAgent):
        (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers):
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::terminateServiceWorkerProcesses):
        (WebKit::WebProcessPool::updateProcessAssertions):
        (WebKit::WebProcessPool::serviceWorkerProcessProxyFromPageID const):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getStorageProcessConnection):

2018-03-19  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, another quick fix for r229699

        Restricts ENABLE_WEB_AUTHN to only macOS and iOS.

        * Configurations/FeatureDefines.xcconfig:

2018-03-19  Chris Dumez  <cdumez@apple.com>

        Make policy decisions asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=180568
        <rdar://problem/37131297>

        Reviewed by Alex Christensen.

        Get rid of synchronous IPC and synchronous code paths for policy delegates.
        Policy decisions are now all made asynchronously and rely on asynchronous
        IPC.

        This code change is based on work by Alex Christensen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        Web Inspector: clean up WKWebView configuration code
        https://bugs.webkit.org/show_bug.cgi?id=183747
        <rdar://problem/38629343>

        Reviewed by Timothy Hatcher.

        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController webView]): Always use system
        appearance for Inspector's web content.

2018-03-19  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Require fullscreen for video playback
        https://bugs.webkit.org/show_bug.cgi?id=183742
        <rdar://problem/38235862>

        Reviewed by Jer Noble.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (-[WKVideoFullScreenViewController initWithAVPlayerViewController:]):
        (-[WKVideoFullScreenViewController viewDidLoad]):
        (-[WKVideoFullScreenViewController prefersStatusBarHidden]):
        (WebKit::VideoFullscreenModelContext::presentingViewController):
        (WebKit::VideoFullscreenModelContext::createVideoFullscreenViewController):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::didEnterFullscreen):

2018-03-19  Daniel Bates  <dabates@apple.com>

        test-webkitpy no longer runs WebKit2 tests
        https://bugs.webkit.org/show_bug.cgi?id=183724

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where Python emits errors "global name reset_results is not defined" when
        running tests in messages_unittest.py using test-webkitpy.

        Currently messages_unittest.py conditionally defines the global variable reset_results
        when run as the main program (i.e. __name__ == "__main__"). When messages_unittest.py is
        imported as a module as test-webkitpy does then it is not considered the main program
        ;=> the top-level script environment is not __main__ ;=> we do not define the global
        variable reset_results. Instead we should unconditionally define the global variable
        reset_results.

        * Scripts/webkit/messages_unittest.py:

2018-03-19  Per Arne Vollan  <pvollan@apple.com>

        When the WebContent process is blocked from accessing the WindowServer, the call CVDisplayLinkCreateWithCGDisplay will fail.
        https://bugs.webkit.org/show_bug.cgi?id=183604
        <rdar://problem/38305109>

        Reviewed by Brent Fulgham.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/DisplayLink.cpp: Added.
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::~DisplayLink):
        (WebKit::DisplayLink::displayLinkCallback):
        * UIProcess/mac/DisplayLink.h: Added.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::startDisplayRefreshMonitor):
        (WebKit::WebPageProxy::stopDisplayRefreshMonitor):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::createDisplayRefreshMonitor):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp: Added.
        (WebKit::DisplayRefreshMonitorMac::create):
        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):
        (WebKit::DisplayRefreshMonitorMac::displayLinkFired):
        (WebKit::DrawingArea::screenWasRefreshed):
        (WebKit::DrawingArea::createDisplayRefreshMonitor):

2018-03-17  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement authenticatorMakeCredential
        https://bugs.webkit.org/show_bug.cgi?id=183527
        <rdar://problem/35275886>

        Reviewed by Brent Fulgham.

        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.cpp:
        (WebKit::WebCredentialsMessengerProxy::WebCredentialsMessengerProxy):
        (WebKit::WebCredentialsMessengerProxy::makeCredential):
        (WebKit::WebCredentialsMessengerProxy::getAssertion):
        (WebKit::WebCredentialsMessengerProxy::isUserVerifyingPlatformAuthenticatorAvailable):
        (WebKit::WebCredentialsMessengerProxy::exceptionReply):
        (WebKit::WebCredentialsMessengerProxy::makeCredentialReply):
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.h:
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.messages.in:
        * UIProcess/CredentialManagement/cocoa/WebCredentialsMessengerProxyCocoa.mm: Removed.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/CredentialManagement/WebCredentialsMessenger.cpp:
        (WebKit::WebCredentialsMessenger::makeCredential):
        (WebKit::WebCredentialsMessenger::makeCredentialReply):
        * WebProcess/CredentialManagement/WebCredentialsMessenger.h:
        * WebProcess/CredentialManagement/WebCredentialsMessenger.messages.in:

2018-03-17  Daniel Bates  <dabates@apple.com>

        Tests fail in messages_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=183725

        Partial revert of r222113. The messages generator machinery does not know when
        it is sufficient to emit an include for wtf/Forward.h as opposed to a concrete
        header.

        * Scripts/webkit/LegacyMessages-expected.h:
        * Scripts/webkit/Messages-expected.h:

2018-03-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, rolling out r229688.

        There's a solution that doesn't require this SPI.

        Reverted changeset:

        "Add SPI to expose width and height anchors for WKWebView's
        content view"
        https://bugs.webkit.org/show_bug.cgi?id=183711
        https://trac.webkit.org/changeset/229688

2018-03-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add SPI to expose width and height anchors for WKWebView's content view
        https://bugs.webkit.org/show_bug.cgi?id=183711
        <rdar://problem/38562899>

        Reviewed by Tim Horton.

        Add _contentWidthAnchor and _contentHeightAnchor SPI to WKWebView for internal clients to be able to reason
        about the size of the content view on iOS using autolayout.

        Test: WebKit.AutoLayoutPositionHeaderAndFooterViewsInScrollView.

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

2018-03-16  Megan Gardner  <megan_gardner@apple.com>

        Add _useSystemAppearance to WKView
        https://bugs.webkit.org/show_bug.cgi?id=183706
        <rdar://problem/38516584>

        Reviewed by Tim Horton.

        Plumb useSystemAppearance and other supporting functions to WKView

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _useSystemAppearance]):
        (-[WKWebView _setUseSystemAppearance:]):
        (-[WKWebView effectiveAppearanceDidChange]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView effectiveAppearanceDidChange]):
        (-[WKView _setUseSystemAppearance:]):
        (-[WKView _useSystemAppearance]):
        (-[WKView _setDefaultAppearance:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setUseSystemAppearance):
        (WebKit::WebViewImpl::useSystemAppearance):
        (WebKit::WebViewImpl::setDefaultAppearance):

2018-03-16  Brent Fulgham  <bfulgham@apple.com>

        Set a trap to catch an infrequent form-related nullptr crash
        https://bugs.webkit.org/show_bug.cgi?id=183704
        <rdar://problem/37579354>

        Reviewed by Ryosuke Niwa.

        Add a RELEASE_ASSERT to see if we ever encounter a nullptr WebCore frame.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):

2018-03-16  Jer Noble  <jer.noble@apple.com>

        Make Fullscreen API an Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=183662

        Reviewed by Jon Lee.

        Add the ability to have a conditional for whether an Experimental Feature is "visible", separate from
        whether the preference is available, for definining platform-specific Experimental Features.

        * Scripts/GeneratePreferences.rb:
        * Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb:
        * Shared/WebPreferences.yaml:

2018-03-16  Megan Gardner  <megan_gardner@apple.com>

        Ensure that style is updated when the effective appearance changes
        https://bugs.webkit.org/show_bug.cgi?id=183690
        <rdar://problem/38385900>

        Reviewed by Tim Horton and Wenson Hsieh.

        Respond to and respect the effective appearance changing.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView effectiveAppearanceDidChange]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDefaultAppearance):

2018-03-16  Chris Dumez  <cdumez@apple.com>

        URLSchemeHandler.Basic API test fails with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183678

        Reviewed by Alex Christensen.

        The issue is that the client calls _didPerformRedirection / didReceiveResponse / didReceiveData / didFinish
        on the URLScheme task one after the one, synchronously. However, redirects and responses can be processed
        asynchronously. To address the issue, we now queue operations requested by the client if we're waiting
        for an async policy delegate.

        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::didPerformRedirection):
        (WebKit::WebURLSchemeTaskProxy::didReceiveResponse):
        (WebKit::WebURLSchemeTaskProxy::didReceiveData):
        (WebKit::WebURLSchemeTaskProxy::didComplete):
        (WebKit::WebURLSchemeTaskProxy::processNextPendingTask):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.h:
        (WebKit::WebURLSchemeTaskProxy::queueTask):

2018-03-16  Claudio Saavedra  <csaavedra@igalia.com>

        Suppress GCC warnings by using #include instead of #import

        Unreviewed.
        * UIProcess/SystemPreviewController.cpp:

2018-03-15  Keith Rollin  <krollin@apple.com>

        Telemetry for stalled webpage loads
        https://bugs.webkit.org/show_bug.cgi?id=183221
        <rdar://problem/36549013>

        Reviewed by Chris Dumez.

        Add telemetry for page loads, tracking the pages that succeed, fail,
        or are canceled. This information will be used to track the overall
        health of our page loading as time goes on.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::reportPageLoadResult):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::reportPageLoadResult):

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

        [iOS WK2] Hit-testing fails when specifying a large top content inset
        https://bugs.webkit.org/show_bug.cgi?id=183648
        <rdar://problem/38421894>

        Reviewed by Tim Horton.

        Currently, in the process of computing unobscured content rect in the UI process on iOS, we subtract away parts
        of the view that are obscured by insets (e.g. MobileSafari's chrome). The helper method -[WKWebView
        _computeContentInset] is intended to compute these obscuring insets around the view, but it takes scroll view
        insets into account. This means that if WKWebView's inner scroll view has content insets, we'll end up shrinking
        the unobscured content rect as if the insetted region obscures the viewport; this causes visible content on the
        page to be uninteractible, since WKWebView erroneously thinks it's obscured.

        To address this, we rename _computeContentInset to _computeObscuredInset, and make it _not_ affected by the
        scroll view's content insets. From code inspection and testing, all but one of the former call sites of
        _computeContentInset really need the obscured inset instead (see below). The one exception, -[WKWebView
        _adjustedContentOffset:], takes a scroll position from the page and maps it to a content offset in the inner
        UIScrollView (see below for more details).

        Tests:  ScrollViewInsetTests.InnerHeightWithLargeTopContentInset
                ScrollViewInsetTests.InnerHeightWithLargeBottomContentInset
                ScrollViewInsetTests.RestoreInitialContentOffsetAfterCrash
                ScrollViewInsetTests.RestoreInitialContentOffsetAfterNavigation

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
        (-[WKWebView _initialContentOffsetForScrollView]):

        See -_contentOffsetAdjustedForObscuredInset: below.

        (-[WKWebView _contentOffsetAdjustedForObscuredInset:]):

        Formerly -_adjustedContentOffset:. -_contentOffsetAdjustedForObscuredInset: no longer takes scroll view content
        inset into account, and only cares about insets that obscure the view. This means that the scroll position
        (0, 0) in the document now maps to the content offset in the inner UIScrollView, such that the top of the page
        is aligned with the top of the viewport.

        However, many call sites of -_adjustedContentOffset: were intended to compute the initial, top-left-most content
        offset in the scroll view to scroll to when resetting the web view (i.e., they pass in CGPointZero for the
        scroll position). An example of this is the scroll position to jump to after web content process termination, or
        the scroll position after main frame navigation. In these cases, we actually want to jump to the top of the
        scroll view, so we do want to use the version of the computed content insets that accounts for scroll view
        insets.

        Since these cases are limited to finding the top-left-most scroll position, we pull this out into a separate
        helper method (-_initialContentOffsetForScrollView) and replace calls to
        `-[self _adjustedContentOffset:CGPointZero]` with this instead.

        (-[WKWebView _computedObscuredInset]):

        A version of -_computeContentInset that doesn't care about scroll view insets. Used whereever we need to account
        for obscured insets rather than the combination of content insets and unobscured insets (e.g.
        -_initialContentOffsetForScrollView).

        (-[WKWebView _processDidExit]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:nextValidLayerTreeTransactionID:]):
        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]):
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _navigationGestureDidBegin]):

        In all these places where we inset the view bounds to compute the unobscured region of the viewport, it doesn't
        make sense to additionally inset by the scroll view's content insets, since (1) the scroll view's content insets
        don't obscure the viewport, and (2) it's perfectly valid for the inner scroll view to have arbitrarily large
        content insets.

        (-[WKWebView _adjustedContentOffset:]): Deleted.

        Renamed to -_contentOffsetAdjustedForObscuredInset:.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _offsetForPageNumberIndicator]):

        Similar to -_scrollToFragment: (see below).

        (-[WKPDFView _scrollToFragment:]):

        This helper figures out which content offset to scroll to, given the y-origin of a page in a PDF document. If
        insets are added to the scroll view, we end up scrolling to the wrong content offset since we'll add the height
        of the top content inset (imagine that the top content inset is enormous — then we'll scroll an amount equal to
        the top content inset _past_ the point where the y-origin of the page is at the top of the viewport).

2018-03-15  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Correct sandbox violations during Flash playback under ToT WebKit
        https://bugs.webkit.org/show_bug.cgi?id=183672
        <rdar://problem/38510839>

        Reviewed by Eric Carlson.

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

2018-03-15  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r229484): Plugins often require CGS Connections to draw
        https://bugs.webkit.org/show_bug.cgi?id=183663
        <rdar://problem/38439218>

        Reviewed by Per Arne Vollan.

        Flash requires an active CGSConnection to work properly. Since we don't want the WebContent
        process to have on, create a new plugin process-specific layer host creation method that
        gives this access.

        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalPluginHostingProcess): Added.
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::updateLayerHostingContext): Use the new creation
        method.

2018-03-15  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Remove TextureMapperLayer::texture()
        https://bugs.webkit.org/show_bug.cgi?id=183635

        Reviewed by Michael Catanzaro.

        Remove the CoordinatedBackingStore::texture() override since the virtual
        method is also being removed.

        * Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::texture const): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedBackingStore.h:

2018-03-14  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add clearing of storage access to WebResourceLoadStatisticsStore::clearInMemory()
        https://bugs.webkit.org/show_bug.cgi?id=183641
        <rdar://problem/38469497>

        Reviewed by Brent Fulgham and Chris Dumez.

        This change is to stabilize existing layout tests by removing
        all storage access entries on a call to 
        WebResourceLoadStatisticsStore::clearInMemory().
        See Ryan Haddad's comment in https://bugs.webkit.org/show_bug.cgi?id=183620.

        Almost all of the code changes are piping to get this
        call from the WebResourceLoadStatisticsStore to
        WebCore::NetworkStorageSession where entries reside.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeAllStorageAccess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::removeAllStorageAccess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::clearInMemory):
            Now also clears all storage access entries in the network process.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeAllStorageAccessHandler):
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        Unreviewed, rolling out r229613.

        Caused API test failures

        Reverted changeset:

        "Make policy decisions asynchronous"
        https://bugs.webkit.org/show_bug.cgi?id=180568
        https://trac.webkit.org/changeset/229613

2018-03-14  Chris Dumez  <cdumez@apple.com>

        Reduce use of SWServerToContextConnection::globalServerToContextConnection()
        https://bugs.webkit.org/show_bug.cgi?id=183626

        Reviewed by Youenn Fablet.

        Reduce use of SWServerToContextConnection::globalServerToContextConnection() as we are moving
        towards having multiple context connections.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):

2018-03-14  Chris Dumez  <cdumez@apple.com>

        Make policy decisions asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=180568
        <rdar://problem/37131297>

        Reviewed by Alex Christensen.

        Get rid of synchronous IPC and synchronous code paths for policy delegates.
        Policy decisions are now all made asynchronously and rely on asynchronous
        IPC.

        This code change is based on work by Alex Christensen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2018-03-14  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary StorageToWebProcessConnection::workerContextProcessConnectionCreated()
        https://bugs.webkit.org/show_bug.cgi?id=183624

        Reviewed by Youenn Fablet.

        Drop unnecessary StorageToWebProcessConnection::workerContextProcessConnectionCreated()
        since it was going through all SWServers. Calling workerContextProcessConnectionCreated()
        on every StorageToWebProcessConnection was thus doing redundant work.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::createStorageToWebProcessConnection):
        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::establishSWServerConnection):
        (WebKit::StorageToWebProcessConnection::workerContextProcessConnectionCreated): Deleted.
        * StorageProcess/StorageToWebProcessConnection.h:

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

        Fix the build after r229567

        * Configurations/FeatureDefines.xcconfig:

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

        Resource Load Statistics: Immediately forward cookie access for domains with previous user interaction when there's an opener document
        https://bugs.webkit.org/show_bug.cgi?id=183620
        <rdar://problem/38431469>

        Reviewed by Brent Fulgham.

        It turns out the fix in https://bugs.webkit.org/show_bug.cgi?id=183577
        wasn't enough to address the compatibility issues with popups. Some of
        them just detect their unpartitioned cookies, auto-dismiss themselves,
        and expect their unpartitioned cookies to be available under the opener
        afterwards. We should grant them access if the popup's domain has had
        user interaction _previously_.

        Note that we still need https://bugs.webkit.org/show_bug.cgi?id=183577
        because if the popup's domain has not received user interaction
        previously, we will not grant it storage access on just the window open.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccessUnderOpener): Deleted.
            Renamed WebResourceLoadStatisticsStore::grantStorageAccessUnderOpener()
            to WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener()
            since there is now a case where access will not be granted, i.e. when
            the popup domain has not had user interaction previously.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebResourceLoadStatisticsStore.messages.in:
             Similar renaming.
        * WebProcess/WebProcess.cpp:
        (WebProcess::WebProcess):
             Similar renaming.

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

        Add missing artwork for fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=183618

        Reviewed by Jon Lee.

        * Resources/ios/iOS.xcassets/Done.imageset/Contents.json: Added.
        * Resources/ios/iOS.xcassets/Done.imageset/Done.pdf: Added.
        * Resources/ios/iOS.xcassets/StartPictureInPictureButton.imageset/Contents.json: Added.
        * Resources/ios/iOS.xcassets/StartPictureInPictureButton.imageset/StartPictureInPictureButton@1x.png: Added.
        * Resources/ios/iOS.xcassets/StartPictureInPictureButton.imageset/StartPictureInPictureButton@2x.png: Added.
        * Resources/ios/iOS.xcassets/StartPictureInPictureButton.imageset/StartPictureInPictureButton@3x.png: Added.
        * Resources/ios/iOS.xcassets/StopPictureInPictureButton.imageset/Contents.json: Added.
        * Resources/ios/iOS.xcassets/StopPictureInPictureButton.imageset/StopPictureInPictureButton@1x.png: Added.
        * Resources/ios/iOS.xcassets/StopPictureInPictureButton.imageset/StopPictureInPictureButton@2x.png: Added.
        * Resources/ios/iOS.xcassets/StopPictureInPictureButton.imageset/StopPictureInPictureButton@3x.png: Added.

2018-03-13  Brian Burg  <bburg@apple.com>

        [WK2] Web Inspector: NavigationAction for opening a link in a new tab should have a UserGestureIndicator
        https://bugs.webkit.org/show_bug.cgi?id=183612
        <rdar://problem/38388641>

        Reviewed by Timothy Hatcher.

        The current gesture token will be attached to the NavigationAction at construction time,
        so set up a UserGestureIndicator when creating the action and sending it out.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openInNewTab):

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

        WKSystemPreviewView needs to implement some of UIScrollViewDelegate
        https://bugs.webkit.org/show_bug.cgi?id=183607
        <rdar://problem/38427622>

        Reviewed by Antoine Quint.

        Add an empty implementation of scrollViewDidScroll.

        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView scrollViewDidScroll:]):

2018-03-13  Jiewen Tan  <jiewen_tan@apple.com>

        Soft-link LocalAuthentication.Framework
        https://bugs.webkit.org/show_bug.cgi?id=183587
        <rdar://problem/38219763>

        Reviewed by Brian Burg.

        * UIProcess/CredentialManagement/cocoa/WebCredentialsMessengerProxyCocoa.mm:
        (WebKit::WebCredentialsMessengerProxy::platformIsUserVerifyingPlatformAuthenticatorAvailable):
        * WebKit.xcodeproj/project.pbxproj:

2018-03-12  Dean Jackson  <dino@apple.com>

        Add a WKWebViewContentProvider for system previews
        https://bugs.webkit.org/show_bug.cgi?id=183582
        <rdar://problem/38393569>

        Reviewed by Tim Horton.

        Implement WKSystemPreviewView, which conforms to WKWebViewContentProvider, in
        order to view content as a "system preview". This effectively replaces the
        SystemPreviewController, which will be removed soon.

        Some of the required methods of WKWebViewContentProvider are not necessary on
        this instance, so a follow-up patch will clean the protocol up a bit.

        * UIProcess/Cocoa/NavigationState.mm: Don't trigger a SystemPreview when downloading.
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry init]): Register the WKSystemPreviewView for
        MIME types retrieved from WebKitAdditions.

        * UIProcess/ios/WKSystemPreviewView.h: Added.
        * UIProcess/ios/WKSystemPreviewView.mm: Added.

        (-[WKSystemPreviewView web_initWithFrame:webView:]):
        (-[WKSystemPreviewView web_setContentProviderData:suggestedFilename:]): This is the
        method that actually creates a QuickLook preview and provides the data.
        (-[WKSystemPreviewView web_setMinimumSize:]):
        (-[WKSystemPreviewView web_setOverlaidAccessoryViewsInset:]):
        (-[WKSystemPreviewView web_computedContentInsetDidChange]):
        (-[WKSystemPreviewView web_setFixedOverlayView:]):
        (-[WKSystemPreviewView web_didSameDocumentNavigation:]):
        (-[WKSystemPreviewView web_countStringMatches:options:maxCount:]):
        (-[WKSystemPreviewView web_findString:options:maxCount:]):
        (-[WKSystemPreviewView web_hideFindUI]):

        (-[WKSystemPreviewView numberOfPreviewItemsInPreviewController:]): QuickLook delegates.
        (-[WKSystemPreviewView previewController:previewItemAtIndex:]):
        (-[WKSystemPreviewView provideDataForItem:]):
        (-[WKSystemPreviewView previewControllerWillDismiss:]):

        * WebKit.xcodeproj/project.pbxproj: Add new files.

2018-03-12  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Immediately forward cookie access at user interaction when there's an opener document
        https://bugs.webkit.org/show_bug.cgi?id=183577
        <rdar://problem/38266987>

        Reviewed by Brent Fulgham.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::hasStorageAccessForFrame):
            Now also checks for general page access.
        (WebKit::NetworkProcess::grantStorageAccess):
            Renamed from grantStorageAccessForFrame since the frameID now is optional.
        (WebKit::NetworkProcess::grantStorageAccessForFrame): Deleted.
            Renamed since the frameID now is optional.
        * NetworkProcess/NetworkProcess.h:
            Renaming since the frameID now is optional.
        * NetworkProcess/NetworkProcess.messages.in:
            Renaming since the frameID now is optional.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::logCookieInformation):
            Consequence of function renaming.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::grantStorageAccess):
        (WebKit::NetworkProcessProxy::grantStorageAccessForFrame): Deleted.
            Renaming since the frameID now is optional.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
            Renaming since the frameID now is optional.
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
            Handler renaming since the frameID now is optional.
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccessUnderOpener):
            New function for that grants cookie access under a whole page.
        * UIProcess/WebResourceLoadStatisticsStore.h:
            Member renaming since the frameID now is optional.
        * UIProcess/WebResourceLoadStatisticsStore.messages.in:
            New message received straight from WebCore::ResourceLoadObserver.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::grantStorageAccessHandler):
            Renamed and made frameID optional.
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
            Consequence of renaming and making frameID optional.
        (WebKit::WebsiteDataStore::grantStorageAccessForFrameHandler): Deleted.
            Renamed and made frameID optional.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebProcess.cpp:
        (WebProcess::WebProcess):
            Now calls setGrantStorageAccessUnderOpenerCallback() on the shared
            WebCore::ResourceLoadObserver.

2018-03-12  Tim Horton  <timothy_horton@apple.com>

        Stop using SDK conditionals to control feature definitions
        https://bugs.webkit.org/show_bug.cgi?id=183430
        <rdar://problem/38251619>

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig: Renamed.

2018-03-12  Yoav Weiss  <yoav@yoav.ws>

        Runtime flag for link prefetch and remove link subresource.
        https://bugs.webkit.org/show_bug.cgi?id=183540

        Reviewed by Chris Dumez.

        Remove the LINK_PREFETCH build time flag.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime):

2018-03-12  Chris Dumez  <cdumez@apple.com>

        Load may get committed before receiving policy for the resource response
        https://bugs.webkit.org/show_bug.cgi?id=183579
        <rdar://problem/38268780>

        Reviewed by Youenn Fablet.

        r228852 updated WebResourceLoader::didReceiveResponse to only send the
        ContinueDidReceiveResponse IPC back to the Networkprocess *after* the
        policy decision for the resource response has been made. This is necessary
        now that policy decisions can be made asynchronously.

        However, one of the 2 code paths in NetworkProcess side (code path when
        the resource is already in the HTTP disk cache) failed to wait for the
        ContinueDidReceiveResponse IPC before sending over the data to the WebProcess.
        As a result, the WebProcess could commit the load before even receiving the
        policy response from the client.        

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::continueProcessingCachedEntryAfterDidReceiveResponse):
        * NetworkProcess/NetworkResourceLoader.h:
        Make sure NetworkResourceLoader::didRetrieveCacheEntry() does not start sending the data
        until the network process gets the ContinueDidReceiveResponse IPC back from the WebProcess.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        * WebProcess/Network/WebResourceLoader.h:
        Add assertion to make sure didReceiveData() never gets called before didReceiveResponse's
        completion handler has been called. If this hits, then the load may get committed even
        though the client did not reply to the policy for the resource response yet.

2018-03-12  Ali Juma  <ajuma@chromium.org>

        http/tests/workers/service/service-worker-download.https.html times out with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183479

        Reviewed by Youenn Fablet.

        Ensure that ServiceWorkerFetchClient::m_isCheckingResponse is set before code that depends on it
        executes. This bit was set by code that's posted to the runloop using 'callOnMainThread' in
        ServiceWorkerFetchClient::didReceiveResponse. But when didReceiveResponse is executing, tasks for
        handling didReceiveData, didFail, or didFinish may already have been posted to the runloop, and in
        that case would execute before m_isCheckingResponse gets set, and then incorrectly fail to 
        early-out. Fix this by directly setting m_isCheckingResponse in didReceiveResponse.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::start):
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):

2018-03-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r211643): Dismissing WKActionSheet should not also dismiss its presenting view controller
        https://bugs.webkit.org/show_bug.cgi?id=183549
        <rdar://problem/34960698>

        Reviewed by Andy Estes.

        Fixes the bug by dismissing the presented view controller (i.e. the action sheet or the view controller being
        presented during rotation) rather than the presenting view controller.

        Test: ActionSheetTests.DismissingActionSheetShouldNotDismissPresentingViewController

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

2018-03-12  Javier Fernandez  <jfernandez@igalia.com>

        Remove GridLayout runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=183484

        Reviewed by Myles C. Maxfield.

        The Grid Layout feature has been enabled by default for almost a
        year, so I think it's time to remove the runtime flag and the
        codepath run when the feature is disabled.

        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2018-03-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix the internal iOS build after r229512
        https://bugs.webkit.org/show_bug.cgi?id=183550

        Reviewed by Zalan Bujtas.

        Fixes a typo in a header import, as well as a nullability error. `SecTrustEvaluate()` takes in a nonnull outparam,
        which was removed in r229512; this adds the outparam back, but does not consult its value when setting the
        `infoDictionary`.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _EVOrganizationName]):

2018-03-10  Jer Noble  <jer.noble@apple.com>

        Improvements to fullscreen; new UI and security features
        https://bugs.webkit.org/show_bug.cgi?id=183503

        Reviewed by Dean Jackson.

        Now that the iOS Fullscreen code has more than one major class, move it into an ios/
        directory.

        Clean up the WKFullScreenWindowControllerIOS class to more clearly separate external
        facing API from purely internal functions.

        Move the WKFullScreenViewController out into its own file. Add support for fullscreen
        top inset and fullscreen autohide duration CSS constants.

        Add a heuristic to distinguish between media control related touches and ones that look
        more keyboard interactions.

        Add a new UIStackView based control to hold the fullscreen controls.

        * UIProcess/ios/WKFullScreenWindowControllerIOS.mm: Removed.
        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp: Added.
        (WebKit::FullscreenTouchSecheuristic::scoreOfNextTouch):
        (WebKit::FullscreenTouchSecheuristic::reset):
        (WebKit::FullscreenTouchSecheuristic::distanceScore):
        (WebKit::FullscreenTouchSecheuristic::attenuationFactor):
        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.h: 
        (WebKit::FullscreenTouchSecheuristic::setRampUpSpeed):
        (WebKit::FullscreenTouchSecheuristic::setRampDownSpeed):
        (WebKit::FullscreenTouchSecheuristic::setXWeight):
        (WebKit::FullscreenTouchSecheuristic::setYWeight):
        (WebKit::FullscreenTouchSecheuristic::setSize):
        (WebKit::FullscreenTouchSecheuristic::setGamma):
        (WebKit::FullscreenTouchSecheuristic::setGammaCutoff):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm: Added.
        (WKFullScreenViewControllerPlaybackSessionModelClient::setParent):
        (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface):
        (-[_WKExtrinsicButton setExtrinsicContentSize:]):
        (-[_WKExtrinsicButton intrinsicContentSize]):
        (-[WKFullScreenViewController initWithWebView:]):
        (-[WKFullScreenViewController dealloc]):
        (-[WKFullScreenViewController showUI]):
        (-[WKFullScreenViewController hideUI]):
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController setPrefersStatusBarHidden:]):
        (-[WKFullScreenViewController setPlaying:]):
        (-[WKFullScreenViewController setPictureInPictureActive:]):
        (-[WKFullScreenViewController loadView]):
        (-[WKFullScreenViewController viewWillAppear:]):
        (-[WKFullScreenViewController viewDidLayoutSubviews]):
        (-[WKFullScreenViewController viewWillTransitionToSize:withTransitionCoordinator:]):
        (-[WKFullScreenViewController preferredStatusBarStyle]):
        (-[WKFullScreenViewController prefersStatusBarHidden]):
        (-[WKFullScreenViewController gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKFullScreenViewController gestureRecognizer:shouldReceiveTouch:]):
        (-[WKFullScreenViewController _manager]):
        (-[WKFullScreenViewController _effectiveFullscreenInsetTop]):
        (-[WKFullScreenViewController _cancelAction:]):
        (-[WKFullScreenViewController _togglePiPAction:]):
        (-[WKFullScreenViewController _touchDetected:]):
        (-[WKFullScreenViewController _statusBarFrameDidChange:]):
        (-[WKFullScreenViewController _updateWebViewFullscreenInsets]):
        (-[WKFullScreenViewController _showPhishingAlert]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.h: Copied from Source/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.h.
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm: Added.
        (WebKit::replaceViewWithView):
        (WebKit::WKWebViewState::applyTo):
        (WebKit::WKWebViewState::store):
        (-[WKFullscreenAnimationController transitionDuration:]):
        (-[WKFullscreenAnimationController configureInitialAndFinalStatesForTransition:]):
        (-[WKFullscreenAnimationController animateTransition:]):
        (-[WKFullscreenAnimationController animationEnded:]):
        (-[WKFullscreenAnimationController startInteractiveTransition:]):
        (-[WKFullscreenAnimationController updateWithPercent:]):
        (-[WKFullscreenAnimationController updateWithPercent:translation:anchor:]):
        (-[WKFullscreenAnimationController end:]):
        (-[WKFullScreenInteractiveTransition initWithAnimator:anchor:]):
        (-[WKFullScreenInteractiveTransition wantsInteractiveStart]):
        (-[WKFullScreenInteractiveTransition startInteractiveTransition:]):
        (-[WKFullScreenInteractiveTransition updateInteractiveTransition:withTranslation:]):
        (-[WKFullScreenInteractiveTransition cancelInteractiveTransition]):
        (-[WKFullScreenInteractiveTransition finishInteractiveTransition]):
        (-[WKFullScreenWindowController initWithWebView:]):
        (-[WKFullScreenWindowController dealloc]):
        (-[WKFullScreenWindowController isFullScreen]):
        (-[WKFullScreenWindowController webViewPlaceholder]):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController requestExitFullScreen]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        (-[WKFullScreenWindowController close]):
        (-[WKFullScreenWindowController webViewDidRemoveFromSuperviewWhileInFullscreen]):
        (-[WKFullScreenWindowController videoControlsManagerDidChange]):
        (-[WKFullScreenWindowController gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKFullScreenWindowController animationControllerForPresentedController:presentingController:sourceController:]):
        (-[WKFullScreenWindowController animationControllerForDismissedController:]):
        (-[WKFullScreenWindowController interactionControllerForDismissal:]):
        (-[WKFullScreenWindowController _exitFullscreenImmediately]):
        (-[WKFullScreenWindowController _invalidateEVOrganizationName]):
        (-[WKFullScreenWindowController _isSecure]):
        (-[WKFullScreenWindowController _serverTrust]):
        (-[WKFullScreenWindowController _EVOrganizationName]):
        (-[WKFullScreenWindowController _updateLocationInfo]):
        (-[WKFullScreenWindowController _manager]):
        (-[WKFullScreenWindowController _startToDismissFullscreenChanged:]):
        (-[WKFullScreenWindowController _interactiveDismissChanged:]):
        * UIProcess/ios/fullscreen/WKFullscreenStackView.h: Renamed from Source/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.h.
        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm: Added.
        (+[WKFullscreenStackView baseEffects]):
        (+[WKFullscreenStackView configureView:forTintEffectWithColor:filterType:]):
        (+[WKFullscreenStackView configureView:withBackgroundFillOfColor:opacity:filter:]):
        (+[WKFullscreenStackView secondaryMaterialOverlayView]):
        (+[WKFullscreenStackView applyPrimaryGlyphTintToView:]):
        (+[WKFullscreenStackView applySecondaryGlyphTintToView:]):
        (-[WKFullscreenStackView initWithArrangedSubviews:axis:]):
        (-[WKFullscreenStackView setTargetViewForSecondaryMaterialOverlay:]):
        (-[WKFullscreenStackView contentView]):
        (-[WKFullscreenStackView _setArrangedSubviews:axis:]):
        (-[WKFullscreenStackView setBounds:]):
        (-[WKFullscreenStackView updateConstraints]):
        * WebKit.xcodeproj/project.pbxproj:

2018-03-10  Megan Gardner  <megan_gardner@apple.com>

        Media query for default appearance
        https://bugs.webkit.org/show_bug.cgi?id=183539
        <rdar://problem/38326388>

        Reviewed by Tim Horton.

        Write a media query to evaluate appearance.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setUseSystemAppearance:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setDefaultAppearance):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::defaultAppearance const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        (WebKit::WebPage::setDefaultAppearance):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-03-09  Jer Noble  <jer.noble@apple.com>

        Unconditionalize more methods in VideoFullscreenInterface (and related classes)
        https://bugs.webkit.org/show_bug.cgi?id=183501
        <rdar://problem/38312038>

        Unreviewed build fix; add correct pragmas to code referencing m_playbackSessionManager.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::hasActiveVideoForControlsManager const):
        (WebKit::WebPageProxy::requestControlledElementID const):
        (WebKit::WebPageProxy::isPlayingVideoInEnhancedFullscreen const):

2018-03-09  Brian Burg  <bburg@apple.com>

        Web Inspector: there should only be one way for async backend commands to send failure
        https://bugs.webkit.org/show_bug.cgi?id=183524

        Reviewed by Timothy Hatcher.

        Remove useless ErrorString argument from async commands.

        For Automation protocol, introduce sync and async macros for filling
        in and sending a failure response. Now that async commands don't have
        an ErrorString and sync commands don't have a callback, trying to send
        an error with the wrong macro is a compile-time error.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::getBrowsingContexts):
        (WebKit::WebAutomationSession::getBrowsingContext):
        (WebKit::WebAutomationSession::createBrowsingContext):
        (WebKit::WebAutomationSession::closeBrowsingContext):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext):
        (WebKit::WebAutomationSession::waitForNavigationToComplete):
        (WebKit::WebAutomationSession::navigateBrowsingContext):
        (WebKit::WebAutomationSession::goBackInBrowsingContext):
        (WebKit::WebAutomationSession::goForwardInBrowsingContext):
        (WebKit::WebAutomationSession::reloadBrowsingContext):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::computeElementLayout):
        (WebKit::WebAutomationSession::selectOptionElement):
        (WebKit::WebAutomationSession::isShowingJavaScriptDialog):
        (WebKit::WebAutomationSession::dismissCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::acceptCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::messageOfCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::setUserInputForCurrentJavaScriptPrompt):
        (WebKit::WebAutomationSession::setFilesToSelectForFileUpload):
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::addSingleCookie):
        (WebKit::WebAutomationSession::deleteAllCookies):
        (WebKit::WebAutomationSession::setSessionPermissions):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::takeScreenshot):
        (WebKit::WebAutomationSession::didTakeScreenshot):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSessionMacros.h:
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::inspectBrowsingContext):

2018-03-09  Jer Noble  <jer.noble@apple.com>

        Don't pass NULL to the result parameter of SecTrustEvaluate()
        https://bugs.webkit.org/show_bug.cgi?id=183495
        <rdar://problem/38185688>

        Reviewed by Andy Estes.

        * UIProcess/ios/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _EVOrganizationName]):

2018-03-09  Dean Jackson  <dino@apple.com>

        Allow NavigationState to intercept requests and send them to SystemPreviewController
        https://bugs.webkit.org/show_bug.cgi?id=183526
        <rdar://problem/37801140>

        Reviewed by Tim Horton.

        Implement a bit more of SystemPreviewController, such that it can be used
        from NavigationState to identify and handle content that can be previewed.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):
            If we'd in a download response policy, then check if SystemPreviewController
            can show the content. We ignore the download, but pass the original URL onto
            the preview. Ultimately, we'd want to avoid the navigation
            but use the download destination URL for preview.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource initWithURL:]):
            Move the URL to property, to help use a single datasource object for all previews.
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        (-[_WKPreviewControllerDelegate initWithSystemPreviewController:]):
            Add a delegate object, so we can detect when the preview is dismissed and return
            to the previous page.
        (-[_WKPreviewControllerDelegate previewControllerWillDismiss:]):
        (WebKit::SystemPreviewController::showPreview):
            Use single instances of the QLPreviewController, its datasource and delegate.

        * UIProcess/SystemPreviewController.cpp:
            Add a helper to navigate back.
        (WebKit::SystemPreviewController::SystemPreviewController):
        (WebKit::SystemPreviewController::sendPageBack):
        * UIProcess/SystemPreviewController.h:

2018-03-09  Jer Noble  <jer.noble@apple.com>

        webkitfullscreenchange event not fired at the same time as :-webkit-full-screen pseudo selector changes; causes glitchiness
        https://bugs.webkit.org/show_bug.cgi?id=183383
        <rdar://problem/38197028>

        Reviewed by Eric Carlson.

        Follow-up patch: now that the 'fullscreenchange' event is being fired slightly earlier, the
        Fullscreen.TopContentInset tests triggers what appears to be an existing behavior: if you
        exit in the middle of an enter fullscreen animation, the exit never happens, because the
        NSWindow never starts the exit animation. The solution is to store the exit fullscreen
        request, and only act upon it when the enter animation completes.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController exitFullScreen]):

2018-03-09  Jer Noble  <jer.noble@apple.com>

        Unconditionalize more methods in VideoFullscreenInterface (and related classes)
        https://bugs.webkit.org/show_bug.cgi?id=183501

        Reviewed by Eric Carlson.

        No reason for these methods to be PLATFORM(MAC) only.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _videoControlsManagerDidChange]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::setUpPlaybackControlsManagerWithID):
        (WebKit::PlaybackSessionManagerProxy::clearPlaybackControlsManager):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        (WebKit::WebPageProxy::handleControlledElementIDResponse const):
        (WebKit::WebPageProxy::isPlayingVideoInEnhancedFullscreen const):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::videoControlsManagerDidChange):
        * UIProcess/ios/WKFullScreenWindowControllerIOS.h:
        * UIProcess/ios/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController videoControlsManagerDidChange]):
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionManager::setUpPlaybackControlsManager):

2018-03-09  Per Arne Vollan  <pvollan@apple.com>

        Create CA layer contexts with +remoteContextWithOptions.
        https://bugs.webkit.org/show_bug.cgi?id=182747

        Reviewed by Brent Fulgham.

        CA layer contexts (CAContext) are currently created with +contextWithCGSConnection, which is
        using the main WindowServer connection to create the context. Instead, the contexts can be
        created with +remoteContextWithOptions, which does not use the main WindowServer connection.
        This is a step towards limiting the access the WebContent process has to the window server.
        To make the +remoteContextWithOptions call succeed, the sandbox has to be modified to allow
        access to CARenderServer. Also, access to the WindowServer should be denied by calling
        CGSSetDenyWindowServerConnections(true) before entering the sandbox. This is planned to do
        in a follow-up patch. The call to +remoteContextWithOptions will open up WindowServer
        connections, since the WindowServer is the system default CA render server, but these
        connections come with limited WindowServer exposure. In addition, we need to open up the
        sandbox for accessing some IOKit properties.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalHostingProcess):
        * Shared/mac/HangDetectionDisablerMac.mm:
        (WebKit::setClientsMayIgnoreEvents):
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Remove cookie API access from WebContent Process
        https://bugs.webkit.org/show_bug.cgi?id=183519
        <rdar://problem/35368802>

        Reviewed by Alex Christensen.

        All cookie access is now handled in the Network Process. However, there are vestiges of the original logic that used CFNetwork APIs in the WebContent process.

        This patch removes CFNetwork calls from the WebProcess code paths, since they serve no purpose in modern WebKit.

        No tests because this is a code cleanup with no expected change in behavior.

        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): Moved from WebFrameNetworkingContext.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::setSharedHTTPCookieStorage): Moved from ChildProcess, since this should only be
        called in the NetworkProcess.
        * Shared/ChildProcess.h:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setSharedHTTPCookieStorage): Deleted.
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession): Remove CFNetwork code. This version of
        'ensureWebsiteDataStoreSession' is needed to maintain a dictionary on the WebProcess side so we can refer to
        the same network session in both the WebContent and Network processes.
        (WebKit::WebFrameNetworkingContext::webFrameLoaderClient const):
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Remove calls to CFNetwork.

2018-03-09  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerClientFetch should send data to its resource loader once the didReceiveResponse completion handler is called
        https://bugs.webkit.org/show_bug.cgi?id=183110

        Reviewed by Chris Dumez.

        Buffering data/finish event/fail event until the response completion handler is called.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):
        (WebKit::ServiceWorkerClientFetch::didReceiveData):
        (WebKit::ServiceWorkerClientFetch::didFinish):
        (WebKit::ServiceWorkerClientFetch::didFail):
        (WebKit::ServiceWorkerClientFetch::didNotHandle):
        (WebKit::ServiceWorkerClientFetch::cancel):
        (WebKit::ServiceWorkerClientFetch::continueLoadingAfterCheckingResponse):
        * WebProcess/Storage/ServiceWorkerClientFetch.h:

2018-03-09  Jer Noble  <jer.noble@apple.com>

        Add new CSS env constants for use with fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=183498

        Reviewed by Dean Jackson.

        Pass the values given to WebFullScreenManagerProxy through the process boundary and
        into WebCore.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::setFullscreenInsetTop):
        (WebKit::WebFullScreenManagerProxy::setFullscreenAutoHideDelay):
        * UIProcess/WebFullScreenManagerProxy.h:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didExitFullScreen):
        (WebKit::WebFullScreenManager::setFullscreenInsetTop):
        (WebKit::WebFullScreenManager::setFullscreenAutoHideDelay):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/FullScreen/WebFullScreenManager.messages.in:

2018-03-09  Jer Noble  <jer.noble@apple.com>

        Add isPictureInPictureActive messaging across WebKit process boundary
        https://bugs.webkit.org/show_bug.cgi?id=183499

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionModelContext::pictureInPictureActiveChanged):
        (WebKit::PlaybackSessionManagerProxy::pictureInPictureActiveChanged):

2018-03-09  Stephan Szabo  <stephan.szabo@sony.com>

        Add guard for wtf/glib include
        https://bugs.webkit.org/show_bug.cgi?id=183521

        Reviewed by Alex Christensen.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:

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

        [Mac] WebKit fails to receive file promises when the embedding app is sandboxed
        https://bugs.webkit.org/show_bug.cgi?id=183489
        <rdar://problem/38267517>

        WebKit calls -[NSFilePromiseReceiver receivePromisedFilesAtDestination:...] with
        NSTemporaryDirectory() as the destination for receiving file promise drops. AppKit attempts
        to issue a sandbox extension for this directory, but for security reasons App Sandbox
        refuses to do so for NSTemporaryDirectory() itself. As a result, AppKit will call our reader
        block with a nil error and a valid file URL, but no file will actually exist at that URL.

        In order for App Sandbox to grant issuing the sandbox extension needed by AppKit, we need to
        use some other destination directory. This patch uses FileSystem::createTemporaryDirectory()
        to securely create a unique temporary directory inside NSTemporaryDirectory() for use as the
        drop destination.

        Reviewed by Wenson Hsieh.

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

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

        [GTK] Do not use WebKitDOMHTMLFormElement as argument of signal WebKitWebPage::will-submit-form
        https://bugs.webkit.org/show_bug.cgi?id=183510

        Reviewed by Michael Catanzaro.

        In 2.22 WebKitDOMHTMLFormElement will be deprecated in GTK+ port and won't still exist in WPE. The new
        JavaScript GLib API will be used to replace most of the DOM API, but a few classes will remain with a minimal
        API for things that can't be done with JavaScript. WebKitDOMElement will stay and will be added to WPE as well,
        so if we change the signal parameter to WebKitDOMElement we will be able to keep using
        WebKitWebPage::will-submit-form without any changes. WPE will gain this signal and the rest of the API that uses
        DOM.

        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (webkit_web_page_class_init):

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

        Unreviewed. [GTK][WPE] Bump Since tags of resource load stats API.

        The functionality hasn't been properly tested to be released in WebKitGTK+ 2.20.

        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkit_website_data_manager_class_init):
        * UIProcess/API/gtk/WebKitWebsiteData.h:
        * UIProcess/API/wpe/WebKitWebsiteData.h:

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

        Unreviewed. Suppress GCC warnings in SystemPreviewController.cpp by
        using the cross-platform #include directives for header inclusion,
        instead of #import.

        * UIProcess/SystemPreviewController.cpp:

2018-03-08  Megan Gardner  <megan_gardner@apple.com>

        Allow WebViews to disable system appearance
        https://bugs.webkit.org/show_bug.cgi?id=183418
        <rdar://problem/36975642>

        Reviewed by Tim Horton.
        
        Allow webviews to choose whether or not to follow the default system appearance.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _useSystemAppearance]):
        (-[WKWebView _setUseSystemAppearance:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setUseSystemAppearance):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::useSystemAppearance const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseSystemAppearance):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Unreviewed, speculative attempt to fix CMake build after r229426
        https://bugs.webkit.org/show_bug.cgi?id=183382
        <rdar://problem/38191450>

        * CMakeLists.txt:

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

        [Extra zoom mode] Support resigning first responder status when focusing a form control
        https://bugs.webkit.org/show_bug.cgi?id=183477
        <rdar://problem/38225994>

        Reviewed by Tim Horton.

        Currently, when presenting an input view controller in extra zoom mode, if the web view loses first responder
        status, we will blur the focused element, which dismisses all focused form control UI. For certain types of form
        controls, this prevents the user from using key pieces of functionality.

        To address this, disconnect the notion of first responder status from DOM element focus while the form control
        overlay is shown. Later, when the active input session ends, if the web content view was first responder before
        upon focusing the element, restore first responder status on the web view. This extra tweak is needed to ensure
        that certain UI affordances which require first responder status on the web view continue to work after
        interacting with a form control that changes the first responder.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView presentFocusedFormControlViewController:]):
        (-[WKContentView dismissFocusedFormControlViewController:]):

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

        Resource Load Statistics: Revert defaults read of zero values
        https://bugs.webkit.org/show_bug.cgi?id=183476

        Unreviewed revert of three small changes landed in r229427.

        * UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm:
        (WebKit::WebResourceLoadStatisticsStore::registerUserDefaultsIfNeeded):
            Reverted back to strict check of greater than zero for defaults reads.

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

        Don't have SafariServices in minimal simulator build
        https://bugs.webkit.org/show_bug.cgi?id=183436
        <rdar://problem/38254778>

        Reviewed by Dan Bernstein.

        * config.h:

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

        Resource Load Statistics: Make debug mode always partition prevalent resources
        https://bugs.webkit.org/show_bug.cgi?id=183468
        <rdar://problem/38269437>

        Reviewed by Brent Fulgham.

        After some testing we decided that a 30 second timeout in ITP debug mode just makes
        it confusing. We should instead always partition prevalent resources in debug mode
        to make it easy to understand. The partitioned state is what developers want to test
        anyway.

        * UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm:
        (WebKit::WebResourceLoadStatisticsStore::registerUserDefaultsIfNeeded):
            Minor change to include 0 as valid setting.
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):
            Now just stores the setting of debug mode instead of changing the timeout.
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
            Now does not disable partitioning under debug mode.
        (WebKit::WebResourceLoadStatisticsStore::shouldPartitionCookies const):
            Now returns true for prevalent resources with user interaction under debug mode.            
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning):
            Removed duplicate debug logging statement.
        * UIProcess/WebResourceLoadStatisticsStore.h:
            Added member m_debugModeEnabled.

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

        Remove WebCookieManager and messaging from WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=183382
        <rdar://problem/38191450>

        Reviewed by Alex Christensen.

        Networking access was fully removed from the WebContent process in Bug 183192 (and related bugs). The
        UIProcess no longer needs to ask the WebContent process about networking-related things, and shouldn't
        waste everyone's time doing so.

        This bug removes some left-over WebCookieManager API stuff, and is a first step in purging the
        WebContent Process from accessing cookie data.

        * NetworkProcess/Cookies: Copied from WebProcess/Cookies.
        * NetworkProcess/Cookies/WebCookieManager.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Cookies: Removed.
        * WebProcess/Cookies/WebCookieManager.cpp: Removed.
        * WebProcess/Cookies/WebCookieManager.h: Removed.
        * WebProcess/Cookies/WebCookieManager.messages.in: Removed.
        * WebProcess/Cookies/curl: Removed.
        * WebProcess/Cookies/curl/WebCookieManagerCurl.cpp: Removed.
        * WebProcess/Cookies/mac: Removed.
        * WebProcess/Cookies/mac/WebCookieManagerMac.mm: Removed.
        * WebProcess/Cookies/soup: Removed.
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundle.cpp: Remove 'WebCookieManager.h" header.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: Ditto.
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm: Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Remove call to add WebCookieManager as a
        WebProcessSupplement.
        * CMakeLists.txt: Revised paths.
        * DerivedSources.make: Ditto.
        * PlatformMac.cmake: Ditto.
        * PlatformWin.cmake: Ditto.
        * SourcesGTK.txt: Ditto.
        * SourcesWPE.txt: Ditto.

2018-03-08  Youenn Fablet  <youenn@apple.com>

        libwebrtc update broke internal builds
        https://bugs.webkit.org/show_bug.cgi?id=183454

        Reviewed by Eric Carlson.

        * Configurations/BaseTarget.xcconfig:

2018-03-08  Youenn Fablet  <youenn@apple.com>

        PluginInfoStore::isSupportedPlugin should check for empty mime type
        https://bugs.webkit.org/show_bug.cgi?id=183457
        <rdar://problem/38159575>

        Reviewed by Chris Dumez.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::isSupportedPlugin):

2018-03-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][WebCore] Extend jsDynamicCast for WebCore types in WebCore and remove jsDynamicDowncast
        https://bugs.webkit.org/show_bug.cgi?id=183449

        Reviewed by Mark Lam.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::elementForNodeHandle):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::frameForContext):

2018-03-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Add inherits<T>(VM&) leveraging JSCast fast path
        https://bugs.webkit.org/show_bug.cgi?id=183429

        Reviewed by Mark Lam.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::callMethod):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::callNPJSObject):
        (WebKit::constructWithConstructor):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::create):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::counterValue):

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

        Remove WebCore::TextureMapperAnimation as a special case in WebKit IPC
        generation. Values of this type aren't being transferred across IPC.

        Rubber-stamped by Carlos Garcia Campos.

        * Scripts/webkit/messages.py:

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

        Stop linking ApplicationServices directly
        https://bugs.webkit.org/show_bug.cgi?id=182867
        <rdar://problem/38252142>

        Reviewed by Alex Christensen.

        The frameworks that we use that live inside ApplicationServices
        have mostly moved out, so import them directly.

        * Configurations/WebKit.xcconfig:

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

        [Extra zoom mode] Specify password mode as needed when inputting text
        https://bugs.webkit.org/show_bug.cgi?id=183428
        <rdar://problem/37609386>

        Reviewed by Tim Horton.

        If the focused element is a password field, or the input delegate has forced secure text entry, set a flag on
        the text input view controller to opt in to password text input mode.

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

2018-03-07  Tim Horton  <timothy_horton@apple.com>

        Sort and separate FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=183427

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:
        Sort and split FeatureDefines into paragraphs
        (to make it easier to sort later).

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

        REGRESSION(r218089): [GTK] webkit_web_view_get_inspector() needs to be called, otherwise inspector does not close
        https://bugs.webkit.org/show_bug.cgi?id=181126

        Reviewed by Carlos Alberto Lopez Perez.

        Fix the condition to decide whether to detach the inspector view ourselves.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformDetach): Remove the inspector view from its parent if we don't have a client
        or the client didn't detach it.

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

        [GTK][WPE] Leak checker is not working in WebKitGLib web process tests
        https://bugs.webkit.org/show_bug.cgi?id=183404

        Reviewed by Michael Catanzaro.

        Add private helper for testing to do a garbage collection when the page is closing.

        * WebProcess/InjectedBundle/API/glib/WebKitWebExtension.cpp:
        (webkitWebExtensionSetGarbageCollectOnPageDestroy):
        * WebProcess/InjectedBundle/API/glib/WebKitWebExtensionPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.h: Fix annotation of
        webkit_dom_client_rect_list_item(), it should be transfer full.

2018-03-07  Youenn Fablet  <youenn@apple.com>

        Match unsupported plugins based on domains and not origin
        https://bugs.webkit.org/show_bug.cgi?id=183384

        Reviewed by Chris Dumez.

        Moved from a HashMap of plugins to a Vector of plugins since we cannot match exactly based on the origin.

        * Scripts/webkit/messages.py:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextAddSupportedPlugin):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _addSupportedPlugin:named:withMimeTypes:withExtensions:]):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::isSupportedPlugin):
        (WebKit::PluginInfoStore::supportedPluginNames):
        (WebKit::PluginInfoStore::addSupportedPlugin):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::addSupportedPlugin):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::getPluginInfo):
        (WebKit::WebPluginInfoProvider::getWebVisiblePluginInfo):
        * WebProcess/Plugins/WebPluginInfoProvider.h:

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

        REGRESSION (r229093): Media playback on Facebook and Hulu require mDNSResponder access
        https://bugs.webkit.org/show_bug.cgi?id=183421
        <rdar://problem/38191574>

        Reviewed by Dean Jackson.

        CoreMedia fails to properly play back media on Facebook and Hulu if access to the
        mDNSResponder is blocked by the sandbox. This Bug unblocks that access while we
        investigate the underlying issue.

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

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

        Try to fix build for watchOS and tvOS.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        * UIProcess/SystemPreviewController.cpp:

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

        Add SystemPreviewController for showing system-level views of special file types
        https://bugs.webkit.org/show_bug.cgi?id=183413
        <rdar://problem/37800834>

        Reviewed by Tim Horton.

        Add a new controller class that hangs off WebPageProxy, with the goal
        of providing system-level viewing of some some file types. Specifically
        those that can't be shown by WebKit.

        This is the initial implementation which is quite simple. The controller
        can be queried about whether it supports a MIME type, then it can be
        asked to show a URL.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm: Added.
        (-[_WKPreviewControllerDataSource initWithURL:]):
        (-[_WKPreviewControllerDataSource numberOfPreviewItemsInPreviewController:]):
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        (WebKit::SystemPreviewController::canPreview const):
        (WebKit::SystemPreviewController::showPreview):
        * UIProcess/SystemPreviewController.cpp: Added.
        (WebKit::SystemPreviewController::SystemPreviewController):
        (WebKit::SystemPreviewController::canPreview const):
        (WebKit::SystemPreviewController::showPreview):
        * UIProcess/SystemPreviewController.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_configurationPreferenceValues):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::systemPreviewController):
        * WebKit.xcodeproj/project.pbxproj:

2018-03-07  Alejandro G. Castro  <alex@igalia.com>

        Make NetworkRTCResolver port agnostic
        https://bugs.webkit.org/show_bug.cgi?id=178855

        Reviewed by Youenn Fablet.

        Create a specific Cocoa class to isolate the generic code in the base class, make the base implementation port
        agnostic and dependent on DNS API in the platform directory which encapsulates the platform specific details.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp: Create an alias class name defined per platform to instantiate the resolver.
        (WebKit::NetworkRTCProvider::createResolver): Used the alias class name and receive a new IPAddress class that is not
        dependent on rtc libwebrtc library.
        * NetworkProcess/webrtc/NetworkRTCResolver.cpp: Remove the platform specific code. Use the DNS API to implement the
        platform specific code in the default start and stop methods. Add the identifier of the resolve operation to the class.
        (WebKit::NetworkRTCResolver::NetworkRTCResolver): Add the identifier in the initialization.
        (WebKit::NetworkRTCResolver::~NetworkRTCResolver): Remove the platform specific code.
        (WebKit::NetworkRTCResolver::completed): Ditto.
        (WebKit::NetworkRTCResolver::start): Add a new implementation using the DNS API.
        (WebKit::NetworkRTCResolver::stop): Ditto
        * NetworkProcess/webrtc/NetworkRTCResolver.h: Remove the platform specific code and use the DNSResolveQueue for a general
        solution to implement the platform specific code. Avoid using the IPAddress class that depends on libwertc classes to make
        it more general regarding DNS name resolution.
        (WebKit::NetworkRTCResolver::start): Make this class virtual.
        (WebKit::NetworkRTCResolver::stop): Ditto.
        * NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp: Copied Cocoa code from Source/WebKit/NetworkProcess/webrtc/NetworkRTCResolver.cpp.
        Now this class overrides the start and stop methods that use DNS, cocoa implementation should use the DNS methods in the future and
        remove this class, making sure all the platform specific class is in the platform directory.
        * NetworkProcess/webrtc/NetworkRTCResolverCocoa.h: Copied Cocoa code from Source/WebKit/NetworkProcess/webrtc/NetworkRTCResolver.h.
        * PlatformGTK.cmake: Add NetworkRTCResolver compilation for GTK.
        * WebKit.xcodeproj/project.pbxproj: Add the NetworkRTCResolverCocoa class to the compilation.

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

        NetworkDataTask should enable logging for automation clients
        https://bugs.webkit.org/show_bug.cgi?id=183378
        <rdar://problem/38189556>

        Reviewed by Brian Burg.

        The NetworkDataTaskCocoa class was only logging if the SessionID object allowed logging.
        It should also be considering whether the current session is working on behalf of an
        automation client. If so, it should allow logging.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCocoa::isAlwaysOnLoggingAllowed const):

2018-03-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix.

        * UIProcess/ios/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _EVOrganizationName]):

2018-03-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add a new runtime flag to control whether CSS Animations and CSS Transitions should run using the Web Animations timeline
        https://bugs.webkit.org/show_bug.cgi?id=183370
        <rdar://problem/38180729>

        Reviewed by Dean Jackson.

        Before we start creating WebAnimation objects to perform CSS Animations and CSS Transitions, which will replace the existing codepath
        involving CSSAnimationController and CompositeAnimation, we need a runtime flag that will allow all the new code to be turned off by
        default while we bring this feature up.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled):
        (WKPreferencesGetCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled:]):
        (-[WKPreferences _cssAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        (WebKit::InjectedBundle::setCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2018-03-06  Ms2ger  <Ms2ger@igalia.com>

        [GLib] Implement WebsiteDataStore::defaultServiceWorkerRegistrationDirectory().
        https://bugs.webkit.org/show_bug.cgi?id=183364

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        (API::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory): implement.

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Addressing further review feedback for patch landed in r229315.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::commitSceneState): There's no need for
        explicit calls of the clear() method on both containers in the CommitScope
        objects, the destructors invoked for these objects from the CommitScope
        destructor will have the same effect.

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove unused scrolling-related code in TextureMapperLayer, CoordinatedGraphics stack
        https://bugs.webkit.org/show_bug.cgi?id=183340

        Reviewed by Michael Catanzaro.

        With most of the scrolling-related code in TextureMapperLayer on the
        chopping block, we can now drop the ScrollingClient inheritance and the
        commitScrollOffset() virtual method implementation. This enables
        removing the whole commitScrollOffset() call chain that ran from
        CoordinatedGraphicsScene through CoordinatedLayerTreeHost and
        CompositingCoordinator to the affected CoordinatedGraphicsLayer object.

        The CoordinatedGraphicsScene::findScrollableContentsLayerAt() method is
        also unused and can be deleted.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::setLayerState):
        (WebKit::CoordinatedGraphicsScene::createLayer):
        (WebKit::CoordinatedGraphicsScene::commitScrollOffset): Deleted.
        (WebKit::CoordinatedGraphicsScene::findScrollableContentsLayerAt): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::commitScrollOffset): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::commitScrollOffset): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::commitScrollOffset): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Apply TextureMapperLayer animations with a single MonotonicTime value
        https://bugs.webkit.org/show_bug.cgi?id=183360

        Reviewed by Sergio Villar Senin.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        Pass the monotic time value, as returned by MonotonicTime::now(), to the
        TextureMapperLayer::applyAnimationsRecursively() call.

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Clean up CoordinatedImageBacking
        https://bugs.webkit.org/show_bug.cgi?id=183332

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::createImageBackingIfNeeded):
        Adjust call to CoordinatedImageBacking::getCoordinatedImageBackingID().

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        CoordinatedGraphicsScene: properly limit data specific to state commit operation
        https://bugs.webkit.org/show_bug.cgi?id=183326

        Reviewed by Sergio Villar Senin.

        In the process of state commit in CoordinatedGraphicsScene, the released
        image backings and backing stores with pending updates are stored in
        Vector and HashSet objects, respectively. Instead of these two objects
        being member variables on the CoordinatedGraphicsScene class, keep them
        in the CommitScope structure that's limited to the operations done in
        the commitSceneState() method.

        The two member variables are dropped, and the CommitScope object is
        passed by reference to any helper method that needs to append either
        kind of object to the respective container. At the end of the state
        commit, backing stores with pending updates have those updates applied,
        and the two containers are cleared out as the CommitScope object is
        destroyed.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::setLayerState):
        (WebKit::CoordinatedGraphicsScene::prepareContentBackingStore):
        (WebKit::CoordinatedGraphicsScene::resetBackingStoreSizeToLayerSize):
        (WebKit::CoordinatedGraphicsScene::removeTilesIfNeeded):
        (WebKit::CoordinatedGraphicsScene::updateTilesIfNeeded):
        (WebKit::CoordinatedGraphicsScene::syncImageBackings):
        (WebKit::CoordinatedGraphicsScene::updateImageBacking):
        (WebKit::CoordinatedGraphicsScene::clearImageBackingContents):
        (WebKit::CoordinatedGraphicsScene::removeImageBacking):
        (WebKit::CoordinatedGraphicsScene::commitSceneState):
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):
        (WebKit::CoordinatedGraphicsScene::removeReleasedImageBackingsIfNeeded): Deleted.
        (WebKit::CoordinatedGraphicsScene::commitPendingBackingStoreOperations): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:

2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Fix std::make_unique / new[] using system malloc
        https://bugs.webkit.org/show_bug.cgi?id=182975

        Reviewed by JF Bastien.

        Use Vector instead.

        * NetworkProcess/win/SystemProxyWin.cpp:
        (WindowsSystemProxy::getSystemHttpProxy):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage):
        (IPC::Connection::sendOutputMessage):
        * Platform/win/LoggingWin.cpp:
        (WebKit::logLevelString):
        * Shared/SandboxExtension.h:
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::HandleArray::allocate):
        (WebKit::SandboxExtension::HandleArray::operator[]):
        (WebKit::SandboxExtension::HandleArray::operator[] const):
        (WebKit::SandboxExtension::HandleArray::size const):
        (WebKit::SandboxExtension::HandleArray::encode const):

2018-03-05  Andy Estes  <aestes@apple.com>

        [Mac] Teach WebCore::Pasteboard about file promise drags
        https://bugs.webkit.org/show_bug.cgi?id=183314
        <rdar://problem/38105493>

        Reviewed by Darin Adler.

        Added a FIXME comment.

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

2018-03-05  Jeff Miller  <jeffm@apple.com>

        Expose still more WKPreferences SPI to match C SPI
        https://bugs.webkit.org/show_bug.cgi?id=183045

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setAllowsInlineMediaPlayback:]):
        (-[WKPreferences _allowsInlineMediaPlayback]):
        (-[WKPreferences _setApplePayEnabled:]):
        (-[WKPreferences _applePayEnabled]):
        (-[WKPreferences _setDNSPrefetchingEnabled:]):
        (-[WKPreferences _dnsPrefetchingEnabled]):
        (-[WKPreferences _setInlineMediaPlaybackRequiresPlaysInlineAttribute:]):
        (-[WKPreferences _inlineMediaPlaybackRequiresPlaysInlineAttribute]):
        (-[WKPreferences _setInvisibleMediaAutoplayNotPermitted:]):
        (-[WKPreferences _invisibleMediaAutoplayNotPermitted]):
        (-[WKPreferences _setLegacyEncryptedMediaAPIEnabled:]):
        (-[WKPreferences _legacyEncryptedMediaAPIEnabled]):
        (-[WKPreferences _setMainContentUserGestureOverrideEnabled:]):
        (-[WKPreferences _mainContentUserGestureOverrideEnabled]):
        (-[WKPreferences _setMediaStreamEnabled:]):
        (-[WKPreferences _mediaStreamEnabled]):
        (-[WKPreferences _setNeedsStorageAccessFromFileURLsQuirk:]):
        (-[WKPreferences _needsStorageAccessFromFileURLsQuirk]):
        (-[WKPreferences _setPDFPluginEnabled:]):
        (-[WKPreferences _pdfPluginEnabled]):
        (-[WKPreferences _setRequiresUserGestureForAudioPlayback:]):
        (-[WKPreferences _requiresUserGestureForAudioPlayback]):
        (-[WKPreferences _setRequiresUserGestureForVideoPlayback:]):
        (-[WKPreferences _requiresUserGestureForVideoPlayback]):
        (-[WKPreferences _setServiceControlsEnabled:]):
        (-[WKPreferences _serviceControlsEnabled]):
        (-[WKPreferences _setShowsToolTipOverTruncatedText:]):
        (-[WKPreferences _showsToolTipOverTruncatedText]):
        (-[WKPreferences _setTextAreasAreResizable:]):
        (-[WKPreferences _textAreasAreResizable]):
        (-[WKPreferences _setUseGiantTiles:]):
        (-[WKPreferences _useGiantTiles]):
        (-[WKPreferences _setWantsBalancedSetDefersLoadingBehavior:]):
        (-[WKPreferences _wantsBalancedSetDefersLoadingBehavior]):
        (-[WKPreferences _setWebAudioEnabled:]):
        (-[WKPreferences _webAudioEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

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

        Automation: clicking on a disabled option element shouldn't produce an error
        https://bugs.webkit.org/show_bug.cgi?id=183284

        Reviewed by Brian Burg.

        This was expected by selenium, but the WebDriver spec says we should simply do nothing in those cases.

        14.1 Element Click.
        https://w3c.github.io/webdriver/webdriver-spec.html#element-click

        Fixes: imported/w3c/webdriver/tests/element_click/select.py::test_option_disabled

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::selectOptionElement):

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

        Automation: stale elements not detected when removed from the DOM
        https://bugs.webkit.org/show_bug.cgi?id=183278

        Reviewed by Brian Burg.

        We detect stale elements when the page is reloaded because the maps are recreated, but if an element is removed
        from the DOM for the same document we keep the nodes in the maps. We should clear stale elements before
        accessing the maps.

        Fixes: imported/selenium/py/test/selenium/webdriver/common/webdriverwait_tests.py::testExpectedConditionStalenessOf

        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (let.AutomationSessionProxy.prototype.evaluateJavaScriptFunction): Call _clearStaleNodes()
        (let.AutomationSessionProxy.prototype.nodeForIdentifier): Ditto.
        (let.AutomationSessionProxy.prototype._clearStaleNodes): Check if cached nodes are still in document and remove them
        from the maps if they aren't.

2018-03-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Move currentCPUTime and sleep(Seconds) to CPUTime.h and Seconds.h respectively
        https://bugs.webkit.org/show_bug.cgi?id=183312

        Reviewed by Mark Lam.

        Remove wtf/CurrentTime.h include pragma.

        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        * Platform/IPC/Connection.cpp:
        * Platform/unix/SharedMemoryUnix.cpp:
        * PluginProcess/WebProcessConnection.cpp:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/linux/MemoryPressureMonitor.cpp:
        * WebProcess/Gamepad/WebGamepad.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        * WebProcess/WebProcess.cpp:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        * WebProcess/win/WebProcessMainWin.cpp:
        * WebProcess/wpe/WebProcessMainWPE.cpp:

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

        Web Automation: script evaluations via WebDriver should have a user gesture indicator
        https://bugs.webkit.org/show_bug.cgi?id=183230
        <rdar://problem/37959739>

        Reviewed by Andy Estes.

        APIs that normally require a user gesture should just work when using via WebDriver.
        To support cases where tests need to simulate user actions with JavaScript, use a
        fake user gesture, similar to how -[WKWebView evaluateJavaScript:] forces a user
        gesture when clients evaluate JavaScript in their web view.

        No new tests, this is covered by W3C tests that use the Fullscreen API.
        This API does nothing if there is no user gesture; with this patch, it just works.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):

2018-03-04  Tim Horton  <timothy_horton@apple.com>

        Make !ENABLE(DATA_DETECTION) iOS build actually succeed
        https://bugs.webkit.org/show_bug.cgi?id=183283
        <rdar://problem/38062148>

        Reviewed by Sam Weinig.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        Guard some more code with ENABLE(DATA_DETECTION).

2018-03-04  Dan Bernstein  <mitz@apple.com>

        Building with ONLY_ACTIVE_ARCH=NO and ARCHS=x86_64 fails
        https://bugs.webkit.org/show_bug.cgi?id=183320

        Reviewed by Tim Horton.

        * Configurations/PluginService.32.xcconfig: If the Apple build tool specifies
          RC_ARCHS=x86_64, then let the service build for x86_64, but don’t install it.

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

        Notify the NetworkProcess when a session is servicing an automation client
        https://bugs.webkit.org/show_bug.cgi?id=183306
        <rdar://problem/37835783>

        Reviewed by Brian Burg.

        Network loads servicing WebDriver are done through an ephemeral session. While this is great
        for protecting a developer's machine from sharing state with test runs, it has the unintended
        effect of blocking certain logging operations.

        We do not log content in ephemeral sessions to protect user privacy. However, ephemeral sessions
        generated by WebDriver should participate in logging so that proper testing (with logging) can
        be done.

        This patch signals the NetworkProcess when an ephemeral session (created for automation purposes)
        is created, so that it can allow logging.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::destroySession): Remove controlled-by-automation entry.
        (WebKit::NetworkProcess::sessionIsControlledByAutomation const): Added.
        (WebKit::NetworkProcess::setSessionIsControlledByAutomation): Added.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::isAlwaysOnLoggingAllowed const): Checks if the relevant session
        is servicing an automation client, and returns true if it is.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Signal the network process if this page is being created
        for an automation client.

2018-03-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove RunLoop and RunLoop::Timer's interface using double as seconds
        https://bugs.webkit.org/show_bug.cgi?id=183293

        Reviewed by Alex Christensen.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::scheduleUpdate):
        (WebKit::CompositingRunLoop::compositionCompleted):
        (WebKit::CompositingRunLoop::updateCompleted):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        (WebKit::ThreadedDisplayRefreshMonitor::dispatchDisplayRefreshCallback):

2018-03-02  Don Olmstead  <don.olmstead@sony.com>

        Share common WebError implementation
        https://bugs.webkit.org/show_bug.cgi?id=183303

        Reviewed by Ryosuke Niwa.

        * Shared/WebErrors.cpp:
        (WebKit::cancelledError):
        (WebKit::fileDoesNotExistError):
        * Shared/glib/WebErrorsGlib.cpp: Removed.
        * SourcesGTK.txt:
        * SourcesWPE.txt:

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

        LayoutTest imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=179248
        <rdar://problem/35377756>

        Reviewed by Chris Dumez.

        In case we go up to the initializeSize step and Caches was cleared
        between the time we stated to initialize and the time we got there,
        we need to make as if Caches was not initialized,
        thus keeping m_isInitialized to false and m_storage to nullptr.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::initializeSize):

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

        Clients should register to StorageProcess with their service worker registration identifier
        https://bugs.webkit.org/show_bug.cgi?id=182313
        <rdar://problem/38044403>

        Reviewed by Chris Dumez.

        Relanding.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::registerServiceWorkerClient):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::registerServiceWorkerClient):
        * WebProcess/Storage/WebSWClientConnection.h:

2018-03-02  Tim Horton  <timothy_horton@apple.com>

        Make it possible to disable WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=183281
        <rdar://problem/38060815>

        Reviewed by Dan Bates.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isBackground]):
        (-[WKWebView _isDisplayingPDF]):
        (-[WKWebView _dataForDisplayedPDF]):
        (-[WKWebView _suggestedFilenameForDisplayedPDF]):
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry init]):
        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:

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

        WebProcessProxy should handle its completion handler at destruction time
        https://bugs.webkit.org/show_bug.cgi?id=183224

        Reviewed by Brady Eidson.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        * UIProcess/WebProcessProxy.h:

2018-03-02  Brent Fulgham  <bfulgham@apple.com>

        Update WebContent process sandbox IOKit properties
        https://bugs.webkit.org/show_bug.cgi?id=183269
        <rdar://problem/37853282>

        Reviewed by Eric Carlson.

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

2018-03-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove monotonicallyIncreasingTime
        https://bugs.webkit.org/show_bug.cgi?id=182911

        Reviewed by Michael Catanzaro.

        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::toRecordInformation):
        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<Seconds>::encode):
        (IPC::ArgumentCoder<Seconds>::decode):
        (IPC::ArgumentCoder<MonotonicTime>::encode):
        (IPC::ArgumentCoder<MonotonicTime>::decode):
        * Platform/IPC/ArgumentCoders.h:
        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::GamepadData):
        * Shared/Gamepad/GamepadData.h:
        (WebKit::GamepadData::lastUpdateTime const):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MonotonicTime>::encode): Deleted.
        (IPC::ArgumentCoder<MonotonicTime>::decode): Deleted.
        (IPC::ArgumentCoder<Seconds>::encode): Deleted.
        (IPC::ArgumentCoder<Seconds>::decode): Deleted.
        ArgumentCoders for MonotonicTime and Seconds are now used internally.
        Move them to Platform/IPC/ArgumentCoders.h.

        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::iconDatabaseSyncThread):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::start):
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::stop):
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::didDraw):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/Gamepad/UIGamepad.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::animationDidStart):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::acceleratedAnimationDidStart):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (mediaTimeToCurrentTime):
        (-[WKAnimationDelegate animationDidStart:]):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::animationStarted):
        This argument `beginTime` is not CFTimeInverval actually. We add currentTimeToMediaTime
        conversion here to fix this issue.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::animationDidStart):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::acceleratedAnimationDidStart):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::destroyRenderingResources):

2018-03-02  Brent Fulgham  <bfulgham@apple.com>

        [iOS] whitelist missing AppleJPEG logging feature
        https://bugs.webkit.org/show_bug.cgi?id=183270
        <rdar://problem/37808612>

        Reviewed by Alex Christensen.

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

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

        IOChannel::read and IOChannel::write can destroy the completion handler in the thread used to manipulate thread
        https://bugs.webkit.org/show_bug.cgi?id=183261

        Reviewed by Antti Koivisto.

        Moving the completion handler when being called so that it gets desttroyed in the thread it is called.

        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::write):

2018-03-02  Dan Bernstein  <mitz@apple.com>

        Safari uses WebContent.Development when loading injected bundle embedded in its app bundle
        https://bugs.webkit.org/show_bug.cgi?id=183275

        Reviewed by Tim Horton.

        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::shouldAllowNonValidInjectedCode const): Return false if this is
          a platform binary. We can also return false unconditionally when building for any shipping
          major macOS release.

2018-03-01  Commit Queue  <commit-queue@webkit.org>

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

        it is breaking imported/w3c/web-platform-tests/service-workers
        /service-worker/clients-matchall-exact-controller.https.html
        (Requested by youenn on #webkit).

        Reverted changeset:

        "Clients should register to StorageProcess with their service
        worker registration identifier"
        https://bugs.webkit.org/show_bug.cgi?id=182313
        https://trac.webkit.org/changeset/229153

2018-03-01  Brent Fulgham  <bfulgham@apple.com>

        Add the "com.apple.security.cs.disable-library-validation” entitlement to the Plugin Process
        https://bugs.webkit.org/show_bug.cgi?id=183252
        <rdar://problem/37887136>

        Reviewed by David Kilzer.

        * Configurations/PluginService.entitlements:

2018-03-01  Youenn Fablet  <youenn@apple.com>

        Clients should register to StorageProcess with their service worker registration identifier
        https://bugs.webkit.org/show_bug.cgi?id=182313

        Reviewed by Chris Dumez.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::registerServiceWorkerClient):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::registerServiceWorkerClient):
        * WebProcess/Storage/WebSWClientConnection.h:

2018-03-01  Youenn Fablet  <youenn@apple.com>

        LayoutTest imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=179248
        <rdar://problem/35377756>

        Reviewed by Chris Dumez.

        WebKitTestRunner is clearing caches for every test but there might still be some on-going cache activity due to a previous test.
        In that case, the activity might try to open the Caches object at the same time the files are deleted by the clearing task.
        If the new test is trying to open the same caches, it will also receive the same error, hence the console log message.

        To fix that issue, we clear the initialization pending callbacks when clearing the caches.
        This prevents the new test to receive the error since the new test should only start some cache activity after the cache clear task is done.
        Made refactoring to append the first callback into the list of pending callbacks.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::initialize):
        (WebKit::CacheStorage::Caches::initializeSize):
        (WebKit::CacheStorage::Caches::clear):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:

2018-03-01  Youenn Fablet  <youenn@apple.com>

        Add API test to validate setting of service worker and cache storage directories
        https://bugs.webkit.org/show_bug.cgi?id=182543

        Reviewed by Chris Dumez.

        Add cache engine directory path to its representation dump.
        This is used in API tests to check that the path is correctly set.

        Add a way for to know whether a service worker was registered from a WKWebsiteDataStore.
        This is used in API tests to check that the path is correctly set.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::representation):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _hasRegisteredServiceWorker]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

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

        Fix some errors due to some mach port APIs being unavailable on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=183262
        <rdar://problem/38028521>

        Reviewed by Tim Horton.

        Minor build fix; mach_port_guard and mach_port_unguard are not available on this platform.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::platformInitialize):
        (IPC::Connection::open):

2018-03-01  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed build fix after r229140.

        * WebProcess/cocoa/WebProcessCocoa.mm:

2018-03-01  Per Arne Vollan  <pvollan@apple.com>

        Scrollbar preferences are ignored when the WebContent process doesn't have access to the WindowServer.
        https://bugs.webkit.org/show_bug.cgi?id=183231
        <rdar://problem/37793457>

        Reviewed by Brent Fulgham.

        When the WebContent process doesn't have access to the WindowServer, the scrollbars are always of the overlay type.
        The notification about scrollbar preferences is never received by the WebContent process when there is no
        WindowServer access. This can be fixed by adding an observer of scrollbar preferences in the UI process, and
        notifying the WebProcess about this by sending it a message. This message should also contain the preferred
        scrollbar type, since the call '[NSScroller preferredScrollerStyle]' will always return the overlay style when
        there is no WindowServer access.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::scrollerStylePreferenceChanged):

2018-03-01  Antti Koivisto  <antti@apple.com>

        Crash when updating cache entry after validation in apps that uses class A file protection
        https://bugs.webkit.org/show_bug.cgi?id=183242
        <rdar://problem/33289058>

        Reviewed by Chris Dumez.

        When validating a cache entry, we keep it alive until we get a network response. With 304 response
        we then update the headers of this existing entry. This accesses the body data of the entry which
        may be backed by a mapped file. If the app uses class A protection, user might have locked
        the device and the entry might have become inaccessible, leading to a crash.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::setNeedsValidation):

        In case of class A protection, pull the data to a memory buffer immediately before starting a revalidation request.
        This makes the window where the file could become inaccessible much shorter (since it no longer depends on network).

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

        REGRESSION(r221514): [GTK] UI process crash in WebKit::WaylandCompositor::Surface::flushPendingFrameCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=183091

        Reviewed by Michael Catanzaro.

        Invalidate the surface in the page map when the backing store is destroyed.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::willDestroySurface):
        * UIProcess/gtk/WaylandCompositor.h:

2018-02-28  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Automation: provide a way to ask clients the type of a JavaScript dialog
        https://bugs.webkit.org/show_bug.cgi?id=182660
        <rdar://problem/37408183>

        Reviewed by Tim Horton and Carlos Garcia Campos.

        Add another delegate method to ask what type of dialog is being shown.
        This is used to implement §18.4 Step 5, where sending text to a dialog
        without a prompt will return several different kinds of errors.

        No new tests, covered by web platform tests once Safari side has landed.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h: Update FIXME radar numbers.
        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::toImpl):
        (WebKit::AutomationSessionClient::typeOfCurrentJavaScriptDialogOnPage):
        If there is no current dialog to be checked, the client can return the 'None'
        type. This gets converted into a std::nullopt and causes a command error later.

2018-02-28  John Wilander  <wilander@apple.com>

        Remove assertion from ResourceLoadStatisticsClassifier::calculateResourcePrevalence() which causes crashes when domains are explicitly set as prevalent without the associated statistics
        https://bugs.webkit.org/show_bug.cgi?id=183233

        Unreviewed removal of an assertion that's causing layout test crashes.

        * Platform/classifier/ResourceLoadStatisticsClassifier.cpp:
        (WebKit::ResourceLoadStatisticsClassifier::calculateResourcePrevalence):
            Removed ASSERT(currentPrevalence == Low).

2018-02-28  John Wilander  <wilander@apple.com>

        Add a second tier of prevalence to facilitate telemetry on very prevalent domains
        https://bugs.webkit.org/show_bug.cgi?id=183218
        <rdar://problem/37992388>

        Reviewed by Brent Fulgham.

        * Platform/classifier/ResourceLoadStatisticsClassifier.cpp:
        (WebKit::vectorLength):
            New convenience function.
        (WebKit::ResourceLoadStatisticsClassifier::calculateResourcePrevalence):
            Renamed from ResourceLoadStatisticsClassifier::hasPrevalentResourceCharacteristics().
            Now returns a value from the enum ResourceLoadPrevalence.
        (WebKit::ResourceLoadStatisticsClassifier::classifyWithVectorThreshold):
            Now uses the new vectorLength() convenience function.
        (WebKit::ResourceLoadStatisticsClassifier::hasPrevalentResourceCharacteristics): Deleted.
            Renamed to ResourceLoadStatisticsClassifier::calculateResourcePrevalence().
        * Platform/classifier/ResourceLoadStatisticsClassifier.h:
            Added enum ResourceLoadPrevalence.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
            Handling of the new boolean field isVeryPrevalentResource.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsVeryPrevalentResource):
            Test infrastructure.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::processStatisticsAndDataRecords):
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::setVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::isVeryPrevalentResource):
        (WebKit::WebResourceLoadStatisticsStore::clearPrevalentResource):
            All of these are for handling of the two-tier classification.
            Also bumped the statisticsModelVersion to 12.
        * UIProcess/WebResourceLoadStatisticsStore.h:

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

        Reduce use of NetworkingContext in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=183213

        Reviewed by Brady Eidson.

        * NetworkProcess/RemoteNetworkingContext.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::proxiesForURL):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebPage/WebFrame.cpp:

2018-02-28  Brent Fulgham  <bfulgham@apple.com>

        Remove network access from the WebContent process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=183192
        <rdar://problem/35369115>

        Reviewed by Alex Christensen.

        Remove the 'system-network', 'allow-network-common', and 'network-client' access from the WebContent process.
        That's why we have a Network Process! 

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

2018-02-27  Tim Horton  <timothy_horton@apple.com>

        Ensure target triple is propagated correctly to DerivedSources.make
        https://bugs.webkit.org/show_bug.cgi?id=183189
        <rdar://problem/37959694>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * DerivedSources.make:
        Ditto the WebCore ChangeLog.

2018-02-27  Yongjun Zhang  <yongjun_zhang@apple.com>

        Make it possible to set suggestions in extra zoom mode.
        https://bugs.webkit.org/show_bug.cgi?id=183154
        <rdar://problem/35227450>

        Reviewed by Tim Horton.

        In extra zoom mode, when presenting WKFocusedFormControlViewController, make it the inputDelegate for
        WKContentView. This is needed to ensure we can capture/cache the suggestions when _WKInputSession's
        suggestions is updated. Later, when we present WKTextInputViewController, we can pass the cached
        suggestions.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView presentFocusedFormControlViewController:]): Set _focusedFormControlViewController as
            the inputDelegate for WKContentView.
        (-[WKContentView dismissFocusedFormControlViewController:]): Null the inputDelegate on dismissal.
        (-[WKContentView presentTextInputViewController:]): Pass the suggestions from WKFocusedFormControlViewController to
            WKTextInputViewController when the latter is presented.
        (-[WKContentView textInputController:didCommitText:]): Call the new delegate method textInputController:didCommitText:withSuggestion:.
        (-[WKContentView textInputController:didCommitText:withSuggestion:]): When a suggestions is selected, insert the
            suggestion which will notify the client.
        (-[WKContentView focusedFormControllerDidUpdateSuggestions:]): Called when the suggestion is updated after the input
            view controller is presented.

2018-02-27  Tim Horton  <timothy_horton@apple.com>

        Stop using deprecated CADisplay SPI
        https://bugs.webkit.org/show_bug.cgi?id=183150
        <rdar://problem/37918297>

        Reviewed by Simon Fraser.

        * Platform/spi/ios/FrontBoardServicesSPI.h: Added.
        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * WebKit.xcodeproj/project.pbxproj:
        Switch to the more modern way of getting the display name.

2018-02-27  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r229055.

        Breaks internal builds.

        Reverted changeset:

        "Stop using deprecated CADisplay SPI"
        https://bugs.webkit.org/show_bug.cgi?id=183150
        https://trac.webkit.org/changeset/229055

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

        [Extra zoom mode] Implement additional SPI for adjusting viewport shrink-to-fit behavior
        https://bugs.webkit.org/show_bug.cgi?id=183100
        <rdar://problem/37840987>

        Reviewed by Tim Horton.

        Add new SPI hooks to provide finer control over certain aspects of the shrink-to-fit viewport heuristic.
        Currently, in certain cases of iPad multitasking, Safari allows shrinking content to fit by default. This means
        that even when "width=device-width" is used, if the contents of the page are too wide to fit within the
        viewport's width, we'll adjust the initial scale such that the viewport can fit all of the content.

        However, in certain viewport dimensions, this heuristic is insufficient to ensure that pages are laid out and
        displayed properly within the viewport. Namely, one could imagine that an element with a hard-coded width that
        is larger than the real viewport width would cause all other elements with dimensions relative to the body to be
        excessively shrunk down once shrink-to-fit is applied, so the page would still look broken even if the contents
        of the page all fit within the viewport.

        To mitigate this, we decouple the notions of minimum layout size from the size of the actual viewport (which we
        simply refer to as "view size"). This allows us to introduce a mechanism where we lay out the page at a given
        minimum layout size that is larger than the size of the view; later, when we determine the initial scale, we
        then apply shrink-to-fit scaling using the view size rather than the minimum layout size. This grants us the
        ability to lay out content as if our view were large, but still ensure that the contents of the page fit within
        the actual view.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode const):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::forceHorizontalShrinkToFit const):
        (WebKit::operator==):

        Plumb the forceHorizontalShrinkToFit flag through VisibleContentRectUpdateInfo.

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

        Plumb viewSize through IPC to WebPage.

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

        Start off WKWebView flags at their initial values.

        (-[WKWebView _minimumAllowedLayoutWidth]):
        (-[WKWebView _setMinimumAllowedLayoutWidth:]):

        This provides the minimum width at which the page will lay out, such that if the view width dips below this
        value, we'll use this minimum allowed layout width instead. 0 by default.

        (-[WKWebView activeMinimumLayoutSizes:]):

        Refactor this from a static function to a helper method on WKWebView that computes both the minimum layout size
        (which takes minimum allowed layout width into account) as well as the real view size. Refactor all call sites
        to use this new method, and also propagate the view size down via IPC, alongside the minimum layout size.

        (-[WKWebView _dispatchSetMinimumLayoutSize:viewSize:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        (-[WKWebView _setForceHorizontalViewportShrinkToFit:]):
        (-[WKWebView _forceHorizontalViewportShrinkToFit]):

        Setting this flag to YES forces us to always shrink-to-fit in the horizontal axis. NO by default.

        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (activeMinimumLayoutSize): Deleted.

        More refactoring to replace activeMinimumLayoutSize() with -activeMinimumLayoutSizes:.

        (-[WKWebView _dispatchSetMinimumLayoutSize:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):

        Pass _forceHorizontalViewportShrinkToFit into the visible content rect update.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSize):

        Plumb viewSize alongside the existing minimumLayoutSize.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::updateVisibleContentRects):

        Set forceHorizontalShrinkToFit on the viewport configuration here.

2018-02-27  Tim Horton  <timothy_horton@apple.com>

        Stop using deprecated CADisplay SPI
        https://bugs.webkit.org/show_bug.cgi?id=183150
        <rdar://problem/37918297>

        Reviewed by Simon Fraser.

        * Platform/spi/ios/FrontBoardServicesSPI.h: Added.
        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * WebKit.xcodeproj/project.pbxproj:
        Switch to the more modern way of getting the display name.

2018-02-26  Youenn Fablet  <youenn@apple.com>

        Caches::m_storage should be set to null in case of error at initialization time
        https://bugs.webkit.org/show_bug.cgi?id=183068

        Reviewed by Chris Dumez.

        In case of error, we need to set m_storage back to nullptr so that
        next tries to initialize it will restart from scratch.
        If we do not set it to nullptr, we end up storing the initialize
        callback in a queue and the callback will never be called.

        This is difficult to test as we need the following conditions:
        - we need to have an error case, like a disk writing error
        - we need the web app to open a cache in two different pages/frames at about the same time.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::initialize):

2018-02-26  Commit Queue  <commit-queue@webkit.org>

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

        incorrectly assumes enumeration callback happens once
        (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Use BlockPtrs and lambdas instead of new/delete to pass
        parameters to blocks in WebViewImpl::performDragOperation"
        https://bugs.webkit.org/show_bug.cgi?id=180795
        https://trac.webkit.org/changeset/226330

2018-02-26  Ryosuke Niwa  <rniwa@webkit.org>

        Release assertion in WebPage::updatePreferences
        https://bugs.webkit.org/show_bug.cgi?id=183075

        Reviewed by Youenn Fablet and Chris Dumez.

        Replaced the release assertion added in r228589 with a more graceful disabling of the feature when the entitlement is missing.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::didReceiveMessage): Added an early exit with an entitlement check to disable the feature.
        (WebKit::StorageProcess::initializeWebsiteDataStore): Ditto.
        (WebKit::StorageProcess::createStorageToWebProcessConnection): Replaced the release assertion with a debug assertion.
        (WebKit::StorageProcess::swServerForSession): Removed the assertion. This code can be reached when the service worker is disabled.
        (WebKit::StorageProcess::registerSWServerConnection): Replaced the release assertion with a debug assertion.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Disable the feature instead of crashing when the entitlement is missing.

2018-02-26  Chris Dumez  <cdumez@apple.com>

        Regression(r223431): Crash under didReceiveChallenge in NetworkSessionCocoa
        https://bugs.webkit.org/show_bug.cgi?id=183134
        <rdar://problem/36339049>

        Reviewed by Alex Christensen.

        Like other delegates functions in this file, it is possible for didReceiveChallenge to get called
        after _session has been nulled out. Other delegate functions already had early returns when
        _session is null. However, such early return was missing in didReceiveChallenge.

        This patch ends the early return to didReceiveChallenge so that we do not end up calling
        _session->downloadID(taskIdentifier) on a null _session.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):

2018-02-26  Youenn Fablet  <youenn@apple.com>

        MessagePort is not always destroyed in the right thread
        https://bugs.webkit.org/show_bug.cgi?id=183053

        Reviewed by Chris Dumez.

        Update code to pass a lambda to MessagePort::existingMessagePortForIdentifier.

        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
        (WebKit::WebMessagePortChannelProvider::checkProcessLocalPortForActivity):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::messagesAvailableForPort):

2018-02-25  Alexey Proskuryakov  <ap@apple.com>

        Font smoothing doesn't get disabled if the preference is set before launching WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=183108

        Reviewed by Tim Horton.

        * WebProcess/WebProcess.cpp: (WebKit::WebProcess::initializeWebProcess):
        Fix the bug. While at it, also avoid the anti-pattern in setAlwaysUsesComplexTextCodePath.

2018-02-25  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK Debug build fix after r228942.

        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::iconDatabaseSyncThread):
        (WebKit::IconDatabase::syncThreadMainLoop):
        (WebKit::IconDatabase::readFromDatabase):
        (WebKit::IconDatabase::writeToDatabase):
        (WebKit::IconDatabase::cleanupSyncThread):

2018-02-25  Chris Dumez  <cdumez@apple.com>

        Service workers do not work well inside Web.app
        https://bugs.webkit.org/show_bug.cgi?id=183105
        <rdar://problem/37864140>

        Reviewed by Youenn Fablet.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::didReceiveMessage):
        We were failing to forward IPC messages to the ChildProcess class here. As a result,
        the ChildProcess::RegisterURLSchemeServiceWorkersCanHandle IPC was being ignored
        by the StorageProcess.

2018-02-24  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE breakage fix.

        * WebProcess/wpe/WebProcessMainWPE.cpp: Call g_set_prgname() in WebProcess 
        to prepare the GLib state for subsequent GStreamer initialization.

2018-02-23  John Wilander  <wilander@apple.com>

        Introduce ITP debug logging as an opt-in developer feature
        https://bugs.webkit.org/show_bug.cgi?id=183065
        <rdar://problem/37803761>

        Reviewed by Brent Fulgham.

        * Platform/Logging.h:
            Added a dedicated channel for Resource Load Statistics debug logging
            since this will be part of a developer-facing feature and should not
            be mixed with general Resource Load Statistics logging.
        * UIProcess/Cocoa/WebResourceLoadStatisticsStoreCocoa.mm:
        (WebKit::WebResourceLoadStatisticsStore::registerUserDefaultsIfNeeded):
            Now picks up the user default setting for
            ResourceLoadStatisticsDebugLoggingEnabled.
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::removeDataRecords):
            Now logs for which domains it purges website data if
            ResourceLoadStatisticsDebugLoggingEnabled is set.
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning):
            Now logs for which domains it partitions and blocks cookies
            in third-party contexts if ResourceLoadStatisticsDebugLoggingEnabled
            is set.
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-02-23  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Correct sandbox violation during media playback
        https://bugs.webkit.org/show_bug.cgi?id=183092
        <rdar://problem/37718495>

        Reviewed by Eric Carlson.

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

2018-02-23  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [MSVC] Unknown a type definition error in WebResourceLoadStatisticsStore on wincairo webkit
        https://bugs.webkit.org/show_bug.cgi?id=182873

        Reviewed by Yusuke Suzuki.

        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-02-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer][MiniBrowser] Honor GStreamer command line parameters in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=173655
        <rdar://problem/37706341>

        Reviewed by Philippe Normand.

        Actually pass the gst command line options to the WebProcess. The options in /proc/self/cmdline are separated by
        null characters, so we are effectively passing always the first option only, which is the program name. Then, in
        the web process we always ignore the first option and providing WebProcess unconditionally, so we were doing
        nothing.

        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Use WebCore::extractGStreamerOptionsFromCommandLine()
        * UIProcess/wpe/WebProcessPoolWPE.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Ditto.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Move the vector.

2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove currentTime() / currentTimeMS()
        https://bugs.webkit.org/show_bug.cgi?id=183052

        Reviewed by Mark Lam.

        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        * PluginProcess/WebProcessConnection.cpp:
        * Shared/WebProcessCreationParameters.h:
        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::WebMemorySampler::sampleWebKit const):
        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit const):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetPlugInAutoStartOriginsFilteringOutEntriesAddedAfterTime):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::setIconDataForIconURL):
        (WebKit::IconDatabase::synchronousLoadDecisionForIconURL):
        (WebKit::IconDatabase::performURLImport):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::expirationTimeFromNow):
        (WebKit::PlugInAutoStartProvider::addAutoStartOriginHash):
        (WebKit::PlugInAutoStartProvider::autoStartOriginsTableCopy const):
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTable):
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsFilteringOutEntriesAddedAfterTime):
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTableWithItemsPassingTest):
        (WebKit::PlugInAutoStartProvider::didReceiveUserInteraction):
        * UIProcess/Plugins/PlugInAutoStartProvider.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching):
        (WebKit::WebProcessPool::startMemorySampler):
        (WebKit::WebProcessPool::setPlugInAutoStartOriginsFilteringOutEntriesAddedAfterTime):
        * UIProcess/WebProcessPool.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::willPerformClientRedirectForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::willPerformClientRedirectForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillPerformClientRedirect):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::m_webSQLiteDatabaseTracker):
        (WebKit::WebProcess::isPlugInAutoStartOriginHash):
        (WebKit::WebProcess::plugInDidStartFromOrigin):
        (WebKit::WebProcess::didAddPlugInAutoStartOriginHash):
        (WebKit::WebProcess::resetPlugInAutoStartOriginDefaultHashes):
        (WebKit::WebProcess::resetPlugInAutoStartOriginHashes):
        (WebKit::WebProcess::plugInDidReceiveUserInteraction):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        * WebProcess/wpe/WebProcessMainWPE.cpp:

2018-02-22  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r228349): ImageBitmap builtin is now runtime guarded
        https://bugs.webkit.org/show_bug.cgi?id=183056
        <rdar://problem/37799067>

        Reviewed by Joseph Pecoraro.

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

2018-02-22  Youenn Fablet  <youenn@apple.com>

        Caches::initialize should call all pending initialization callbacks in case of error
        https://bugs.webkit.org/show_bug.cgi?id=183062

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::initialize):
        (WebKit::CacheStorage::Caches::initializeSize):

2018-02-22  Youenn Fablet  <youenn@apple.com>

        CacheStorage::Engine::Caches::writeRecord is not always calling the completion handler
        https://bugs.webkit.org/show_bug.cgi?id=183055

        Reviewed by Chris Dumez.

        Add a completion handler to Storage::store.
        Use it instead in Caches::writeRecord.
        This ensures that the Cache add/put promise will be called once all write operations have been done.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::writeRecord):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::WriteOperation::WriteOperation):
        (WebKit::NetworkCache::Storage::finishWriteOperation):
        (WebKit::NetworkCache::Storage::store):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::store):

2018-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Add an entitlement check for service worker on iOS
        https://bugs.webkit.org/show_bug.cgi?id=182865

        Reviewed by Dan Bernstein.

        Addressed Dan's comment by using xpc_connection_copy_entitlement_value instead of obtaining the audit token first.

        * Shared/mac/SandboxUtilities.h:
        * Shared/mac/SandboxUtilities.mm:
        (WebKit::connectedProcessHasEntitlement):
        * StorageProcess/ios/StorageProcessIOS.mm:
        (WebKit::StorageProcess::parentProcessHasServiceWorkerEntitlement const):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::parentProcessHasServiceWorkerEntitlement const):

2018-02-22  Youenn Fablet  <youenn@apple.com>

        Fetch event release assert should take into account the fetch mode
        https://bugs.webkit.org/show_bug.cgi?id=183047

        Reviewed by Chris Dumez.

        In case of navigation tasks, we should use the request URL and not the origin of the loading client.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::isValidFetch):
        (WebKit::WebSWContextManagerConnection::startFetch):

2018-02-22  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Fix compile errors in WebPageWin.cpp and WebProcessWin.cpp due to WebCore forwarding header paths
        https://bugs.webkit.org/show_bug.cgi?id=182969

        Reviewed by Konstantin Tokarev.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        * WebProcess/win/WebProcessWin.cpp:

2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove sleep(double) and sleepMS(double) interfaces
        https://bugs.webkit.org/show_bug.cgi?id=183038

        Reviewed by Mark Lam.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPluginAsynchronously):
        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::pollIntervalForUsedMemoryPercentage):
        (WebKit::MemoryPressureMonitor::MemoryPressureMonitor):
        * WebProcess/wpe/WebProcessMainWPE.cpp:

2018-02-22  Youenn Fablet  <youenn@apple.com>

        Add release logging for CacheStorage::Engine disk related functions
        https://bugs.webkit.org/show_bug.cgi?id=183042

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::writeFile):
        (WebKit::CacheStorage::Engine::readFile):

2018-02-22  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228902.

        This broke internal builds.

        Reverted changeset:

        "[Cocoa] Web Automation: provide a way to ask clients the type
        of a JavaScript dialog"
        https://bugs.webkit.org/show_bug.cgi?id=182660
        https://trac.webkit.org/changeset/228902

2018-02-22  Youenn Fablet  <youenn@apple.com>

        Add release asserts for service worker fetch and postMessage events
        https://bugs.webkit.org/show_bug.cgi?id=183025
        rdar://problem/37765052

        Reviewed by Daniel Bates.

        Add assertion to protect interception of a fetch load by a service worker with
        a different origin from the page.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::startFetch):

2018-02-22  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Fix some build errors in service workers code
        https://bugs.webkit.org/show_bug.cgi?id=182966

        Reviewed by Žan Doberšek.

        * CMakeLists.txt: add missing files.
        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp: add missing includes.
        * UIProcess/ServiceWorkerProcessProxy.cpp: use #include rather than #import in C++; add missing ifdef.
        * UIProcess/ServiceWorkerProcessProxy.h: add missing ifdef.
        * WebProcess/Storage/WebSWClientConnection.cpp: add missing includes.
        * WebProcess/Storage/WebSWContextManagerConnection.cpp: add missing includes.
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
          call the function that exists outside cocoa.

2018-02-21  Per Arne Vollan  <pvollan@apple.com>

        The WebContent process should not use NSScreen in the screenAvailableRect/screenRect implementations.
        https://bugs.webkit.org/show_bug.cgi?id=182855

        Reviewed by Brent Fulgham.

        On macOS, the functions screenAvailableRect and screenRect is implemented using NSScreen, which is communicating
        with the WindowServer. To avoid this WindowServer communication from the WebContent process when calling
        screenAvailableRect and screenRect, it is possible to let the UIProcess send a message to the WebContent
        process whenever there is a change in the display properties, and have the WebContent process cache these
        display properties. This message should also be sent to a newly started WebContent process.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::displayReconfigurationCallBack):
        (WebKit::registerDisplayConfigurationCallback):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::warmInitialProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setScreenProperties):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-02-21  Christopher Reid  <chris.reid@sony.com>

        [Curl] Curl Cookie Database File should be configurable using NetworkProcessCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=182751

        Reviewed by Youenn Fablet.

        Adding a cookiePersistentStorageFile parameter to Curl's NetworkProcessCreationParameters.
        This parameter is based on Soup's cookiePersistentStoragePath.
        This parameter is not used yet, it is added to prepare for WinCairo WebKit support.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/curl/WebCookieManagerCurl.cpp:

2018-02-21  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Automation: provide a way to ask clients the type of a JavaScript dialog
        https://bugs.webkit.org/show_bug.cgi?id=182660
        <rdar://problem/37408183>

        Reviewed by Tim Horton and Carlos Garcia Campos.

        Add another delegate method to ask what type of dialog is being shown.
        This is used to implement §18.4 Step 5, where sending text to a dialog
        without a prompt will return several different kinds of errors.

        No new tests, covered by web platform tests once Safari side has landed.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h: Update FIXME radar numbers.
        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::toImpl):
        (WebKit::AutomationSessionClient::typeOfCurrentJavaScriptDialogOnPage):
        If there is no current dialog to be checked, the client can return the 'None'
        type. This gets converted into a std::nullopt and causes a command error later.

2018-02-21  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Fix compile errors of WebProcess and NetworkProcess due to no implementation for windows
        https://bugs.webkit.org/show_bug.cgi?id=182870

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openFrontendConnection):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureNetworkProcessConnection):

2018-02-21  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use cmakeconfig.h rather than config.h and Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=182883

        Reviewed by Per Arne Vollan.

        * config.h:

2018-02-21  Brian Burg  <bburg@apple.com>

        Web Automation: failed provisional loads cause "Navigate To" command to hang
        https://bugs.webkit.org/show_bug.cgi?id=183007
        <rdar://problem/37751819>

        Reviewed by Andy Estes.

        This hang was revealed by WPT test current_url.py::get_current_url_file_protocol. Now the
        test simply fails because Safari chooses a policy of 'Ignore' for externally-opened files.
        I filed an upstream issue with the test here: https://github.com/w3c/webdriver/issues/1232

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        Notify the session that the load failed in the frame, just like we do
        for non-provisional failed loads and successful loads.

2018-02-20  Nan Wang  <n_wang@apple.com>

        AX: Keyboard focus not following VoiceOver cursor into web content or within web content.
        https://bugs.webkit.org/show_bug.cgi?id=182752
        <rdar://problem/37518233>

        Reviewed by Ryosuke Niwa.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::assistiveTechnologyMakeFirstResponder):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::assistiveTechnologyMakeFirstResponder):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::assistiveTechnologyMakeFirstResponder):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::assistiveTechnologyMakeFirstResponder):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::assistiveTechnologyMakeFirstResponder):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2018-02-14  Brian Burg  <bburg@apple.com>

        Web Automation: combine session commands to resize and move top-level browsing contexts
        https://bugs.webkit.org/show_bug.cgi?id=182749
        <rdar://problem/37515170>

        Reviewed by Andy Estes.

        Since moving and resizing the window are both accomplished by setting the window frame,
        and the W3C WebDriver specification has a Get/Set Window Rect command, it's time to
        deduplicate these two methods which basically do the same thing.

        Adopt modern JSON::Value getters that return std::optional<float>. I have been trying
        to move the protocol over to this style wholesale, but it is probably easier to do
        this conversion in smaller pieces. And so, I have started to do so.

        This change is covered by existing WebDriver tests.

        * UIProcess/Automation/Automation.json: Add new command.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext): Added.
        (WebKit::WebAutomationSession::resizeWindowOfBrowsingContext): Deleted.
        (WebKit::WebAutomationSession::moveWindowOfBrowsingContext): Deleted.
        * UIProcess/Automation/WebAutomationSession.h:

2018-02-20  Brian Burg  <bburg@apple.com>

        ASSERT under WebAutomationSession::setProcessPool() when running W3C test suite a second time
        https://bugs.webkit.org/show_bug.cgi?id=182991
        <rdar://problem/37620578>

        Reviewed by Timothy Hatcher.

        Sometimes when running more than one session end-to-end with the same browser instance,
        UIProcess would crash under addMessageReceiver because another WebAutomationSession was still
        registered. This is hard to reproduce, but upon code inspection, the receiver management code
        is somewhat problematic because it only runs when the WebAutomationSession destructor runs.
        In some cases the client could retain two sessions and cause the first one to never remove itself
        as the message receiver.

        Instead of unregistering the session as a message receiver underneath the session's destructor,
        do this whenever a new session supplants an old session since there is only one active session at a time.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::~WebAutomationSession):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setAutomationSession):

2018-02-20  Tim Horton  <timothy_horton@apple.com>

        Introduce HAVE(IOSURFACE_ACCELERATOR)
        https://bugs.webkit.org/show_bug.cgi?id=182955
        <rdar://problem/37699510>

        Reviewed by Sam Weinig.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        * Shared/cg/ShareableBitmapCG.cpp:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:

2018-02-20  Chris Dumez  <cdumez@apple.com>

        Provisional load may get committed before receiving the decidePolicyForNavigationResponse response
        https://bugs.webkit.org/show_bug.cgi?id=182720
        <rdar://problem/37515204>

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::didReceiveResponse):

2018-02-20  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228829.

        This caused a consistent failure in the API test
        WebKit.InteractionDeadlockAfterCrash on iOS Simulator

        Reverted changeset:

        "Switch to UIWKTextInteractionAssistant for non-editable text"
        https://bugs.webkit.org/show_bug.cgi?id=182834
        https://trac.webkit.org/changeset/228829

2018-02-20  Megan Gardner  <megan_gardner@apple.com>

        Switch to UIWKTextInteractionAssistant for non-editable text
        https://bugs.webkit.org/show_bug.cgi?id=182834
        
        Reviewed by Wenson Hsieh and Tim Horton.
        
        Switching to only using the UIWKTextInteractionAssistant. Only character granularity is now supported. 
        Also keep the from regressing gating the keyboard bring up on user interaction. The presents of a  
        textInteractionAssistant can no longer be used as proxy for the presence of the keyboard.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView useSelectionAssistantWithGranularity:]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

2018-02-20  John Wilander  <wilander@apple.com>

        Make WebResourceLoadStatisticsStore::processStatisticsAndDataRecords() call WebProcessProxy::notifyPageStatisticsAndDataRecordsProcessed() in a proper callback
        https://bugs.webkit.org/show_bug.cgi?id=182719
        <rdar://problem/37517370>

        Reviewed by Brent Fulgham.

        This will allow the page notification, statistics pruning, and persistence write
        to be done at the right time and hopefully stabilize the layout tests including:
        http/tests/resourceLoadStatistics/partitioned-and-unpartitioned-cookie-deletion.html

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::removeDataRecords):
            Now takes a callback parameter.
        (WebKit::WebResourceLoadStatisticsStore::processStatisticsAndDataRecords):
        * UIProcess/WebResourceLoadStatisticsStore.h:
            Now calls WebProcessProxy::notifyPageStatisticsAndDataRecordsProcessed()
            in a callback provided to WebResourceLoadStatisticsStore::removeDataRecords().

2018-02-20  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Drop target GraphicsContext usage in Cairo operations
        https://bugs.webkit.org/show_bug.cgi?id=182964

        Reviewed by Carlos Garcia Campos.

        The GraphicsContext parameters in various Cairo operations are not used
        anymore, so they can be removed. Callsites are updated to reflect this.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint):
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap):

2018-02-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MiniBrowser] Honor GStreamer command line parameters in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=173655

        Reviewed by Xabier Rodriguez-Calvar.

        The FIXME in GStreamerUtilities.cpp asks to pass the command line
        parameters to the GStreamer initialization function.

        Based on initial patch by: Vanessa Chipirrás Navalón  <vchipirras@igalia.com>

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h: Define the vector which contains the GStreamer options.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Read from cmdline file
        the GStreamer options written by console.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Call initializeGStreamer() method passing
        the vector which contains the options.

2018-02-20  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [Win] Fix MSVC's treating __attribute__((warn_unused_result))
        https://bugs.webkit.org/show_bug.cgi?id=182479

        Reviewed by Darin Adler.

        Since MSVC doesn't understand "__attribute__", "_Check_return_" is used instead.
        If clang and VisualStudio 2017 are used, a macro with "__attriute__" will be chosen.

        * UIProcess/API/cpp/WKRetainPtr.h:

2018-02-19  Brady Eidson  <beidson@apple.com>

        Add WebProcessPool option for process swapping on navigation.
        https://bugs.webkit.org/show_bug.cgi?id=182945

        Reviewed by Alex Christensen.

        Just the most basic groundwork for testing a new WK2 feature.

        * UIProcess/API/APIProcessPoolConfiguration.h:

        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationProcessSwapsOnNavigation):
        (WKContextConfigurationSetProcessSwapsOnNavigation):
        * UIProcess/API/C/WKContextConfigurationRef.h:

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setProcessSwapsOnNavigation:]):
        (-[_WKProcessPoolConfiguration processSwapsOnNavigation]):

2018-02-19  Daniel Bates  <dabates@apple.com>

        Null pointer dereference in WebPageProxy::urlSchemeHandlerForScheme()
        https://bugs.webkit.org/show_bug.cgi?id=182905
        <rdar://problem/37676775>

        Reviewed by Alex Christensen.

        Return nullptr when querying for the scheme handler of the null string.

        Before a navigation is performed WebKit checks if the destination URL is associated with an app
        unless the embedding client overrides the WKNavigationDelegate delegate callback -webView:decidePolicyForNavigationAction:decisionHandler.
        If the URL is not associated with an app then WebKit may fall back to checking if the embedding
        client registered a scheme handler for it. Currently we assume that the scheme is a non-null
        string when checking the scheme handler registry. However the scheme can be a null string if
        it is part of a malformed URL. And this leads to bad news bears when we try to use it to look
        for a scheme handler. Instead check that the scheme is a non-null string before checking to see
        if it is in the scheme handler registry.

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

2018-02-19  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Don't allow PiP media playback
        https://bugs.webkit.org/show_bug.cgi?id=182930
        <rdar://problem/37676259>

        Reviewed by Andy Estes.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Don't enable PiP mode. Require user interaction for
        all media types.

2018-02-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r228696.

        The API test added with this change is timing out on macOS.

        Reverted changeset:

        "Null pointer dereference in
        WebPageProxy::urlSchemeHandlerForScheme()"
        https://bugs.webkit.org/show_bug.cgi?id=182905
        https://trac.webkit.org/changeset/228696

2018-02-19  Daniel Bates  <dabates@apple.com>

        Null pointer dereference in WebPageProxy::urlSchemeHandlerForScheme()
        https://bugs.webkit.org/show_bug.cgi?id=182905

        Reviewed by Alex Christensen.

        Return nullptr when querying for the scheme handler of the null string.

        Before a navigation is performed WebKit checks if the destination URL is associated with an app
        unless the embedding client overrides the WKNavigationDelegate delegate callback -webView:decidePolicyForNavigationAction:decisionHandler.
        If the URL is not associated with an app then WebKit may fall back to checking if the embedding
        client registered a scheme handler for it. Currently we assume that the scheme is a non-null
        string when checking the scheme handler registry. However the scheme can be a null string if
        it is part of a malformed URL. And this leads to bad news bears when we try to use it to look
        for a scheme handler. Instead check that the scheme is a non-null string before checking to see
        if it is in the scheme handler registry.

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

2018-02-19  Ms2ger  <Ms2ger@igalia.com>

        Explicitly qualify some method calls on this in lamdas in Service Worker code.
        https://bugs.webkit.org/show_bug.cgi?id=182875

        Reviewed by Chris Dumez.

        This is necessary for the code to build with GCC 5. Other code already
        appears to have been adapted similarly.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):

2018-02-18  Reza Abbasian  <rabbasian@apple.com>

        Set the appropriate AutoFill context for suggested passwords.
        https://bugs.webkit.org/show_bug.cgi?id=182718
        <rdar://problem/36326863>

        Reviewed by Wenson Hsieh and Tim Horton.

        Before starting the input session, call the new delegate to query if AutoFill password suggestion assistance
        is required for the focused element.

        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        Introduce a new delegate to be called  before starting an input session to query if AutoFill password suggestion
        assistance is required for the focused element.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession initWithContentView:focusedElementInfo:requiresStrongPasswordAssistance:]):
        (-[WKFormInputSession requiresStrongPasswordAssistance]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        Call the delegate to find out if AutoFill suggested password assistance is required.
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView _autofillContext]): If the first responder is a password element and requires
        assistance for AutoFill suggested password, set the appropriate AutoFill context.
        (-[WKFormInputSession initWithContentView:focusedElementInfo:]): Deleted.

2018-02-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Form control values are stale after dismissing and representing input view controllers
        https://bugs.webkit.org/show_bug.cgi?id=182877
        <rdar://problem/37604395>

        Reviewed by Tim Horton.

        Currently, when presenting an input view controller for a focused element, we populate the initial form control
        value using the WKContentView's assisted node information when it was last focused. However, if the user edits
        the value of a form control, dismisses to the form control view controller (while the element is still focused)
        and then begins editing the field again, the initial text will be the previous value of the input, since the
        AssistedNodeInformation isn't up to date.

        To fix this, we introduce a mechanism to update WKContentView's AssistedNodeInformation for the current assisted
        node. This overwrites _assistedNodeInformation with new information computed from the web process, as long as
        the assisted node before and after the request is made in the UI process has not changed. We accomplish this by
        adding an identifier to AssistedNodeInformation, which is monotonically incremented when an element is focused
        in the web process. The UI process may then use this identifier to determine whether AssistedNodeInformations
        are describing the same focused element.

        One interesting consideration here is that a normal AssistedNodeInformation update (propagated when focusing an
        element) may be deferred in the UI process until the next layer tree commit. In the absence of the assisted node
        identifier check, one could imagine a scenario in which the assisted node information in the UI process gets
        "updated" from a new value to an old value:

        1. The web process focuses an element and sends AssistedNodeInformation `A`.
        2. WKContentView calls -updateCurrentAssistedNodeInformation.
        3. The web process sends AssistedNodeInformation `B`.
        4. `A` is received in the UI process, but deferred.
        5. The UI process receives `B` and sets _assistedNodeInformation to `B`.
        6. The UI process calls -_startAssistingNode: and sets _assistedNodeInformation to `A`.

        This would mean that the _assistedNodeInformation is set to an earlier value, `A`, after being set to a later
        value, `B`. However, because the AssistedNodeInformation identifier in step (2) refers to the assisted node
        prior to step (1), the assisted node identifier in (5) would not match this identifier, and we would simply bail
        instead of overwriting assisted node information.

        We use this AssistedNodeInformation update mechanism after inserting text via input view controllers, and also
        after reentering edit mode from the focused form control view controller. This fixes two issues where changing
        the size of the focused element after editing it results in the focused form overlay highlighting a stale frame,
        and also when setting the initial text when reentering edit mode for a form control that is already focused.

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

        Add a new monotonically increasing identifier (per WebPage) which associates a AssistedNodeInformation with a
        focused element. In the event that the web process crashes and relaunches (thus resetting this identifier),
        AssistedNodeInformation state in the UI process is now also reset (see -cleanupInteraction), so we won't end up
        confusing AssistedNodeInformations computed by different WebPages between a web process crash.

        * UIProcess/WebPageProxy.h:

        A bit of related refactoring here to remove an unnecessary bool flag that indicates whether we have a deferred
        assisted node information. Instead, just use the presence of m_deferredNodeAssistanceArguments.

        * UIProcess/WebPageProxy.messages.in:

        Add a AssistedNodeInformationCallback IPC message.

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

        Clear out the previous AssistedNodeInformation. See above for details.

        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView updateCurrentAssistedNodeInformation:]):

        Tries to update AssistedNodeInformation for the current assisted node, invoking the completion callback when
        finished. This may result in the assisted node information not being updated due to the current assisted node
        changing in the time between the start of the request and the information being received in the UI process.

        (-[WKContentView presentViewControllerForCurrentAssistedNode]):

        Refactored from -presentViewControllerForAssistedNode:, such that it no longer takes an AssistedNodeInformation
        as an argument, but rather just uses WKContentView's current _assistedNodeInformation. This was just being
        called with _assistedNodeInformation from all call sites anyways.

        (-[WKContentView textInputController:didCommitText:]):

        Request an AssistedNodeInformation update after setting the value of a form control; if the assisted node hasn't
        changed, update the focused form control overlay. This is needed to handle cases where the focused element's
        frame may have changed after inserting text (e.g. due to line wrapping), and the focused form control overlay
        needs to be updated to reflect this change.

        (-[WKContentView focusedFormControlControllerDidBeginEditing:]):

        Request an AssistedNodeInformation update before reentering edit mode; if the assisted node hasn't changed since
        the start of the request, present the appropriate input view controller.

        (-[WKContentView presentViewControllerForAssistedNode:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::assistedNodeInformationCallback):
        (WebKit::WebPageProxy::requestAssistedNodeInformation):
        (WebKit::WebPageProxy::didCommitLayerTree):
        (WebKit::WebPageProxy::startAssistingNode):
        (WebKit::WebPageProxy::stopAssistingNode):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::elementDidFocus):

        Increment the assisted node identifier.

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

        Compute and return an AssistedNodeInformation.

        (WebKit::WebPage::getAssistedNodeInformation):

2018-02-16  Dean Jackson  <dino@apple.com>

        Use OPENGL macros to be more clear about which OpenGL/ES WebGL uses on Cocoa
        https://bugs.webkit.org/show_bug.cgi?id=182894

        Reviewed by Tim Horton.

        Rename OPENGL_ES_2 to OPENGL_ES.

        * CMakeLists.txt:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::paint):
        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::initializeEGL):

2018-02-16  Ryosuke Niwa  <rniwa@webkit.org>

        Add an entitlement check for service worker on iOS
        https://bugs.webkit.org/show_bug.cgi?id=182865
        <rdar://problem/37505903>

        Reviewed by Brady Eidson.

        Added an entitlement check to enable service workers on iOS.

        * Shared/mac/SandboxUtilities.h:
        * Shared/mac/SandboxUtilities.mm:
        (WebKit::connectedProcessHasEntitlement): Added.
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::createStorageToWebProcessConnection): Enforce the entitlement check by crashing
        when this code is executed without the parent process having the service worker entitlement. This should
        never happen unless someone is trying to bypass the entitlement check in UI Process since we ordinarily
        disable service worker gracefully in WKWebView _initializeWithConfiguration.
        (WebKit::StorageProcess::swServerForSession): Ditto.
        (WebKit::StorageProcess::registerSWServerConnection): Ditto.
        * StorageProcess/StorageProcess.h:
        (WebKit::StorageProcess::parentProcessHasServiceWorkerEntitlement const): Added.
        * StorageProcess/ios/StorageProcessIOS.mm:
        (WebKit::StorageProcess::parentProcessHasServiceWorkerEntitlement const): Added.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Disable the service workers when the entitlement is
        missing from the current process. The entitlement is enforced by WebContent and Storage process.
        This check avoids crashing WebContent process and gracefully disabling the feature.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Enforce the entitlement check.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::parentProcessHasServiceWorkerEntitlement const): Added.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::parentProcessHasServiceWorkerEntitlement const): Added.

2018-02-16  Youenn Fablet  <youenn@apple.com>

        Allow specifying which plug-ins are supported
        https://bugs.webkit.org/show_bug.cgi?id=182748

        Reviewed by Chris Dumez.

        Add a C and ObjC API to set which plug-ins are specified.
        Plug-ins may be allowed by origin of the main page or for all origins.

        If the API to set a supported plug-in is called, WebKit enters a mode
        where it will block any plug-in that is not on the list.

        The list of supported plug-ins is stored in UIProcess and sent to WebProcess.
        This allows to compute the list of visible plug-ins according supported plugins.

        PluginInfoStore is storing the list of supported plugins and can
        answer whether a plug-in creation request is to be made unsupported or not.
        It also creates the structure sent to WebProcess for computing plugin visibility.

        Updated ArgumentCoders to accept modern HashSet decoders.

        * Platform/IPC/ArgumentCoders.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextAddSupportedPlugin):
        (WKContextClearSupportedPlugins):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _addSupportedPlugin:named:withMimeTypes:withExtensions:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::isSupportedPlugin):
        (WebKit::PluginInfoStore::SupportedPlugins::isSupported):
        (WebKit::PluginInfoStore::SupportedPlugin::isSupported):
        (WebKit::PluginInfoStore::supportedPluginNames):
        (WebKit::PluginInfoStore::addSupportedPlugin):
        * UIProcess/Plugins/PluginInfoStore.h:
        (WebKit::PluginInfoStore::clearSupportedPlugins):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::addSupportedPlugin):
        (WebKit::WebProcessPool::clearSupportedPlugins):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::getPluginInfo):
        (WebKit::WebPluginInfoProvider::getWebVisiblePluginInfo):
        (WebKit::WebPluginInfoProvider::populatePluginCache):
        * WebProcess/Plugins/WebPluginInfoProvider.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldUnavailablePluginMessageBeButton const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::canPluginHandleResponse):

2018-02-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()
        https://bugs.webkit.org/show_bug.cgi?id=182771
        <rdar://problem/36459988>

        Reviewed by Brent Fulgham.

        This patch utilizes LocalAuthentication Framework to determine if biometrics
        are enrolled on a device, which is the user verifying platform authenticator.
        To do so, it links the framework to WebKit.

        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.cpp:
        (WebKit::WebCredentialsMessengerProxy::isUserVerifyingPlatformAuthenticatorAvailable):
        (WebKit::WebCredentialsMessengerProxy::isUserVerifyingPlatformAuthenticatorAvailableReply):
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.h:
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.messages.in:
        * UIProcess/CredentialManagement/cocoa/WebCredentialsMessengerProxyCocoa.mm:
        (WebKit::WebCredentialsMessengerProxy::platformIsUserVerifyingPlatformAuthenticatorAvailable):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/CredentialManagement/WebCredentialsMessenger.cpp:
        (WebKit::WebCredentialsMessenger::isUserVerifyingPlatformAuthenticatorAvailable):
        (WebKit::WebCredentialsMessenger::isUserVerifyingPlatformAuthenticatorAvailableReply):
        * WebProcess/CredentialManagement/WebCredentialsMessenger.h:
        * WebProcess/CredentialManagement/WebCredentialsMessenger.messages.in:

2018-02-16  Per Arne Vollan  <pvollan@apple.com>

        Implement stopping of run loop in the WebContent process when using NSRunLoop.
        https://bugs.webkit.org/show_bug.cgi?id=182499
        <rdar://problem/37247424>

        Reviewed by Brent Fulgham.

        Add the method ChildProcess::stopNSRunLoop to end the WebContent process by executing a block
        with 'exit(0)' on the main run loop. 

        * Shared/ChildProcess.h:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::stopNSRunLoop):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::stopRunLoop):

2018-02-16  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCario] Add NetworkSessionCurl
        https://bugs.webkit.org/show_bug.cgi?id=182680

        Reviewed by Konstantin Tokarev.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::create):
        * PlatformWin.cmake:

2018-02-16  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: !m_processes[i] || *m_processes[i] == process in MessagePortChannel::entanglePortWithProcess()
        https://bugs.webkit.org/show_bug.cgi?id=182054
        <rdar://problem/36871207>

        Reviewed by Brady Eidson.

        Pipe postMessage messages to and from service workers via the UIProcess instead of going
        directly to the StorageProcess. This is temporarily needed to avoid races due to the
        MessagePort registry currently living in the UIProcess and postMessage messages potentially
        sending MessagePort objects.

        This change is covered by tests on the bots that currently flakily crash in debug.

        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::postMessageToServiceWorker):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::postMessageToServiceWorkerClient):
        (WebKit::WebProcessPool::postMessageToServiceWorker):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::postMessageToServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::postMessageToServiceWorkerClient):

2018-02-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add basic support for <input type='date'> using date picker UI
        https://bugs.webkit.org/show_bug.cgi?id=182847
        <rdar://problem/35143111>

        Reviewed by Tim Horton.

        Add support for presenting date pickers when focusing a date input.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView dismissAllInputViewControllers]):

        Pull logic to dismiss input view controllers into a single helper.

        (-[WKContentView presentDatePickerViewController:]):
        (-[WKContentView dismissDatePickerViewController:]):
        (-[WKContentView presentViewControllerForAssistedNode:]):
        (-[WKContentView textInputController:didCommitText:]):
        (-[WKContentView _wheelChangedWithEvent:]):

        Delegate wheel events to the date picker.

        * UIProcess/ios/forms/WKDatePickerViewController.h: Added.
        * UIProcess/ios/forms/WKDatePickerViewController.mm: Added.

        Add harness files for the WKDatePickerViewController implementation in WebKitAdditions.

        * WebKit.xcodeproj/project.pbxproj:

2018-02-15  Youenn Fablet  <youenn@apple.com>

        Resources loaded from service workers are not downloadable
        https://bugs.webkit.org/show_bug.cgi?id=182848

        Reviewed by Chris Dumez.

        Downloads are not supporting resources loaded through service worker.
        As a temporary solution, we will let network process handle it.
        Note that this would not work if the URL can only be loaded through service worker.
        Note also that for navigation loads, if the content type is the default one (application/octet-stream) we are overriding it to
        text/html as we do not support mime sniffing yet from service worker responses.
        This might interfere with automatic downloads from navigation.

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

2018-02-15  Megan Gardner  <megan_gardner@apple.com>

        Support scrolling for non-editable web-selection and start autoscroll when near screen edges
        https://bugs.webkit.org/show_bug.cgi?id=182815

        Add support for autoscrolling during a selection. This also takes into account the edges of the screen
        and starts autoscrolling when you get close, while still allowing autoscrolling when you are past the bounds
        of the WebView.

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView startAutoscroll:]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView useSelectionAssistantWithGranularity:]):
        (-[WKContentView selectedTextRange]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAutoscrollAtPosition):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::startAutoscrollAtPosition):
        (WebKit::WebPage::cancelAutoscroll):

2018-02-15  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make sure WebResourceLoadStatisticsStore::mergeWithDataFromDecoder() can ingest older plist versions and not reset the database
        https://bugs.webkit.org/show_bug.cgi?id=182812
        <rdar://problem/37511406>

        Reviewed by Brent Fulgham.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::mergeWithDataFromDecoder):
            Now does the following:
            - Logs when there is a model version mismatch.
            - Does not ingest statistics if the version on disk is newer than the supported one.
            - Does ingest statistics if the version on disk is older than the supported one.
            - Passes on the version found on disk to WebCore::ResourceLoadStatistics::decode().

2018-02-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Revisit the whole async model of task dispatching, timeout and aborting
        https://bugs.webkit.org/show_bug.cgi?id=181946
        <rdar://problem/37258262>

        Reviewed by Chris Dumez.

        Dummy WebCredentialsMessenger and WebCredentialsMessengerProxy are crafted to establish
        a message exchange channel between UIProcess and WebProcess.

        * DerivedSources.make:
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.cpp: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        (WebKit::WebCredentialsMessengerProxy::WebCredentialsMessengerProxy):
        (WebKit::WebCredentialsMessengerProxy::~WebCredentialsMessengerProxy):
        (WebKit::WebCredentialsMessengerProxy::makeCredential):
        (WebKit::WebCredentialsMessengerProxy::getAssertion):
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.h: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_configurationPreferenceValues):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/CredentialManagement/WebCredentialsMessenger.cpp: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        (WebKit::WebCredentialsMessenger::WebCredentialsMessenger):
        (WebKit::WebCredentialsMessenger::~WebCredentialsMessenger):
        (WebKit::WebCredentialsMessenger::makeCredential):
        (WebKit::WebCredentialsMessenger::getAssertion):
        (WebKit::WebCredentialsMessenger::makeCredentialReply):
        (WebKit::WebCredentialsMessenger::getAssertionReply):
        * WebProcess/CredentialManagement/WebCredentialsMessenger.h: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        * WebProcess/CredentialManagement/WebCredentialsMessenger.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        (WebKit::m_cpuLimit): Deleted.
        * WebProcess/WebPage/WebPage.h:

2018-02-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Unify build of platform-specific files in WebKit layer
        https://bugs.webkit.org/show_bug.cgi?id=182696

        Reviewed by Žan Doberšek.

        This is easy, because all needed changes were made in the previously-landed patch.

        * CMakeLists.txt:
        * PlatformWPE.cmake:

2018-02-15  Don Olmstead  <don.olmstead@sony.com>

        WebCore headers should not be included relatively within dependent projects
        https://bugs.webkit.org/show_bug.cgi?id=182805

        Reviewed by Chris Dumez.

        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        * NetworkProcess/webrtc/NetworkRTCMonitor.h:
        * Shared/gtk/WebEventFactory.cpp:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:

2018-02-15  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228495.

        This caused mulitple perf tests to fail consistently.

        Reverted changeset:

        "Resource Load Statistics: Make sure
        WebResourceLoadStatisticsStore::mergeWithDataFromDecoder() can
        ingest older plist versions and not reset the database"
        https://bugs.webkit.org/show_bug.cgi?id=182812
        https://trac.webkit.org/changeset/228495

2018-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        Default definition of InjectedBundle::PlatformBundle should not be Windows-specific.
        https://bugs.webkit.org/show_bug.cgi?id=182810

        Reviewed by Michael Catanzaro.

        This branch was added in r228455, but should not be limited to OS(WINDOWS).

        * WebProcess/InjectedBundle/InjectedBundle.h:

2018-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        Default implementations of nativeEvent() should be platform-agnostic.
        https://bugs.webkit.org/show_bug.cgi?id=182806

        Reviewed by Darin Adler.

        * Shared/NativeWebKeyboardEvent.h:
        * Shared/NativeWebMouseEvent.h:
        * Shared/NativeWebWheelEvent.h:

2018-02-14  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make sure WebResourceLoadStatisticsStore::mergeWithDataFromDecoder() can ingest older plist versions and not reset the database
        https://bugs.webkit.org/show_bug.cgi?id=182812
        <rdar://problem/37511406>

        Reviewed by Brent Fulgham.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::mergeWithDataFromDecoder):
            Now does the following:
            - Logs when there is a model version mismatch.
            - Does not ingest statistics if the version on disk is newer than the supported one.
            - Does ingest statistics if the version on disk is older than the supported one.
            - Passes on the version found on disk to WebCore::ResourceLoadStatistics::decode().

2018-02-14  Daniel Bates  <dabates@apple.com>

        Disallow cross-origin subresources from asking for credentials
        https://bugs.webkit.org/show_bug.cgi?id=182579
        <rdar://problem/36162271>

        Reviewed by Andy Estes.

        Add a private preference to toggle allowing non-mixed content cross-origin subresources to load.
        WebKitTestRunner toggles this preference when it sees the test option allowCrossOriginSubresourcesToAskForCredential.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAllowCrossOriginSubresourcesToAskForCredentials):
        (WKPreferencesGetAllowCrossOriginSubresourcesToAskForCredentials):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2018-02-14  John Wilander  <wilander@apple.com>

        Make maximumParallelReadCount static to fix lambda capture error in WebKit::NetworkCache::Storage::traverse()
        https://bugs.webkit.org/show_bug.cgi?id=182797
        <rdar://problem/37540594>

        Reviewed by Tim Horton.

        This capture was added in r228455 and causes a build failure when
        run with -Wunused-lambda-capture. Xcode also warns about it.

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

2018-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        EventDispatcher::wheelEvent uses a wrong enum values in switch
        https://bugs.webkit.org/show_bug.cgi?id=182796

        Reviewed by Chris Dumez.

        EventDispatcher::wheelEvent is using PlatformWheelEventPhaseBegan and PlatformWheelEventPhaseEnded
        but the enum type of wheelEvent.phase() is WebWheelEvent::Phase.

        The enum values are indentical for both so there is no behavioral change.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):

2018-02-14  Maureen Daum  <mdaum@apple.com>

        Add C SPI for support of Website Data Store in Website Policies
        https://bugs.webkit.org/show_bug.cgi?id=182698
        <rdar://problem/37412008>

        Reviewed by Andy Estes.

        Expand the API added for _WKWebsitePolicies.websiteDataStore in r225989 and r226325
        to be available in the C API. In the ObjC API, we handle setting the website data
        store in NavigationState::NavigationClient::decidePolicyForNavigationAction. There
        we throw an exception if setting the website data store isn't supported, and then
        change the website data store. The equivalent place to do this work in the C API is
        in WKFramePolicyListenerUseWithPolicies. However, instead of throwing exceptions,
        release asserts are used.

        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerUseWithPolicies):
        If the website policies data contains a website data store, do the same checks that
        are done in NavigationState::NavigationClient::decidePolicyForNavigationAction. Namely,
        that it is a valid website data store and it is a policy decision for a main frame navigation.
        If these checks are met, change the website data store.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageUpdateWebsitePolicies):
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        (WKWebsitePoliciesGetDataStore):
        (WKWebsitePoliciesSetDataStore):
        * UIProcess/API/C/WKWebsitePolicies.h:
        * UIProcess/WebFrameListenerProxy.cpp:
        (WebKit::WebFrameListenerProxy::changeWebsiteDataStore):
        (WebKit::WebFrameListenerProxy::isMainFrame):
        Expose whether the frame proxy is for a main frame, which is required to verify that
        website policies only specify a website data store for main frame policy decisions.
        * UIProcess/WebFrameListenerProxy.h:
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::changeWebsiteDataStore):
        * UIProcess/WebFrameProxy.h:

2018-02-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r228444.

        Introduced API and Layout test failures.

        Reverted changeset:

        "[WebAuthN] Revisit the whole async model of task dispatching,
        timeout and aborting"
        https://bugs.webkit.org/show_bug.cgi?id=181946
        https://trac.webkit.org/changeset/228444

2018-02-13  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Fix build errors which come from including headers and not suitable implementation for windows
        https://bugs.webkit.org/show_bug.cgi?id=182679

        Reviewed by Michael Catanzaro.

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::add):
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::Data::mapToFile const):
        (WebKit::NetworkCache::mapFile):
        (WebKit::NetworkCache::adoptAndMapFile):
        (WebKit::NetworkCache::readOrMakeSalt):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::directoryEntryType):
        (WebKit::NetworkCache::traverseDirectory):
        (WebKit::NetworkCache::fileTimes):
        (WebKit::NetworkCache::updateFileModificationTimeIfNeeded):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::traverse):
        * NetworkProcess/win/SystemProxyWin.h:
        * Platform/IPC/Attachment.h:
        * Platform/Module.h:
        * Platform/SharedMemory.h:
        * PluginProcess/WebProcessConnection.cpp:
        * Shared/API/c/WKBase.h:
        * Shared/ChildProcess.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/ProcessAssertion.h:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebProcess.cpp:

2018-02-13  Commit Queue  <commit-queue@webkit.org>

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

        Regressed CMake build stability (Requested by dolmstead on
        #webkit).

        Reverted changeset:

        "[CMake] Make WebCore headers copies"
        https://bugs.webkit.org/show_bug.cgi?id=182512
        https://trac.webkit.org/changeset/228431

2018-02-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Revisit the whole async model of task dispatching, timeout and aborting
        https://bugs.webkit.org/show_bug.cgi?id=181946
        <rdar://problem/37258262>

        Reviewed by Chris Dumez.

        Dummy WebCredentialsMessenger and WebCredentialsMessengerProxy are crafted to establish
        a message exchange channel between UIProcess and WebProcess.

        * DerivedSources.make:
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.cpp: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        (WebKit::WebCredentialsMessengerProxy::WebCredentialsMessengerProxy):
        (WebKit::WebCredentialsMessengerProxy::~WebCredentialsMessengerProxy):
        (WebKit::WebCredentialsMessengerProxy::makeCredential):
        (WebKit::WebCredentialsMessengerProxy::getAssertion):
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.h: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        * UIProcess/CredentialManagement/WebCredentialsMessengerProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_configurationPreferenceValues):
        (WebKit::WebPageProxy::reattachToWebProcess):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/CredentialManagement/WebCredentialsMessenger.cpp: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        (WebKit::WebCredentialsMessenger::WebCredentialsMessenger):
        (WebKit::WebCredentialsMessenger::~WebCredentialsMessenger):
        (WebKit::WebCredentialsMessenger::makeCredential):
        (WebKit::WebCredentialsMessenger::getAssertion):
        (WebKit::WebCredentialsMessenger::makeCredentialReply):
        (WebKit::WebCredentialsMessenger::getAssertionReply):
        * WebProcess/CredentialManagement/WebCredentialsMessenger.h: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        * WebProcess/CredentialManagement/WebCredentialsMessenger.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_credentialsMessenger):
        (WebKit::m_cpuLimit): Deleted.
        * WebProcess/WebPage/WebPage.h:

2018-02-13  Youenn Fablet  <youenn@apple.com>

        Add support for configuring WebsiteDatastore service worker and cache storage path
        https://bugs.webkit.org/show_bug.cgi?id=182674

        Reviewed by Chris Dumez.

        Beef up WKWebsiteDataStoreConfiguration to easily set the WebsiteDataStore
        service worker registration and cache storage directory path.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration _cacheStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setCacheStorageDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration _serviceWorkerRegistrationDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setServiceWorkerRegistrationDirectory:]):

2018-02-13  Brian Burg  <bburg@apple.com>

        Web Automation: don't return an error if resizing/moving a window has no effect
        https://bugs.webkit.org/show_bug.cgi?id=182742

        Reviewed by Tim Horton.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::resizeWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::moveWindowOfBrowsingContext):
        Unify the behavior for all ports. Don't raise an error if the command was
        idempotent (by mistake or not). It should not be an error to re-maximize a window.

2018-02-13  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WebCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182512

        Reviewed by Keith Miller.

        * CMakeLists.txt:
        * NetworkProcess/capture/NetworkCaptureManager.cpp:
        * NetworkProcess/webrtc/NetworkRTCMonitor.h:
        * PlatformWPE.cmake:
        * Scripts/generate-forwarding-headers.pl:
        * Shared/gtk/WebEventFactory.cpp:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:

2018-02-13  Brent Fulgham  <bfulgham@apple.com>

        [iOS] whitelist iokit-get-properties
        https://bugs.webkit.org/show_bug.cgi?id=182722
        <rdar://problem/30929165>

        Reviewed by Eric Carlson.

        Update the iOS sandbox to block access to IOKit properties that are not needed for
        legitimate WebContent process use. This brings the iOS sandbox in line with the
        work done under macOS.

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

2018-02-12  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Classify resources as prevalent based on redirects to other prevalent resources
        https://bugs.webkit.org/show_bug.cgi?id=182664
        <rdar://problem/37372572>

        Reviewed by Brent Fulgham.

        * Platform/classifier/ResourceLoadStatisticsClassifier.cpp:
        (WebKit::ResourceLoadStatisticsClassifier::hasPrevalentResourceCharacteristics):
            Unique top frame redirects now counts toward classification as prevalent.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectFrom):
            Test infrastructure.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
            Bumped the statistics model to 11 because of the added fields.
        (WebKit::WebResourceLoadStatisticsStore::recursivelyGetAllDomainsThatHaveRedirectedToThisDomain):
            This function back traces redirect chains to classify domains
            that have redirected to a newly classified prevalent resource.
        (WebKit::WebResourceLoadStatisticsStore::processStatisticsAndDataRecords):
            Now uses the new convenience function WebResourceLoadStatisticsStore::setPrevalentResource().
        (WebKit::WebResourceLoadStatisticsStore::setPrevalentResource):
            New convenience function to make sure we always call
            WebResourceLoadStatisticsStore::recursivelyGetAllDomainsThatHaveRedirectedToThisDomain()
            and capture redirect chains backward.
        (WebKit::WebResourceLoadStatisticsStore::setSubframeUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUnderTopFrameOrigin):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebResourceLoadStatisticsStore::setTopFrameUniqueRedirectFrom):
            Test infrastructure.
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-02-12  Antti Koivisto  <antti@apple.com>

        Update NetworkCache::Storage::lastStableVersion after r226349
        https://bugs.webkit.org/show_bug.cgi?id=182723
        <rdar://problem/37469554>
        
        Reviewed by Ryosuke Niwa.

        * NetworkProcess/cache/NetworkCacheStorage.h:

        Allow deleting version 11 caches.

2018-02-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add support for <input type='time'> using time picker UI
        https://bugs.webkit.org/show_bug.cgi?id=182683
        <rdar://problem/35143162>

        Reviewed by Tim Horton.

        Adds support for showing a time picker when an input of type time is focused in extra zoomed mode.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView presentTimePickerViewController:]):
        (-[WKContentView dismissTimePickerViewController:]):

        Add helpers to dismiss and present the time picker view controller.

        (-[WKContentView presentViewControllerForAssistedNode:]):

        When focusing InputType::Time, present a time picker. Additionally, tweak the logic here to use the generic text
        input view controller as a fallback when the other input view controllers (number pads, select menus and time
        pickers thus far) are not relevant. This prevents us from completely being unable to edit form controls that are
        currently unsupported.

        (-[WKContentView textInputController:didCommitText:]):
        (-[WKContentView textInputControllerDidRequestDismissal:]):

        Tweak WKContentView for changes to WKTextFormControlViewControllerDelegate.

        (-[WKContentView actionNameForFocusedFormControlController:]):

        Adjust this implementation to hide the focused form control "Go" button for selects and time inputs. This
        currently doesn't work for these form controls because it relies on implicit form submission; this should be
        fixed by future changes, after which we should revert this adjustment.

        (-[WKContentView _wheelChangedWithEvent:]):

        Delegate wheel events to the time picker if needed.

        (-[WKContentView textInputController:didRequestDismissalWithAction:]): Deleted.

        Renamed to -textInputControllerDidRequestDismissal:.

        * UIProcess/ios/forms/WKTimePickerViewController.h: Added.
        * UIProcess/ios/forms/WKTimePickerViewController.mm: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-02-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unify builds for platform-specific files in WebKit layer
        https://bugs.webkit.org/show_bug.cgi?id=182450

        Reviewed by Carlos Garcia Campos.

        Add most GTK-specific sources to unified build. API files are exempted, except for the DOM
        API. Files shared with PluginProcessGTK2 are also exempted. Finally, files with name
        conflicts in headers, which appears difficult to fix, are also exempted.

        * CMakeLists.txt:
        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        * Platform/classifier/ResourceLoadStatisticsClassifier.cpp:
        * PlatformGTK.cmake:
        * PluginProcess/unix/PluginControllerProxyUnix.cpp:
        * Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        * Shared/CoordinatedGraphics/SimpleViewportController.cpp:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        * Shared/Plugins/Netscape/unix/NetscapePluginModuleUnix.cpp:
        * Shared/Plugins/unix/PluginSearchPath.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * Shared/glib/WebContextMenuItemGlib.cpp:
        * Shared/glib/WebErrorsGlib.cpp:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        * Shared/gtk/WebErrorsGtk.cpp:
        * Shared/gtk/WebEventFactory.cpp:
        * Shared/linux/WebMemorySamplerLinux.cpp:
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        * Shared/soup/WebErrorsSoup.cpp:
        * SourcesGTK.txt: Added.
        * UIProcess/AcceleratedDrawingAreaProxy.cpp:
        * UIProcess/Automation/cairo/WebAutomationSessionCairo.cpp:
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        * UIProcess/BackingStore.cpp:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        * UIProcess/WebResourceLoadStatisticsTelemetry.cpp:
        * UIProcess/WebStorage/StorageManager.cpp:
        * UIProcess/cairo/BackingStoreCairo.cpp:
        * UIProcess/gtk/AcceleratedBackingStore.cpp:
        * UIProcess/gtk/DragAndDropHandler.cpp:
        * UIProcess/gtk/GestureController.cpp:
        * UIProcess/gtk/HardwareAccelerationManager.cpp:
        * UIProcess/gtk/InputMethodFilter.cpp:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        * UIProcess/gtk/WaylandCompositor.cpp:
        * UIProcess/gtk/WebColorPickerGtk.cpp:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttr.cpp:
        (webkit_dom_attr_dom_event_target_init):
        (webkit_dom_attr_set_property):
        (webkit_dom_attr_get_property):
        (webkit_dom_attr_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCDATASection.cpp:
        (webkit_dom_cdata_section_dom_event_target_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRule.cpp:
        (webkit_dom_css_rule_set_property):
        (webkit_dom_css_rule_get_property):
        (webkit_dom_css_rule_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRuleList.cpp:
        (webkit_dom_css_rule_list_get_property):
        (webkit_dom_css_rule_list_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleDeclaration.cpp:
        (webkit_dom_css_style_declaration_set_property):
        (webkit_dom_css_style_declaration_get_property):
        (webkit_dom_css_style_declaration_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleSheet.cpp:
        (webkit_dom_css_style_sheet_get_property):
        (webkit_dom_css_style_sheet_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSValue.cpp:
        (webkit_dom_css_value_set_property):
        (webkit_dom_css_value_get_property):
        (webkit_dom_css_value_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.cpp:
        (webkit_dom_character_data_dom_event_target_init):
        (webkit_dom_character_data_set_property):
        (webkit_dom_character_data_get_property):
        (webkit_dom_character_data_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRect.cpp:
        (webkit_dom_client_rect_get_property):
        (webkit_dom_client_rect_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.cpp:
        (webkit_dom_client_rect_list_get_property):
        (webkit_dom_client_rect_list_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMComment.cpp:
        (webkit_dom_comment_dom_event_target_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelection.cpp:
        (webkit_dom_dom_selection_get_property):
        (webkit_dom_dom_selection_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.cpp:
        (webkit_dom_dom_token_list_set_property):
        (webkit_dom_dom_token_list_get_property):
        (webkit_dom_dom_token_list_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        (webkit_dom_dom_window_dom_event_target_init):
        (webkit_dom_dom_window_set_property):
        (webkit_dom_dom_window_get_property):
        (webkit_dom_dom_window_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp:
        (webkit_dom_document_dom_event_target_init):
        (webkit_dom_document_set_property):
        (webkit_dom_document_get_property):
        (webkit_dom_document_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.cpp:
        (webkit_dom_document_fragment_dom_event_target_init):
        (webkit_dom_document_fragment_get_property):
        (webkit_dom_document_fragment_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.cpp:
        (webkit_dom_document_type_dom_event_target_init):
        (webkit_dom_document_type_get_property):
        (webkit_dom_document_type_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
        (webkit_dom_element_dom_event_target_init):
        (webkit_dom_element_set_property):
        (webkit_dom_element_get_property):
        (webkit_dom_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEvent.cpp:
        (webkit_dom_event_set_property):
        (webkit_dom_event_get_property):
        (webkit_dom_event_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFile.cpp:
        (webkit_dom_file_get_property):
        (webkit_dom_file_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFileList.cpp:
        (webkit_dom_file_list_get_property):
        (webkit_dom_file_list_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.cpp:
        (webkit_dom_html_anchor_element_dom_event_target_init):
        (webkit_dom_html_anchor_element_set_property):
        (webkit_dom_html_anchor_element_get_property):
        (webkit_dom_html_anchor_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAppletElement.cpp:
        (webkit_dom_html_applet_element_dom_event_target_init):
        (webkit_dom_html_applet_element_set_property):
        (webkit_dom_html_applet_element_get_property):
        (webkit_dom_html_applet_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.cpp:
        (webkit_dom_html_area_element_dom_event_target_init):
        (webkit_dom_html_area_element_set_property):
        (webkit_dom_html_area_element_get_property):
        (webkit_dom_html_area_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElement.cpp:
        (webkit_dom_html_br_element_dom_event_target_init):
        (webkit_dom_html_br_element_set_property):
        (webkit_dom_html_br_element_get_property):
        (webkit_dom_html_br_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElement.cpp:
        (webkit_dom_html_base_element_dom_event_target_init):
        (webkit_dom_html_base_element_set_property):
        (webkit_dom_html_base_element_get_property):
        (webkit_dom_html_base_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElement.cpp:
        (webkit_dom_html_body_element_dom_event_target_init):
        (webkit_dom_html_body_element_set_property):
        (webkit_dom_html_body_element_get_property):
        (webkit_dom_html_body_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.cpp:
        (webkit_dom_html_button_element_dom_event_target_init):
        (webkit_dom_html_button_element_set_property):
        (webkit_dom_html_button_element_get_property):
        (webkit_dom_html_button_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCanvasElement.cpp:
        (webkit_dom_html_canvas_element_dom_event_target_init):
        (webkit_dom_html_canvas_element_set_property):
        (webkit_dom_html_canvas_element_get_property):
        (webkit_dom_html_canvas_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLCollection.cpp:
        (webkit_dom_html_collection_get_property):
        (webkit_dom_html_collection_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElement.cpp:
        (webkit_dom_html_d_list_element_dom_event_target_init):
        (webkit_dom_html_d_list_element_set_property):
        (webkit_dom_html_d_list_element_get_property):
        (webkit_dom_html_d_list_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElement.cpp:
        (webkit_dom_html_directory_element_dom_event_target_init):
        (webkit_dom_html_directory_element_set_property):
        (webkit_dom_html_directory_element_get_property):
        (webkit_dom_html_directory_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElement.cpp:
        (webkit_dom_html_div_element_dom_event_target_init):
        (webkit_dom_html_div_element_set_property):
        (webkit_dom_html_div_element_get_property):
        (webkit_dom_html_div_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDocument.cpp:
        (webkit_dom_html_document_dom_event_target_init):
        (webkit_dom_html_document_set_property):
        (webkit_dom_html_document_get_property):
        (webkit_dom_html_document_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
        (webkit_dom_html_element_dom_event_target_init):
        (webkit_dom_html_element_set_property):
        (webkit_dom_html_element_get_property):
        (webkit_dom_html_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElement.cpp:
        (webkit_dom_html_embed_element_dom_event_target_init):
        (webkit_dom_html_embed_element_set_property):
        (webkit_dom_html_embed_element_get_property):
        (webkit_dom_html_embed_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElement.cpp:
        (webkit_dom_html_field_set_element_dom_event_target_init):
        (webkit_dom_html_field_set_element_get_property):
        (webkit_dom_html_field_set_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElement.cpp:
        (webkit_dom_html_font_element_dom_event_target_init):
        (webkit_dom_html_font_element_set_property):
        (webkit_dom_html_font_element_get_property):
        (webkit_dom_html_font_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.cpp:
        (webkit_dom_html_form_element_dom_event_target_init):
        (webkit_dom_html_form_element_set_property):
        (webkit_dom_html_form_element_get_property):
        (webkit_dom_html_form_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElement.cpp:
        (webkit_dom_html_frame_element_dom_event_target_init):
        (webkit_dom_html_frame_element_set_property):
        (webkit_dom_html_frame_element_get_property):
        (webkit_dom_html_frame_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElement.cpp:
        (webkit_dom_html_frame_set_element_dom_event_target_init):
        (webkit_dom_html_frame_set_element_set_property):
        (webkit_dom_html_frame_set_element_get_property):
        (webkit_dom_html_frame_set_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElement.cpp:
        (webkit_dom_html_hr_element_dom_event_target_init):
        (webkit_dom_html_hr_element_set_property):
        (webkit_dom_html_hr_element_get_property):
        (webkit_dom_html_hr_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElement.cpp:
        (webkit_dom_html_head_element_dom_event_target_init):
        (webkit_dom_html_head_element_set_property):
        (webkit_dom_html_head_element_get_property):
        (webkit_dom_html_head_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElement.cpp:
        (webkit_dom_html_heading_element_dom_event_target_init):
        (webkit_dom_html_heading_element_set_property):
        (webkit_dom_html_heading_element_get_property):
        (webkit_dom_html_heading_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.cpp:
        (webkit_dom_html_html_element_dom_event_target_init):
        (webkit_dom_html_html_element_set_property):
        (webkit_dom_html_html_element_get_property):
        (webkit_dom_html_html_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.cpp:
        (webkit_dom_html_iframe_element_dom_event_target_init):
        (webkit_dom_html_iframe_element_set_property):
        (webkit_dom_html_iframe_element_get_property):
        (webkit_dom_html_iframe_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.cpp:
        (webkit_dom_html_image_element_dom_event_target_init):
        (webkit_dom_html_image_element_set_property):
        (webkit_dom_html_image_element_get_property):
        (webkit_dom_html_image_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        (webkit_dom_html_input_element_dom_event_target_init):
        (webkit_dom_html_input_element_set_property):
        (webkit_dom_html_input_element_get_property):
        (webkit_dom_html_input_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElement.cpp:
        (webkit_dom_html_li_element_dom_event_target_init):
        (webkit_dom_html_li_element_set_property):
        (webkit_dom_html_li_element_get_property):
        (webkit_dom_html_li_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.cpp:
        (webkit_dom_html_label_element_dom_event_target_init):
        (webkit_dom_html_label_element_set_property):
        (webkit_dom_html_label_element_get_property):
        (webkit_dom_html_label_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElement.cpp:
        (webkit_dom_html_legend_element_dom_event_target_init):
        (webkit_dom_html_legend_element_set_property):
        (webkit_dom_html_legend_element_get_property):
        (webkit_dom_html_legend_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.cpp:
        (webkit_dom_html_link_element_dom_event_target_init):
        (webkit_dom_html_link_element_set_property):
        (webkit_dom_html_link_element_get_property):
        (webkit_dom_html_link_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMapElement.cpp:
        (webkit_dom_html_map_element_dom_event_target_init):
        (webkit_dom_html_map_element_set_property):
        (webkit_dom_html_map_element_get_property):
        (webkit_dom_html_map_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElement.cpp:
        (webkit_dom_html_marquee_element_dom_event_target_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElement.cpp:
        (webkit_dom_html_menu_element_dom_event_target_init):
        (webkit_dom_html_menu_element_set_property):
        (webkit_dom_html_menu_element_get_property):
        (webkit_dom_html_menu_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElement.cpp:
        (webkit_dom_html_meta_element_dom_event_target_init):
        (webkit_dom_html_meta_element_set_property):
        (webkit_dom_html_meta_element_get_property):
        (webkit_dom_html_meta_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElement.cpp:
        (webkit_dom_html_mod_element_dom_event_target_init):
        (webkit_dom_html_mod_element_set_property):
        (webkit_dom_html_mod_element_get_property):
        (webkit_dom_html_mod_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.cpp:
        (webkit_dom_html_o_list_element_dom_event_target_init):
        (webkit_dom_html_o_list_element_set_property):
        (webkit_dom_html_o_list_element_get_property):
        (webkit_dom_html_o_list_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.cpp:
        (webkit_dom_html_object_element_dom_event_target_init):
        (webkit_dom_html_object_element_set_property):
        (webkit_dom_html_object_element_get_property):
        (webkit_dom_html_object_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElement.cpp:
        (webkit_dom_html_opt_group_element_dom_event_target_init):
        (webkit_dom_html_opt_group_element_set_property):
        (webkit_dom_html_opt_group_element_get_property):
        (webkit_dom_html_opt_group_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElement.cpp:
        (webkit_dom_html_option_element_dom_event_target_init):
        (webkit_dom_html_option_element_set_property):
        (webkit_dom_html_option_element_get_property):
        (webkit_dom_html_option_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollection.cpp:
        (webkit_dom_html_options_collection_set_property):
        (webkit_dom_html_options_collection_get_property):
        (webkit_dom_html_options_collection_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElement.cpp:
        (webkit_dom_html_paragraph_element_dom_event_target_init):
        (webkit_dom_html_paragraph_element_set_property):
        (webkit_dom_html_paragraph_element_get_property):
        (webkit_dom_html_paragraph_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElement.cpp:
        (webkit_dom_html_param_element_dom_event_target_init):
        (webkit_dom_html_param_element_set_property):
        (webkit_dom_html_param_element_get_property):
        (webkit_dom_html_param_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElement.cpp:
        (webkit_dom_html_pre_element_dom_event_target_init):
        (webkit_dom_html_pre_element_set_property):
        (webkit_dom_html_pre_element_get_property):
        (webkit_dom_html_pre_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLQuoteElement.cpp:
        (webkit_dom_html_quote_element_dom_event_target_init):
        (webkit_dom_html_quote_element_set_property):
        (webkit_dom_html_quote_element_get_property):
        (webkit_dom_html_quote_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.cpp:
        (webkit_dom_html_script_element_dom_event_target_init):
        (webkit_dom_html_script_element_set_property):
        (webkit_dom_html_script_element_get_property):
        (webkit_dom_html_script_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        (webkit_dom_html_select_element_dom_event_target_init):
        (webkit_dom_html_select_element_set_property):
        (webkit_dom_html_select_element_get_property):
        (webkit_dom_html_select_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.cpp:
        (webkit_dom_html_style_element_dom_event_target_init):
        (webkit_dom_html_style_element_set_property):
        (webkit_dom_html_style_element_get_property):
        (webkit_dom_html_style_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElement.cpp:
        (webkit_dom_html_table_caption_element_dom_event_target_init):
        (webkit_dom_html_table_caption_element_set_property):
        (webkit_dom_html_table_caption_element_get_property):
        (webkit_dom_html_table_caption_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.cpp:
        (webkit_dom_html_table_cell_element_dom_event_target_init):
        (webkit_dom_html_table_cell_element_set_property):
        (webkit_dom_html_table_cell_element_get_property):
        (webkit_dom_html_table_cell_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElement.cpp:
        (webkit_dom_html_table_col_element_dom_event_target_init):
        (webkit_dom_html_table_col_element_set_property):
        (webkit_dom_html_table_col_element_get_property):
        (webkit_dom_html_table_col_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.cpp:
        (webkit_dom_html_table_element_dom_event_target_init):
        (webkit_dom_html_table_element_set_property):
        (webkit_dom_html_table_element_get_property):
        (webkit_dom_html_table_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.cpp:
        (webkit_dom_html_table_row_element_dom_event_target_init):
        (webkit_dom_html_table_row_element_set_property):
        (webkit_dom_html_table_row_element_get_property):
        (webkit_dom_html_table_row_element_class_init):
        (webkit_dom_html_table_row_element_insert_cell):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.cpp:
        (webkit_dom_html_table_section_element_dom_event_target_init):
        (webkit_dom_html_table_section_element_set_property):
        (webkit_dom_html_table_section_element_get_property):
        (webkit_dom_html_table_section_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:
        (webkit_dom_html_text_area_element_dom_event_target_init):
        (webkit_dom_html_text_area_element_set_property):
        (webkit_dom_html_text_area_element_get_property):
        (webkit_dom_html_text_area_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTitleElement.cpp:
        (webkit_dom_html_title_element_dom_event_target_init):
        (webkit_dom_html_title_element_set_property):
        (webkit_dom_html_title_element_get_property):
        (webkit_dom_html_title_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElement.cpp:
        (webkit_dom_html_u_list_element_dom_event_target_init):
        (webkit_dom_html_u_list_element_set_property):
        (webkit_dom_html_u_list_element_get_property):
        (webkit_dom_html_u_list_element_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyboardEvent.cpp:
        (webkit_dom_keyboard_event_get_property):
        (webkit_dom_keyboard_event_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaList.cpp:
        (webkit_dom_media_list_set_property):
        (webkit_dom_media_list_get_property):
        (webkit_dom_media_list_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.cpp:
        (webkit_dom_mouse_event_get_property):
        (webkit_dom_mouse_event_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNamedNodeMap.cpp:
        (webkit_dom_named_node_map_get_property):
        (webkit_dom_named_node_map_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNode.cpp:
        (webkit_dom_node_dom_event_target_init):
        (webkit_dom_node_set_property):
        (webkit_dom_node_get_property):
        (webkit_dom_node_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeIterator.cpp:
        (webkit_dom_node_iterator_get_property):
        (webkit_dom_node_iterator_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeList.cpp:
        (webkit_dom_node_list_get_property):
        (webkit_dom_node_list_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMObject.cpp:
        (webkitDOMObjectSetProperty):
        (webkit_dom_object_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMProcessingInstruction.cpp:
        (webkit_dom_processing_instruction_dom_event_target_init):
        (webkit_dom_processing_instruction_get_property):
        (webkit_dom_processing_instruction_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRange.cpp:
        (webkit_dom_range_get_property):
        (webkit_dom_range_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheet.cpp:
        (webkit_dom_style_sheet_set_property):
        (webkit_dom_style_sheet_get_property):
        (webkit_dom_style_sheet_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleSheetList.cpp:
        (webkit_dom_style_sheet_list_get_property):
        (webkit_dom_style_sheet_list_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMText.cpp:
        (webkit_dom_text_dom_event_target_init):
        (webkit_dom_text_get_property):
        (webkit_dom_text_class_init):
        (webkit_dom_event_target_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTreeWalker.cpp:
        (webkit_dom_tree_walker_get_property):
        (webkit_dom_tree_walker_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEvent.cpp:
        (webkit_dom_ui_event_get_property):
        (webkit_dom_ui_event_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEvent.cpp:
        (webkit_dom_wheel_event_get_property):
        (webkit_dom_wheel_event_class_init):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMXPathResult.cpp:
        (webkit_dom_xpath_result_get_property):
        (webkit_dom_xpath_result_class_init):
        * WebProcess/InjectedBundle/glib/InjectedBundleGlib.cpp:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        * WebProcess/Plugins/Netscape/unix/NetscapePluginUnix.cpp:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        * WebProcess/WebCoreSupport/curl/WebFrameNetworkingContext.cpp:
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        * WebProcess/WebPage/AcceleratedSurface.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.cpp:
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        * WebProcess/gtk/WaylandCompositorDisplay.cpp:
        * WebProcess/gtk/WebProcessMainGtk.cpp:

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: addCookie command should prepend a dot to domain if missing
        https://bugs.webkit.org/show_bug.cgi?id=182328
        <rdar://problem/37116398>

        Reviewed by Michael Catanzaro.

        RFC 2965: If an explicitly specified value does not start with a dot, the user agent supplies a leading dot.

        Fixes: imported/w3c/webdriver/tests/cookies/add_cookie.py::test_add_domain_cookie

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

2018-02-11  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Add WKBaseWin.h
        https://bugs.webkit.org/show_bug.cgi?id=182681

        Reviewed by Yusuke Suzuki.

        * PlatformWin.cmake:
        * Shared/API/c/win/WKBaseWin.h: Added.

2018-02-09  Ross Kirsling  <ross.kirsling@sony.com>

        Remove invalidated WebPage::handleEditingKeyboardEvent default implementation after r228260.
        https://bugs.webkit.org/show_bug.cgi?id=182663

        Reviewed by Chris Dumez.

        This would need to be updated to turn `keyEvent` into `underlyingPlatformEvent`;
        instead, we can remove it, as it's only for Windows, which doesn't yet support WK2.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::handleEditingKeyboardEvent): Deleted.

2018-02-09  Nan Wang  <n_wang@apple.com>

        AX: Accessibility is not notified when a web process cancels the suspension
        https://bugs.webkit.org/show_bug.cgi?id=182659

        Reviewed by Ryosuke Niwa.

        We were notifying Accessibility with the web process suspended information in actualPrepareToSuspend
        and processDidResume. However, the suspension can be canceled during the prepare call. So that we
        should also post a notification in cancelPrepareToSuspend.

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

2018-02-09  Brent Fulgham  <bfulgham@apple.com>

        Sandbox violating attempting to read log formatting preference file
        https://bugs.webkit.org/show_bug.cgi?id=182648
        <rdar://problem/36629495>

        Reviewed by Eric Carlson.

        Various frameworks attempt to read logging format information from /usr/local/lib/log. The sandbox is blocking
        this, generating log spam and preventing some logging features from working properly. We should allow read
        access to this path.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2018-02-08  Chris Dumez  <cdumez@apple.com>

        There should be a way to disable [OverrideBuiltins] behavior in a given DOMWrapperWorld
        https://bugs.webkit.org/show_bug.cgi?id=182524
        <rdar://problem/9057327>

        Reviewed by Ryosuke Niwa.

        Add C API on WKBundleScriptWorld and Cocoa API on WKWebProcessPlugInScriptWorld to
        disable the [OverrideBuiltins] behavior on a given script world.

        The [OverrideBuiltins] behavior [1] is legacy behavior that is needed for Web compatibility
        but allowing the client to disable this behavior in a given world makes development easier
        and running injected script on uncontrolled content a lot more reliable.

        [1] https://heycam.github.io/webidl/#OverrideBuiltins

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
        (-[WKWebProcessPlugInScriptWorld disableOverrideBuiltinsBehavior]):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        (WKBundleScriptWorldDisableOverrideBuiltinsBehavior):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::InjectedBundleScriptWorld::disableOverrideBuiltinsBehavior):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:

2018-02-08  Ross Kirsling  <ross.kirsling@sony.com>

        Remove WebProcessPool::platformInitialize stub.
        https://bugs.webkit.org/show_bug.cgi?id=182621

        Reviewed by Alex Christensen.

        The #if here could be simplified to PLATFORM(WIN), but Windows too will need a proper implementation
        as part of WK2 support, so this stub shouldn't need to exist at all.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::platformInitialize): Deleted.

2018-02-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        TestController should not exercise cocoa-specific resource load statistics APIs
        https://bugs.webkit.org/show_bug.cgi?id=182355

        Reviewed by Alex Christensen.

        Remove the Cocoa testing SPI, since it's redundant with the C API. Also, add a couple
        missing cookie partitioning callbacks to the C API.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsUpdateCookiePartitioning):
        (WKWebsiteDataStoreSetStatisticsShouldPartitionCookiesForHost):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetLastSeen:forHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetIsPrevalentResource:forHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsIsPrevalentResource:completionHandler:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsIsRegisteredAsSubFrameUnder:topFrameHost:completionHandler:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsIsRegisteredAsRedirectingTo:hostRedirectedTo:completionHandler:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetHadUserInteraction:forHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetHasHadNonRecentUserInteractionForHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsHadUserInteraction:completionHandler:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetIsGrandfathered:forHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsIsGrandfathered:completionHandler:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetSubframeUnderTopFrameOrigin:forHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetSubresourceUnderTopFrameOrigin:forHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetSubresourceUniqueRedirectTo:forHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetTimeToLiveUserInteraction:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetTimeToLiveCookiePartitionFree:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetMinimumTimeBetweenDataRecordsRemoval:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetGrandfatheringTime:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetMaxStatisticsEntries:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetPruneEntriesDownTo:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsProcessStatisticsAndDataRecords]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsUpdateCookiePartitioning]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsUpdateCookiePartitioning:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldPartitionCookies:forHost:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldPartitionCookies:forHost:completionHandler:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSubmitTelemetry]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetNotifyPagesWhenDataRecordsWereScanned:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldClassifyResourcesBeforeDataRecordsRemoval:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetNotifyPagesWhenTelemetryWasCaptured:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStore]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStore:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours:completionHandler:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsResetToConsistentState]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

2018-02-08  Don Olmstead  <don.olmstead@sony.com>

        Remove JavaScriptCore/ForwardingHeaders directory
        https://bugs.webkit.org/show_bug.cgi?id=182594

        Reviewed by Mark Lam.

        * PlatformGTK.cmake:

2018-02-08  Tim Horton  <timothy_horton@apple.com>

        Make WebKit public headers modules-safe
        https://bugs.webkit.org/show_bug.cgi?id=182611
        <rdar://problem/37160164>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKPreviewElementInfo.h:
        * UIProcess/API/Cocoa/WKSnapshotConfiguration.h:
        Import headers without which these WebKit headers can not be used alone.

        * WebKit.xcodeproj/project.pbxproj:
        Make WKWindowFeaturesPrivate a private header like it was supposed to be.

2018-02-08  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228262.

        This broke an internal build alongside r228261.

        Reverted changeset:

        "WebDriver: addCookie command should prepend a dot to domain
        if missing"
        https://bugs.webkit.org/show_bug.cgi?id=182328
        https://trac.webkit.org/changeset/228262

2018-02-08  Miguel Gomez  <magomez@igalia.com>

        [GTK] WaylandCompositor misusing eglGetProcAddress
        https://bugs.webkit.org/show_bug.cgi?id=182490

        Reviewed by Michael Catanzaro.

        Check that the appropriate extensions are available before calling eglGetProcAddress, as even
        getting a non null value from it, the functionality can be disabled at runtime.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::initializeEGL):

2018-02-08  Frederic Wang  <fwang@igalia.com>

        Add scrolling node types to distinguish main frames and subframes.
        https://bugs.webkit.org/show_bug.cgi?id=182533

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: Replace the case of
        FrameScrollingNode with MainFrameScrollingNode and SubframeScrollingNode.
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::dump):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp: Ditto.
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp: Ditto and pass the node type to the
        constructor of the frame scrolling node.
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm: Replace the case of
        FrameScrollingNode with MainFrameScrollingNode and SubframeScrollingNode.
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm: In order to
        determine whether the node is a main frame or subframe, use the node type instead of checking
        whether the node as a parent.
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateChildNodesAfterScroll):

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: addCookie command should prepend a dot to domain if missing
        https://bugs.webkit.org/show_bug.cgi?id=182328
        <rdar://problem/37116398>

        Reviewed by Michael Catanzaro.

        RFC 2965: If an explicitly specified value does not start with a dot, the user agent supplies a leading dot.

        Fixes: imported/w3c/webdriver/tests/cookies/add_cookie.py::test_add_domain_cookie

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

2018-01-13  Darin Adler  <darin@apple.com>

        Event improvements
        https://bugs.webkit.org/show_bug.cgi?id=179591

        Reviewed by Chris Dumez.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEvent.cpp:
        (webkit_dom_wheel_event_init_wheel_event): Updated to call initWebKitWheelEvent.

        * WebProcess/Plugins/PluginView.cpp: Removed include of ScriptValue.h.

        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::executePendingEditorCommands):
        Updated for name change from keyEvent to underlyingPlatformEvent.
        (WebKit::WebEditorClient::handleInputMethodKeydown): Ditto.
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        (WebKit::WebEditorClient::handleKeyboardEvent): Ditto.
        (WebKit::WebEditorClient::handleInputMethodKeydown): Ditto.

        * WebProcess/WebPage/WebPage.cpp: Removed include of ScriptValue.h.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleEditingKeyboardEvent): Updated for name change from
        keyEvent to underlyingPlatformEvent.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal): Ditto.
        (WebKit::WebPage::handleEditingKeyboardEvent): Ditto.

2018-02-07  Antti Koivisto  <antti@apple.com> and Youenn Fablet  <youenn@apple.com>

        REGRESSION(r227758): Webpage fails to load due to crash in com.apple.WebKit: WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse + 267
        https://bugs.webkit.org/show_bug.cgi?id=182532
        <rdar://problem/36414017>

        Reviewed by Chris Dumez.

        No test case, don't know how to make one. The repro involves multipart HTTP streaming and details are hazy.
        We were calling a function that was WTFMoved away just a few lines above.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):

2018-02-07  Tim Horton  <timothy_horton@apple.com>

        Evernote device management web view sometimes displays at the wrong scale
        https://bugs.webkit.org/show_bug.cgi?id=182590
        <rdar://problem/36633687>

        Reviewed by Simon Fraser.

        Evernote implements the WKWebView's scroll view's delegate method
        viewForZoomingInScrollView: and returns nil. This results in
        WKScrollView's zoomScale always returning 1, no matter what the
        WKContentView's actual scale is. This will result in us never updating
        the WKContentView's scale to 1. When loading a page that has a few
        scale changes during load but ends up at scale 1, we get stuck at whatever
        intermediate scale immediately preceded settling on 1.

        Fix this by not forwarding viewForZoomingInScrollView: to the external
        WKScrollView delegate; we are in charge of the contents of the scroll
        view (including which view scrollView's zoomScale should track), and
        overriding viewForZoomingInScrollView: is only ever going to lead to
        a broken WebKit.

        * UIProcess/ios/WKScrollView.mm:
        (shouldForwardScrollViewDelegateMethodToExternalDelegate):
        (-[WKScrollViewDelegateForwarder forwardInvocation:]):
        (-[WKScrollViewDelegateForwarder forwardingTargetForSelector:]):

2018-02-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Delegate scrolling from the content view to input view controllers
        https://bugs.webkit.org/show_bug.cgi?id=182534
        <rdar://problem/37276625>

        Reviewed by Tim Horton.

        Override -_wheelChangedWithEvent: on the content view, and give extra zoomed input view controllers a chance to
        handle the event.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _wheelChangedWithEvent:]):

2018-02-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Implement multiple and single select menus
        https://bugs.webkit.org/show_bug.cgi?id=182525
        <rdar://problem/35143016>

        Reviewed by Tim Horton.

        Add support for presenting picker views when focusing single or multiple select elements. See changes below for
        additional detail.

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

        Move logic for presenting view controllers when focusing elements out of _startAssistingKeyboard, and into
        _startAssistingNode:(...). This is because _startAssistingKeyboard is only invoked for certain types of focused
        element types; importantly, this set excludes select elements. Putting the call to present the focused view
        controller there also didn't make much since, considering that these new view controllers are not tied to
        keyboards in any way.

        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _stopAssistingNode]):

        Dismiss any select menu that is being presented.

        (-[WKContentView presentSelectMenuViewController:]):
        (-[WKContentView dismissSelectMenuViewController:]):

        Introduce idempotent helpers for presenting and dismissing the select menu view controller.

        (-[WKContentView presentViewControllerForAssistedNode:]):
        (-[WKContentView selectMenu:didSelectItemAtIndex:]):

        For single select menus. Called when the user selects a row.

        (-[WKContentView didCancelSelectionInSelectMenu:]):
        (-[WKContentView numberOfItemsInSelectMenu:]):
        (-[WKContentView selectMenu:displayTextForItemAtIndex:]):

        Indicates the text value to show at a given index.

        (-[WKContentView selectMenu:didCheckItemAtIndex:checked:]):

        For multiple select menus, invoked when an item is checked. The `checked` parameter indicates whether or not the
        item is now checked.

        (-[WKContentView selectMenuSupportsMultipleSelection:]):

        Indicates whether this select menu is single-item-only, or allows multiple items to be selected (checked).

        (-[WKContentView selectMenu:hasCheckedOptionAtIndex:]):

        For multiple select menus. Determines whether an option at the given index is checked.

        (-[WKContentView startingIndexForSelectMenu:]):

        Determines the index to instantly scroll to when presenting the select menu.

        * UIProcess/ios/forms/WKSelectMenuViewController.h: Added.
        * UIProcess/ios/forms/WKSelectMenuViewController.mm: Added.

        Add new harness files for WKSelectMenuViewController's header and implementation (see WebKitAdditions).

        * WebKit.xcodeproj/project.pbxproj:

2018-02-07  Brent Fulgham  <bfulgham@apple.com>

        Improve NetworkResourceLoader logging to capture redirect cases
        https://bugs.webkit.org/show_bug.cgi?id=182573
        <rdar://problem/37316714>

        Reviewed by Chris Dumez.

        Add logging for cookie partitioning or blocking during redirects.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):

2018-02-07  John Wilander  <wilander@apple.com>

        Restrict Referer to just the origin for third parties in private mode and third parties ITP blocks cookies for in regular mode
        https://bugs.webkit.org/show_bug.cgi?id=182559
        <rdar://problem/36990337>

        Reviewed by Andy Estes.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::isThirdPartyRequest):
            New convenience function. Checks whether the resource shares
            partition with the first party.
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
            Now strips the referrer to just the origin for:
            1. All third party requests in private mode.
            2. Third party requests to domains that ITP blocks cookies for.
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
            Now strips the referrer in redirects to just the origin for:
            1. All third party requests in private mode.
            2. Third party requests to domains that ITP blocks cookies for.

2018-02-07  Daniel Bates  <dabates@apple.com>

        Log error when authentication challenge is blocked due to an insecure request
        https://bugs.webkit.org/show_bug.cgi?id=182358

        Reviewed by Andy Estes.

        Have network process notify the web process when it blocks an authentication challenge.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::completeAuthenticationChallenge):
        * NetworkProcess/NetworkLoadClient.h:
        (WebKit::NetworkLoadClient::didBlockAuthenticationChallenge):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didBlockAuthenticationChallenge):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didBlockAuthenticationChallenge):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2018-02-07  Chris Dumez  <cdumez@apple.com>

        IndexedDB in service workers is using a memory backed store
        https://bugs.webkit.org/show_bug.cgi?id=182574
        <rdar://problem/37316205>

        Reviewed by Youenn Fablet.

        Make sure we pass a proper WebDatabaseProvider to the ServiceWorkerProcess via
        PageConfiguration. Otherwise, we end up using the default EmptyDatabaseProvider
        which uses an InProcessIDBServer and a memory-backed store for IndexedDB.

        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::start):
        * UIProcess/WebProcessPool.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToStorageProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-02-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Typo in a translatable string
        https://bugs.webkit.org/show_bug.cgi?id=182570

        Unreviewed. Fix a typo.

        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkit_website_data_manager_class_init):

2018-02-06  Don Olmstead  <don.olmstead@sony.com>

        Remove WebCore/ForwardingHeaders directory
        https://bugs.webkit.org/show_bug.cgi?id=182347

        Reviewed by Keith Miller.

        * Platform/mac/StringUtilities.mm:
        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        * Shared/WebKit2Initialize.cpp:
        * Shared/linux/WebMemorySamplerLinux.cpp:
        * Shared/mac/WebMemorySampler.mac.mm:
        * UIProcess/WebProcessPool.cpp:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        * WebProcess/InjectedBundle/API/glib/WebKitConsoleMessagePrivate.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2018-02-06  Chris Dumez  <cdumez@apple.com>

        Layout Test imported/w3c/web-platform-tests/service-workers/service-worker/fetch-waits-for-activate.https.html is a flaky failure on macOS and iOS
        https://bugs.webkit.org/show_bug.cgi?id=181392
        <rdar://problem/36384136>

        Reviewed by Youenn Fablet.

        All tasks from the StorageProcess to the WebContent process to update registrations
        and service workers state are posted to the runloop. However, the fetch callbacks
        do not do so. This means that fetch results might come in out of order with regards
        to the registration / service worker state updates. The test was flaky because an
        intercepted load would sometimes finish before the task to update the service worker
        state to "activated" was processed by the runloop. We address the issue by having
        the ServiceWorkerClientFetch callbacks schedule tasks to the runloop too.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):
        (WebKit::ServiceWorkerClientFetch::didReceiveData):
        (WebKit::ServiceWorkerClientFetch::didFinish):
        (WebKit::ServiceWorkerClientFetch::didFail):
        (WebKit::ServiceWorkerClientFetch::didNotHandle):

2018-02-06  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Correct sandbox violation triggered by Chase.com
        https://bugs.webkit.org/show_bug.cgi?id=182519
        <rdar://problem/37121757>

        Reviewed by Eric Carlson.

        Hitting a sandbox violation when attempting to check status of IOAV*En/Decode support.

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

2018-02-06  Jeff Miller  <jeffm@apple.com>

        Add WKNavigationDelegate SPI to tell the client when an insecure plug-in is blocked
        https://bugs.webkit.org/show_bug.cgi?id=182540

        Reviewed by Alex Christensen.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didBlockInsecurePluginVersion):
        Changed to take a dictionary reference.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didBlockInsecurePluginVersion):
        Added.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        Changed didBlockInsecurePluginVersion() to take a dictionary reference.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        Added -_webView:didBlockInsecurePluginVersionWithInfo:.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        Initialize webViewDidBlockInsecurePluginVersionWithInfo.

        (WebKit::NavigationState::NavigationClient::didBlockInsecurePluginVersion):
        Added.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        Remove check for PLATFORM(COCOA) (we don't check for this in didFailToInitializePlugin() where we
        also use createPluginInformationDictionary()) and ENABLE(NETSCAPE_PLUGIN_API) (we're already inside
        an #if ENABLE(NETSCAPE_PLUGIN_API block) and use auto for pluginInformation. Attempt to use the
        navigation client before the loader client.

2018-02-06  Youenn Fablet  <youenn@apple.com>

        HasServiceWorkerRegistration bit should be sent when creating a new page
        https://bugs.webkit.org/show_bug.cgi?id=182410

        Reviewed by Chris Dumez.

        Move the bit computation at page creation time.
        This allows computing the bit based on the web site data store and not only on the pool configuration.
        WebPage uses that bit to activate service worker registration matching for the whole process.

        In case there is a service worker process proxy created, the bit is set to true by default.

        Bit is computed by checking for database file presence.
        This information is cached in a map for efficiency reasons and cleared when a service worker process proxy is created.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_cpuLimit):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-02-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix format specifiers added in r228116
        https://bugs.webkit.org/show_bug.cgi?id=182456
        <rdar://problem/37181006>

        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::open):
        (WebKit::CacheStorageEngineConnection::remove):
        (WebKit::CacheStorageEngineConnection::caches):
        (WebKit::CacheStorageEngineConnection::retrieveRecords):
        (WebKit::CacheStorageEngineConnection::deleteMatchingRecords):
        (WebKit::CacheStorageEngineConnection::putRecords):
        (WebKit::CacheStorageEngineConnection::reference):
        (WebKit::CacheStorageEngineConnection::dereference):

2018-02-05  Chris Dumez  <cdumez@apple.com>

        Avoid unnecessarily constructing RunLoops for GC AutomaticThreads in Connection::sendMessage() after r228001
        https://bugs.webkit.org/show_bug.cgi?id=182494
        <rdar://problem/37147632>

        Reviewed by Ryosuke Niwa.

        Somebody fixed a GC crash in r228001 by allowing RunLoop::current() to be called from a
        GC thread. However, this is still unnecessarily inefficient. Calling RunLoop::current()
        will construct RunLoops for background GC threads (WTF::AutomaticThreads). This patches
        updates the IPC code to call isMainThread() instead of RunLoop::isMain() in
        Connection::sendMessage(). This should mean the same thing since this code runs in
        WebKit2 and should be more efficient as it ends up simply calling pthread_main_np(),
        without constructing a RunLoop.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendMessage):

2018-02-05  Ryosuke Niwa  <rniwa@webkit.org>

        Release assertion in inlineVideoFrame
        https://bugs.webkit.org/show_bug.cgi?id=182513
        <rdar://problem/37159363>

        Reviewed by Zalan Bujtas.

        Fixed the bug. Don't try to update the layout when there is no live render tree or active DOM objects
        had been stopped: i.e. during a document destruction.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::inlineVideoFrame):

2018-02-05  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Refine WebKitLegacy and WebKit build for wincairo
        https://bugs.webkit.org/show_bug.cgi?id=182478

        Reviewed by Alex Christensen.

        Fixed a typo of forwarding header path for InjectedBundle and copying header
        method, which should use FLATTENED.

        * PlatformWin.cmake: Fix a typo of a forwarding header path for InjectedBundle and use FLATTENED.

2018-02-05  Youenn Fablet  <youenn@apple.com>

        WebsiteDataStore::resolveDirectoriesIfNecessary() should not overwrite its resolved serviceWorkerRegistrationDirectory  if already set
        https://bugs.webkit.org/show_bug.cgi?id=182514

        Reviewed by Chris Dumez.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):

2018-02-05  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Storage process is using the wrong sandbox profile filename
        https://bugs.webkit.org/show_bug.cgi?id=182500
        <rdar://problem/37232614>

        Reviewed by David Kilzer.

        The iOS entitlements file was still referencing the old Databases sandbox profile, even though the
        process has been renamed 'Storage'.

        * Configurations/Databases-iOS.entitlements:

2018-02-05  Ryosuke Niwa  <rniwa@webkit.org>

        Add DoNotProcessIncomingMessagesWhenWaitingForSyncReply to GetPlugins and RootViewToScreen
        https://bugs.webkit.org/show_bug.cgi?id=182458

        Reviewed by Chris Dumez.

        Added DoNotProcessIncomingMessagesWhenWaitingForSyncReply to GetPlugins and RootViewToScreen
        which are found to get sent from WebContent process while ScriptDisallowedScope is present
        by a work-in-progress patch on webkit.org/b/182449.

        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::populatePluginCache):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::rootViewToScreen):

2018-02-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r227964 and r228087.
        https://bugs.webkit.org/show_bug.cgi?id=182508

        These introduced an API test  failure with
        URLTest.HostIsIPAddress alongside commit r228086 (Requested by
        mlewis13 on #webkit).

        Reverted changesets:

        "[SOUP] Ensure domain is valid when converting a WebCore
        Cookie to Soup"
        https://bugs.webkit.org/show_bug.cgi?id=182328
        https://trac.webkit.org/changeset/227964

        "WebDriver: addCookie command should prepend a dot to domain
        if missing"
        https://bugs.webkit.org/show_bug.cgi?id=182328
        https://trac.webkit.org/changeset/228087

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

        [Extra zoom mode] Implement number pad UI when editing `tel` and `number` inputs
        https://bugs.webkit.org/show_bug.cgi?id=182472
        <rdar://problem/35143057>

        Reviewed by Tim Horton.

        Allows the user to edit numeric input types using a number pad. See below comments for more detail.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingKeyboard]):
        (-[WKContentView _stopAssistingNode]):

        Dismiss the number pad, if it is present.

        (-[WKContentView dismissNumberPadViewController:]):
        (-[WKContentView presentNumberPadViewController:]):

        Add new helpers for showing and hiding the number pad view controller.

        (-[WKContentView presentViewControllerForAssistedNode:]):
        (-[WKContentView textInputController:didRequestDismissalWithAction:]):

        Dismiss the number pad, if it is present.

        (-[WKContentView focusedFormControlControllerDidBeginEditing:]):
        (-[WKContentView shouldPresentTextInputViewController:]): Deleted.

        Remove -shouldPresentTextInputViewController and replace it with -presentViewControllerForAssistedNode:, which
        presents the appropriate view controller given "assisted" node information.

        * UIProcess/ios/forms/WKNumberPadView.h: Added.
        * UIProcess/ios/forms/WKNumberPadView.mm: Added.
        * UIProcess/ios/forms/WKNumberPadViewController.h: Added.
        * UIProcess/ios/forms/WKNumberPadViewController.mm: Added.

        Add "WebKitAdditions harness" files for the new number pad view and view controller classes.

        * WebKit.xcodeproj/project.pbxproj:

2018-02-05  Youenn Fablet  <youenn@apple.com>

        Add logging to CacheStorageEngineConnection
        https://bugs.webkit.org/show_bug.cgi?id=182456

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::open):
        (WebKit::CacheStorageEngineConnection::remove):
        (WebKit::CacheStorageEngineConnection::caches):
        (WebKit::CacheStorageEngineConnection::retrieveRecords):
        (WebKit::CacheStorageEngineConnection::deleteMatchingRecords):
        (WebKit::CacheStorageEngineConnection::putRecords):
        (WebKit::CacheStorageEngineConnection::reference):
        (WebKit::CacheStorageEngineConnection::dereference):
        * Platform/Logging.h:

2018-02-05  Daniel Bates  <dabates@apple.com>

        REGRESSION (r222795): Nike app "Refused to set unsafe header" when adding and viewing cart
        https://bugs.webkit.org/show_bug.cgi?id=182491
        <rdar://problem/36533447>

        Reviewed by Brent Fulgham.

        Exempt Nike from the XHR header restrictions in r222795.

        Following r222795 only Dashboard widgets are allowed to set arbitrary XHR headers.
        However Nike also depends on such functionality.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowSettingAnyXHRHeaderFromFileURLs):

2018-02-02  Brent Fulgham  <bfulgham@apple.com>

        Improve NetworkResourceLoader logging so it can be used for 'setCookiesFromDOM'
        https://bugs.webkit.org/show_bug.cgi?id=182455
        <rdar://problem/36626601>

        Reviewed by Chris Dumez.

        Refactor "logCookieInformation" so that it can be used for resource loads and DOM cookie
        manipulation. Place the generally useful logic in a static method that can be invoked
        from other places in the NetworkProcess.

        Call the new refactored method from NetworkConnectionToWebProcess::setCookiesFromDOM so
        we can perform logging there as well.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM): Call the new logging method
        (when enabled).
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldLogCookieInformation): Changed to static method.
        (WebKit::escapeForJSON): Made a static function so it could be shared between multiple
        methods.
        (WebKit::NetworkResourceLoader::logCookieInformation const): Refactor into two methods.
        (WebKit::NetworkResourceLoader::logCookieInformation): Ditto.
        (WebKit::NetworkResourceLoader::shouldLogCookieInformation const): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): Switch to user-enabled release logging
        to track partitioning and blocking behavior.

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

        Storage Access API: Add testRunner.getAllStorageAccessEntries() to make testing easier and more explicit
        https://bugs.webkit.org/show_bug.cgi?id=181601
        <rdar://problem/36475837>

        Reviewed by Alex Christensen.

        http/tests/storageAccess/request-and-grant-access-then-detach-should-not-have-access.html
        was found to be flaky. With the testRunner.hasStorageAccessEntry() getter
        it's possible to check access even if a frame doesn't respond timely to
        postMessage after detach and attach.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getAllStorageAccessEntries):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getAllStorageAccessEntries:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getAllStorageAccessEntries):
        (WebKit::NetworkProcessProxy::allStorageAccessEntriesResult):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getAllStorageAccessEntries):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-02-05  Daniel Bates  <dabates@apple.com>

        Disallow evaluating JavaScript from NPP_Destroy() in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=181889
        <rdar://problem/36674701>

        Reviewed by Brent Fulgham.

        Make the behavior of WebKit match the behavior of WebKitLegacy on Mac.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (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):
        Bail out if the plugin is executing NPP_Destroy().

        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::destroyPlugin):
        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::isBeingDestroyed const):
        Move bookkeeping of whether the plugin is being destroyed from PluginView
        to here. This makes it straightforward for NPObjectMessageReceiver to query
        this information.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::~PluginView):
        (WebKit::PluginView::destroyPluginAndReset):
        (WebKit::PluginView::recreateAndInitialize):
        (WebKit::PluginView::protectPluginFromDestruction):
        (WebKit::PluginView::unprotectPluginFromDestruction):
        Move bookkeeping of whether the plugin is being destroyed from here
        to Plugin.

        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::isBeingDestroyed const): Turn around and ask the plugin if it
        is being destroyed, if we have one.

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: addCookie command should prepend a dot to domain if missing
        https://bugs.webkit.org/show_bug.cgi?id=182328
        <rdar://problem/37116398>

        Reviewed by Michael Catanzaro.

        RFC 2965: If an explicitly specified value does not start with a dot, the user agent supplies a leading dot.

        Fixes: imported/w3c/webdriver/tests/cookies/add_cookie.py::test_add_domain_cookie

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

2018-02-03  Tim Horton  <timothy_horton@apple.com>

        UI process sometimes crashes under -[WKContentView _lookupForWebView:]
        https://bugs.webkit.org/show_bug.cgi?id=182460
        <rdar://problem/33260602>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _lookupForWebView:]):
        If you have a range selection, but no rects for the selection, retrieving
        the 0th element of selectionRects will crash the UI process. To fix, in
        this case, use the rect for the starting caret instead.

        It doesn't seem like the presentationRect is actually currently used for
        the Lookup service, so the only impact is that we shouldn't crash anymore.

2018-02-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove remaining dead !USE(NETWORK_SESSION) code
        https://bugs.webkit.org/show_bug.cgi?id=182451

        Reviewed by Alex Christensen.

        DownloadCurl.cpp and AuthenticationManagerSoup.cpp have been dead code since NETWORK_SESSION
        became mandatory.

        * NetworkProcess/Downloads/curl/DownloadCurl.cpp: Removed.
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * Shared/Authentication/soup/AuthenticationManagerSoup.cpp: Removed.

2018-02-02  Youenn Fablet  <youenn@apple.com>

        CacheStorage should check for origin file presence when computing the origin of a folder
        https://bugs.webkit.org/show_bug.cgi?id=182454

        Reviewed by Chris Dumez.

        In case caches is opened for an origin but no cache is added, we do not have a caches name file but we do have an origin filename.
        We should be checking the origin filename anyway since we will be reading it afterwards.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::retrieveOriginFromDirectory):

2018-02-02  Youenn Fablet  <youenn@apple.com>

        Configure serviceWorkerRegistrationDirectory on the web site data store and move it to a Caches subfolder as a default
        https://bugs.webkit.org/show_bug.cgi?id=182403
        <rdar://problem/36673358>

        Reviewed by Alex Christensen.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration): Setting serviceWorkerRegistrationDirectory for legacy stores.

2018-02-02  Youenn Fablet  <youenn@apple.com>

        Clearing all service worker registrations should wait for importing service worker registration to finish
        https://bugs.webkit.org/show_bug.cgi?id=182407

        Reviewed by Chris Dumez.

        Updating API to take a completion handler.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2018-02-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] MSVC doesn't seem to like "friend class NeverDestroyed<Foo>"
        https://bugs.webkit.org/show_bug.cgi?id=182081

        Reviewed by Yusuke Suzuki.

        The template friend class, which belongs to a different namespace,
        can't access private member if its friend declaration is specified
        without the namespace and with class keyword.

        Replaced "friend class NeverDestroyed<Foo>" with "friend NeverDestroyed<Foo>".

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/capture/NetworkCaptureManager.h:
        * PluginProcess/PluginProcess.h:
        * Shared/CallbackID.h:
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        * StorageProcess/StorageProcess.h:
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/gtk/PluginInfoCache.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        * UIProcess/gtk/HardwareAccelerationManager.h:
        * UIProcess/gtk/WaylandCompositor.h:
        * UIProcess/linux/MemoryPressureMonitor.h:
        * UIProcess/mac/ServicesController.h:
        * WebProcess/InjectedBundle/API/glib/WebKitExtensionManager.h:
        * WebProcess/Plugins/WebPluginInfoProvider.h:
        * WebProcess/WebCoreSupport/WebPasteboardOverrides.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-02-02  Youenn Fablet  <youenn@apple.com>

        Configure serviceWorkerRegistrationDirectory on the web site data store and move it to a Caches subfolder as a default
        https://bugs.webkit.org/show_bug.cgi?id=182403

        Reviewed by Alex Christensen.

        WebsiteDataStore is the place to set configuration information such as service worker registration path.
        This patch updates WebKit code accordingly.
        By default, the service worker registration path is in a Caches subfolder, similarly to cache API path.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyServiceWorkerDatabaseDirectory): Deleted.
        (WKContextConfigurationSetServiceWorkerDatabaseDirectory): Deleted.
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _serviceWorkerRegistrationDirectory]):
        (-[WKWebsiteDataStore _setServiceWorkerRegistrationDirectory:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::serviceWorkerRegistrationDirectory const):
        (WebKit::WebsiteDataStore::setServiceWorkerRegistrationDirectory):
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        * UIProcess/gtk/WebProcessPoolWPE.cpp:

2018-02-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra Zoom Mode] Implement support for indirect mainframe scrolling
        https://bugs.webkit.org/show_bug.cgi?id=182421
        <rdar://problem/35142694>

        Reviewed by Tim Horton.

        Makes a few small adjustments to WKScrollView to improve mainframe scrolling, and disable the pinch gesture for
        zooming. See below for more details.

        * UIProcess/API/Cocoa/WKWebView.mm:

        Remove a now-unneeded WebKitAdditions import.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView initWithFrame:]):

        Add imports for -Before and -After versions of WKScrollViewAdditions.

        (-[WKScrollView addGestureRecognizer:]):

        Override -addGestureRecognizer here to prevent touches on the pinch gesture recognizer from being recognized.
        I chose this approach instead of just disabling the gesture in -initWithFrame: because (1) the pinch gesture
        recognizer is lazily created when setting minimum or maximum zoom scales, rather than immediately in
        -initWithFrame:, and (2) even if we set the -enabled to NO, UIKit later resets it to YES in other codepaths.

2018-02-01  Tim Horton  <timothy_horton@apple.com>

        WebKit fails to build (_startAssistingNode has conflicting parameters)
        https://bugs.webkit.org/show_bug.cgi?id=182417
        <rdar://problem/36965318>

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.h:
        Use Big BOOL like in the implementation.

2018-02-01  Brent Fulgham  <bfulgham@apple.com>

        Improve NetworkResourceLogger to report blocked (versus non-partitioned) cookies
        https://bugs.webkit.org/show_bug.cgi?id=182408
        <rdar://problem/36918028>

        Reviewed by Chris Dumez.

        Update the logging method to report blocked origins, rather than logging them as non-partitioned
        loads that have no cookies or other content.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::logCookieInformation const):

2018-02-01  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r222824): UI process crashes in WebKit::WebBackForwardList::backItem const
        <https://webkit.org/b/182409>
        <rdar://problem/35495094>

        Reviewed by Alex Christensen.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::goToItem): Fix typo so the for loop
        actually checks each value in m_entries.

2018-02-01  Youenn Fablet  <youenn@apple.com>

        Delay service worker process creation until actually needed by SWServer
        https://bugs.webkit.org/show_bug.cgi?id=182301

        Reviewed by Chris Dumez.

        Do not create a service worker process at creation of the first SWServerConnection.
        Wait for a WebProcess message that needs it:
        - postMessage message
        - fetchEvent message
        - job scheduling.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::establishSWServerConnection):

2018-02-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Implement basic support for interacting with text form controls
        https://bugs.webkit.org/show_bug.cgi?id=182401
        <rdar://problem/35143035>

        Reviewed by Tim Horton.

        Add UI support for interacting with and editing text form controls when extra zoom mode is enabled. See below
        for more details.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _textInteractionGesturesEnabled]):
        (-[WKWebViewConfiguration _setTextInteractionGesturesEnabled:]):
        (-[WKWebViewConfiguration _longPressActionsEnabled]):
        (-[WKWebViewConfiguration _setLongPressActionsEnabled:]):

        Introduce two new web view configuration flags: `textInteractionGesturesEnabled` and `longPressActionsEnabled`.
        The former determines whether text interaction gestures (i.e. text selection, moving the caret, showing UI for
        IME, etc.) are enabled. The latter determines whether or not long press actions (i.e. touch callout, share
        sheet, etc.) are enabled. These are disabled by default only in extra zoom mode.

        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setTextAsync):

        Add a way to set the text value of a currently edited text form control. This will either set the text value of
        an input, a. la. autofill, or overwrite the contents of a contenteditable area by selecting everything and
        inserting the given text.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::focusNextAssistedNode):

        Add a default argument for the completion callback.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView _actionForLongPressFromPositionInformation:]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsNearMarkedText:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView insertionPointColor]):

        Respect the web view configuration flags above by bailing early from text interaction and long press action
        sheet methods.

        (-[WKContentView _startAssistingKeyboard]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

        Add a flag indicating whether we are in the process of changing focus from one node to another. We use this to
        decide whether or not we want to present the text input view controller right away, or just reload the focused
        form control overlay. When we stop "assisting" a node, we also keep the focused form control overlay up if we're
        only changing focus to another form control.

        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView presentFocusedFormControlViewController:]):
        (-[WKContentView dismissFocusedFormControlViewController:]):
        (-[WKContentView shouldPresentTextInputViewController:]):
        (-[WKContentView presentTextInputViewController:]):
        (-[WKContentView dismissTextInputViewController:]):

        Introduce helpers for managing presentation of the focused form control overlay and text input view controller.
        All -present and -dismiss helpers here are idempotent. These view controllers are presented from the content
        view's view controller for fullscreen presentation.

        (-[WKContentView textInputController:didCommitText:]):
        (-[WKContentView textInputController:didRequestDismissalWithAction:]):
        (-[WKContentView focusedFormControlControllerDidSubmit:]):
        (-[WKContentView focusedFormControlControllerDidCancel:]):
        (-[WKContentView focusedFormControlControllerDidBeginEditing:]):
        (-[WKContentView highlightedRectForFocusedFormControlController:inCoordinateSpace:]):
        (-[WKContentView actionNameForFocusedFormControlController:]):
        (-[WKContentView focusedFormControlControllerDidRequestNextNode:]):
        (-[WKContentView focusedFormControlControllerDidRequestPreviousNode:]):
        (-[WKContentView hasNextNodeForFocusedFormControlController:]):
        (-[WKContentView hasPreviousNodeForFocusedFormControlController:]):

        Implement delegate methods for the focused form control and text input view controllers. This mainly involves
        straightforward plumbing of pieces of AssistedNodeInformation on the content view.

        (-[WKContentView pointIsInAssistedNode:]): Deleted.

        Remove a method that was still implemented only for binary compatibility with iOS 10.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTextAsync):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Shift + mouse scroll should scroll horizontally
        https://bugs.webkit.org/show_bug.cgi?id=181629

        Reviewed by Michael Catanzaro.

        Swap scroll direction when Shift is pressed for consistency with GtkScrolledWindow.

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

2018-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r227893): fast/events/touch/touch-stale-node-crash.html and other tests crash
        https://bugs.webkit.org/show_bug.cgi?id=182350

        Reviewed by Carlos Alberto Lopez Perez.

        Ensure events synthesized from touch gestures have a valid window, screen and device.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/gtk/GestureController.h: Add virtual destructor to GestureControllerclient.

2018-01-31  Simon Fraser  <simon.fraser@apple.com>

        Use different debug red colors for different contexts
        https://bugs.webkit.org/show_bug.cgi?id=182362

        Reviewed by Tim Horton.
        
        Pure red is used elsehwere in the system as a debug color indicator, so use different
        shades of red for WebKit in the two places where we paint a reddish wash in debug builds,
        so they are identifiable.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):

2018-01-31  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make JavaScriptCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182303

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * Scripts/generate-forwarding-headers.pl:

2018-01-31  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r227942.

        r227875 should not have been rolled out.

        Reverted changeset:

        "Unreviewed, rolling out r227875."
        https://bugs.webkit.org/show_bug.cgi?id=182357
        https://trac.webkit.org/changeset/227942

2018-01-31  Michael Catanzaro  <mcatanzaro@igalia.com>

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

        Missing cross-platform TestController implementation

        Reverted changeset:

        "Add callbacks to testRunner.statisticsSetShouldPartitionCookiesForHost() and testRunner.statisticsUpdateCookiePartitioning()"
        https://bugs.webkit.org/show_bug.cgi?id=181958
        https://trac.webkit.org/changeset/227875

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsUpdateCookiePartitioning):
        (WKWebsiteDataStoreSetStatisticsShouldPartitionCookiesForHost):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _resourceLoadStatisticsUpdateCookiePartitioning]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldPartitionCookies:forHost:]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsUpdateCookiePartitioning:]): Deleted.
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldPartitionCookies:forHost:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::logNonRecentUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdate):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearPartitioningStateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::mergeWithDataFromDecoder):
        (WebKit::WebResourceLoadStatisticsStore::clearInMemory):
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning):
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains):
        (WebKit::WebResourceLoadStatisticsStore::clearPartitioningStateForDomains):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-01-31  Brent Fulgham  <bfulgham@apple.com>

        Follow-up to r227939.
        https://bugs.webkit.org/show_bug.cgi?id=182354
        <rdar://problem/37046844>

        Make sure the correct sandbox is used on iOS as well.

        * StorageProcess/ios/StorageProcessIOS.mm:
        (WebKit::StorageProcess::initializeSandbox):

2018-01-31  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r220094): com.apple.WebKit.Storage lost its sandbox
        https://bugs.webkit.org/show_bug.cgi?id=182354
        <rdar://problem/37046844>

        Reviewed by Ryosuke Niwa.

        The Database process was renamed to Storage, but it's sandbox was not updated.

        * Configurations/WebKit.xcconfig: Update for sandbox rename.
        * DerivedSources.make: Ditto.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Databases.sb: Removed.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Storage.sb: Copied from Resources/SandboxProfiles/ios/com.apple.WebKit.Databases.sb.
        * StorageProcess/mac/com.apple.WebKit.Databases.sb.in: Removed.
        * StorageProcess/mac/com.apple.WebKit.Storage.sb.in: Copied from StorageProcess/mac/com.apple.WebKit.Databases.sb.in.
        * WebKit.xcodeproj/project.pbxproj: Update for sandbox rename.

2018-01-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r227223): http/tests/resourceLoadStatistics/clear-in-memory-and-persistent-store-one-hour.html, http/tests/resourceLoadStatistics/grandfathering.html timing out on GTK, WPE
        https://bugs.webkit.org/show_bug.cgi?id=182222

        Reviewed by Alex Christensen.

        Add callbacks to notify when resource load statistics deletion is complete.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2018-01-31  Tim Horton  <timothy_horton@apple.com>

        Occasional null deref under WebPageProxy::updateBackingStoreDiscardableState()
        https://bugs.webkit.org/show_bug.cgi?id=182349
        <rdar://problem/27822258>

        Reviewed by Simon Fraser.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
        m_drawingArea can be null during process launch and relaunch.

        Cocoa ports don't use the result of setBackingStoreIsDiscardable(),
        but they do run this code to keep it up to date.

2018-01-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Move gir and typelib generation into ENABLE_INTROSPECTION conditional
        https://bugs.webkit.org/show_bug.cgi?id=182308

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake:

2018-01-31  Youenn Fablet  <youenn@apple.com>

        Remove StorageToWebProcessConnection::removeSWServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=182305

        Reviewed by Chris Dumez.

        * StorageProcess/StorageToWebProcessConnection.cpp:
        (WebKit::StorageToWebProcessConnection::removeSWServerConnection): Deleted.
        * StorageProcess/StorageToWebProcessConnection.h:
        * StorageProcess/StorageToWebProcessConnection.messages.in:

2018-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r227544): [GTK] contextMenuEvent is NULL on CONTEXT_MENU call
        https://bugs.webkit.org/show_bug.cgi?id=182224

        Reviewed by Michael Catanzaro.

        Move the gestures handling to WebKitWebViewBase. This patch adds GestureControllerClient class, created and
        implemented by WebKitWebViewBase and used by GestureController instead of the WebPageProxy. This way we ensure
        events are handled consistently.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithTouchEvent): Cast the GdkEvent since GestureController no longer works wirth
        const GdkEvents.
        (WebKit::PageClientImpl::zoom): Use webkit_web_view_set_zoom_level() in case of WebKitWebView or
        WebPageProxy::setPageZoomFactor() otherwise.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (ClickCounter::currentClickCountForGdkButtonEvent): Receive a GdkEvent to avoid casts.
        (webkitWebViewBaseHandleMouseEvent): Helper function to handle mouse events.
        (webkitWebViewBaseButtonPressEvent): Use webkitWebViewBaseHandleMouseEvent.
        (webkitWebViewBaseButtonReleaseEvent): Ditto.
        (webkitWebViewBaseHandleWheelEvent): Helper function to handle wheel events.
        (webkitWebViewBaseScrollEvent): Use webkitWebViewBaseHandleWheelEvent.
        (webkitWebViewBaseMotionNotifyEvent): Use webkitWebViewBaseHandleMouseEvent.
        (webkitWebViewBaseCrossingNotifyEvent): Ditto.
        (webkitWebViewBaseGestureController): Pass the widget and client to GestureController.
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::GestureController): Receives a widget and client now.
        (WebKit::GestureController::handleEvent): Remove the const.
        (WebKit::GestureController::Gesture::Gesture): Initialize client.
        (WebKit::GestureController::Gesture::handleEvent): Remove the const.
        (WebKit::GestureController::DragGesture::startDrag): Use the client instead of WebPageProxy.
        (WebKit::GestureController::DragGesture::handleDrag): Ditto.
        (WebKit::GestureController::DragGesture::handleTap): Ditto.
        (WebKit::GestureController::DragGesture::begin): Ignore the const returned by gtk_gesture_get_last_event().
        (WebKit::GestureController::DragGesture::update): Ditto.
        (WebKit::GestureController::DragGesture::end): Ditto.
        (WebKit::GestureController::DragGesture::DragGesture): Receives a widget and client now.
        (WebKit::GestureController::SwipeGesture::startMomentumScroll): Use the client instead of WebPageProxy.
        (WebKit::GestureController::SwipeGesture::swipe): Ignore the const returned by gtk_gesture_get_last_event().
        (WebKit::GestureController::SwipeGesture::SwipeGesture): Receives a widget and client now.
        (WebKit::GestureController::ZoomGesture::begin): Start the zoom.
        (WebKit::GestureController::ZoomGesture::startZoom): Use the client instead of WebPageProxy.
        (WebKit::GestureController::ZoomGesture::handleZoom): Ditto.
        (WebKit::GestureController::ZoomGesture::ZoomGesture): Receives a widget and client now.
        (WebKit::GestureController::LongPressGesture::longPressed): Use the client instead of WebKitWebView.
        (WebKit::GestureController::LongPressGesture::pressed): Ignore the const returned by gtk_gesture_get_last_event().
        (WebKit::GestureController::LongPressGesture::LongPressGesture): Receives a widget and client now.
        (WebKit::GestureController::Gesture::simulateMouseClick): Deleted.
        (WebKit::createScrollEvent): Deleted.
        * UIProcess/gtk/GestureController.h:

2018-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Web Automation: cookies returned by automation should have expiry time in seconds
        https://bugs.webkit.org/show_bug.cgi?id=182293

        Reviewed by Brian Burg.

        When creating a WebCore::Cookie from a WebDriver object we convert the given expiry time to milliseconds, but
        when creating a WebDriver object from a WebCore::Cookie we are keeping the milliseconds. We should convert to
        seconds for consistency, so that the WebDriver always handles seconds.

        Fixes: imported/w3c/webdriver/tests/cookies/get_named_cookie.py::test_get_named_cookie

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::buildObjectForCookie): Convert expiry to seconds.

2018-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed iOS build fix.

        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

2018-01-30  John Wilander  <wilander@apple.com>

        Add callbacks to testRunner.statisticsSetShouldPartitionCookiesForHost() and testRunner.statisticsUpdateCookiePartitioning()
        https://bugs.webkit.org/show_bug.cgi?id=181958
        https://bugs.webkit.org/show_bug.cgi?id=182072
        <rdar://problem/36801804>
        <rdar://problem/36845795>

        Reviewed by Brent Fulgham.

        Because of the asynchronous nature of XPC and cookies,
        we need callbacks in these TestRunner functions so that
        the layout tests can wait for state changes to finish
        before checking test conditions.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsUpdateCookiePartitioning):
        (WKWebsiteDataStoreSetStatisticsShouldPartitionCookiesForHost):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _resourceLoadStatisticsUpdateCookiePartitioning]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsUpdateCookiePartitioning:]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldPartitionCookies:forHost:]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldPartitionCookies:forHost:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::logNonRecentUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdate):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookiePartitioningUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearPartitioningStateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::mergeWithDataFromDecoder):
        (WebKit::WebResourceLoadStatisticsStore::clearInMemory):
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning):
        (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains):
        (WebKit::WebResourceLoadStatisticsStore::clearPartitioningStateForDomains):
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r227550): Resource timing API is disabled on macOS
        https://bugs.webkit.org/show_bug.cgi?id=182318

        Reviewed by Chris Dumez.

        Resource timing API should be enabled by default all versions of macOS we support now.

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

2018-01-30  Tim Horton  <timothy_horton@apple.com>

        WKWebView layout is sometimes wrong after rotation on iPhone X
        https://bugs.webkit.org/show_bug.cgi?id=182304
        <rdar://problem/34158671>

        Reviewed by Simon Fraser.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _computedContentInset]):
        (-[WKWebView _scrollViewSystemContentInset]):
        (activeMinimumLayoutSize):
        It turns out that it is not always safe to look at the safe area insets of
        children from inside layoutSubviews, even after the call to super.

        Instead, make use of the fact that WKScrollView and WKWebView have identical
        coordinate spaces, and map WKWebView's safe area insets into the WKScrollView.
        It's safe to use the scroll view's affected-edges and contentScrollInset,
        because those aren't updated at the same outside-of-layout time that
        safe area insets are.

        We could alternatively move all calls to activeMinimumLayoutSize outside
        of layoutSubviews, but that seems like a larger and riskier change.

        All attempts to write a test have failed; this depends heavily on use of
        autolayout and the mechanism by which the system updates system-owned
        safe area insets during device rotation.

2018-01-30  Don Olmstead  <don.olmstead@sony.com>

        JSExports.h should be included as <JavaScriptCore/JSExportMacros.h>
        https://bugs.webkit.org/show_bug.cgi?id=182312

        Reviewed by Michael Catanzaro.

        * config.h:

2018-01-30  Brent Fulgham  <bfulgham@apple.com>

        Add telemetry to track storage access API adoption
        https://bugs.webkit.org/show_bug.cgi?id=182197
        <rdar://problem/35803309>

        Reviewed by Chris Dumez.

        Part 2: Add telemetry for the Storage Access API case

        This change increments a counter when an origin is loaded in a first part context because
        it was granted Storage Access API permissions.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::logCookieInformation const): Add logging to indicate
        loads that happened with the Storage Access API enabled.
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess): Increment counter for
        loads using the new API.

2018-01-30  Megan Gardner  <megan_gardner@apple.com>

        Make preserve and restore focus more likely to be symmetrical
        https://bugs.webkit.org/show_bug.cgi?id=182264
        <rdar://problem/36948473>
        
        Reviewed by Tim Horton.

        Keep a stack of if we actually increment the focusState, so that
        changes to the web content do not result in asymmetric decrements to the focus state. 
        To work around problems associated with <rdar://problem/37000122>.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _restoreFocusWithToken:]):
        (-[WKContentView _preserveFocusWithToken:destructively:]):

2018-01-30  Brent Fulgham  <bfulgham@apple.com>

        Add telemetry to track storage access API adoption
        https://bugs.webkit.org/show_bug.cgi?id=182197
        <rdar://problem/35803309>

        Reviewed by Chris Dumez.
        
        This patch also handled aggregating the counts in the UIProcess, which has access to
        the right data.

        The original patch assumed the WebContent process kept track of user interaction. This is
        only tracked in the UIProcess, so we can get rid of some of the logging code adding in
        r227755.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Rollout of r227755 changes not
        needed to track the statistics.
        (WebKit::WebProcessCreationParameters::decode): Ditto.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Ditto.
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::wasAccessedAsFirstPartyDueToUserInteraction): Moved from
        the WebContent process, which does not keep track of user interaction.
        (WebKit::WebResourceLoadStatisticsStore::mergeStatistics): Aggregate counts while processing
        the statistics.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-01-30  Chris Dumez  <cdumez@apple.com>

        Make sure we never create a WebSWClientConnection with an invalid sessionID
        https://bugs.webkit.org/show_bug.cgi?id=182276
        <rdar://problem/36582633>

        Reviewed by Alex Christensen.

        Make sure we never create a WebSWClientConnection with an invalid sessionID as this
        could corrupt our hash tables.

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::swServerForSession):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::serviceWorkerConnectionForSession):
        (WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession):
        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
        (WebKit::WebToStorageProcessConnection::serviceWorkerConnectionForSession):

2018-01-30  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Fix forwarding header conflict of WebKit on WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=177202

        Reviewed by Alex Christensen.

        * PlatformWin.cmake:

2018-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: evaluateJavaScriptFunction should return null when return value is undefined
        https://bugs.webkit.org/show_bug.cgi?id=180350

        Reviewed by Carlos Alberto Lopez Perez.

        undefined can't be converted to JSON string, in which case JSON.stringify() returns undefined and we handle that
        case to return an empty string. We currently handle this case for execute script commands, but not in all other
        cases where we use evaluateJavaScriptFunction. It would be simpler if evaluateJavaScriptFunction returned null,
        because in that case we wouldn't need to handle it as a special case.

        15.2 Executing Script
        https://w3c.github.io/webdriver/webdriver-spec.html#dfn-json-clone

        Fixes: imported/w3c/webdriver/tests/state/get_element_property.py::test_element_non_existent

        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (let.AutomationSessionProxy.prototype._jsonStringify): Return "null" instead of "" when undefined is given.

2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in updateLayout while waiting for sync reply to WebPageProxy::HasInsecureContent
        https://bugs.webkit.org/show_bug.cgi?id=182273

        Reviewed by Chris Dumez.

        The assertion was caused by unrelated sync IPCs being processed while WebContent process is waiting for
        the reply to WebPageProxy::HasInsecureContent. Since this IPC can be used while creating CachedFrame,
        it's not safe to execute arbitrary code.

        Fixed the bug by using DoNotProcessIncomingMessagesWhenWaitingForSyncReply added in r227566.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::savePlatformDataToCachedFrame):

2018-01-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a build step to copy resources from WebKitAdditions as bundle resources in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=182268
        <rdar://problem/37003784>

        Reviewed by Tim Horton and Dan Bernstein.

        Adds a "Copy Additional Resources" phase when building WebKit. This phase copies resources from
        usr/local/include/WebKitAdditions/WebKit/AdditionalResources in the build directory into the
        unlocalized resources directory. If the AdditionalResources directory does not exist in the build
        directory, we fall back to searching the SDK.

        * WebKit.xcodeproj/project.pbxproj:

2018-01-29  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerClientFetch should not consider responses without Location headers as redirection responses
        https://bugs.webkit.org/show_bug.cgi?id=182134

        Reviewed by Chris Dumez.

        As per fetch spec, a response with a redirection status code but no Location header should not be considered as a redirection.
        This is also consistent with SubresourceLoader::didReceiveResponse.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):

2018-01-29  Youenn Fablet  <youenn@apple.com>

        Cache API should make sure to resolve caches.open promises in the same order as called
        https://bugs.webkit.org/show_bug.cgi?id=182193
        <rdar://problem/36930363>

        Reviewed by Chris Dumez.

        Covered by added test.
        Whenever opening/removing a cache requires writing to disk, wait to finish the task
        until any disk writing task is done.
        Applying this strategy when clearing data so that we also clear data that is pending to be written.
        For removing cache, we now return whether a cache was actually deleted by returning zero as removed cache identifier.
        WebCore uses that information to return true/false as promise resolution value.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::retrieveCaches):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::clear):
        (WebKit::CacheStorage::Caches::open):
        (WebKit::CacheStorage::Caches::remove):
        (WebKit::CacheStorage::Caches::writeCachesToDisk):
        (WebKit::CacheStorage::Caches::cacheInfos):
        (WebKit::CacheStorage::Caches::cacheInfos const): Deleted.
        * NetworkProcess/cache/CacheStorageEngineCaches.h:
        (WebKit::CacheStorage::Caches::createWeakPtr):

2018-01-29  Alex Christensen  <achristensen@webkit.org>

        Clean up API after bugs 178240 and 176474
        https://bugs.webkit.org/show_bug.cgi?id=182259

        Reviewed by Dan Bernstein.

        NS_OPTIONS should be NSUInteger, not NSInteger.  This is how all other NS_OPTIONS in WebKit are,
        and it's necessary if we get really big numbers as options.  Changing them won't cause binary
        incompatibility unless someone does signed integer comparison with currently invalid values.

        Added availability macros I forgot to add earlier.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2018-01-29  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a compile-time feature flag
        https://bugs.webkit.org/show_bug.cgi?id=182211
        <rdar://problem/36936365>

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:

2018-01-29  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Introduce debug mode as experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=182199
        <rdar://problem/36930364>

        Reviewed by Alex Christensen.

        The only changes to default behavior are:
        - Increased resolution on timestamps which is needed to be able to set shorter
          timeouts in debug mode.
        - Only update partitioning and blocking table when needed. This is an optimization
          which pays off in less XPC with shorter timeouts.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::resourceLoadStatisticsDebugMode const):
        (API::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsDebugMode):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _resourceLoadStatisticsDebugMode]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsDebugMode:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resourceLoadStatisticsDebugMode const):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-01-29  Andy Estes  <aestes@apple.com>

        [iOS] Restrict synthetic clicks to the origin that handled the underlying touch event
        https://bugs.webkit.org/show_bug.cgi?id=182252
        <rdar://problem/21555881>

        Reviewed by Tim Horton.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dispatchTouchEvent):
        (WebKit::WebPage::updatePotentialTapSecurityOrigin):

        Record the target frame origin of touch events that are potential taps, are
        TouchStart events, are targeted in frames that have touch event listeners, and are not
        handled by those listeners.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::potentialTapAtPosition):
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::cancelPotentialTapInFrame):

        Passed the target frame origin to Frame::nodeRespondingToClickEvents() then cleared it.

2018-01-29  Alex Christensen  <achristensen@webkit.org>

        Make policy checks more robust against null pointer dereferencing
        https://bugs.webkit.org/show_bug.cgi?id=182263
        <rdar://problem/34895714>

        Reviewed by Tim Horton.

        We're still dereferencing null.  Check everything.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):

2018-01-29  Brent Fulgham  <bfulgham@apple.com>

        Add telemetry to track storage access API adoption
        https://bugs.webkit.org/show_bug.cgi?id=182197
        <rdar://problem/35803309>

        Reviewed by Chris Dumez.

        Part 1: Add telemetry for the user interaction case
        
        This patch adds telemetry to track how frequently third-party cookies are
        used in a first party context due to user interaction. This will help
        understand cases where the new Storage Access API can help, and to help
        us understand if we have considered relevant use cases in its design.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::sortedPrevalentResourceTelemetry): Update for new telemetry.
        (WebKit::submitTopList): Update for new data types.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Handle the partitioning time
        passed from the UIProcess.

2018-01-29  Alex Christensen  <achristensen@webkit.org>

        Fix crash when during canAuthenticateAgainstProtectionSpace
        https://bugs.webkit.org/show_bug.cgi?id=182260
        <rdar://problem/34911343>

        Reviewed by Chris Dumez.

        If we have a valid network load with no challenge completion handler and we are
        telling it to continue with the challenge handling, something has gone wrong.
        Maybe we've just recovered from a crashed network process.  If this happens, do nothing.

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

2018-01-29  Zach Li  <zacharyli323@gmail.com>

        Warning in 32-bit WebKit build when trying to link to SafariSafeBrowsing
        https://bugs.webkit.org/show_bug.cgi?id=182251
        rdar://problem/36964995

        Reviewed by Alex Christensen.

        * Configurations/WebKit.xcconfig:
        Only link against SafariSafeBrowsing framework in 64-bit architecture.

        * Platform/spi/Cocoa/SafeBrowsingSPI.h:
        Guard the Safe Browsing code with WK_API_ENABLED.

2018-01-29  Chris Dumez  <cdumez@apple.com>

        Make sure we do not re-enter Webcore during StorageToWebProcessConnection::EstablishSWServerConnection Sync IPC
        https://bugs.webkit.org/show_bug.cgi?id=182256
        <rdar://problem/36689233>

        Reviewed by Simon Fraser.

        Make sure we do not re-enter Webcore during StorageToWebProcessConnection::EstablishSWServerConnection Sync IPC as
        this can lead to crashes such as the one in <rdar://problem/36689233>.

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

2018-01-29  Jan-Michael Brummer  <jan.brummer@tabos.org>

        [GTK] Zooming gesture incorrectly uses scale instead of zoom 
        https://bugs.webkit.org/show_bug.cgi?id=182174

        Reviewed by Michael Catanzaro.

        Switch zooming gesture to use zoom instead of scale function.

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

2018-01-29  Brady Eidson  <beidson@apple.com>

        Make it possible for apps that use both WK1 and WK2 to use MessagePorts.
        https://bugs.webkit.org/show_bug.cgi?id=182229

        Reviewed by Chris Dumez.

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

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_configurationPreferenceValues): The UI process does not need to override the 
          global singleton provider. It can remain the default ProviderImpl to allow WK1 views 
          to work fine, too.

2018-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: ASSERTION FAILED: !m_loadTimer.isActive()
        https://bugs.webkit.org/show_bug.cgi?id=182237

        Reviewed by Carlos Alberto Lopez Perez.

        We should stop the load timer when we dispatch the pending navigation callbacks due to an alert open.

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

2018-01-29  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Add GraphicsContextImplCairo::createFactory() helpers
        https://bugs.webkit.org/show_bug.cgi?id=182238

        Reviewed by Carlos Garcia Campos.

        Use GraphicsContextImplCairo::createFactory() helpers throughout the
        Cairo-specific GraphicsContext constructors in the WebKit layer.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::renderPage):

2018-01-29  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Remove the GraphicsContext(cairo_t*) constructor
        https://bugs.webkit.org/show_bug.cgi?id=182234

        Reviewed by Carlos Garcia Campos.

        Call sites of the GraphicsContext(cairo_t*) constructor are adjusted to
        instead provide a factory function that returns a fresh
        GraphicsContextImplCairo object, passing that cairo_t object to its
        constructor.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::renderPage):

2018-01-26  Megan Gardner  <megan_gardner@apple.com>

        Don't retain focus for input peripheral views
        https://bugs.webkit.org/show_bug.cgi?id=182204

        Reviewed by Tim Horton.

        Retaining focus on input peripheral views makes it so they cannot dismiss themselves with
        the current architecture. This should probably be fixed in UIKit, as there is no reason for
        focus to be retained on these views anyways, as they don't have keyboard input, but this
        guards against over-aggressive retain requests.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _restoreFocusWithToken:]):
        (-[WKContentView _preserveFocusWithToken:destructively:]):

2018-01-26  Chris Dumez  <cdumez@apple.com>

        Make sure service worker code does not launch a StorageProcess unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=182192
        <rdar://problem/36927427>

        Reviewed by Geoffrey Garen.

        When calling WebProcess::existingWebToStorageProcessConnection(), make sure we do not
        force the creation of a WebProcess connection to the StorageProcess. If there is
        no WebProcess, just return false right away.

        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession):
        * WebProcess/WebProcess.h:

2018-01-26  Alex Christensen  <achristensen@webkit.org>

        Allow cellular access for default-created ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=182179
        <rdar://problem/36572023>

        Reviewed by Andy Estes.

        This makes it so when we recover from a NetworkProcess crash (see r227590) on iOS, we will
        be able to continue browsing using cell data.

        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):

2018-01-26  Alex Christensen  <achristensen@webkit.org>

        Clean up more networking code
        https://bugs.webkit.org/show_bug.cgi?id=182161

        Reviewed by Anders Carlsson.

        Two cleanups:
        1. The WebProcess doesn't need to initialize NetworkSessions.
        2. WebFrameNetworkingContext doesn't need to have the NetworkingContext functions to support ResourceHandles in WebKit any more.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/RemoteNetworkingContext.h:
        (): Deleted.
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        * NetworkProcess/curl/RemoteNetworkingContextCurl.cpp:
        (WebKit::RemoteNetworkingContext::~RemoteNetworkingContext): Deleted.
        (WebKit::RemoteNetworkingContext::isValid const): Deleted.
        (WebKit::RemoteNetworkingContext::storageSession const): Deleted.
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::~RemoteNetworkingContext): Deleted.
        (WebKit::RemoteNetworkingContext::isValid const): Deleted.
        (WebKit::RemoteNetworkingContext::localFileContentSniffingEnabled const): Deleted.
        (WebKit::RemoteNetworkingContext::storageSession const): Deleted.
        (WebKit::RemoteNetworkingContext::sourceApplicationAuditData const): Deleted.
        (WebKit::RemoteNetworkingContext::sourceApplicationIdentifier const): Deleted.
        (WebKit::RemoteNetworkingContext::blockedError const): Deleted.
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::~RemoteNetworkingContext): Deleted.
        (WebKit::RemoteNetworkingContext::isValid const): Deleted.
        (WebKit::RemoteNetworkingContext::storageSession const): Deleted.
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::clearCachedCredentials):

2018-01-26  Jan-Michael Brummer  <jan.brummer@tabos.org>

        [GTK] Support using long-tap gesture to open context menu
        https://bugs.webkit.org/show_bug.cgi?id=140747

        Reviewed by Carlos Garcia Campos.

        Add long press gesture which simulates a secondary mouse press to open context menu.

        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::GestureController):
        (WebKit::GestureController::handleEvent):
        (WebKit::GestureController::isProcessingGestures const):
        (WebKit::GestureController::Gesture::simulateMousePress):
        (WebKit::GestureController::DragGesture::handleTap):
        (WebKit::GestureController::LongPressGesture::longPressed):
        (WebKit::GestureController::LongPressGesture::pressed):
        (WebKit::GestureController::LongPressGesture::LongPressGesture):
        * UIProcess/gtk/GestureController.h:
        (WebKit::GestureController::reset):

2018-01-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. REGRESSION(r227647): window.open() is broken in GTK and WPE after r227647.

        In r227647, API::UIClient::createNewPage() was changed to use CompletionHandler instead of Function. All
        implementations were updated expect the GLib one, and we didn't notice it because the method doesn't have the
        final/override mark.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        (UIClient::createNewPage):

2018-01-25  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR] Make WebVR available by default for developer builds
        https://bugs.webkit.org/show_bug.cgi?id=182101

        Reviewed by Michael Catanzaro.

        Moved WebVR setting to the experimental features section and make it
        available by default for developer builds for GTK and WPE.

        * Shared/WebPreferences.yaml:

2018-01-25  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r221899): Web Content process hangs when webpage tries to make a new window if the WKWebView doesn’t have a UI delegate
        https://bugs.webkit.org/show_bug.cgi?id=182152

        Reviewed by Joseph Pecoraro.

        Call the completion handler of the default API::UIClient::createNewPage.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):

2018-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WK2] Introduce new views and view controllers to support extra-zoomed text form controls
        https://bugs.webkit.org/show_bug.cgi?id=182000
        <rdar://problem/35143035>

        Reviewed by Tim Horton.

        Add new files to support text form control editing while extra-zoomed.

        * UIProcess/ios/forms/WKFocusedFormControlView.h: Added.
        * UIProcess/ios/forms/WKFocusedFormControlView.mm: Added.
        * UIProcess/ios/forms/WKFocusedFormControlViewController.h: Added.
        * UIProcess/ios/forms/WKFocusedFormControlViewController.mm: Added.
        * UIProcess/ios/forms/WKTextFormControlViewController.h: Added.
        * UIProcess/ios/forms/WKTextFormControlViewController.mm: Added.
        * UIProcess/ios/forms/WKTextInputViewController.h: Added.
        * UIProcess/ios/forms/WKTextInputViewController.mm: Added.
        * UIProcess/ios/forms/WKTextSuggestionButton.h: Added.
        * UIProcess/ios/forms/WKTextSuggestionButton.mm: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-01-25  Chris Dumez  <cdumez@apple.com>

        Clients.get(id) should only returns clients in the service worker's origin
        https://bugs.webkit.org/show_bug.cgi?id=182149
        <rdar://problem/36882310>

        Reviewed by Youenn Fablet.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):

2018-01-25  Youenn Fablet  <youenn@apple.com>

        WebPluginInfoProvider should handle null host queries
        https://bugs.webkit.org/show_bug.cgi?id=182112

        Reviewed by Chris Dumez.

        Return early if host is null.

        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::populatePluginCache):

2018-01-25  Simon Fraser  <simon.fraser@apple.com>

        ASSERT(CGSizeEqualToSize(m_resizeScrollOffset, CGSizeZero)) in WebViewImpl::setFrameAndScrollBy()
        https://bugs.webkit.org/show_bug.cgi?id=182082
        rdar://problem/13971838

        Reviewed by Tim Horton.

        Safari could call WebViewImpl::setFrameAndScrollBy() multiple times with different scroll offsets,
        triggering this assertion.

        Rename to m_resizeScrollOffset to m_scrollOffsetAdjustment to reduce confusion with actual scroll offsets.
        This parameter has no effect on macOS, but is used by the -[WKWebView setFrame:andScrollBy:] so at some point
        needs to be hooked up to allow synchronous view resize and scroll adjustment (e.g. for the Find bar animation).
        
        Remove DrawingAreaProxy's m_layerPosition which was unused, and remove the parameters from the UpdateGeometry message.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setFrameAndScrollBy):
        (WebKit::WebViewImpl::setDrawingAreaSize):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setSize):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateGeometry):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateGeometry):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):

2018-01-25  Keith Rollin  <krollin@apple.com>

        Add logging to facilitate binding of WebContent and Network processes to UI process
        https://bugs.webkit.org/show_bug.cgi?id=182066

        Reviewed by Brent Fulgham.

        When examining sysdiagnose logs and tracing events from one process to
        another, it would be helpful to know which WebKit processes were
        related to each other. When Safari, Mail, Messages, etc. are all
        running at the same time, it may otherwise be difficult to know if a
        particular Network process, for example was associated with Safari or
        some other application. Add some logging to the creation of WebContent
        and Network processes to identify their "presenting process" (parent
        application).

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * Platform/Logging.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-01-25  Youenn Fablet  <youenn@apple.com>

        DocumentLoader should interrupt ongoing load when getting a redirection from network that matches a service worker
        https://bugs.webkit.org/show_bug.cgi?id=182115

        Reviewed by Alex Christensen.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):

2018-01-25  Alex Christensen  <achristensen@webkit.org>

        Fix crash when preconnecting while closing private browsing
        https://bugs.webkit.org/show_bug.cgi?id=182114
        <rdar://problem/35637284>

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/PreconnectTask.cpp:
        There is a race condition when destroying a session while a page is initiating a preconnect.
        If this happens, fail gracefully instead of trying to preconnect with a null session.

2018-01-25  Dan Bernstein  <mitz@apple.com>

        [Mac] Enable library validation for Networking & Storage XPC services
        https://bugs.webkit.org/show_bug.cgi?id=173424
        <rdar://problem/32386565>

        Reviewed by Joseph Pecoraro.

        * Configurations/BaseXPCService.xcconfig: Moved the definitions of
          WK_LIBRARY_VALIDATION_ENABLED and WK_LIBRARY_VALIDATION_CODE_SIGN_FLAGS from
          WebContentService.xcconfig to here and made them Mac-only at this level.
        * Configurations/NetworkService.xcconfig: Also set OTHER_CODE_SIGN_FLAGS to
          WK_LIBRARY_VALIDATION_CODE_SIGN_FLAGS.
        * Configurations/StorageService.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Moved definitions from here to
          BaseXPCService.xcconfig.

2018-01-25  David Hyatt  <hyatt@apple.com>

        Enable lines clamp support for Apple Mail by default
        https://bugs.webkit.org/show_bug.cgi?id=182113

        Reviewed by Dean Jackson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::appleMailLinesClampEnabled):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_cpuLimit):

2018-01-25  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][GTK][WPE] Remove the WebVR public API added in r227518
        https://bugs.webkit.org/show_bug.cgi?id=182102

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:

2018-01-25  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][GTK][WPE] Remove the WebVR public API added in r227518
        https://bugs.webkit.org/show_bug.cgi?id=182102

        Reviewed by Carlos Garcia Campos.

        This new public API was not supposed to be included in the patch
        that added OpenVR to the tree and to the build.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_webvr): Deleted.
        (webkit_settings_set_enable_webvr): Deleted.
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/wpe/WebKitSettings.h:

2018-01-25  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Fix build with touch events disabled

        Unreviewed build fix.

        Explicitly include gtk.h in files that were indirectly getting it
        only when touch events were enabled.
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        * UIProcess/gtk/WaylandCompositor.h:

2018-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: test imported/selenium/py/test/selenium/webdriver/common/alerts_tests.py crashes in debug
        https://bugs.webkit.org/show_bug.cgi?id=182096

        Reviewed by Carlos Alberto Lopez Perez.

        It's an assert in HashTable iterators checkValidity(). The problem is that we get the keys to iterate the values
        and the map is modified inside the loop. We need to use copyToVector to copy the keys.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::respondToPendingPageNavigationCallbacksWithTimeout):
        (WebKit::WebAutomationSession::respondToPendingFrameNavigationCallbacksWithTimeout):
        (WebKit::WebAutomationSession::willShowJavaScriptDialog):

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Gracefully recover from NetworkProcess crashes in private browsing
        https://bugs.webkit.org/show_bug.cgi?id=182073
        <rdar://problem/36572023>

        Reviewed by Geoff Garen.

        If we're using a non-persistent WKWebsiteDataStore and the NetworkProcess crashes and we try to do a load,
        then the WebProcess restarts the NetworkProcess but doesn't recreate the ephemeral session in the NetworkProcess.
        When this happens, we've already lost the browsing state in memory in the NetworkProcess, but we don't want to hang.
        If this is the problem, then just recreate the ephemeral session and continue loading.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForFrame):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        (WebKit::WebsiteDataStoreParameters::legacyPrivateSessionParameters): Deleted.
        * Shared/WebsiteDataStoreParameters.h:
        (WebKit::WebsiteDataStoreParameters::legacyPrivateSessionParameters):

2018-01-24  Dan Bernstein  <mitz@apple.com>

        Enable library validation on the Web Content service
        Part 1 of https://bugs.webkit.org/show_bug.cgi?id=172365
        <rdar://problem/26470661>

        Reviewed by David Kilzer.

        This makes the Web Content process signed with the Library Validation flag in production
        builds. Because doing so would prevent engineering builds of Apple apps that use an
        injected bundle from working, this also adds a Development version of the service, which
        does not enforce Library Validation. The UI process chooses to use the Development service
        iff it would need to load an injected bundle that is not part of the OS.

        * Configurations/DebugRelease.xcconfig: Disable Library Validation in engineering builds.

        * Configurations/WebContentService.Development.xcconfig: Added. Like the normal service, but
          only installed when WebKit is installed in the OS, and uses a Development variant.

        * Configurations/WebContentService.xcconfig: For the Development variant, append
          ".Development" to the product name, which is also the service identifier. Enable Library
          Validation for the Normal variant of the service when WK_LIBRARY_VALIDATION_ENABLED allows
          it.

        * UIProcess/Launcher/ProcessLauncher.h: Add nonValidInjectedCodeAllowed member to
          LaunchOptions, false by default.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName): Use the Development variant if nonValidInjectedCodeAllowed is true.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions): Initialize nonValidInjectedCodeAllowed using
           the new shouldAllowNonValidInjectedCode().
        (WebKit::WebProcessProxy::shouldAllowNonValidInjectedCode const): Generic implementation
          that returns false.
        * UIProcess/WebProcessProxy.h: Declared shouldAllowNonValidInjectedCode.
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::shouldAllowNonValidInjectedCode const): Return true if this is
          system WebKit with a non-system injected bundle.

        * WebKit.xcodeproj/project.pbxproj: Added new service target.

2018-01-24  Chris Dumez  <cdumez@apple.com>

        Add a IPC::SendSyncOption indicating we should not process incoming IPC while waiting for the sync reply
        https://bugs.webkit.org/show_bug.cgi?id=182021
        <rdar://problem/21629943>

        Reviewed by Ryosuke Niwa.

        Add a new DoNotProcessIncomingMessagesWhenWaitingForSyncReply SendSyncOption that the caller can
        set when calling sendSync(). This indicates that the sendSync() should return only when we receive
        the response to our sync IPC message, and that we should not process ANY incoming IPC in the meantime.

        This patch also starts using this flag in 3 places where we know processing incoming IPC is an issue
        and is causing crashes.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendSyncMessage):
        When DoNotProcessIncomingMessagesWhenWaitingForSyncReply SendSyncOption is set, make sure
        we set the ShouldDispatchMessageWhenWaitingForSyncReply flag on the encoder. If we did not set this
        flag then it could cause deadlocks when the destination process is also waiting on a synchronous
        IPC from us. Normally, this flag already gets set for sync messages because sendSyncMessage() calls
        sendMessage() with DispatchMessageEvenWhenWaitingForSyncReply SyncOption. However, sendMessage()
        ignores the DispatchMessageEvenWhenWaitingForSyncReply flag if the
        m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage flag is set on the
        connection. Note that this flag is set on the connection from the WebProcess to the UIProcess at
        the moment, which is why we saw deadlocks on the previous iteration of this patch.

        (IPC::Connection::waitForSyncReply):
        If DoNotProcessIncomingMessagesWhenWaitingForSyncReply SendSyncOption is set, do not
        process incoming IPC messages while waiting for our sync IPC reply.

        * Platform/IPC/Connection.h:
        Add new SendSyncOption.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::testIncomingSyncIPCMessageWhileWaitingForSyncReply):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        Testing infrastructure.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        Use new flag.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::testIncomingSyncIPCMessageWhileWaitingForSyncReply):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Testing infrastructure.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        Use new flag.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::syncIPCMessageWhileWaitingForSyncReplyForTesting):
        Testing infrastructure.

        (WebKit::WebProcess::ensureNetworkProcessConnection):
        Use new flag.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Testing infrastructure.

2018-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove duplicate preference update for WebAuthentication value
        https://bugs.webkit.org/show_bug.cgi?id=182058

        Reviewed by Brian Burg.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        An identical update already happens in generated code.

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Remove WebProcess access to QTKit
        https://bugs.webkit.org/show_bug.cgi?id=182035

        Reviewed by Alexey Proskuryakov.

        * WebProcess/com.apple.WebProcess.sb.in:
        This isn't needed any more.  We only have a little bit of code that uses QTKit which we should remove,
        and it's only used for fullscreen controls in WebKitLegacy.  Let's tighten up the sandbox!

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Remove pre-Sierra-OS-specific code in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=182024

        Reviewed by Tim Horton.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * Shared/Cocoa/DataDetectionResult.mm:
        (WebKit::DataDetectionResult::encode const):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::Payment>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentContact>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentMerchantSession>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentMethod>::encode):
        * Shared/WebPreferencesDefaultValues.h:
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::wantsExtendedRange):
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        * Shared/mac/CodeSigning.mm:
        (WebKit::codeSigningIdentifier):
        (WebKit::codeSigningIdentifierForCurrentProcess):
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::encode const):
        * Shared/mac/PasteboardTypes.mm:
        (WebKit::PasteboardTypes::forURL):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData):
        (IPC::ArgumentCoder<Credential>::encodePlatformData):
        (IPC::ArgumentCoder<ContentFilterUnblockHandler>::encode):
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encodePlatformData):
        * Shared/mac/WebHitTestResultData.mm:
        (WebKit::WebHitTestResultData::platformEncode const):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setObject:forBundleParameter:]):
        (-[WKProcessPool _setObjectsForBundleParametersWithDictionary:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _handleAcceptedCandidate:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleAcceptedCandidate):
        (WebKit::WebViewImpl::performDragOperation):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]):
        * WebProcess/com.apple.WebProcess.sb.in:

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Stop using AuthenticationClient in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=182016

        Reviewed by Brady Eidson.

        It was necessary to support ResourceHandle use in WebKit, but now we're using NetworkSession everywhere in WebKit.

        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::cancelSingleChallenge):
        (WebKit::AuthenticationManager::performDefaultHandlingForSingleChallenge):
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinueForSingleChallenge):

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Remove WebProcess authentication code
        https://bugs.webkit.org/show_bug.cgi?id=182020

        Reviewed by Brady Eidson.

        * Shared/Authentication/AuthenticationManager.cpp:
        * Shared/Authentication/AuthenticationManager.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        * WebProcess/WebProcess.cpp:
        (WebKit::m_webSQLiteDatabaseTracker):

2018-01-24  Jan-Michael Brummer  <jan.brummer@tabos.org>

        [GTK] Page crash after swipe gesture running GNOME3 under wayland
        https://bugs.webkit.org/show_bug.cgi?id=181996

        Reviewed by Michael Catanzaro.

        Add missing GDK_TOUCH_CANCEL support which fixes page crashes due to cancelled gestures.
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithTouchEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (touchPointStateForEvents):
        (webkitWebViewBaseGetTouchPointsForEvent):
        (webkitWebViewBaseTouchEvent):
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::handleEvent):

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Remove unused QTKit preference
        https://bugs.webkit.org/show_bug.cgi?id=181968

        Reviewed by Alexey Proskuryakov.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPreferencesSetQTKitEnabled):
        (WKPreferencesGetQTKitEnabled):
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetQTKitEnabled): Deleted.
        (WKPreferencesGetQTKitEnabled): Deleted.
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setQTKitEnabled:]): Deleted.
        (-[WKPreferences _qtKitEnabled]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-01-24  Youenn Fablet  <youenn@apple.com>

        Fetch response should copy its url from the request if null
        https://bugs.webkit.org/show_bug.cgi?id=182048

        Reviewed by Chris Dumez.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):

2018-01-24  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix after r227518. I forgot to add the function declarations to the WPE
        header.

        * UIProcess/API/wpe/WebKitSettings.h: Added webkit_settings_get/set_enable_webvr.

2018-01-24  Youenn Fablet  <youenn@apple.com>

        Add Cache Storage engine assertion following on bug 181887
        https://bugs.webkit.org/show_bug.cgi?id=181925

        Reviewed by Alex Christensen.

        In a normal environment, the folderPath should be the same as the path computed from the ClientOrigin.
        Add assertion to verify this.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):

2018-01-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Use GDK_EVENT_PROPAGATE and GDK_EVENT_STOP in WebKitWebViewBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=182031

        Reviewed by Carlos Garcia Campos.

        No functional changes, this just replaces TRUE with GDK_EVENT_STOP and FALSE with
        GDK_EVENT_PROPAGATE, to improve readability.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseKeyReleaseEvent):
        (webkitWebViewBaseButtonPressEvent):
        (webkitWebViewBaseButtonReleaseEvent):
        (webkitWebViewBaseScrollEvent):
        (webkitWebViewBaseMotionNotifyEvent):
        (webkitWebViewBaseCrossingNotifyEvent):
        (webkitWebViewBaseTouchEvent):

2018-01-23  Eric Carlson  <eric.carlson@apple.com>

        Resign NowPlaying status when no media element is eligible
        https://bugs.webkit.org/show_bug.cgi?id=181914
        <rdar://problem/35294116>

        Reviewed by Jer Noble.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestActiveNowPlayingSessionInfo:]): Return registeredAsNowPlayingApplication
        status.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::nowPlayingInfoCallback): Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::requestActiveNowPlayingSessionInfo): Ditto.

2018-01-23  Alex Christensen  <achristensen@webkit.org>

        Use CompletionHandlers for ResourceHandleClient::didReceiveResponseAsync
        https://bugs.webkit.org/show_bug.cgi?id=181961

        Reviewed by Michael Catanzaro.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/NetworkLoad.cpp:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:

2018-01-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rollout r227216 as it seems to be causing deadlocks
        https://bugs.webkit.org/show_bug.cgi?id=182013

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForSyncReply):
        * Platform/IPC/Connection.h:
        (IPC::Connection::setShouldProcessIncomingMessagesWhileWaitingForSyncReply): Deleted.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::testIncomingSyncIPCMessageWhileWaitingForSyncReply): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
        (WebKit::WebToStorageProcessConnection::WebToStorageProcessConnection):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::WebConnectionToUIProcess):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::testIncomingSyncIPCMessageWhileWaitingForSyncReply): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::undo):
        (WebKit::WebEditorClient::redo):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::syncIPCMessageWhileWaitingForSyncReplyForTesting): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-01-23  Commit Queue  <commit-queue@webkit.org>

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

        broke build (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Remove unused QTKit preference"
        https://bugs.webkit.org/show_bug.cgi?id=181968
        https://trac.webkit.org/changeset/227437

2018-01-23  Alex Christensen  <achristensen@webkit.org>

        Remove compile guard around beacon API
        https://bugs.webkit.org/show_bug.cgi?id=182002

        Reviewed by Sam Weinig.

        It's enabled everywhere now.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetBeaconAPIEnabled):
        (WKPreferencesGetBeaconAPIEnabled):
        * config.h:

2018-01-23  Alex Christensen  <achristensen@webkit.org>

        Remove unused QTKit preference
        https://bugs.webkit.org/show_bug.cgi?id=181968

        Reviewed by Alexey Proskuryakov.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPreferencesSetQTKitEnabled):
        (WKPreferencesGetQTKitEnabled):
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetQTKitEnabled): Deleted.
        (WKPreferencesGetQTKitEnabled): Deleted.
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setQTKitEnabled:]): Deleted.
        (-[WKPreferences _qtKitEnabled]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2018-01-23  Brent Fulgham  <bfulgham@apple.com>

        [macOS] WebProcess needs TCC entitlements for media capture
        https://bugs.webkit.org/show_bug.cgi?id=181995
        <rdar://problem/36674649>

        Reviewed by Eric Carlson.

        * Configurations/WebContent-OSX.entitlements: Add delegated services needed to support media
        capture features.

2018-01-23  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Disable header postprocessing when building for macOS High Sierra
        https://bugs.webkit.org/show_bug.cgi?id=181972

        Reviewed by Anders Carlsson.

        * Configurations/WebKit.xcconfig: Adopt macOSTargetConditionals.xcconfig helpers and disable postprocessing
          when building for macOS 10.13.

2018-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Window resizing is broken after detaching to separate window
        https://bugs.webkit.org/show_bug.cgi?id=181992
        <rdar://problem/36714840>

        Reviewed by Brian Burg.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformDetach):
        Restore the inspector view's autoresizingMask to the initial value
        that works with a detached window. This gets changed when the view
        gets attached to bottom/side, so we need to revert it on detaching.

2018-01-23  Brady Eidson  <beidson@apple.com>

        Allow passing MessagePorts across processes (e.g. ServiceWorkers).
        https://bugs.webkit.org/show_bug.cgi?id=181178

        Reviewed by Andy Estes.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):
        (WebKit::WebSWServerConnection::postMessageToServiceWorkerClient):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/ServiceWorker/WebSWServerConnection.messages.in:

        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::postMessageToServiceWorkerClient):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::entangleLocalPortInThisProcessToRemote):
        (WebKit::WebProcessProxy::postMessageToRemote):

        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::postMessageToServiceWorker):
        (WebKit::WebSWClientConnection::postMessageToServiceWorkerClient):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWClientConnection.messages.in:

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::postMessageToServiceWorker):
        (WebKit::WebSWContextManagerConnection::postMessageToServiceWorkerClient):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2018-01-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r227279 and r227373.
        https://bugs.webkit.org/show_bug.cgi?id=181988

        The LayoutTest crash fix introduced an API test failure.
        (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Resign NowPlaying status when no media element is eligible"
        https://bugs.webkit.org/show_bug.cgi?id=181914
        https://trac.webkit.org/changeset/227279

        "Resign NowPlaying status when no media element is eligible"
        https://bugs.webkit.org/show_bug.cgi?id=181914
        https://trac.webkit.org/changeset/227373

2018-01-23  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r227348): ASSERT_NOT_REACHED in WebKit::ServiceWorkerClientFetch::didFinish()
        https://bugs.webkit.org/show_bug.cgi?id=181956
        <rdar://problem/36755492>

        Reviewed by Chris Dumez.

        Covered by test no longer crashing in Debug builds.
        Reset m_redirectionStatus to None when starting an SW fetch.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::start):
        (WebKit::ServiceWorkerClientFetch::didFinish):

2018-01-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] TestWebKitFindController asserts
        https://bugs.webkit.org/show_bug.cgi?id=181472

        Reviewed by Carlos Garcia Campos.

        Let's fix this in two independent ways.

        First, use a GRefPtr to hold ownership of the WebKitWebViewBackend. This way, we don't need
        to change the order in which WebKitWebView destroys its priv struct members from what is
        used in WebKitGTK+, which can lead to odd bugs.

        Additionally, just for good measure, stop resetting the find client when disposing
        WebKitFindController. This is unnecessary because it will never be destroyed before the
        WebKitWebView.

        * UIProcess/API/glib/WebKitFindController.cpp:
        (webkit_find_controller_class_init):
        (webkitFindControllerDispose): Deleted.
        * UIProcess/API/glib/WebKitWebView.cpp:
        (_WebKitWebViewPrivate::~_WebKitWebViewPrivate):
        (webkitWebViewSetProperty):
        (webkitWebViewGetProperty):
        (webkitWebViewCreatePage):
        (webkit_web_view_get_backend):
        * UIProcess/API/wpe/WebKitWebViewBackend.cpp:
        (webkitWebViewBackendCreateDefault):
        (WTF::refGPtr):
        (WTF::derefGPtr):
        * UIProcess/API/wpe/WebKitWebViewBackendPrivate.h:

2018-01-22  Jon Lee  <jonlee@apple.com>

        Update title label size
        https://bugs.webkit.org/show_bug.cgi?id=181962
        rdar://problem/36754744

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKFullScreenWindowControllerIOS.mm:
        (-[_WKFullScreenViewController setLocation:secure:trustedName:trustedSite:]): Move titleLabel properties into
        createSubviews.
        (-[_WKFullScreenViewController createSubviews]): Set the title label for both the cancel and location buttons.
        Refer to a const CGFloat for the font size.

2018-01-22  Megan Gardner  <megan_gardner@apple.com>

        Temporarily restore block selection code conditionally
        https://bugs.webkit.org/show_bug.cgi?id=181895
        <rdar://problem/36567325>

        Reviewed by Tim Horton.

        We need to restore this code temporarily to avoid a crash.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):

2018-01-22  Zach Li  <zacharyli323@gmail.com>

        We should not try to link against the Safe Browsing framework on watchOS and tvOS.
        https://bugs.webkit.org/show_bug.cgi?id=181965.

        Reviewed by Tim Horton.

        * Configurations/WebKit.xcconfig:

2018-01-22  Alex Christensen  <achristensen@webkit.org>

        Remove pre-NetworkSession loading code
        https://bugs.webkit.org/show_bug.cgi?id=181944

        Reviewed by Tim Horton.

        We were keeping it around for El Capitan.

        * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm:
        (WebKit::LegacyCustomProtocolManager::registerProtocolClass):
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.cpp:
        (WebKit::LegacyCustomProtocolManager::initialize):
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.h:
        * NetworkProcess/Downloads/BlobDownloadClient.cpp: Removed.
        * NetworkProcess/Downloads/BlobDownloadClient.h: Removed.
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::~Download):
        (WebKit::Download::cancel):
        (WebKit::Download::didReceiveChallenge):
        (WebKit::Download::didFinish):
        (WebKit::Download::isAlwaysOnLoggingAllowed const):
        (WebKit::Download::start): Deleted.
        (WebKit::Download::startWithHandle): Deleted.
        (WebKit::Download::didStart): Deleted.
        (WebKit::Download::willSendRedirectedRequest): Deleted.
        (WebKit::Download::didReceiveAuthenticationChallenge): Deleted.
        (WebKit::Download::didReceiveResponse): Deleted.
        (WebKit::Download::shouldDecodeSourceDataOfMIMEType): Deleted.
        (WebKit::Download::decideDestinationWithSuggestedFilename): Deleted.
        (WebKit::Download::decideDestinationWithSuggestedFilenameAsync): Deleted.
        (WebKit::Download::didDecideDownloadDestination): Deleted.
        (WebKit::Download::continueDidReceiveResponse): Deleted.
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::setBlobFileReferences): Deleted.
        (WebKit::Download::request const): Deleted.
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::willDecidePendingDownloadDestination):
        (WebKit::DownloadManager::convertNetworkLoadToDownload):
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
        (WebKit::DownloadManager::resumeDownload):
        (WebKit::DownloadManager::cancelDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        * NetworkProcess/Downloads/ios/DownloadIOS.mm: Removed.
        * NetworkProcess/Downloads/mac/DownloadMac.mm: Removed.
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        * NetworkProcess/NetworkDataTask.cpp:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::setDefersLoading):
        (WebKit::NetworkLoad::cancel):
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::continueDidReceiveResponse):
        (WebKit::NetworkLoad::shouldCaptureExtraNetworkLoadMetrics const):
        (WebKit::NetworkLoad::didReceiveResponseAsync): Deleted.
        (WebKit::NetworkLoad::didReceiveBuffer): Deleted.
        (WebKit::NetworkLoad::didFinishLoading): Deleted.
        (WebKit::NetworkLoad::didFail): Deleted.
        (WebKit::NetworkLoad::willSendRequestAsync): Deleted.
        (WebKit::NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync): Deleted.
        (WebKit::NetworkLoad::shouldUseCredentialStorage): Deleted.
        (WebKit::NetworkLoad::didReceiveAuthenticationChallenge): Deleted.
        (WebKit::NetworkLoad::receivedCancellation): Deleted.
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::clearCachedCredentials):
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/NetworkSession.cpp:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PingLoad.cpp:
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * NetworkProcess/mac/NetworkLoadMac.mm: Removed.
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::cancelSingleChallenge):
        (WebKit::AuthenticationManager::performDefaultHandlingForSingleChallenge):
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinueForSingleChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm: Removed.
        * Shared/SessionTracker.cpp:
        (WebKit::SessionTracker::setSession):
        (WebKit::SessionTracker::destroySession):
        * Shared/SessionTracker.h:
        * Shared/mac/CookieStorageShim.h: Removed.
        * Shared/mac/CookieStorageShim.mm: Removed.
        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didReceiveData):
        (API::DownloadClient::shouldDecodeSourceDataOfMIMEType): Deleted.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient):
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::shouldDecodeSourceDataOfMIMEType): Deleted.
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::willSendRequest):
        (WebKit::DownloadProxy::didReceiveResponse):
        (WebKit::DownloadProxy::shouldDecodeSourceDataOfMIMEType): Deleted.
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename): Deleted.
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::clearCachedCredentials):
        * config.h:

2018-01-22  Youenn Fablet  <youenn@apple.com>

        SW: Make sure ServiceWorker loading and requests are correctly cleared by ITP
        https://bugs.webkit.org/show_bug.cgi?id=181942
        <rdar://problem/35132091>

        Reviewed by Chris Dumez.

        Add ServiceWorkerRegistrations and DOMCache as persistent data to be cleared according ITP decisions.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::monitoredDataTypes):

2018-01-22  Chris Dumez  <cdumez@apple.com>

        Add release logging to help debug issues related to service workers
        https://bugs.webkit.org/show_bug.cgi?id=181935
        <rdar://problem/36735900>

        Reviewed by Brady Eidson.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::didFinishFetch):
        (WebKit::WebSWServerConnection::didFailFetch):
        (WebKit::WebSWServerConnection::didNotHandleFetch):

2018-01-22  Brent Fulgham  <bfulgham@apple.com>

        [iOS] REGRESSION (r225763): Allow access to power logging features
        https://bugs.webkit.org/show_bug.cgi?id=181938
        <rdar://problem/36442803>

        Reviewed by Eric Carlson.

        I denied access to the powerlog facility in r225763, not realizing that it
        gets activated in certain logging scenarios. This patch reverts this change.

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

2018-01-22  Brent Fulgham  <bfulgham@apple.com>

        [macOS, iOS] Allow accss to AVFoundation preference
        https://bugs.webkit.org/show_bug.cgi?id=181937
        <rdar://problem/33137029>

        Reviewed by Eric Carlson.

        Grant access to the 'com.apple.avfoundation.frecents' preference.

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

2018-01-22  Brady Eidson  <beidson@apple.com>

        In WebKit2, make the MessagePortChannelRegistry live in the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=181922

        Reviewed by Andy Estes.

        With all of the work that went into making MessagePorts be fully asynchronous
        and to be process-aware, formally moving them out-of-process is just a matter
        of adding WebKit IPC layers.
        
        The basic unit of asynchronicity is "MessagePortChannelProvider", and this patch
        adds both a WebMessagePortChannelProvider and UIMessagePortChannelProvider for
        each side of the process divide.
        
        * UIProcess/UIMessagePortChannelProvider.cpp: Added.
        (WebKit::UIMessagePortChannelProvider::singleton):
        (WebKit::UIMessagePortChannelProvider::UIMessagePortChannelProvider):
        (WebKit::UIMessagePortChannelProvider::~UIMessagePortChannelProvider):
        (WebKit::UIMessagePortChannelProvider::createNewMessagePortChannel):
        (WebKit::UIMessagePortChannelProvider::entangleLocalPortInThisProcessToRemote):
        (WebKit::UIMessagePortChannelProvider::messagePortDisentangled):
        (WebKit::UIMessagePortChannelProvider::messagePortClosed):
        (WebKit::UIMessagePortChannelProvider::takeAllMessagesForPort):
        (WebKit::UIMessagePortChannelProvider::postMessageToRemote):
        (WebKit::UIMessagePortChannelProvider::checkRemotePortForActivity):
        (WebKit::UIMessagePortChannelProvider::checkProcessLocalPortForActivity):
        * UIProcess/UIMessagePortChannelProvider.h: Added.
        (WebKit::UIMessagePortChannelProvider::registry):

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

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processForIdentifier):
        (WebKit::m_userMediaCaptureManagerProxy):
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::createNewMessagePortChannel):
        (WebKit::WebProcessProxy::entangleLocalPortInThisProcessToRemote):
        (WebKit::WebProcessProxy::messagePortDisentangled):
        (WebKit::WebProcessProxy::messagePortClosed):
        (WebKit::WebProcessProxy::takeAllMessagesForPort):
        (WebKit::WebProcessProxy::didDeliverMessagePortMessages):
        (WebKit::WebProcessProxy::postMessageToRemote):
        (WebKit::WebProcessProxy::checkRemotePortForActivity):
        (WebKit::WebProcessProxy::checkProcessLocalPortForActivity):
        (WebKit::WebProcessProxy::didCheckProcessLocalPortForActivity):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp: Added.
        (WebKit::WebMessagePortChannelProvider::singleton):
        (WebKit::WebMessagePortChannelProvider::WebMessagePortChannelProvider):
        (WebKit::WebMessagePortChannelProvider::~WebMessagePortChannelProvider):
        (WebKit::WebMessagePortChannelProvider::createNewMessagePortChannel):
        (WebKit::WebMessagePortChannelProvider::entangleLocalPortInThisProcessToRemote):
        (WebKit::WebMessagePortChannelProvider::messagePortDisentangled):
        (WebKit::WebMessagePortChannelProvider::messagePortClosed):
        (WebKit::WebMessagePortChannelProvider::takeAllMessagesForPort):
        (WebKit::WebMessagePortChannelProvider::didTakeAllMessagesForPort):
        (WebKit::WebMessagePortChannelProvider::didCheckRemotePortForActivity):
        (WebKit::WebMessagePortChannelProvider::postMessageToRemote):
        (WebKit::WebMessagePortChannelProvider::checkProcessLocalPortForActivity):
        (WebKit::WebMessagePortChannelProvider::checkRemotePortForActivity):
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h: Added.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeProcess):
        (WebKit::WebProcess::didTakeAllMessagesForPort):
        (WebKit::WebProcess::checkProcessLocalPortForActivity):
        (WebKit::WebProcess::didCheckRemotePortForActivity):
        (WebKit::WebProcess::messagesAvailableForPort):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-01-22  Youenn Fablet  <youenn@apple.com>

        Bump default cache storage quota to 50MB
        https://bugs.webkit.org/show_bug.cgi?id=181924

        Reviewed by Chris Dumez.

        Existing web sites use more than 20 MB.

        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-01-22  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix after r227292. Fixing a bad copy-paste that broke
        the GTK+ debug builds.

        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap):

2018-01-22  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Refactor PlatformContextCairo::drawSurfaceToContext() into a Cairo operation
        https://bugs.webkit.org/show_bug.cgi?id=181930

        Reviewed by Carlos Garcia Campos.

        Call sites of the PlatformContextCairo::drawSurfaceToContext() method
        are adjusted to now call Cairo::drawSurface() and properly pass the
        PlatformContextCairo object to the function.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint):
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap):

2018-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix compile warning.

        Use #include instead of #import in cross-platform code.

        * Shared/WebPreferencesDefaultValues.cpp:

2018-01-21  Ryosuke Niwa  <rniwa@webkit.org>

        Turning off custom pasteboard data doesn't actually turn it off in WK2
        https://bugs.webkit.org/show_bug.cgi?id=181920
        <rdar://problem/36686429>

        Reviewed by Wenson Hsieh.

        Moved the code to decide when to enable custom pasteboard data from WebCore
        since we never enable this feature in WebKit1.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.cpp:
        (defaultCustomPasteboardDataEnabled): Added.
        * Shared/WebPreferencesDefaultValues.h:

2018-01-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a new feature flag for EXTRA_ZOOM_MODE and reintroduce AdditionalFeatureDefines.h
        https://bugs.webkit.org/show_bug.cgi?id=181918

        Reviewed by Tim Horton.

        Add EXTRA_ZOOM_MODE to FeatureDefines.xconfig (off by default).

        * Configurations/FeatureDefines.xcconfig:

2018-01-21  Eric Carlson  <eric.carlson@apple.com>

        Resign NowPlaying status when no media element is eligible
        https://bugs.webkit.org/show_bug.cgi?id=181914
        <rdar://problem/35294116>

        Reviewed by Jer Noble.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestActiveNowPlayingSessionInfo:]): Return registeredAsNowPlayingApplication
        status.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::nowPlayingInfoCallback): Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::requestActiveNowPlayingSessionInfo): Ditto.

2018-01-20  Andy Estes  <aestes@apple.com>

        [Apple Pay] Stop eagerly loading PassKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=181911
        <rdar://problem/36555369>

        Reviewed by Tim Horton.

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

        Removed availablePaymentNetworks from WebPageCreationParameters.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetApplePayEnabled):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):

        Stopped calling WebPaymentCoordinatorProxy::platformSupportsPayments().

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::availablePaymentNetworks):
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in:

        Added message AvailablePaymentNetworks, which synchronously returns a Vector of payment
        networks.

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

        Returned false if PassKitLibrary() fails.

        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinatorProxy::platformOpenPaymentSetup):

        Called completionHandler with false if PassKitLibrary() fails.

        (WebKit::WebPaymentCoordinatorProxy::platformAvailablePaymentNetworks):
        (WebKit::WebPaymentCoordinatorProxy::availablePaymentNetworks):

        Renamed availablePaymentNetworks to platformAvailablePaymentNetworks

        (WebKit::WebPaymentCoordinatorProxy::platformSupportsPayments): Deleted.

        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):

        Called completionHandler with false if PassKitLibrary() fails.

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

        Stopped calling WebPaymentCoordinatorProxy::availablePaymentNetworks().

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::availablePaymentNetworks):
        (WebKit::WebPaymentCoordinator::validatedPaymentNetwork):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

        Implemented PaymentCoordinatorClient::validatedPaymentNetwork(). m_availablePaymentNetworks
        starts off as std::nullopt, but is initialized by sending the AvailablePaymentNetworks sync
        message the first time it's accessed.

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

        Stopped setting PageConfiguration::availablePaymentNetworks.

2018-01-20  Jer Noble  <jer.noble@apple.com>

        Release ASSERT when reloading Vimeo page @ WebCore: WebCore::Document::updateLayout
        https://bugs.webkit.org/show_bug.cgi?id=181840
        <rdar://problem/36186214>

        Reviewed by Simon Fraser.

        Updating layout while the document is suspended or stopped is unsafe.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::inlineVideoFrame):

2018-01-20  Chris Dumez  <cdumez@apple.com>

        DOMCache data sometimes not properly removed when clearing data for a given origin
        https://bugs.webkit.org/show_bug.cgi?id=181887
        <rdar://problem/36671239>

        Reviewed by Youenn Fablet.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):
        This code was iterating through folders on disk, then reading the folder's origin
        from the origin file on disk. Then, if the origin would match the one we want to
        delete, it would regenerate the folder path using cachesRootPath(*folderOrigin).
        I don't know how but on my machine, I was ended up in a state where the path
        generated by cachesRootPath(*folderOrigin) differed from the actual folder path
        we read the origin from (Likely a different salt?). To make the code more robust,
        I updated the code to delete "folderPath", which is the path we read the origin
        from.

2018-01-19  Zach Li  <zacharyli323@gmail.com>

        Expose Safe Browsing SPI
        https://bugs.webkit.org/show_bug.cgi?id=181804
        <rdar://problem/36626946>

        Reviewed by Dan Bernstein.

        If client is using Apple internal SDK, then we can just import the header; if not,
        then we declare necessary symbols that client will need.

        * Configurations/WebKit.xcconfig:
        Only link against SafariSafeBrowsing framework on macOS High Sierra
        and iOS 11 and above. Weak link against SafariSafeBrowsing framework
        because it is not present on the Base system.

        * Platform/spi/Cocoa/SafeBrowsingSPI.h: Added.

        * WebKit.xcodeproj/project.pbxproj:
        Added SafeBrowsingSPI.h.

        * WebKitLibraries/WebKitPrivateFrameworkStubs/iOS/11/SafariSafeBrowsing.framework/SafariSafeBrowsing.tbd:
        Added.

2018-01-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix, removed unused lambda capture.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):

2018-01-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove unused calls to WebResourceLoadStatisticsStore:logTestingEvent() to fix API test
        https://bugs.webkit.org/show_bug.cgi?id=181890
        <rdar://problem/36674772>

        Unreviewed API test fix.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):

2018-01-19  Youenn Fablet  <youenn@apple.com>

        Do not go to the storage process when registering a service worker client if there is no service worker registered
        https://bugs.webkit.org/show_bug.cgi?id=181740
        <rdar://problem/36650400>

        Reviewed by Chris Dumez.

        UIProcess notifies all web processes to register their service worker clients when spinning the service worker process.
        Add private API to set the number of web processes for testing purposes.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setMaximumNumberOfProcesses:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::registerServiceWorkerClients):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-01-19  Dean Jackson  <dino@apple.com>

        REGRESSION (r221092): Swipe actions are hard to perform in FastMail app
        https://bugs.webkit.org/show_bug.cgi?id=181817
        <rdar://problem/35274055>

        Reviewed by Simon Fraser.

        Add a linked-on-or-after check to set passive touch listeners on document in WebCore.

        * CMakeLists.txt:
        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.cpp: Copied from Source/WebKit/UIProcess/Cocoa/VersionChecks.h.
        (defaultPassiveTouchListenersAsDefaultOnDocument):
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/Cocoa/VersionChecks.h:
        * WebKit.xcodeproj/project.pbxproj:

2018-01-19  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] _WKNSWindowExtras.h: Add missing availability annotation
        https://bugs.webkit.org/show_bug.cgi?id=181868

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/_WKNSWindowExtras.h:

2018-01-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add void to argument list to fix build with -Wstrict-prototypes
        https://bugs.webkit.org/show_bug.cgi?id=181870
        <rdar://problem/36666750>

        Unreviewed build fix.

        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

2018-01-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r227211.

        Breaks iOS Simulator tests.

        Reverted changeset:

        "Expose Safe Browsing SPI"
        https://bugs.webkit.org/show_bug.cgi?id=181804
        https://trac.webkit.org/changeset/227211

2018-01-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Implement callback support for removal of WebsiteDataType::ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=181822
        https://bugs.webkit.org/show_bug.cgi?id=175263
        https://bugs.webkit.org/show_bug.cgi?id=178536
        https://bugs.webkit.org/show_bug.cgi?id=181223
        https://bugs.webkit.org/show_bug.cgi?id=181482
        <rdar://problem/33491222>
        <rdar://problem/33805293>
        <rdar://problem/36332683>
        <rdar://problem/36549026>

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStore]):
            Calls the new API with no-op completion handler.
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStore:]):
            New API with completion handler.
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours:]):
            Calls the new API with no-op completion handler.
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours:completionHandler:]):
            New API with completion handler.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::populateMemoryStoreFromDisk):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::clearResourceLoadStatisticsInWebProcesses):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2018-01-19  Daniel Bates  <dabates@apple.com>

        REGRESSION (r223149): Ref WebPageProxy objects before calling their functionality
        https://bugs.webkit.org/show_bug.cgi?id=181863
        <rdar://problem/36662452>

        Reviewed by Chris Dumez.

        More fix ups following r223149. When notifying all pages of a process state change we need to
        take care to ref all the pages before iterating over them and notifying them of the change.
        Notifying a page of such a state change may ultimately delegate to the embedding client. And
        the embedding client can do anything, including deallocating one or more pages.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didBecomeUnresponsive):
        (WebKit::WebProcessProxy::didBecomeResponsive):
        (WebKit::WebProcessProxy::willChangeIsResponsive):
        (WebKit::WebProcessProxy::didChangeIsResponsive):
        (WebKit::WebProcessProxy::requestTermination):

2018-01-19  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=181560

        Reviewed by Ryosuke Niwa.

        The WebContent process should not process incoming IPC while waiting for a sync IPC reply.
        This is causing hard-to-debug crashes because developers often assume the state does not
        change during a sendSync() call.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForSyncReply):
        * Platform/IPC/Connection.h:
        (IPC::Connection::setShouldProcessIncomingMessagesWhileWaitingForSyncReply):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::testIncomingSyncIPCMessageWhileWaitingForSyncReply):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
        (WebKit::WebToStorageProcessConnection::WebToStorageProcessConnection):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::WebConnectionToUIProcess):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::testIncomingSyncIPCMessageWhileWaitingForSyncReply):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::undo):
        (WebKit::WebEditorClient::redo):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::syncIPCMessageWhileWaitingForSyncReplyForTesting):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-01-19  Keith Miller  <keith_miller@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-01-19  Daniel Bates  <dabates@apple.com>

        Fix misspelling; substitute willDetachRenderer for willDetatchRenderer.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::willDetachRenderer):
        (WebKit::PDFPlugin::willDetatchRenderer): Deleted.
        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::willDetachRenderer):
        (WebKit::Plugin::willDetatchRenderer): Deleted.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::willDetachRenderer):
        (WebKit::PluginView::willDetatchRenderer): Deleted.
        * WebProcess/Plugins/PluginView.h:

2018-01-19  Zach Li  <zacharyli323@gmail.com>

        Expose Safe Browsing SPI
        https://bugs.webkit.org/show_bug.cgi?id=181804
        <rdar://problem/36626946>

        Reviewed by Alex Christensen.

        If client is using Apple internal SDK, then we can just import the header; if not,
        then we declare necessary symbols that client will need.

        * Configurations/WebKit.xcconfig:
        Only link against SafariSafeBrowsing framework on macOS High Sierra
        and iOS 11 and above. Weak link against SafariSafeBrowsing framework
        because it is not present on the Base system.

        * Platform/spi/Cocoa/SafeBrowsingSPI.h: Added.

        * WebKit.xcodeproj/project.pbxproj:
        Added SafeBrowsingSPI.h.

        * WebKitLibraries/WebKitPrivateFrameworkStubs/iOS/11/SafariSafeBrowsing.framework/SafariSafeBrowsing.tbd:
        Added.

2018-01-18  Chris Dumez  <cdumez@apple.com>

        We should be able to terminate service workers that are unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=181563
        <rdar://problem/35280031>

        Reviewed by Alex Christensen.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::terminateWorker):
        Use a 10 second timeout for forcefully exiting the service worker process when
        the service worker in question fails to terminate.

        (WebKit::WebSWContextManagerConnection::syncTerminateWorker):
        Use a 100ms timeout for forcefully exiting the service worker process when
        the service worker in question fails to terminate. This method is only called
        from the layout tests, which is why we use a very short timeout.

2018-01-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, suppress deprecation warnings to fix the build with a newer SDK.

        * UIProcess/ios/WKPDFPageNumberIndicator.mm:
        (-[WKPDFPageNumberIndicator _makeRoundedCorners]):

2018-01-18  Youenn Fablet  <youenn@apple.com>

        Do not go to the storage process when loading a main resource if there is no service worker registered
        https://bugs.webkit.org/show_bug.cgi?id=181395

        Reviewed by Chris Dumez.

        Add a new web process creation parameter to know whether there is any service worker registered at web process creation time.
        If there is none, the web process will then start to load HTTP resources from the network.
        The connection to the storage process is then executed when receiving the first bytes of the main resource.
        This connection is needed as other web processes may create service workers at any given time.
        If there is one registered service worker, the web process will wait for its connection to the storage process to be active.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::hasRegisteredServiceWorkers):
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession):
        * WebProcess/Storage/WebServiceWorkerProvider.h:
        * WebProcess/Storage/WebToStorageProcessConnection.h:
        (WebKit::WebToStorageProcessConnection::existingServiceWorkerConnectionForSession):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-01-18  Chris Dumez  <cdumez@apple.com>

        Regression(r223149): WebProcessProxy::didClose() no longer refs WebPageProxy objects
        https://bugs.webkit.org/show_bug.cgi?id=181771
        <rdar://problem/36566237>

        Reviewed by Brady Eidson.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        Use copyToVectorOf<RefPtr<WebPageProxy>>() to maintain pre-r223149 behavior
        and ref the pages.

2018-01-18  Dan Bernstein  <mitz@apple.com>

        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=181803

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Updated.
        * Configurations/DebugRelease.xcconfig: Ditto.
        * Configurations/FeatureDefines.xcconfig: Adopted macOSTargetConditionals helpers.
        * Configurations/Version.xcconfig: Updated.
        * Configurations/macOSTargetConditionals.xcconfig: Added.  Defines helper build settings
          useful for defining settings that depend on the target macOS version.

2018-01-18  Chris Dumez  <cdumez@apple.com>

        Service Workers restored from persistent storage have 'redundant' state
        https://bugs.webkit.org/show_bug.cgi?id=181749
        <rdar://problem/36556486>

        Reviewed by Youenn Fablet.

        Allow service workers to intercept custom protocol loads as this is useful for
        API testing.

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

2018-01-18  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r225858): Sandbox violations due to blocked access to Spotlight search preferences
        https://bugs.webkit.org/show_bug.cgi?id=181797
        <rdar://problem/36546412>

        Reviewed by Eric Carlson.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Add the read permission for
        'com.apple.lookup.shared' to support DataDetectors.

2018-01-17  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Block cookies for prevalent resources without user interaction
        https://bugs.webkit.org/show_bug.cgi?id=177394
        <rdar://problem/34613960>

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
            Now has m_hasBeenSetToUseStatelessCookieStorage to handle
            cookie blocking.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::statelessCookieStorage):
            Returns singleton empty, deny-all cookie storage for cookie blocking.
            The ugly pragma instructions for clang are because the NSString
            parameter for _initWithIdentifier was not marked nullable pre-Sierra.
        (WebKit::NetworkDataTaskCocoa::applyCookieBlockingPolicy):
            Instead of just decision making, this now applies the policy.
        (WebKit::NetworkDataTaskCocoa::applyCookiePartitioningPolicy):
            New method.
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
            Now blocks cookies for domains where cookies will be purged anyway.
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
            Now blocks cookies for domains where cookies will be purged anyway.
        (WebKit::shouldChangePartition): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
            Now downgrades for blocked cookies instead of partitioned cookies.
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
            Now downgrades for blocked cookies instead of partitioned cookies.


2018-01-17  Stephan Szabo  <stephan.szabo@sony.com>

        [Curl] Use ResourceRequest::encodeWithPlatformData()
        https://bugs.webkit.org/show_bug.cgi?id=181768

        Reviewed by Alex Christensen.

        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):

2018-01-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r227076.

        This breaks internal builds

        Reverted changeset:

        "Resource Load Statistics: Block cookies for prevalent
        resources without user interaction"
        https://bugs.webkit.org/show_bug.cgi?id=177394
        https://trac.webkit.org/changeset/227076

2018-01-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        WEBKIT_FRAMEWORK should not modify file-global include directories
        https://bugs.webkit.org/show_bug.cgi?id=181656

        Reviewed by Konstantin Tokarev.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

2018-01-17  Youenn Fablet  <youenn@apple.com>

        Put fetch request keepAlive behind a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=181592

        Reviewed by Chris Dumez.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetFetchAPIKeepAliveEnabled):
        (WKPreferencesGetFetchAPIKeepAliveEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2018-01-17  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Block cookies for prevalent resources without user interaction
        https://bugs.webkit.org/show_bug.cgi?id=177394
        <rdar://problem/34613960>

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
            Now has m_hasBeenSetToUseStatelessCookieStorage to handle
            cookie blocking.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::statelessCookieStorage):
            Returns singleton empty, deny-all cookie storage for cookie blocking.
        (WebKit::NetworkDataTaskCocoa::applyCookieBlockingPolicy):
            Instead of just decision making, this now applies the policy.
        (WebKit::NetworkDataTaskCocoa::applyCookiePartitioningPolicy):
            New method.
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
            Now blocks cookies for domains where cookies will be purged anyway.
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
            Now blocks cookies for domains where cookies will be purged anyway.
        (WebKit::shouldChangePartition): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
            Now downgrades for blocked cookies instead of partitioned cookies.
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
            Now downgrades for blocked cookies instead of partitioned cookies.

2018-01-17  Daniel Bates  <dabates@apple.com>

        REGRESSION (r222795): Cardiogram never signs in
        https://bugs.webkit.org/show_bug.cgi?id=181693
        <rdar://problem/36286293>

        Reviewed by Ryosuke Niwa.

        Exempt Cardiogram from the XHR header restrictions in r222795.

        Following r222795 only Dashboard widgets are allowed to set arbitrary XHR headers.
        However Cardiogram also depends on such functionality.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowSettingAnyXHRHeaderFromFileURLs):
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/Cocoa/VersionChecks.h:

2018-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add injected bundle SPI to replace subresource URLs when dropping or pasting rich content
        https://bugs.webkit.org/show_bug.cgi?id=181637
        <rdar://problem/36508471>

        Reviewed by Tim Horton.

        Add new injected bundle SPI, replacementURLForResource, which clients may use to provide a replacement URL to
        represent an archive resource, given the resource's data and MIME type.

        * WebProcess/InjectedBundle/API/APIInjectedBundleEditorClient.h:
        (API::InjectedBundle::EditorClient::replacementURLForResource):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInEditingDelegate.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageEditorClient.h:

        Add replacementURLForResource, and also bump the current injected bundle editor client version to 2.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::replacementURLForResource):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::replacementURLForResource):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2018-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Don't mirror global alpha and image interpolation quality state values in PlatformContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=181725

        Reviewed by Carlos Garcia Campos.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint):
        Adjust the PlatformContextCairo::drawSurfaceToContext() invocation.
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap): Ditto.

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.19.6 release.

        * gtk/NEWS: Add release notes for 2.19.6.

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes in production builds
        https://bugs.webkit.org/show_bug.cgi?id=179914

        Reviewed by Žan Doberšek.

        Add symbols detected by check-for-global-bss-symbols-in-webkigtk-libs to the version script.

        * webkitglib-symbols.map:

2018-01-17  Youenn Fablet  <youenn@apple.com>

        Clear Caches volatile storage as a memory optimization.
        https://bugs.webkit.org/show_bug.cgi?id=181643

        Reviewed by Chris Dumez.

        clearMemoryRepresentation clears m_caches which exposes data potentially stored in m_volatileStorage.
        Clearing m_volatileStorage allows releasing some memory.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::clearMemoryRepresentation):

2018-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Use one-time ShadowBlur objects when performing shadowing
        https://bugs.webkit.org/show_bug.cgi?id=181720

        Reviewed by Carlos Garcia Campos.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint):
        Adjust the PlatformContextCairo::drawSurfaceToContext() invocation.
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap): Ditto.

2018-01-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Remove WebCoreDerivedSources library target
        https://bugs.webkit.org/show_bug.cgi?id=181664

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt: Do not link WebCoreDerivedSources.
        * PlatformGTK.cmake: Appended WebCore after WebCorePlatformGTK in WebKit_LIBRARIES.
        * PlatformWin.cmake: Ditto.

2018-01-16  Alex Christensen  <achristensen@webkit.org>

        Merge sync and async code paths for getting context menus
        https://bugs.webkit.org/show_bug.cgi?id=181423

        Reviewed by Joseph Pecoraro.

        What a mess.  We had a code path for asynchronous context menu generation and a different one for synchronous context menu generation.
        This makes it so there is just one.  At the API level we see if there is an asynchronous delegate to call, then synchronous.
        There is a subtle theoretical change in behaviour because m_page.contextMenuClient().showContextMenu is now called for the asynchronous
        case and it wasn't before, but the one C API client that uses this has nullptr as it's WKPageShowContextMenuCallback, so we won't break anything!

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::getContextMenuFromProposedMenu):
        (API::ContextMenuClient::getContextMenuFromProposedMenuAsync): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient):
        * UIProcess/API/glib/WebKitContextMenuClient.cpp:
        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::show):
        (WebKit::WebContextMenuProxyGtk::showContextMenuWithItems):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * UIProcess/wpe/WebContextMenuProxyWPE.h:

2018-01-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        Don't link WebKit target directly to JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=181688

        Reviewed by Alex Christensen.

        It's safer if we only link to the next lower-layered lib in the stack, so let's just link
        directly to WebCore instead.

        And WPE doesn't need to specify it twice.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:

2018-01-16  Eric Carlson  <eric.carlson@apple.com>

        AVSampleBufferDisplayLayer should be flushed when application activates
        https://bugs.webkit.org/show_bug.cgi?id=181623
        <rdar://problem/36487738>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationWillResignActive): Call page.
        (WebKit::WebPage::applicationDidEnterBackground): Ditto, let it call libWebRTCProvider.
        (WebKit::WebPage::applicationWillEnterForeground): Call page.
        (WebKit::WebPage::applicationDidBecomeActive): Ditto, let it call libWebRTCProvider.

2018-01-16  Zach Li  <zachli@apple.com>

        Add pop-up policy support in website policies.
        https://bugs.webkit.org/show_bug.cgi?id=181544.
        rdar://problem/30521400.

        Reviewed by Alex Christensen.

        * Shared/WebsitePoliciesData.cpp: Encode and decode
        pop-up policy.
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        Apply the pop-up policy from website policies to the
        document loader.

        * Shared/WebsitePoliciesData.h:

        * Shared/WebsitePopUpPolicy.h:
        Added for declaring enum WebsitePopUpPolicy.

        * UIProcess/API/APIWforebsitePolicies.cpp:
        Include pop-up policy in website policies.
        (API::WebsitePolicies::WebsitePolicies):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:

        * UIProcess/API/C/WKWebsitePolicies.cpp:
        Added C API to get and set pop-up policy on
        website policies.
        (WKWebsitePoliciesGetPopUpPolicy):
        (WKWebsitePoliciesSetPopUpPolicy):
        * UIProcess/API/C/WKWebsitePolicies.h:

        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        Added Obj-C API to get and set pop-up policy
        on website policies.
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setPopUpPolicy:]):
        (-[_WKWebsitePolicies popUpPolicy]):

        * WebKit.xcodeproj/project.pbxproj:
        Added WebsitePopUpPolicy.h.

2018-01-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][Mac] Fix the build errors
        https://bugs.webkit.org/show_bug.cgi?id=181665

        Reviewed by Alex Christensen.

        * CMakeLists.txt: Added TouchBarMenuData.cpp and TouchBarMenuItemData.cpp to compile.
        * PlatformMac.cmake: Added _WKApplicationManifest.mm, WKInspectorWKWebView.mm and WKInspectorWindow.mm to compile.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _webPageContentProcessCount]): Call WebProcessPool::serviceWorkerProxy() only if ENABLE(SERVICE_WORKER).

2018-01-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Provide the `src` of an attachment to the UI delegate when an attachment is inserted
        https://bugs.webkit.org/show_bug.cgi?id=181638
        <rdar://problem/36508702>

        Reviewed by Dan Bernstein.

        Add a `source` parameter to the `didInsertAttachment` codepath for notifying WebKit2 clients when attachment
        elements are inserted into the document.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didInsertAttachment:withSource:]):
        (-[WKWebView _didInsertAttachment:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::didInsertAttachment):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::didInsertAttachment):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didInsertAttachment):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::didInsertAttachment):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2018-01-15  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: m_ptr under WebKit::CacheStorage::Caches::writeRecord
        https://bugs.webkit.org/show_bug.cgi?id=181401
        <rdar://problem/36379022>

        Reviewed by Darin Adler.

        m_isInitialized is true but m_storage is set to nullptr when calling writeRecord.
        The only case seems to be if:
        - We are doing persistent storage
        - We are traversing the storage to do the initialization. At that point m_storage is set to a correct value.
        - clearMemoryRepresentation is called, thus setting m_storage to nullptr and m_isInitialized to false.
        We fix this by making clearMemoryRepresentation a no-op if we are initializing the caches.
        clearMemoryRepresentation is about cleaning the in-memory information of the caches and the memory representation is empty at init time.
        Nullifying m_storage is a memory consumption optimization.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::clearMemoryRepresentation):

2018-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, speculative build fix after r226899.

        Add an empty implementation for PageClient::startDrag.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::startDrag):

2018-01-12  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove unneeded accessibility-related sandbox rules
        https://bugs.webkit.org/show_bug.cgi?id=181619
        <rdar://problem/36485356>

        Reviewed by Eric Carlson.

        Remove a number of sandbox exceptions that were in place for accessibility support. These are
        not needed in the WebContent process, since Safari (not WebKit) handles the accessibility
        interactions.

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

2018-01-12  Keith Rollin  <krollin@apple.com>

        Logged JSON should escape "'s and \'s in strings.
        https://bugs.webkit.org/show_bug.cgi?id=181608

        Reviewed by Brent Fulgham.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::logCookieInformation const):

2018-01-12  Megan Gardner  <megan_gardner@apple.com>

        Unreviewed, fixing error in UIKitSPI.h.

        * Platform/spi/ios/UIKitSPI.h:
        
2018-01-12  Megan Gardner  <megan_gardner@apple.com>

        Implement MultiDocument protocol for restoring focus to a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=181510

        Reviewed by Dan Bernstein.

        Support the UIKit protocol for restoring focus to a what previously had focus.
        WebKit already knows what node was previously being focused by the DOM, we merely
        need to be asked to turn the focus on again.
        Resubmitting https://trac.webkit.org/changeset/226826 as it broke internal builds

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _restoreFocusWithToken:]):
        (-[WKContentView _preserveFocusWithToken:destructively:]):

2018-01-12  Youenn Fablet  <youenn@apple.com>

        WebProcess should pass the registration identifier and not the worker identifier for fetch events
        https://bugs.webkit.org/show_bug.cgi?id=181591

        Reviewed by Chris Dumez.

        Use service worker registration identifier to compute the active service worker identifier responsible to handle the fetch event.

        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * StorageProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::start):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::startFetch):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::shouldHandleFetch):

2018-01-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r226826.

        Breaks internal builds.

        Reverted changeset:

        "Implement MultiDocument protocol for restoring focus to a
        WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=181510
        https://trac.webkit.org/changeset/226826

2018-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Unify macOS and iOS codepaths in the UI process when starting a drag
        https://bugs.webkit.org/show_bug.cgi?id=181574

        Reviewed by Tim Horton.

        Rearrange some macOS drag start logic in the UI process so that it uses the same codepaths in WebPageProxy as
        iOS. Namely, startDrag should just forward the DragItem and drag image handle along to the appropriate views on
        each platform (WKContentView and WebViewImpl).

        There should be no change in behavior.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:

        Both macOS and iOS now funnel through this method.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::startDrag):
        (WebKit::WebViewImpl::dragImageForView): Deleted.

        Rename dragImageForView to startDrag. Move the call to didStartDrag() here, and call dragCancelled() in the
        case where we bailed from starting the drag (due to failing to create a drag image).

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setDragImage): Deleted.

        Rename setDragImage to startDrag.

        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::startDrag):
        (WebKit::PageClientImpl::setDragImage): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::startDrag): Deleted.

2018-01-12  Antoine Quint  <graouts@apple.com>

        Add support for the frames() timing function
        https://bugs.webkit.org/show_bug.cgi?id=181585
        <rdar://problem/36463317>

        Reviewed by Dean.

        Add the ability to endode and decode the frames() timing function.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FramesTimingFunction>::encode):
        (IPC::ArgumentCoder<FramesTimingFunction>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::Properties::encode const):
        (WebKit::PlatformCAAnimationRemote::Properties::decode):

2018-01-11  Keith Miller  <keith_miller@apple.com>

        Rename ENABLE_ASYNC_ITERATION to ENABLE_JS_ASYNC_ITERATION
        https://bugs.webkit.org/show_bug.cgi?id=181573

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2018-01-11  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r219530): ResourceLoadStatisticsPersistentStorage should be read-only in ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=181136
        <rdar://problem/36116604>

        Reviewed by Chris Dumez.

        Some uses of WebKit involve running a UIProcess as an ephemeral session for the life of the process. In this
        case, we do not initialize the data path for the set of load statistics triggering an assertion.

        We actually intended ephemeral sessions to consume the existing resource load data (presumably captured during
        non-ephemeral browsing). This would be a read-only mode, where it would not add new entries to the load
        statistics, but would take advantage of existing observations. Currently that does not happen (for this type
        of WebKit embed), which forces each run as an ephemeral session to build up in-memory browsing data until it has
        enough observations to begin modifying loads.

        We need to set the ResourceLoadStatisticsPersistentStorage object to a "read only" mode in this case, so
        that it read (but does not write) from this database.

        Tested by ephemeral website data TestWebKitAPI tests.

        * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::create): Added to allow creation of the right style of
        Persistent Storage.
        (WebKit::ResourceLoadStatisticsPersistentStorage::ResourceLoadStatisticsPersistentStorage): Initialize the
        new data member.
        (WebKit::ResourceLoadStatisticsPersistentStorage::asyncWriteTimerFired): RELEASE_ASSERT that we never run
        this method when in "read only" mode.
        (WebKit::ResourceLoadStatisticsPersistentStorage::writeMemoryStoreToDisk): Ditto.
        (WebKit::ResourceLoadStatisticsPersistentStorage::scheduleOrWriteMemoryStore): Return early if asked to
        schedule a write operation for a "read only" persistent store.
        (WebKit::ResourceLoadStatisticsPersistentStorage::finishAllPendingWorkSynchronously): RELEASE_ASSERT if we
        ever shut down in "read only" mode with an active write timer.
        * UIProcess/ResourceLoadStatisticsPersistentStorage.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore): Pass a flag indicating whether the
        storage session is ephemeral or not.
        * UIProcess/WebResourceLoadStatisticsStore.h:

2018-01-11  Keith Rollin  <krollin@apple.com>

        Add optional logging of ITP-related user interaction information
        https://bugs.webkit.org/show_bug.cgi?id=181556

        Reviewed by Brent Fulgham.

        In order to support the tracking of the efficacy of Intelligent
        Tracking Protection, add some logging indicating when the user
        interacts with a page in a way that affects cookie partitioning. This
        logging is off by default, and is enabled with `defaults write -g
        WebKitLogCookieInformation -bool true`.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-01-11  Megan Gardner  <megan_gardner@apple.com>

        Implement MultiDocument protocol for restoring focus to a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=181510

        Reviewed by Dan Bernstein.

        Support the UIKit protocol for restoring focus to a what previously had focus.
        WebKit already has a method to silently remove and replace focus, without telling the
        web process about the unfocus and refocusing, so we're just using that.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _restoreFocusWithToken:]):
        (-[WKContentView _preserveFocusWithToken:destructively:]):


2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Don't load inline data when requesting info for an attachment element backed by a file path
        https://bugs.webkit.org/show_bug.cgi?id=181550

        Reviewed by Tim Horton

        See WebCore/ChangeLog for more information.

        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachmentInfo initWithInfo:]):
        (-[_WKAttachmentInfo fileLoadingError]):
        (-[_WKAttachment requestInfo:]):

2018-01-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r226789 and r226794.
        https://bugs.webkit.org/show_bug.cgi?id=181564

        broke API tests (Requested by alexchristensen on #webkit).

        Reverted changesets:

        "Merge sync and async code paths for getting context menus"
        https://bugs.webkit.org/show_bug.cgi?id=181423
        https://trac.webkit.org/changeset/226789

        "Revert changes accidentally committed with r226789."
        https://bugs.webkit.org/show_bug.cgi?id=181423
        https://trac.webkit.org/changeset/226794

2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Send PromisedBlobInfo to the client through DragItem instead of DragClient::prepareToDragPromisedBlob
        https://bugs.webkit.org/show_bug.cgi?id=181497

        Reviewed by Tim Horton.

        Refactor drag and drop support for promised blob data, so that blob info is shipped across to the client layer
        via DragItem in the DragClient::startDrag codepath, rather than via a separate prepareToDragPromisedBlob client
        codepath that stages promised blob info.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::prepareToDragPromisedBlob): Deleted.
        * UIProcess/PageClient.h:
        (WebKit::PageClient::prepareToDragPromisedBlob): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::prepareToDragPromisedBlob): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::prepareToDragPromisedBlob): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startDrag:item:]):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::prepareToDragPromisedBlob): Deleted.
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::prepareToDragPromisedBlob): Deleted.
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::prepareToDragPromisedBlob): Deleted.
        * WebProcess/WebPage/WebPage.h:

2018-01-09  Per Arne Vollan  <pvollan@apple.com>

        VoiceOver does not work when the WebContent process is using NSRunLoop.
        https://bugs.webkit.org/show_bug.cgi?id=181331
        <rdar://problem/36408004>

        Reviewed by Brent Fulgham.

        When the WebContent process is using NSRunLoop instead of the NSApplication run loop,
        accessibility must be initialized for VoiceOver to work. This patch also switches to
        using NSRunLoop in the WebContent process.

        * Configurations/WebContentService.xcconfig:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::AccessibilityProcessSuspendedNotification): Remove unneccessary workaround.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist: Switch to NSRunLoop.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeProcess): Initialize accessibility.

2018-01-11  Don Olmstead  <don.olmstead@sony.com>

        WebContextMenuListenerProxy.cpp not including config on first line
        https://bugs.webkit.org/show_bug.cgi?id=181552

        Reviewed by Alex Christensen.

        * UIProcess/WebContextMenuListenerProxy.cpp:

2018-01-11  Youenn Fablet  <youenn@apple.com>

        Redirected iframe loading with Request.redirect=follow should fail
        https://bugs.webkit.org/show_bug.cgi?id=181491

        Reviewed by Alex Christensen.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::validateResponse):

2018-01-11  Youenn Fablet  <youenn@apple.com>

        Replace WebRTCLegacyAPIDisabled by WebRTCLegacyAPIEnabled and switch off WebRTC legacy flag by default
        https://bugs.webkit.org/show_bug.cgi?id=181480

        Reviewed by Eric Carlson.

        Renaming preference to WebRTCLegacyAPIEnabled for simplification and removing it from experimental feature.
        Set it to off by default.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebRTCLegacyAPIEnabled):
        (WKPreferencesGetWebRTCLegacyAPIEnabled):
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _webRTCLegacyAPIEnabled]):
        (-[WKPreferences _setWebRTCLegacyAPIEnabled:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2018-01-11  Alex Christensen  <achristensen@webkit.org>

        Merge sync and async code paths for getting context menus
        https://bugs.webkit.org/show_bug.cgi?id=181423

        Reviewed by Joseph Pecoraro.

        What a mess.  We had a code path for asynchronous context menu generation and a different one for synchronous context menu generation.
        This makes it so there is just one.  At the API level we see if there is an asynchronous delegate to call, then synchronous.
        There is a subtle theoretical change in behaviour because m_page.contextMenuClient().showContextMenu is now called for the asynchronous
        case and it wasn't before, but the one C API client that uses this has nullptr as it's WKPageShowContextMenuCallback, so we won't break anything!

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::getContextMenuFromProposedMenu):
        (API::ContextMenuClient::getContextMenuFromProposedMenuAsync): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient):
        * UIProcess/API/glib/WebKitContextMenuClient.cpp:
        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::show):
        (WebKit::WebContextMenuProxyGtk::showContextMenuWithItems):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * UIProcess/wpe/WebContextMenuProxyWPE.h:

2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support dragging attachment elements out as files on iOS
        https://bugs.webkit.org/show_bug.cgi?id=181199
        <rdar://problem/36299316>

        Reviewed by Tim Horton, Andy Estes and Joseph Pecoraro.

        Implement support for registering and beginning a drag with promised blob info. See below for more detail.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKDragSessionContext addTemporaryDirectory:]):
        (-[WKDragSessionContext cleanUpTemporaryDirectories]):

        Introduce WKDragSessionContext, which represents the localContext of a UIDragSession initiated in WebKit. The
        blob promise dragging codepath uses this to register temporary directories when saving blob data to a location
        on disk; when all data transfers are finished, or if the drag interaction is being reset, we then use
        -cleanUpTemporaryDirectories to remove each temporary directory.

        (existingLocalDragSessionContext):
        (ensureLocalDragSessionContext):

        Helper methods to set the UIDragSession's localContext to a WKDragSessionContext and query for any existing
        context.

        (-[WKContentView cleanupInteraction]):

        Before the content view's UIDragInteraction goes away, clean up any temporary directories added to the
        UIDragSession.

        (-[WKContentView _prepareToDragPromisedBlob:]):

        When dragging with a promised blob, register a new item provider on the pasteboard representing the blob data,
        along with any additional metadata associated with the blob. For the promise callback, call out to the network
        process to write the blob data to a temporary path; when done, call the NSItemProvider's completion handler with
        the temporary blob data location.

        (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]):
        (-[WKContentView dragInteraction:sessionDidTransferItems:]):

        Use this delegate hook as an opportunity to remove any temporary directories created when promised blob data is
        requested upon drop. Since we know the drag session that has finished transferring data, we simply ask its local
        context (a WKDragSessionContext) to remove any temporary filepaths it has created.

2018-01-10  Jeff Miller  <jeffm@apple.com>

        -[WKWebView _web_gestureEventWasNotHandledByWebCore:] should call -_gestureEventWasNotHandledByWebCore:
        https://bugs.webkit.org/show_bug.cgi?id=181498

        Reviewed by Alex Christensen.

        WKView's API contract allows clients to override -_gestureEventWasNotHandledByWebCore:, and -[WKView
        _web_gestureEventWasNotHandledByWebCore:] calls -_gestureEventWasNotHandledByWebCore: instead of
        invoking WebViewImpl::gestureEventWasNotHandledByWebCoreFromViewOnly() directly. WKWebView should do
        the same thing.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _web_gestureEventWasNotHandledByWebCore:]):
        Call -_gestureEventWasNotHandledByWebCore:, which will call gestureEventWasNotHandledByWebCoreFromViewOnly().

2018-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r222507): Composition highlight doesn't render when using IME
        https://bugs.webkit.org/show_bug.cgi?id=181485
        <rdar://problem/35896516>

        Reviewed by Ryosuke Niwa.

        Add plumbing for a `suppressUnderline` argument when setting marked text.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetComposition):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setCompositionForTesting):
        * WebProcess/WebPage/WebPage.h:

2018-01-10  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r213590): Swipe from edge to go to previous page is significantly slower than tapping back button on Twitter
        https://bugs.webkit.org/show_bug.cgi?id=181269
        <rdar://problem/35110344>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        (-[WKWebView _didCommitLayerTree:]):
        When swiping to a page that set history.scrollRestoration = "manual",
        we will never restore the scroll position. We will still restore
        "state", but won't have a location. Currently, the code assumes that
        it should wait to remove the swipe snapshot until the scroll position
        is restored. Instead, wait until the "state" is restored, whether
        or not that includes a scroll position/center point restoration.

        Do this by making _firstTransactionIDAfterPageRestore an optional,
        and reset it after it fires, so that we only run the restoration code
        in _didCommitLayerTree for the first commit after state restoration,
        not all subsequent commits. Then, tell ViewGestureController that
        the scroll position has been restored even if the page opted out.

        The reason that this is specific to pushState is that normal,
        non-same-document loads bail from waiting for the scroll position
        restoration in VGC::didReachMainFrameLoadTerminalState() (see the long
        comment there for an explanation).

        (-[WKWebView _beginBackSwipeForTesting]):
        (-[WKWebView _completeBackSwipeForTesting]):
        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/ViewGestureController.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (-[WKSwipeTransitionController transitionForDirection:]):
        (WebKit::ViewGestureController::beginSimulatedSwipeInDirectionForTesting):
        (WebKit::ViewGestureController::completeSimulatedSwipeInDirectionForTesting):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSimulatedSwipeInDirectionForTesting):
        (WebKit::ViewGestureController::completeSimulatedSwipeInDirectionForTesting):
        Add a mechanism to forcefully test swipe back. Instead of simulating
        events like on Mac, we just talk to the UIKit internals and force
        the interaction to start, pause, and then complete when we want.

2018-01-10  Brent Fulgham  <bfulgham@apple.com>

        Use protectedThis for the 'updatePrevalentDomainsToPartitionOrBlockCookies' lambda
        https://bugs.webkit.org/show_bug.cgi?id=181452
        <rdar://problem/36416912>
        
        Reviewed by Chris Dumez.

        We forgot to use a 'protectedThis' back in r225006 for one of the lambdas used by
        the WebsiteDataStore for processing.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):

2018-01-09  John Wilander  <wilander@apple.com>

        Storage Access API: Turn feature on by default in WebPreferences.yaml
        https://bugs.webkit.org/show_bug.cgi?id=181458

        Reviewed by Brent Fulgham.

        * Shared/WebPreferences.yaml:

2018-01-09  Alex Christensen  <achristensen@webkit.org>

        WKOpenPanelParameters SPI should return autoreleased objects
        https://bugs.webkit.org/show_bug.cgi?id=181457
        <rdar://problem/35884960>

        Reviewed by Tim Horton.

        In r226607 I made a mistake by returning an object that has been released.
        I instead follow a pattern of leaking and autoreleasing that we use elsewhere in the ObjC API.

        * UIProcess/API/Cocoa/WKOpenPanelParameters.mm:
        (-[WKOpenPanelParameters _acceptedMIMETypes]):
        (-[WKOpenPanelParameters _acceptedFileExtensions]):

2018-01-09  Dan Bernstein  <mitz@apple.com>

        Removed some empty directories that were left behind

        * WebProcess/Cookies/cf: Removed.
        * WebProcess/ios: Removed.

2018-01-09  Paul Knight  <pknight@apple.com>

        Don't record dynamic spelling corrections while in an ephemeral browsing session
        https://bugs.webkit.org/show_bug.cgi?id=181417
        <rdar://problem/33309104>

        Dynamic spelling correction responses are kept on disk. Avoid recording
        these responses when in an ephemeral session.

        Reviewed by Tim Horton and Wenson Hsieh.

        * UIProcess/mac/CorrectionPanel.h:
        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::recordAutocorrectionResponse):
            Add a WebViewImpl parameter so we can query the current session.
            Return early before recording the response if the session is
            ephemeral.
        (WebKit::CorrectionPanel::handleAcceptedReplacement):
            Update a caller to include the new parameter.
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::recordAutocorrectionResponse):
            Ditto.

2018-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.19.5 release.

        * gtk/NEWS: Add release notes for 2.19.5.

2018-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Missing symbols exported in 2.19.4
        https://bugs.webkit.org/show_bug.cgi?id=181433

        Reviewed by Michael Catanzaro.

        Add missing WEBKIT_API to webkit_dom_dom_window_webkit_message_handlers_post_message().

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.h:
        * webkitglib-symbols.map: Remove webkit_media_player_debug from local.

2018-01-09  Youenn Fablet  <youenn@apple.com>

        SWClientConnection should not keep references to service worker jobs
        https://bugs.webkit.org/show_bug.cgi?id=181381

        Reviewed by Chris Dumez.

        Updated IPC handling based on WebCore refactoring.

        * Scripts/webkit/messages.py:
        (forward_declarations_and_headers):
        (headers_for_type):
        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::rejectJobInClient):
        (WebKit::WebSWServerConnection::resolveRegistrationJobInClient):
        (WebKit::WebSWServerConnection::resolveUnregistrationJobInClient):
        (WebKit::WebSWServerConnection::startScriptFetchInClient):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * WebProcess/Storage/WebSWClientConnection.messages.in:

2018-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.19.4 release.

        * gtk/NEWS: Add release notes for 2.19.4.

2018-01-09  Ali Juma  <ajuma@chromium.org>

        Implement VisualViewport API events
        https://bugs.webkit.org/show_bug.cgi?id=179386

        Reviewed by Frédéric Wang.

        Change the default value of the VisualViewportAPI experimental feature flag to
        DEFAULT_EXPERIMENTAL_FEATURES_ENABLED. This patch completes the implementation
        of this feature as specified by https://wicg.github.io/visual-viewport/, so this
        feature is now ready for wider testing.

        * Shared/WebPreferences.yaml:

2018-01-08  Alex Christensen  <achristensen@webkit.org>

        Add WKNavigationDelegate SPI exposing WebProcess crash reason
        https://bugs.webkit.org/show_bug.cgi?id=181410
        <rdar://problem/36167199>

        Reviewed by Wenson Hsieh.

        We exposed it in the C SPI.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::toWKProcessTerminationReason):
        (WebKit::NavigationState::NavigationClient::processDidTerminate):

2018-01-08  Alex Christensen  <achristensen@webkit.org>

        Make ObjC SPI equivalent to WKPageNavigationClient.decidePolicyForPluginLoad
        https://bugs.webkit.org/show_bug.cgi?id=181413
        <rdar://problem/36169005>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::decidePolicyForPluginLoad):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::toPluginModuleLoadPolicy):
        (WebKit::toWKPluginModuleLoadPolicy):
        (WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):

2018-01-08  Ryosuke Niwa  <rniwa@webkit.org>

        iOS build fix attempt after r226602.

        * UIProcess/API/C/WKContextMenuListener.cpp:
        (WKContextMenuListenerUseContextMenuItems):

2018-01-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI for WKOpenPanelParameters._acceptedMIMETypes and _acceptedFileExtensions
        https://bugs.webkit.org/show_bug.cgi?id=181408
        <rdar://problem/35884960>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKOpenPanelParameters.mm:
        (-[WKOpenPanelParameters _acceptedMIMETypes]):
        (-[WKOpenPanelParameters _acceptedFileExtensions]):
        * UIProcess/API/Cocoa/WKOpenPanelParametersInternal.h:
        * UIProcess/API/Cocoa/WKOpenPanelParametersPrivate.h: Added.
        * WebKit.xcodeproj/project.pbxproj:

2018-01-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r226532 and r226540.
        https://bugs.webkit.org/show_bug.cgi?id=181422

        jessie says basic browsing does not seem to work (Requested by
        alexchristensen on #webkit).

        Reverted changesets:

        "Add CSP support to service workers"
        https://bugs.webkit.org/show_bug.cgi?id=181385
        https://trac.webkit.org/changeset/226532

        "SWClientConnection should not keep references to service
        worker jobs"
        https://bugs.webkit.org/show_bug.cgi?id=181381
        https://trac.webkit.org/changeset/226540

2018-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Expose file name and content type of WKAttachment
        https://bugs.webkit.org/show_bug.cgi?id=181390
        <rdar://problem/36336837>

        Reviewed by Tim Horton.

        Add support for -[_WKAttachment requestInfo:], which fetches a snapshot of the attachment's state. This API is
        meant to be a replacement for -requestData: that provides additional metadata about the attachment.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<AttachmentInfo>::encode):
        (IPC::ArgumentCoder<AttachmentInfo>::decode):
        * Shared/WebCoreArgumentCoders.h:

        Add IPC support for AttachmentInfo. Note that instead of using (encode|decode)SharedBuffer, we send and receive
        data references to the shared buffer.

        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::requestInfo):
        (API::Attachment::requestData): Deleted.
        * UIProcess/API/APIAttachment.h:

        Change requestData to requestInfo.

        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachmentInfo initWithInfo:]):
        (-[_WKAttachmentInfo data]):
        (-[_WKAttachmentInfo name]):
        (-[_WKAttachmentInfo filePath]):
        (-[_WKAttachmentInfo contentType]):
        (-[_WKAttachment requestInfo:]):
        (-[_WKAttachment requestData:]):

        Implement -requestInfo: by calling into APIAttachment, and reimplement -requestData: in terms of -requestInfo:.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::attachmentInfoCallback):
        (WebKit::WebPageProxy::requestAttachmentInfo):
        (WebKit::WebPageProxy::sharedBufferCallback): Deleted.
        (WebKit::WebPageProxy::requestAttachmentData): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Rename the SharedBufferCallback IPC message to AttachmentInfoCallback, and make it conditional on
        ATTACHMENT_ELEMENT. Rename requestAttachmentData to requestAttachmentInfo.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestAttachmentInfo):
        (WebKit::WebPage::invokeSharedBufferCallback): Deleted.
        (WebKit::WebPage::requestAttachmentData): Deleted.

        Rename requestAttachmentData to requestAttachmentInfo and adopt HTMLAttachmentElement::requestInfo.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2018-01-08  Alex Christensen  <achristensen@webkit.org>

        Pass around Vector<Ref<WebContextMenuItem>> instead of WKArrayRef or Vector<WebContextMenuItemData>
        https://bugs.webkit.org/show_bug.cgi?id=181419

        Reviewed by Tim Horton.

        Passing a WKArrayRef to an API object is messy and was preventing me from moving things around and making ObjC SPI.
        No change in behavior.  Just using different layering abstractions for the same data.

        * UIProcess/API/C/WKContextMenuListener.cpp:
        (WKContextMenuListenerUseContextMenuItems):
        * UIProcess/WebContextMenuListenerProxy.cpp:
        (WebKit::WebContextMenuListenerProxy::useContextMenuItems):
        * UIProcess/WebContextMenuListenerProxy.h:
        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2018-01-08  John Wilander  <wilander@apple.com>

        Storage Access API: Remove access for all frames under a page when the page is closed
        https://bugs.webkit.org/show_bug.cgi?id=181398
        <rdar://problem/36357879>

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):

2018-01-08  Youenn Fablet  <youenn@apple.com>

        SWClientConnection should not keep references to service worker jobs
        https://bugs.webkit.org/show_bug.cgi?id=181381

        Reviewed by Chris Dumez.

        Updated IPC handling based on WebCore refactoring.

        * Scripts/webkit/messages.py:
        (forward_declarations_and_headers):
        (headers_for_type):
        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::rejectJobInClient):
        (WebKit::WebSWServerConnection::resolveRegistrationJobInClient):
        (WebKit::WebSWServerConnection::resolveUnregistrationJobInClient):
        (WebKit::WebSWServerConnection::startScriptFetchInClient):
        * StorageProcess/ServiceWorker/WebSWServerConnection.h:
        * WebProcess/Storage/WebSWClientConnection.messages.in:

2018-01-08  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] Web Inspector: Provide a way for clients to check if an NSWindow is a Web Inspector window
        https://bugs.webkit.org/show_bug.cgi?id=181361
        <rdar://problem/36332865>

        Reviewed by Darin Adler.

        * WebKit.xcodeproj/project.pbxproj:
        New files.

        * Shared/API/Cocoa/_WKNSWindowExtras.h: Added.
        * Shared/API/Cocoa/_WKNSWindowExtras.mm: Added.
        (-[NSWindow _web_isWebInspectorWindow]):
        Method to determing if a window is being used for Web Inspector content.

        * UIProcess/mac/WKInspectorWindow.h: Added.
        * UIProcess/mac/WKInspectorWindow.mm: Added.
        Named subclass so we can use isKindOfClass.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createFrontendWindow):
        Use the named subclass.

2018-01-08  Tim Horton  <timothy_horton@apple.com>

        Build fix for WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=181399
        <rdar://problem/36311915>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKPDFView.mm:
        Disable deprecation warnings in this whole file.

2018-01-08  Youenn Fablet  <youenn@apple.com>

        Caches::writeCachesToDisk should assert that it is initialized
        https://bugs.webkit.org/show_bug.cgi?id=181383

        Reviewed by Alex Christensen.

        Add assertion to ensure caches is initialized

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::writeCachesToDisk):

2018-01-08  Youenn Fablet  <youenn@apple.com>

        WebProcessPool::terminateServiceWorkerProcess should protect itself in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=181384

        Reviewed by Chris Dumez.

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

2018-01-08  Frederic Wang  <fwang@igalia.com>

        Unreviewed build fix after r226211.

        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Use WK_IOS_TBA for iOS.

2018-01-08  Youenn Fablet  <youenn@apple.com>

        navigator.onLine does not work inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=181079
        <rdar://problem/36178606>

        Reviewed by Darin Adler.

        Added support for a callback called for each service worker proxy creation.
        Callback is used by WTR to inject a self.internals object used for testing.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetServiceWorkerProxyCreationCallback):
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setServiceWorkerProxyCreationCallback):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2018-01-07  David Kilzer  <ddkilzer@apple.com>

        Enable -Wcast-qual for WebInspectorUI, WebKitLegacy, WebKit projects
        <https://webkit.org/b/181256>
        <rdar://problem/36281730>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        (WARNING_CFLAGS): Add -Wcast-qual.
        * NetworkProcess/cache/NetworkCacheCodersCocoa.cpp:
        (WTF::Persistence::encodeCertificateChain): Include
        TypeCastsCF.h from WTF, and use
        checked_cf_cast<SecCertificateRef>() to fix warning.
        * Platform/cocoa/WKCrashReporter.mm:
        (WebKit::setCrashReportApplicationSpecificInformation):
        - Move `oldMessage` check above nullptr check to fix a leak when
          passing in nullptr after previously setting the crash string.
        - Change C-style cast to const_cast<char*>() to fix warning.
        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shim_shmat): Change C-style cast to
        const_cast<void*>() to fix warning.
        * Shared/Authentication/mac/AuthenticationManager.mac.mm:
        (WebKit::leafCertificate): Include TypeCastsCF.h from
        WTF, and use checked_cf_cast<SecCertificateRef>() to fix
        warning.
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode): Use static_cast<>(const_cast<void*>() to
        fix warnings since the CFTypeID has already been
        checked.
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::decodeNSError): Use an `auto` variable to hold the
        CFMutableDictionaryRef, then WTFMove() to assign it back to
        `userInfo`.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::takeWindowSnapshot): Include TypeCastsCF.h from
        WTF, and use checked_cf_cast<CGImageRef>() to fix
        warning.

2018-01-07  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Unset CMAKE_REQUIRED_LIBRARIES after check_function_exists test
        https://bugs.webkit.org/show_bug.cgi?id=181371

        Reviewed by Michael Catanzaro.

        This variable is used by check_function_exists internally, its value
        should be never used for anything else.

        * CMakeLists.txt:

2018-01-05  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r226218): iOS-only assets are installed on macOS
        https://bugs.webkit.org/show_bug.cgi?id=181362

        Reviewed by Anders Carlsson.

        * Configurations/WebKit.xcconfig: Exclude everything under Resources/ios when not targeting
          iOS.

        * Resources/ios: Added.
        * Resources/ios/iOS.xcassets: Moved from Source/WebKit/WebKit.xcassets.
        * Resources/ios/iOS.xcassets/LockMini.imageset/NavigationBarLockMini@2x.pdf: Set the
          svn:mime-type property.
        * Resources/ios/iOS.xcassets/LockMini.imageset/NavigationBarLockMini@3x.pdf: Ditto.

        * Resources/mac: Added.
        * Resources/mac/mediaIcon.pdf: Moved here…
        * Resources/mediaIcon.pdf: …from here.

        * WebKit.xcassets: Moved under Resources/ios.

        * WebKit.xcodeproj/project.pbxproj: Created an ios group under the Resources group, and
          cleaned up the mac group. Removed the Recovered References group.

2018-01-05  John Wilander  <wilander@apple.com>

        Storage Access API: Refactor to make naming accurate and explicit, simplify access table, and prepare for access removal for page
        https://bugs.webkit.org/show_bug.cgi?id=181357
        <rdar://problem/36331031>

        Reviewed by Alex Christensen.

        This change does the following:
        - Changes function and message names to reflect how this feature
          was eventually implemented, i.e. access per frame.
        - Makes it explicit that the UI process is only involved in
          granting storage access and not removing storage access.
          The latter is done directly by the web process.
        - Simplifies the network process' entry map since only needs to
          be able to give access to one domain in one frame at a time.
          Access goes away on frame navigation so there can only be one
          domain at a time per frame. Also, the map now uses pageIDs as
          main keys to prepare for efficient access removal for all
          frames under a page.
        - Fixes a bug in so that a cross-origin iframe with the same
          partition as the top frame correctly is handled as already
          having access.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForFrame):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccess): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::hasStorageAccessForFrame):
        (WebKit::NetworkProcess::grantStorageAccessForFrame):
        (WebKit::NetworkProcess::hasStorageAccessForPrevalentDomains): Deleted.
        (WebKit::NetworkProcess::updateStorageAccessForPrevalentDomains): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::hasStorageAccessForFrame):
        (WebKit::NetworkProcessProxy::grantStorageAccessForFrame):
        (WebKit::NetworkProcessProxy::hasStorageAccessForPrevalentDomains): Deleted.
        (WebKit::NetworkProcessProxy::updateStorageAccessForPrevalentDomains): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::hasStorageAccessForFrameHandler):
        (WebKit::WebsiteDataStore::grantStorageAccessForFrameHandler):
        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
        (WebKit::WebsiteDataStore::hasStorageAccessForPrevalentDomainsHandler): Deleted.
        (WebKit::WebsiteDataStore::updateStorageAccessForPrevalentDomainsHandler): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchWillChangeDocument):

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

        Implement Cache API partitioning based on ClientOrigin
        https://bugs.webkit.org/show_bug.cgi?id=181240

        Reviewed by Alex Christensen.

        open and retrieveCaches now take a ClientOrigin instead of a String.
        Updated cache filesystem path computation to take both client origin and top origin.

        When clearing an origin, caches whose client origin or top origin matches the origin are cleared.
        Caches are added to the web site data of their client origin with their corresponding cache size.
        Caches are added to the web site data of their top origin with a size equal to 0.

        Updated memory representation dumping used for test to include both top and client origins.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::cachesRootPath):
        (WebKit::CacheStorage::Engine::open):
        (WebKit::CacheStorage::Engine::remove):
        (WebKit::CacheStorage::Engine::retrieveCaches):
        (WebKit::CacheStorage::Engine::readCachesFromDisk):
        (WebKit::CacheStorage::Engine::removeCaches):
        (WebKit::CacheStorage::Engine::fetchEntries):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):
        (WebKit::CacheStorage::Engine::clearMemoryRepresentation):
        (WebKit::CacheStorage::Engine::representation):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::Cache):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::retrieveOriginFromDirectory):
        (WebKit::CacheStorage::Caches::Caches):
        (WebKit::CacheStorage::Caches::storeOrigin):
        (WebKit::CacheStorage::Caches::readOrigin):
        (WebKit::CacheStorage::Caches::open):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:
        (WebKit::CacheStorage::Caches::create):
        (WebKit::CacheStorage::Caches::origin const):
        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::open):
        (WebKit::CacheStorageEngineConnection::caches):
        (WebKit::CacheStorageEngineConnection::clearMemoryRepresentation):
        * NetworkProcess/cache/CacheStorageEngineConnection.h:
        * NetworkProcess/cache/CacheStorageEngineConnection.messages.in:
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        (WebKit::WebCacheStorageConnection::doOpen):
        (WebKit::WebCacheStorageConnection::doRetrieveCaches):
        (WebKit::WebCacheStorageConnection::clearMemoryRepresentation):
        * WebProcess/Cache/WebCacheStorageConnection.h:

2018-01-05  Megan Gardner  <megan_gardner@apple.com>

        Show Keyboard when re-launching WKWebView with a previously focused element
        https://bugs.webkit.org/show_bug.cgi?id=181353

        Reviewed by Tim Horton.

        When relaunching an app with a WKWebView, restore the keyboard if there was a previously
        focused element that was being assisted. The element was already being tracked, we just
        needed to not bail on showing the keyboard for instances where it was a state change that
        caused the element to be refocused.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startAssistingNode):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAutoscrollAtPosition):
        (WebKit::WebPageProxy::startAssistingNode):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setActivityState):
        (WebKit::WebPage::elementDidFocus):
        * WebProcess/WebPage/WebPage.h:

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

        Restrict navigation-time WKWebsiteDataStore swapping to main frame navigations
        https://bugs.webkit.org/show_bug.cgi?id=181217

        Reviewed by Tim Horton.

        If we swap during an iframe navigation, then we get a page in a strange state.
        The intent of the main frame navigation WKWebsiteDataStore swap is that
        that is a time when we can change storages without a page in an inconsistent state.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

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

        Add WKBundleFrameCreateFrameHandle
        https://bugs.webkit.org/show_bug.cgi?id=181232
        <rdar://problem/35926696>

        Reviewed by Tim Horton.

        InjectedBundle clients wanting to sent a _WKFrameHandle cannot without this function.
        Before, they would just send the WKBundleFrameRef which would be changed into a WKFrameRef
        in the UIProcess by WebProcessProxy::transformHandlesToObjects, but there is no ObjC equivalent
        of WKFrameRef, so we were just getting a WKObject when we wanted a _WKFrameHandle.
        We can't change WebProcessProxy::transformHandlesToObjects without being incompatible with the 
        existing C API, so let's add a way for clients to say "I want a _WKFrameHandle".

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundleFrameCreateFrameHandle):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

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

        [Attachment Support] Add a way to write blob data to a file URL from the UI process
        https://bugs.webkit.org/show_bug.cgi?id=181236

        Reviewed by Brady Eidson.

        Add support for writing a blob to a designated file path. In WebKit, this is mainly plumbing writeBlobToFilePath
        through WebPageProxy to the network process.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::writeBlobToFilePath):

        Call out to the BlobRegistryImpl to write blobs to the file path. Additionally grant sandbox extensions for any
        file-backed blob parts corresponding to the given blob URL.

        (WebKit::NetworkBlobRegistry::filesInBlob):

        Introduce a version of filesInBlob that doesn't check against the NetworkConnectionToWebProcess. This is used
        when the UI process is the driver for writing a blob.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::writeBlobToFilePath):

        Temporarily grant sandbox access to the given file path.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<PromisedBlobInfo>::encode):
        (IPC::ArgumentCoder<PromisedBlobInfo>::decode):
        (IPC::ArgumentCoder<PromisedBlobData>::encode): Deleted.
        (IPC::ArgumentCoder<PromisedBlobData>::decode): Deleted.

        Remove PromisedBlobData (see WebCore/ChangeLog for more information).

        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):

        If the network process is terminated, flush any pending callbacks in m_writeBlobToFilePathCallbackMap, passing
        in a failure result (success := false) and clearing the callback map.

        (WebKit::NetworkProcessProxy::writeBlobToFilePath):
        (WebKit::NetworkProcessProxy::didWriteBlobToFilePath):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::writeBlobToFilePath):
        * UIProcess/WebPageProxy.h:

2018-01-05  Dan Bernstein  <mitz@apple.com>

        Add injected bundle equivalents of DOMHTMLDocument (DOMHTMLDocumentExtensions)
        https://bugs.webkit.org/show_bug.cgi?id=181345

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h: Declared new methods.
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        (-[WKDOMDocument createDocumentFragmentWithMarkupString:baseURL:]): Added. Calls WebCore’s
          createFragmentFromMarkup.
        (-[WKDOMDocument createDocumentFragmentWithText:]): Added. Calls WebCore’s
          createFragmentFromText.

2018-01-05  Don Olmstead  <don.olmstead@sony.com>

        [Curl] Add implementation stubs for Network Cache
        https://bugs.webkit.org/show_bug.cgi?id=181343

        Reviewed by Alex Christensen.

        * NetworkProcess/cache/NetworkCacheCodersCurl.cpp: Added.
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode):
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode):
        * NetworkProcess/cache/NetworkCacheDataCurl.cpp: Added.
        (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):
        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp: Added.
        (WebKit::NetworkCache::IOChannel::IOChannel):
        (WebKit::NetworkCache::IOChannel::~IOChannel):
        (WebKit::NetworkCache::IOChannel::open):
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::write):
        * PlatformWin.cmake:

2018-01-05  Don Olmstead  <don.olmstead@sony.com>

        [Curl] Update method declarations in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=181342

        Reviewed by Alex Christensen.

        * NetworkProcess/Downloads/curl/DownloadCurl.cpp:
        (WebKit::Download::resume):
        * NetworkProcess/curl/RemoteNetworkingContextCurl.cpp:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession): Deleted.
        (WebKit::RemoteNetworkingContext::blockedError const): Deleted.

2018-01-05  Don Olmstead  <don.olmstead@sony.com>

        WebFullScreenManager should compile when ENABLE(VIDEO) is off
        https://bugs.webkit.org/show_bug.cgi?id=181338

        Reviewed by Alex Christensen.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didEnterFullScreen):
        (WebKit::WebFullScreenManager::willExitFullScreen):
        * WebProcess/FullScreen/WebFullScreenManager.h:

2018-01-05  Andy Estes  <aestes@apple.com>

        [Apple Pay] Disable Apple Pay on platforms that don't have PassKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=181335
        <rdar://problem/36311296>

        Reviewed by Brady Eidson.

        When Safari is running in the macOS Base System, PassKit.framework is not available.
        If we fail to dlopen PassKit, we should disable Apple Pay.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetApplePayEnabled):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::availablePaymentNetworks):
        (WebKit::WebPaymentCoordinatorProxy::platformSupportsPayments):

2018-01-05  Dan Bernstein  <mitz@apple.com>

        Fixed the build following AppKit API deprecations in a recent SDKs

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): Suppressed deprecation warnings.
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Ditto.
        (-[WKFullScreenWindowController exitFullScreen]): Ditto.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Ditto.
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]): Ditto.
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]): Ditto.
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]): Ditto.
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _setAutodisplay:]): Ditto.

2018-01-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r226401.

        This caused timeouts on multiple platforms.

        Reverted changeset:

        "Implement Cache API partitioning based on ClientOrigin"
        https://bugs.webkit.org/show_bug.cgi?id=181240
        https://trac.webkit.org/changeset/226401

2018-01-05  Joseph Pecoraro  <pecoraro@apple.com>

        ServiceWorkers: Enable UserTiming / ResourceTiming
        https://bugs.webkit.org/show_bug.cgi?id=181297
        <rdar://problem/36307306>

        Reviewed by Youenn Fablet.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updatePreferencesStore):
        Enable Resource Timing / User Timing for the ServiceWorker process.

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

        Unreviewed GTK+ build fix.

        * UIProcess/API/glib/WebKitUserMediaPermissionRequest.cpp:
        (webkit_user_media_permission_is_for_audio_device):
        Call UserMediaPermissionRequestProxy::requiresAudioCapture().
        (webkit_user_media_permission_is_for_video_device):
        Call UserMediaPermissionRequestProxy::requiresVideoCapture().

2018-01-04  Don Olmstead  <don.olmstead@sony.com>

        [Curl] Fix compilation error in WebFrameNetworkingContext
        https://bugs.webkit.org/show_bug.cgi?id=181312

        Reviewed by Alex Christensen.

        * WebProcess/WebCoreSupport/curl/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):

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

        WKWebView loses minimum layout size overrides that happen while the process is terminated
        https://bugs.webkit.org/show_bug.cgi?id=181306
        <rdar://problem/34398288>

        Reviewed by Dan Bernstein.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didRelaunchProcess]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didRelaunchProcess):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSize):
        (WebKit::WebPageProxy::setForceAlwaysUserScalable):
        (WebKit::WebPageProxy::setMaximumUnobscuredSize):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Pass the current viewport minimum layout size and maximum unobscured size
        in the WebPageCreationParameters instead of re-sending them in _didRelaunchProcess.

        The previous approach was problematic when _dispatchSetMinimumLayoutSize:
        was changed to not re-send identical updates, because if the client calls 
        _overrideLayoutParametersWithMinimumLayoutSize before the Web Content process
        is re-launched (after terminating), we would cache the size, attempt to send it,
        fail silently (because the process is not launched), and then in _didRelaunchProcess
        we would choose not to re-send (after the process is successfully relaunched)
        because we think we already sent the new value.

        Add isValid() checks to our message sends. Ideally send() would assert
        if the process is not alive to avoid problems like this, but it doesn't (yet).

        Get rid of WKWebView's _didRelaunchProcess, because it does nothing now.

2018-01-04  Stephan Szabo  <stephan.szabo@sony.com>

        NetworkProcess cache files use functions from unistd.h without explicitly including it
        https://bugs.webkit.org/show_bug.cgi?id=181261

        Reviewed by Alex Christensen.

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        * NetworkProcess/cache/NetworkCacheData.cpp:

2018-01-04  Keith Rollin  <krollin@apple.com>

        Add commas
        https://bugs.webkit.org/show_bug.cgi?id=181295
        <rdar://problem/35802295>

        Reviewed by Brent Fulgham.

        Fix a problem introduced in r226226 where the emitted JSON didn't
        include some required commas.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::logCookieInformation const):

2018-01-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add Mock screen capture source
        https://bugs.webkit.org/show_bug.cgi?id=181291
        <rdar://problem/36298164>

        Reviewed by Dean Jackson.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MediaConstraints>::decode):
        (IPC::ArgumentCoder<CaptureDevice>::encode): Deleted, moved to CaptureDevice.h
        (IPC::ArgumentCoder<CaptureDevice>::decode): Ditto.
        * Shared/WebCoreArgumentCoders.h:

        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Add _WKCaptureDeviceDisplay.
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::requestUserMediaAuthorizationForDevices): Deal with display capture.
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest): Ditto.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied): requiresAudio -> requiresAudioCapture.
        (WebKit::UserMediaPermissionRequestManagerProxy::searchForGrantedRequest const): Never reuse
        a previously granted display capture request.

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::allow): Search the eligible devices instead of asking
        the source center to find devices.
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::requiresAudioCapture const): Renamed.
        (WebKit::UserMediaPermissionRequestProxy::requiresVideoCapture const): Ditto.
        (WebKit::UserMediaPermissionRequestProxy::requiresDisplayCapture const): New.
        (WebKit::UserMediaPermissionRequestProxy::requiresAudio const): Deleted.
        (WebKit::UserMediaPermissionRequestProxy::requiresVideo const): Deleted.

2018-01-04  Youenn Fablet  <youenn@apple.com>

        FetchResponse should set its internal response text encoding name
        https://bugs.webkit.org/show_bug.cgi?id=181284

        Reviewed by Alex Christensen.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse): Set default encoding to UTF-8.

2018-01-04  Youenn Fablet  <youenn@apple.com>

        Implement Cache API partitioning based on ClientOrigin
        https://bugs.webkit.org/show_bug.cgi?id=181240

        Reviewed by Alex Christensen.

        open and retrieveCaches now take a ClientOrigin instead of a String.
        Updated cache filesystem path computation to take both client origin and top origin.

        When clearing an origin, caches whose client origin or top origin matches the origin are cleared.
        Caches are added to the web site data of their client origin with their corresponding cache size.
        Caches are added to the web site data of their top origin with a size equal to 0.

        Updated memory representation dumping used for test to include both top and client origins.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::cachesRootPath):
        (WebKit::CacheStorage::Engine::open):
        (WebKit::CacheStorage::Engine::remove):
        (WebKit::CacheStorage::Engine::retrieveCaches):
        (WebKit::CacheStorage::Engine::readCachesFromDisk):
        (WebKit::CacheStorage::Engine::removeCaches):
        (WebKit::CacheStorage::Engine::fetchEntries):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):
        (WebKit::CacheStorage::Engine::clearMemoryRepresentation):
        (WebKit::CacheStorage::Engine::representation):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::Cache):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::retrieveOriginFromDirectory):
        (WebKit::CacheStorage::Caches::Caches):
        (WebKit::CacheStorage::Caches::storeOrigin):
        (WebKit::CacheStorage::Caches::readOrigin):
        (WebKit::CacheStorage::Caches::open):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:
        (WebKit::CacheStorage::Caches::create):
        (WebKit::CacheStorage::Caches::origin const):
        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::open):
        (WebKit::CacheStorageEngineConnection::caches):
        (WebKit::CacheStorageEngineConnection::clearMemoryRepresentation):
        * NetworkProcess/cache/CacheStorageEngineConnection.h:
        * NetworkProcess/cache/CacheStorageEngineConnection.messages.in:
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        (WebKit::WebCacheStorageConnection::doOpen):
        (WebKit::WebCacheStorageConnection::doRetrieveCaches):
        (WebKit::WebCacheStorageConnection::clearMemoryRepresentation):
        * WebProcess/Cache/WebCacheStorageConnection.h:

2018-01-04  Youenn Fablet  <youenn@apple.com>

        Service Worker should expose redirect mode for navigation loads as manual
        https://bugs.webkit.org/show_bug.cgi?id=181067

        Reviewed by Alex Christensen.

        * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
        (WebKit::ServiceWorkerClientFetch::didReceiveResponse):

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

        [Attachment Support] Create attachment elements when dropping files on iOS
        https://bugs.webkit.org/show_bug.cgi?id=181192
        <rdar://problem/36280945>

        Reviewed by Tim Horton.

        Make some minor adjustments for changes to the pasteboard in WebCore. See WebCore/ChangeLog for more detail.
        Teaches WebPasteboardProxy et. al. to plumb PasteboardItemInfo from the UI process to the web process via the
        new `InformationForItemAtIndex` codepath.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::informationForItemAtIndex):
        (WebKit::WebPasteboardProxy::getFilenamesForDataInteraction): Deleted.
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::informationForItemAtIndex):
        (WebKit::WebPlatformStrategies::getFilenamesForDataInteraction): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2018-01-03  Ting-Wei Lan  <lantw44@gmail.com>

        Replace hard-coded paths in shebangs with #!/usr/bin/env
        https://bugs.webkit.org/show_bug.cgi?id=181040

        Reviewed by Alex Christensen.

        * Scripts/generate-forwarding-headers.pl:

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

        [Attachment Support] Add plumbing for starting a drag with promised blob data
        https://bugs.webkit.org/show_bug.cgi?id=181201

        Reviewed by Tim Horton.

        Add boilerplate plumbing for PrepareToDragPromisedBlob, which delivers blob promises to the UI process when
        dragging, respectively.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeTypesAndData):
        (IPC::decodeTypesAndData):
        (IPC::ArgumentCoder<PasteboardWebContent>::encode):
        (IPC::ArgumentCoder<PasteboardWebContent>::decode):
        (IPC::ArgumentCoder<PasteboardImage>::encode):
        (IPC::ArgumentCoder<PasteboardImage>::decode):
        (IPC::ArgumentCoder<PromisedBlobInfo>::encode):
        (IPC::ArgumentCoder<PromisedBlobInfo>::decode):

        Add IPC support PromisedBlobInfo's additionalTypes and additionalData.

        (IPC::encodeClientTypesAndData): Deleted.
        (IPC::decodeClientTypesAndData): Deleted.

        Rename these helper functions and move them to the top of the file.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::prepareToDragPromisedBlob):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::prepareToDragPromisedBlob):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::prepareToDragPromisedBlob):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::prepareToDragPromisedBlob):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _prepareToDragPromisedBlob:]):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::prepareToDragPromisedBlob):
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::prepareToDragPromisedBlob):
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::prepareToDragPromisedBlob):
        * WebProcess/WebPage/WebPage.h:

2018-01-03  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r212929): WKSnapshotConfiguration may leak an NSNumber when deallocated
        <https://webkit.org/b/181274>

        Reviewed by Joseph Pecoraro.

        * UIProcess/API/Cocoa/WKSnapshotConfiguration.mm:
        (-[WKSnapshotConfiguration dealloc]): Implement method and
        release _snapshotWidth.

2018-01-03  John Wilander  <wilander@apple.com>

        Storage Access API: Refactor XPC for access removal to go straight from the web process to the network process
        https://bugs.webkit.org/show_bug.cgi?id=181270
        <rdar://problem/36289544>

        Reviewed by Alex Christensen.

        This change refactors how the web process tells the network process
        to remove storage access. Previously, this was done over the UI process
        just like requests for storage access. But since no further reasoning
        is needed, the message should go straight from the web process to the
        network process for performance reasons and to minimize the risk of a
        race.

        As a consequence, the XPC code for storage access removal in the UI
        process is deleted.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeStorageAccess): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::removeStorageAccess): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestStorageAccess):
        (WebKit::WebPageProxy::removeStorageAccess): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::requestStorageAccess):
        (WebKit::WebsiteDataStore::removeStorageAccess): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchWillChangeDocument):

2018-01-03  David Kilzer  <ddkilzer@apple.com>

        com.apple.WebKit.Networking crash in com.apple.Foundation: -[__NSOperationInternal _start:]
        <https://webkit.org/b/181272>
        <rdar://problem/35657310>

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (downgradeRequest): Remove unnecessary -autorelease.

2018-01-03  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Constant frame dropping during Flash video playback
        https://bugs.webkit.org/show_bug.cgi?id=181249
        <rdar://problem/34843448>

        Reviewed by Eric Carlson.

        Review of logs during jerky flash video playback shows a few IOKit properties are being blocked by the sandbox,
        which prevents some high-efficiency codecs from being used. Add 'AppleGVAKeyDoesNotExist', 'IODVDBundleName', and
        'IOGVA*Encode' to the whitelist.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:

2018-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add web process API to detect when form is submitted via JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=173915

        Reviewed by Carlos Garcia Campos.

        Epiphany relies on the DOM submit event to detect when a form has been submitted. However,
        for historical reasons, the submit event is not emitted when a form is submitted by
        JavaScript. It is therefore not currently possible for a web browser to reliably detect form
        submission and not possible to implement a robust password storage feature. In order to
        avoid this problem, this patch adds a new WebKitWebPage signal, will-submit-form, that
        browsers can use in preference to a DOM event listener.

        Unfortunately, this signal is not available for WPE because it depends on the DOM API.

        There are two submission events, WEBKIT_FORM_SUBMISSION_WILL_SEND_DOM_EVENT and
        WEBKIT_FORM_SUBMISSION_WILL_COMPLETE. WEBKIT_FORM_SUBMISSION_WILL_SEND_DOM_EVENT
        occurs earlier than WEBKIT_FORM_SUBMISSION_WILL_COMPLETE and can be used to retrieve form
        values before websites receive the DOM submit event. This is useful as some websites like
        to delete form values right before a submit would normally happen in order to attempt to
        defeat browser password managers. There are two tricks to note: JavaScript can cancel form
        submission immediately after this event occurs (by returning false in an onsubmit handler),
        and, for historical reasons, this event will not occur at all when form submission is
        triggered by JavaScript. WEBKIT_FORM_SUBMISSION_WILL_COMPLETE occurs next, and is more
        straightforward: it is always emitted when a form is about to be submitted, when it is too
        late to cancel.

        The recommended way to reliably retrieve password form values would be to watch for both
        events, use the form value detected in WEBKIT_FORM_SUBMISSION_WILL_SEND_DOM_EVENT
        if that event is emitted, and use the value detected later in
        WEBKIT_FORM_SUBMISSION_WILL_COMPLETE otherwise.

        Since one of the signal arguments is an enum, we now have to run glib-mkenums for the web
        process API. And that has resulted in this patch also adding GType goo for
        WebKitConsoleMessageLevel and WebKitConsoleMessageSource that was previously missing. Any
        applications that for some unlikely reason want to use these enums in properties or signals
        will be happy.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (webkit_web_page_class_init):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebProcessEnumTypes.cpp.template: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebProcessEnumTypes.h.template: Added.

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

        Unreviewed. Really fix plugin process after r226327.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:

2018-01-02  Brent Fulgham  <bfulgham@apple.com>

        [macOS, iOS] Adopt new secure coding APIs in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=181085
        <rdar://problem/34837397>

        Reviewed by Tim Horton.

        Update WebKit code to use NSSecureCoding when the underlying operating system supports it. Use new
        wrapper functions so the same code can be built on all supported OS releases, while enabling
        seure coding when possible.

        Note that NSView-based classes cannot be migrated at present due to AppKit not supporting NSSecureCoding
        in its class hierarchy.

        Tested by exising TestWebKitAPI tests for Coding and data transfer.

        * Platform/ios/AccessibilityIOS.mm:
        (WebKit::newAccessibilityRemoteToken): Encode using NSSecureCoding.
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (+[WKPreferences supportsSecureCoding]): Added to enable NSSecureCoding.
        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool supportsSecureCoding]): Ditto.
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (+[WKUserContentController supportsSecureCoding]): Ditto.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithCoder:]): Use coding initialization that supports secure coding if
        it is available in the supplied class.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (+[WKWebViewConfiguration supportsSecureCoding]): Added to enable NSSecureCoding.
        (-[WKWebViewConfiguration initWithCoder:]): Use secure coding when possible.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore supportsSecureCoding]): Added to enable NSSecureCoding.
        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (+[_WKApplicationManifest supportsSecureCoding]): Added to enable NSSecureCoding.
        (-[_WKApplicationManifest initWithCoder:]): Use secure coding when possible.

2017-12-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove std::chrono completely
        https://bugs.webkit.org/show_bug.cgi?id=181186

        Reviewed by Alex Christensen.

        Use MonotonicTime, WallTime, and Seconds instead.
        Changes are mechanical ones.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::clear):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::responseHasExpired):
        (WebKit::NetworkCache::responseNeedsRevalidation):
        (WebKit::NetworkCache::makeStoreDecision):
        (WebKit::NetworkCache::Cache::clear):
        (WebKit::NetworkCache::Cache::storeData):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):
        (WebKit::NetworkCache::Entry::asJSON const):
        * NetworkProcess/cache/NetworkCacheEntry.h:
        (WebKit::NetworkCache::Entry::timeStamp const):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::fileTimes):
        (WebKit::NetworkCache::updateFileModificationTimeIfNeeded):
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::IOChannel::IOChannel):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::responseNeedsRevalidation):
        (WebKit::NetworkCache::canRevalidate):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::readRecord):
        (WebKit::NetworkCache::Storage::clear):
        (WebKit::NetworkCache::computeRecordWorth):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        Bump the cache version. We now change the data in persistent cache.
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        (WebKit::NetworkCache::SubresourcesEntry::SubresourcesEntry):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::lastSeen const):
        (WebKit::NetworkCache::SubresourceInfo::firstSeen const):
        (WebKit::NetworkCache::SubresourcesEntry::timeStamp const):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearHSTSCache):
        (WebKit::clearNSURLCache):
        (WebKit::NetworkProcess::clearDiskCache):
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::clearDiskCache):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::clearCacheForAllOrigins):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::clearCacheForAllOrigins):
        (WebKit::NetworkProcess::clearDiskCache):
        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<WallTime>::encode):
        (IPC::ArgumentCoder<WallTime>::decode):
        (IPC::ArgumentCoder<std::chrono::system_clock::time_point>::encode): Deleted.
        (IPC::ArgumentCoder<std::chrono::system_clock::time_point>::decode): Deleted.
        * Platform/IPC/ArgumentCoders.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::deleteWebsiteData):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/PluginProcess.messages.in:
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::lastDisplayTime const):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::RemoteLayerBackingStore):
        (WebKit::RemoteLayerBackingStore::display):
        * Shared/RemoteLayerTree/RemoteLayerBackingStoreCollection.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStoreCollection.mm:
        (WebKit::RemoteLayerBackingStoreCollection::markBackingStoreVolatile):
        (WebKit::RemoteLayerBackingStoreCollection::volatilityTimerFired):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<RecentSearch>::decode):
        (IPC::ArgumentCoder<WallTime>::encode): Deleted.
        (IPC::ArgumentCoder<WallTime>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * StorageProcess/StorageProcess.cpp:
        (WebKit::StorageProcess::deleteWebsiteData):
        * StorageProcess/StorageProcess.h:
        * StorageProcess/StorageProcess.messages.in:
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerDeleteAllEntries):
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerDeleteAllCookiesModifiedAfterDate):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerDeleteAllEntries):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerClearCacheForAllOrigins):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WKWebsiteDataStoreStatisticsClearThroughWebsiteDataRemoval):
        (WKWebsiteDataStoreRemoveAllFetchCaches):
        (WKWebsiteDataStoreRemoveAllIndexedDatabases):
        (WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (toSystemClockTime):
        (-[WKWebsiteDataStore _resourceLoadStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours:]):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_clear_cache):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkit_website_data_manager_clear):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::deleteWebsiteData):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::deleteWebsiteData):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Storage/StorageProcessProxy.cpp:
        (WebKit::StorageProcessProxy::deleteWebsiteData):
        * UIProcess/Storage/StorageProcessProxy.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::deleteWebsiteData):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
        * UIProcess/WebStorage/LocalStorageDatabaseTracker.h:
        * UIProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        * UIProcess/WebStorage/StorageManager.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformRemoveRecentSearches):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::removeMediaKeys):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebsiteDataStore::platformRemoveRecentSearches):
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebsiteDataStore::platformRemoveRecentSearches):
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::lastModifiedDateMS):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::deleteWebsiteData):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2018-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Introduce data structures and IPC support for writing promised blobs
        https://bugs.webkit.org/show_bug.cgi?id=181189

        Reviewed by Tim Horton.

        Add IPC support for PromisedBlobInfo and PromisedBlobData. See WebCore/ChangeLog for more detail.

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

2018-01-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r223253): Broke ResourceLoadStatistics layout tests for non-Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=181231

        Reviewed by Alex Christensen.

        Add new C API for use by WebKitTestRunner.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubFrameUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsRedirectingTo):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2018-01-02  Jiewen Tan  <jiewen_tan@apple.com>

        Add a WebAuthentication runtime feature flag
        https://bugs.webkit.org/show_bug.cgi?id=181220
        <rdar://problem/36055305>

        Reviewed by Brent Fulgham.

        Renames the CredentialManagement runtime feature flag into WebAuthentication.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebAuthenticationEnabled):
        (WKPreferencesGetWebAuthenticationEnabled):
        (WKPreferencesSetCredentialManagementEnabled): Deleted.
        (WKPreferencesGetCredentialManagementEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2018-01-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r226327): [GTK] Plugin process is broken
        https://bugs.webkit.org/show_bug.cgi?id=181187

        Unreviewed, fix PluginProcessMainUnix after r226327.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:

2018-01-02  Tim Horton  <timothy_horton@apple.com>

        Fix the build on platforms where UICurrentUserInterfaceIdiomIsPad is defined to false
        https://bugs.webkit.org/show_bug.cgi?id=181218

        Reviewed by Alex Christensen.

        * Platform/spi/ios/UIKitSPI.h:
        (currentUserInterfaceIdiomIsPad):
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession setAccessoryViewCustomButtonTitle:]):
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView _updateAccessory]):
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker show:fromRect:]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]):
        (-[WKFileUploadPanel _presentMenuOptionForCurrentInterfaceIdiom:]):
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKDateTimePicker initWithView:datePickerMode:]):
        (-[WKFormInputControl initWithView:]):
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl initWithView:]):
        On platforms where UICurrentUserInterfaceIdiomIsPad is defined to false,
        blocks that conditionally execute based on its value are unreachable.
        This causes the compiler to complain. Hide it away inside an inline function
        and make use of that everywhere we used to use the macro.

2018-01-02  Alex Christensen  <achristensen@webkit.org>

        Remove SVN file accidentally added in r226160
        https://bugs.webkit.org/show_bug.cgi?id=180934

        * UIProcess/WebPageProxy.cpp.orig: Removed.

2018-01-02  Alex Christensen  <achristensen@webkit.org>

        Use BlockPtrs and lambdas instead of new/delete to pass parameters to blocks in WebViewImpl::performDragOperation
        https://bugs.webkit.org/show_bug.cgi?id=180795

        Reviewed by Brent Fulgham.

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

2018-01-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Implement the assignment of ProcessIdentifiers to child processes
        https://bugs.webkit.org/show_bug.cgi?id=181187

        Reviewed by Brady Eidson.

        * Shared/ChildProcess.cpp: Make the ProcessIdentifier mandatory.
        (WebKit::ChildProcess::initialize):
        * Shared/unix/ChildProcessMain.cpp: Initialize ChildProcessInitializationParameters with the
        ProcessIdentifier.
        (WebKit::ChildProcessMainBase::parseCommandLine):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp: Copy the ProcessIdentifier from
        LaunchOptions into argv.
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/wpe/WebProcessMainWPE.cpp: Expect the WPE socket ID later in the command line.

2018-01-02  Alex Christensen  <achristensen@webkit.org>

        Use new WebsiteDataStore passed in through decidePolicyForNavigation SPI
        https://bugs.webkit.org/show_bug.cgi?id=180897
        <rdar://problem/35535328>

        Reviewed by Brent Fulgham.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::changeWebsiteDataStore):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore):
        (WebKit::WebProcessPool::pageAddedToProcess): Deleted.
        (WebKit::WebProcessPool::pageRemovedFromProcess): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::removeWebPage):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):

2018-01-02  Alex Christensen  <achristensen@webkit.org>

        Only use CookieStorageShim when we aren't using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=180766

        Reviewed by Brent Fulgham.

        * Shared/mac/CookieStorageShim.h:
        * Shared/mac/CookieStorageShim.mm:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2018-01-02  Alex Christensen  <achristensen@webkit.org>

        Clean up context menu code
        https://bugs.webkit.org/show_bug.cgi?id=181074

        Reviewed by Brent Fulgham.

        Use Ref instead of RefPtr where possible.
        Use move semantics instead of copying from const references when possible.
        Remove dead iOS code.  Reduce allocations.  Add stub for WPE.

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::getContextMenuFromProposedMenu):
        (API::ContextMenuClient::getContextMenuFromProposedMenuAsync):
        (API::ContextMenuClient::showContextMenu):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebContextMenuListenerProxy.cpp:
        (WebKit::WebContextMenuListenerProxy::useContextMenuItems):
        * UIProcess/WebContextMenuProxy.cpp:
        (WebKit::WebContextMenuProxy::WebContextMenuProxy):
        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::internalShowContextMenu): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        (WebKit::WebContextMenuProxyGtk::create):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createContextMenuProxy): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        (WebKit::WebContextMenuProxyMac::create):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::WebContextMenuProxyMac):
        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyMac::showContextMenu):

== Rolled over to ChangeLog-2018-01-01 ==
