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