2019-07-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        WebBackForwardListItem::setPageState should receive pageState by rvalue reference
        https://bugs.webkit.org/show_bug.cgi?id=199535

        Reviewed by Alex Christensen

        Coverity is complaining here about copying PageState by value in the parameter list. It's
        sort of a false positive, in that the PageState really does need to be copied here, so this
        is the best we can do. But pass by value and then WTFMove() is a pretty strange way to write
        it. Passing by rvalue reference would be better. This makes the copy more clear.

        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::setPageState):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateBackForwardItem):

2019-07-12  Youenn Fablet  <youenn@apple.com>

        Add release logging for quota checks
        https://bugs.webkit.org/show_bug.cgi?id=199697

        Reviewed by Alex Christensen.

        Log requests made to the page and the result from the application.

        * Platform/Logging.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestStorageSpace):

2019-07-12  Youenn Fablet  <youenn@apple.com>

        Remove unneeded variable in LocalStorageNamespace::getOrCreateStorageArea
        https://bugs.webkit.org/show_bug.cgi?id=199477

        Reviewed by Alex Christensen.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):

2019-07-12  Pawel Stanek  <p.stanek@metrological.com>

        Connection::waitForSyncReply() uses wall time clock for timeout
        https://bugs.webkit.org/show_bug.cgi?id=198712
        Due to a nature of the system time (it might not be set, jump, be off
        by a lot) it is better to use monotonically increasing time which is
        exactly what's used in a similar place i.e. Connection::waitForMessage()
        
        Reviewed by Alex Christensen.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForSyncReply):

2019-07-12  Timothy Hatcher  <timothy@apple.com>

        Drop DarkModeCSSEnabled as an experimental feature and always enable it.
        https://bugs.webkit.org/show_bug.cgi?id=199725
        rdar://problem/52970972

        Reviewed by Megan Gardner.

        * Shared/WebPreferences.yaml: Removed DarkModeCSSEnabled.

2019-07-11  Myles C. Maxfield  <mmaxfield@apple.com>

        New York font erroneously gets synthetic bold
        https://bugs.webkit.org/show_bug.cgi?id=199653
        <rdar://problem/51692592>

        Reviewed by Simon Fraser.

        Add the SPI to enable the new fonts.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetShouldAllowDesignSystemUIFonts):
        (WKPreferencesGetShouldAllowDesignSystemUIFonts):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _shouldAllowDesignSystemUIFonts]):
        (-[WKPreferences _setShouldAllowDesignSystemUIFonts:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

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

        ASSERTION FAILED: RunLoop::isMain() under IPC::Connection::sendWithAsyncReply()
        https://bugs.webkit.org/show_bug.cgi?id=199734
        <rdar://problem/52977439>

        Reviewed by Geoffrey Garen.

        It appears WKProcessTaskStateObserverDelegate's taskStateDidChange handler can get called
        on a background thread so we need to make sure we go back to the main thread before we
        go into WebKit and do IPC.

        * Shared/Cocoa/ProcessTaskStateObserver.mm:
        (-[WKProcessTaskStateObserverDelegate process:taskStateDidChange:]):

2019-07-11  Sihui Liu  <sihui_liu@apple.com>

        StorageArea should not be destructed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=199713
        <rdar://problem/52911900>

        Reviewed by Alex Christensen.

        After r246079, LocalStorageNameSpace could be destructed on the main thread and it may hold the last reference 
        to StorageArea. Then we saw the crashes that StorageArea was wrongly destructed on the main thread.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::~NetworkSession):
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::waitUntilTasksFinished):
        (WebKit::StorageManager::waitUntilWritesFinished): Deleted.
        * NetworkProcess/WebStorage/StorageManager.h:

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

        Null deref of Range under WebPage::startAutoscrollAtPosition
        https://bugs.webkit.org/show_bug.cgi?id=199724
        <rdar://problem/41127089>

        Reviewed by Dean Jackson.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::startAutoscrollAtPosition):
        Refactor this function to be early-return-y, and add one more
        early return if the Range is null.

2019-07-11  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE][GTK] Build failure with ENABLE_ACCESSIBILITY=OFF
        https://bugs.webkit.org/show_bug.cgi?id=199625

        Added ENABLE(ACCESSIBILITY) and replaced HAVE(ACCESSIBILITY)
        with ENABLE(ACCESSIBILITY) in the code.

        Additionally, the TestRunner code generator now honors the
        Conditional IDL format.

        Reviewed by Konstantin Tokarev.

        * UIProcess/API/glib/WebKitWebViewAccessible.cpp:
        * UIProcess/API/glib/WebKitWebViewAccessible.h:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend):
        (WKWPE::View::~View):
        * UIProcess/API/wpe/WPEView.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityRootObject):
        (WKAccessibilityFocusedObject):
        (WKAccessibilityEnableEnhancedAccessibility):
        (WKAccessibilityEnhancedAccessibilityEnabled):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.cpp:
        * WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/wpe/WebProcessMainWPE.cpp:

2019-07-11  Commit Queue  <commit-queue@webkit.org>

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

        Caused performance regression. (Requested by deanj on
        #webkit).

        Reverted changeset:

        "Disable speculative loading if cache is not to be used for
        the load"
        https://bugs.webkit.org/show_bug.cgi?id=199644
        https://trac.webkit.org/changeset/247314

2019-07-11  Dean Jackson  <dino@apple.com>

        CrashTracer: Regression : MobileSafari at UIKit: -[CALayerAccessibility__UIKit__QuartzCore setBounds:]
        https://bugs.webkit.org/show_bug.cgi?id=199720
        <rdar://problem/51470469>

        Reviewed by Tim Horton.

        Speculative fix after confirming that this crash can occur when
        a zero width/height view is used for a UITargetedPreview. We
        already guarded against this in the default flow, but not in
        the fallback path where we take a view snapshot.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (createFallbackTargetedPreview): Return early if rectangles are empty.

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

        Use mobile UA on jsfiddle.net
        https://bugs.webkit.org/show_bug.cgi?id=199687
        <rdar://problem/50839844>

        Reviewed by Maciej Stachowiak.

        Text selection does not work on iPads using desktop UA.
        This isn't the best solution, but it's certainly *a* solution.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingRecommendedForRequest):

2019-07-11  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Can't place caret or select in content that overflows a contenteditable element
        https://bugs.webkit.org/show_bug.cgi?id=199741
        rdar://problem/50545233

        Reviewed by Wenson Hsieh.

        Various code paths for editing used renderer->absoluteBoundingBoxRect(), which is the border
        box of the element (or a set of line boxes for inline elements) converted to absolute
        coordinates. This excludes overflow content, but contenteditable needs to be able to
        place the caret in overflow content, and allow selection rects to be in the overflow area
        (if the element has visible overflow).

        Try to clean this up by adding some static helpers on WebPage for accessing the relevant
        rects, and use them in code call from visiblePositionInFocusedNodeForPoint(), and
        code that is input to selectionClipRect.

        This changes selectionClipRect to use the padding box (excluding borders), which is a progression.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):
        (WebKit::elementBoundsInFrame):
        (WebKit::constrainPoint):
        (WebKit::WebPage::rootViewBoundsForElement):
        (WebKit::WebPage::absoluteInteractionBoundsForElement):
        (WebKit::WebPage::rootViewInteractionBoundsForElement):
        (WebKit::WebPage::dispatchSyntheticMouseEventsForSelectionGesture):
        (WebKit::WebPage::getFocusedElementInformation):
        (WebKit::innerFrameQuad): Deleted.
        (WebKit::elementRectInRootViewCoordinates): Deleted.

2019-07-11  Jonathan Bedard  <jbedard@apple.com>

        [iOS 13] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199481
        <rdar://problem/52619048>

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h: Add UITextEffectsWindow.sharedTextEffectsWindowForWindowScene SPI.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView showGlobalMenuControllerInRect:]): setTargetRect, setMenuVisible marked depreciated in iOS 13.
        (-[WKContentView hideGlobalMenuController]): Ditto.

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

        MobileSafari may crash under -[UIKeyboardTaskExecutionContext transferExecutionToMainThreadWithTask:]
        https://bugs.webkit.org/show_bug.cgi?id=199701
        <rdar://problem/52590170>

        Reviewed by Tim Horton.

        Mitigates a crash wherein we end up calling the completion handler of
        -requestAutocorrectionContextWithCompletionHandler: within a nested call
        to -requestAutocorrectionContextWithCompletionHandler:. In this particular
        case, a sync `window.open` from the web process to the UI process happens
        while the UI process is already handling a sync autocorrection context
        request. This causes the UI process to try and immediately dispatch the
        incoming sync message to avoid deadlock. However, Safari's logic to create
        and set up a new web view when opening a new window makes the new view the
        first responder, which then prompts UIKit logic to request an autocorrection
        context for the new web view.

        To avoid the issue for now, simply use -resignFirstResponder as a cue to invoke
        pending autocorrection context handlers in the original web view before UIKit
        tries to request autocorrection context in the newly created view.

        I attempted to write a test for this, but realized that we only end up hitting
        the debug assertion pointed out in <https://webkit.org/b/199680>; we should be
        able to write a test for this in the future, if we teach Connection to handle
        multiple outgoing sync messages.

        For the time being, I've attached a manual test case to the bug.

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

        Add a new helper to signify that a pending autocorrection context handler should be cancelled (invoked
        immediately with empty data). Use this in a few places where we currently explicitly pass
        -[WKAutocorrectionContext emptyAutocorrectionContext].

        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):

2019-07-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] With modal overlay and body overflow:hidden, can't access all the content
        https://bugs.webkit.org/show_bug.cgi?id=199693
        rdar://problem/51930364

        Reviewed by Tim Horton.

        A page with overflow:hidden on the root needs to be scrollable if:
        * it's zoomed
        * the visual viewport is smaller than the layout viewport (including visible keyboard)
        * scrolling is required to hide MobileSafari's squishy bars

        This patch does the last two, plumbing a "visual viewport is smaller than layout viewport"
        bit up from WebCore via the scrolling tree (that way, when it changes we automatically trigger
        a commit), and checking for squished bars in WKWebView.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::hasScrollableMainFrame const):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::maximumUnobscuredSize const):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::updateVisibleContentRects):

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

        Long pressing on attachments will crash the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=199696
        <rdar://problem/52920241>

        Reviewed by Dean Jackson.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::linkIndicatorPositionInformation):
        (WebKit::elementPositionInformation):
        (WebKit::selectionPositionInformation):
        (WebKit::WebPage::positionInformation):
        Instead of one-off creating a node snapshot for <attachment>, just
        use TextIndicator. This way, we get an estimated background color,
        paint at the right resolution, etc.

        Also, hitNode was often null where we were previously calling
        shareableBitmapSnapshotForNode, because it depends on the element
        having click event handlers. selectionPositionInformation() re-hit-tests
        more permissively to find the <attachment>, so moving this code
        inside that function ensures that we don't try to snapshot a null node.

2019-07-10  Dean Jackson  <dino@apple.com>

        Safari’s context menu actions are missing options
        https://bugs.webkit.org/show_bug.cgi?id=199694
        <rdar://problem/52726822>

        Reviewed by Tim Horton.

        One of the most embarrassing errors I've ever made. I was returning
        early when something existed, instead of when it didn't exist.
        (*cough* tests *cough*)

        * UIProcess/ios/WKContentViewInteraction.mm:

2019-07-10  Jon Lee  <jonlee@apple.com>

        Opt trello.com to mobile UA
        https://bugs.webkit.org/show_bug.cgi?id=199686
        rdar://problem/51708119

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingRecommendedForRequest): Currently the desktop version
        of the site prevents users from tapping cards to edit them. Opt trello into the mobile
        UA for now.

2019-07-10  Daniel Bates  <dabates@apple.com>

        [iOS] Selection handles "Lollipops" can become gray and stay gray
        https://bugs.webkit.org/show_bug.cgi?id=198852
        <rdar://problem/51736130>

        Reviewed by Wenson Hsieh.

        Tell the text interaction assistant to update the selection UI when the tint color changes.
        We do this by way of deactivating and activating selection.

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

2019-07-10  Dean Jackson  <dino@apple.com>

        Share or Copy image from context menu does not share the correct data
        https://bugs.webkit.org/show_bug.cgi?id=199681
        <rdar://problem/50538771>

        Reviewed by Tim Horton.

        The UIContextMenuInteraction calls didEndInteraction before executing the
        actions of a selected menu item. This means we were assuming the interaction
        had finished before performing the action triggered in the interaction, ending
        up in the state where we had forgotten which element we were working with.

        Rather than ask for UIKit to change, I'm just starting the interaction again
        as the action is run. Thankfully we already had the location of the interaction.
        There is a small risk that the page has changed in the meantime, but I'm not
        sure what to do about that.

        While here, I moved a method only used by us into _WKElementActionInternal,
        and changed the location stored by _WKActivatedElementInfo from a CGPoint
        to an WebCore::IntPoint (since it doesn't escape WebKit).

        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm: Use a WebCore::IntPoint rather than a CGPoint.
        (-[_WKActivatedElementInfo _initWithType:URL:imageURL:location:title:ID:rect:image:]):
        (-[_WKActivatedElementInfo _initWithType:URL:imageURL:location:title:ID:rect:image:userInfo:]):
        (-[_WKActivatedElementInfo _interactionLocation]):
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:

        * UIProcess/API/Cocoa/_WKElementAction.h: Move uiActionForElementInfo to Internal.
        * UIProcess/API/Cocoa/_WKElementActionInternal.h:

        * UIProcess/API/Cocoa/_WKElementAction.mm: When executing the handlers, restart the interaction
        using the location in _WKActivatedElementInfo.
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]):

        * UIProcess/ios/WKContentViewInteraction.mm: Explicitly start and stop interactions at
        the appropriate points in the UIContextMenu flow. This isn't really needed since we're
        doing it in the handlers, but it will be correct if the UIKit delegate order changes.
        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView contextMenuInteractionDidEnd:]):

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

        Crash under IPC::Connection::waitForMessage()
        https://bugs.webkit.org/show_bug.cgi?id=199680
        <rdar://problem/52500561>

        Reviewed by Tim Horton.

        IPC::Connection::waitForMessage() is crashing due to a null defererence of
        m_waitingForMessage. Since m_waitingForMessage is only ever set to null in
        waitForMessage(), this seems to imply we've re-entered waitForMessage().
        This is in theory possible since the loop inside waitForMessage() calls
        SyncMessageState::singleton().dispatchMessages() on every iteration to
        process incoming synchronous IPC messages. In theory, one of these sync
        IPC messages could run code which ends up calling waitForAndDispatchImmediately()
        (and thus waitForMessage()).

        We had a debug assertion to try and catch re-entrancy with a comment stating
        "We don't support having multiple clients waiting for messages." but we
        would not see those in release and we would crash with a null dereference
        instead.

        To address the crashes in release, return early in case of re-entrancy
        (we would still hit an assertion in debug).

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::waitForMessage):
        * Platform/IPC/Connection.h:

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

        Context menus are not presented for WKWebViews that don't have UIDelegates
        https://bugs.webkit.org/show_bug.cgi?id=199678

        Reviewed by Dean Jackson.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView continueContextMenuInteraction:]):
        Remove this unnecessary early-return if we don't have a UIDelegate.
        We have a default behavior that we totally want to happen.
        Also, rename completion() to continueWithContextMenuConfiguration()
        to reduce confusion between completion() and completionBlock() in
        this method.

2019-07-10  Commit Queue  <commit-queue@webkit.org>

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

        Caused perf regression. (Requested by deanj on #webkit).

        Reverted changeset:

        "[iPadOS] Viewport pops while loading sohu.com, xinhuanet.com,
        and various other websites"
        https://bugs.webkit.org/show_bug.cgi?id=199575
        https://trac.webkit.org/changeset/247223

2019-07-10  Youenn Fablet  <youenn@apple.com>

        Disable speculative loading if cache is not to be used for the load
        https://bugs.webkit.org/show_bug.cgi?id=199644

        Reviewed by Chris Dumez.

        When the page is reloaded, loads are instructed to not use the cache.
        It is therefore unneeded to do speculative revalidation.
        Allow speculative revalidation if the cache policy is either the default HTTP policy or
        if policy is to refresh all cache data.
        Covered by added test.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::cachePolicyValidForSpeculativeRevalidation):
        (WebKit::NetworkCache::canRequestUseSpeculativeRevalidation):

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

        Fix build after Foundation changes UIEdgeInsets definition
        https://bugs.webkit.org/show_bug.cgi?id=199660
        <rdar://problem/52390453>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/WKWebViewContentProvider.h:

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

        Remove TouchActionData
        https://bugs.webkit.org/show_bug.cgi?id=199668

        Reviewed by Simon Fraser.

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

2019-07-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] GUniqueOutPtr::release should return a raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=199579

        Reviewed by Carlos Garcia Campos.

        * NetworkProcess/glib/WebKitCachedResolver.cpp:
        (webkitCachedResolverLookupByNameAsync):
        (webkitCachedResolverLookupByNameWithFlagsAsync):
        * UIProcess/API/glib/WebKitFaviconDatabase.cpp:
        (processPendingIconsForPageURL):
        (webkit_favicon_database_get_favicon):
        * UIProcess/API/glib/WebKitUserContentFilterStore.cpp:
        (webkit_user_content_filter_store_save_from_file):

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

        Fixed elements appear in the middle of full page screenshots taken when scrolled
        https://bugs.webkit.org/show_bug.cgi?id=199649
        <rdar://problem/52476226>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingAndDrawToPDF):
        Temporarily expand the layout viewport to the size of the snapshotting page,
        so that fixed elements sit against the bounds of the page instead of
        wherever you're currently scrolled to.

2019-07-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Use Optional<> for two data members of WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=199637

        Reviewed by Tim Horton.

        Use Optional<CGSize> to replace _overridesViewLayoutSize/_viewLayoutSizeOverride
        and _overridesMaximumUnobscuredSize/_maximumUnobscuredSizeOverride.

        No behavior change.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView activeViewLayoutSize:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (activeMaximumUnobscuredSize):
        (-[WKWebView _minimumLayoutSizeOverride]):
        (-[WKWebView _setViewLayoutSizeOverride:]):
        (-[WKWebView _maximumUnobscuredSizeOverride]):
        (-[WKWebView _setMaximumUnobscuredSizeOverride:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _clearOverrideLayoutParameters]):

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

        Fix integer type encoding / decoding in WKRemoteObjectCoder
        https://bugs.webkit.org/show_bug.cgi?id=199643
        <rdar://problem/52732342>

        Reviewed by Anders Carlsson.

        As per [1], q / Q match to long long / unsigned long long, not long / unsigned long.

        [1] https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeInvocationArguments):
        (decodeInvocationArguments):

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

        Cleanup uses of NetworkProcess::m_sessionByConnection
        https://bugs.webkit.org/show_bug.cgi?id=199586

        Reviewed by Alex Christensen.

        Avoid double HashMap lookups and call add() instead of ensure() when appropriate.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::networkSessionByConnection const):
        (WebKit::NetworkProcess::webPageWasAdded):
        (WebKit::NetworkProcess::webProcessWasDisconnected):

2019-07-09  Saagar Jha  <saagarjha@apple.com>

        WKObject's minimum object alignment needs to be larger
        https://bugs.webkit.org/show_bug.cgi?id=199523

        Reviewed by Alex Christensen.

        WKObject's wrapped objects are currently constructed at addresses aligned to 8-byte boundaries, but some
        classes have more stringent requirements. By querying std::aligned_storage for the alignment of an object
        larger than anything we can construct, we should be able to satisfy alignment for any of WebKit's types.

        * Shared/Cocoa/APIObject.mm: Use std::aligned_storage in conjunction with alignof to determine
        minimumObjectAlignment, instead of hardcoding 8.

2019-07-09  Megan Gardner  <megan_gardner@apple.com>

        Don't strip out spaces for personalized Autocorrections
        https://bugs.webkit.org/show_bug.cgi?id=199476
        <rdar://problem/50782015>

        Reviewed by Dean Jackson.

        When inserting 'autocorrections' that are really predictive
        text suggestions based on personal data, we would remove the space
        before the suggestion, resulting in incorrect input.
        To fix, do not remove a space when the autocorrected text and the text it is 
        replacing do not have any length.

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

2019-07-09  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r247230.

        Caused storage/domstorage/localstorage/private-browsing-
        affects-storage.html to crash with an assertion.

        Reverted changeset:

        "Cleanup uses of NetworkProcess::m_sessionByConnection"
        https://bugs.webkit.org/show_bug.cgi?id=199586
        https://trac.webkit.org/changeset/247230

2019-07-09  Youenn Fablet  <youenn@apple.com>

        XHR CORS requests logged twice in the server
        https://bugs.webkit.org/show_bug.cgi?id=199492
        <rdar://problem/52757558>

        Reviewed by Chris Dumez.

        Disable speculative loading for XHR and fetch.
        These speculative requests might have specific headers that are no longer relevant
        when reloading the page. This might then confuse servers.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeStoreDecision):
        (WebKit::NetworkCache::canRequestUseSpeculativeRevalidation):
        (WebKit::NetworkCache::Cache::retrieve):

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

        Fix validation of method signature in decodeInvocation()
        https://bugs.webkit.org/show_bug.cgi?id=199629
        <rdar://problem/52731659>

        Reviewed by Dan Bernstein.

        The decoder was mistakenly assigning remoteMethodSignature to localMethodSignature
        before comparing remoteMethodSignature and localMethodSignature, thus making the
        check useless.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (decodeInvocation):

2019-07-09  Youenn Fablet  <youenn@apple.com>

        Revert conditional WebPageProxy check to grant universal file read sandbox upon correct sandbox creation
        https://bugs.webkit.org/show_bug.cgi?id=199622
        <rdar://problem/52357508>

        Reviewed by Alex Christensen.

        On iOS, the sandbox extension to '/' will usually fail, thus the universal file read sandbox is not granted.
        This makes WebPageProxy cancel some file:// loads to the application own container.
        As a short term fix, go back to previous behavior.
        Covered by testing broken app identified in rdar://problem/52357508.

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

2019-07-09  Sihui Liu  <sihui_liu@apple.com>

        Only allow fetching and removing session credentials from WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199385
        <rdar://problem/52622080>

        Reviewed by Alex Christensen.

        Stop sending an extra message to network process for fetching or removing persistent credentials.

        Also introduce a new SPI for clearing persistent credentials created in test.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearPermanentCredentialsForProtectionSpace):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::originsWithPersistentCredentials): Deleted.
        (WebKit::NetworkProcess::removeCredentialsWithOrigins): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::originsWithPersistentCredentials): Deleted.
        (WebKit::NetworkProcess::removeCredentialsWithOrigins): Deleted.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _clearPermanentCredentialsForProtectionSpace:completionHandler:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::clearPermanentCredentialsForProtectionSpace):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::computeWebProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::removeData):

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

        [Pointer Events] Scroll indicators should not show for scrollable content with touch-action: none
        https://bugs.webkit.org/show_bug.cgi?id=199618

        Reviewed by Simon Fraser.

        Even though we correctly didn't scroll when "touch-action: none" was specified on an element, we would only apply
        scrolling constraints after the panning gesture was recognized and the backing UIScrollView would show its scroll
        indicators. While this is correct when only "pan-x" or "pan-y" is specified, we should not show the scroll indicators
        at all for "touch-action: none" since no scrolling should happen.

        To do this, we add a new method to the WKTouchActionGestureRecognizerDelegate protocol to indicate whether a given
        gesture recognizer may pan content in the WKWebView. If the gesture recognizer is the top-level scroll view or one
        created within the page to back "overflow: scroll" content or an iframe, we correctly make that gesture recognizer
        fail to recognize if neither "pan-x" nor "pan-y" is specified for this touch identifier.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizerMayPanWebView:]):
        * UIProcess/ios/WKTouchActionGestureRecognizer.h:
        * UIProcess/ios/WKTouchActionGestureRecognizer.mm:
        (-[WKTouchActionGestureRecognizer canPreventGestureRecognizer:]):

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

        Validate reply block signature in [WKRemoteObjectRegistry _invokeMethod]
        https://bugs.webkit.org/show_bug.cgi?id=199584
        <rdar://problem/46268249>

        Reviewed by Geoffrey Garen.

        Validate reply block signature in [WKRemoteObjectRegistry _invokeMethod] for robustness.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (validateReplyBlockSignature):
        (-[_WKRemoteObjectRegistry _invokeMethod:]):

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

        UserData::decode should return false when decoding an unrecognized type
        https://bugs.webkit.org/show_bug.cgi?id=199598
        <rdar://52735138>

        Reviewed by Ryosuke Niwa.

        * Shared/UserData.cpp:
        (WebKit::UserData::decode):

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

        Speculative fix for crashes under LocalStorageDatabaseTracker::databasePath()
        https://bugs.webkit.org/show_bug.cgi?id=199599
        <rdar://problem/31169686>

        Reviewed by Ryosuke Niwa.

        Speculative fix for crashes under LocalStorageDatabaseTracker::databasePath():
        - Add new localStorageDirectory() getter to LocalStorageDatabaseTracker which
          calls isolatedCopy() on m_localStorageDirectory before returning it.
          Use it everywhere instead of m_localStorageDirectory since it is not safe
          to use the same String from various threads like it was done.
        - Move localStorageDirectory when constructing the LocalStorageDatabaseTracker
          instead of copying it.
        - Make sure that LocalStorageDatabaseTracker and StorageManager are both
          constructed and destroyed on the main thread.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::create):
        (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):
        (WebKit::LocalStorageDatabaseTracker::localStorageDirectory const):
        (WebKit::LocalStorageDatabaseTracker::~LocalStorageDatabaseTracker):
        (WebKit::LocalStorageDatabaseTracker::deleteAllDatabases):
        (WebKit::LocalStorageDatabaseTracker::origins const):
        (WebKit::LocalStorageDatabaseTracker::databasePath const):
        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h:
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::create):
        (WebKit::StorageManager::StorageManager):
        (WebKit::StorageManager::~StorageManager):
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm:
        (WebKit::LocalStorageDatabaseTracker::platformMaybeExcludeFromBackup const):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        (WebKit::NetworkSessionCurl::NetworkSessionCurl):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):

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

        Use WeakHashSet for WebUserContentControllerProxy::m_processes
        https://bugs.webkit.org/show_bug.cgi?id=199591
        <rdar://problem/52798721>

        Reviewed by Youenn Fablet.

        Use WeakHashSet for WebUserContentControllerProxy::m_processses for safety. In theory, a WebProcessProxy could
        stay in the map if we failed to call WebProcessProxy::shutDown() before destroying it.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (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::addNetworkProcess):
        (WebKit::WebUserContentControllerProxy::removeNetworkProcess):

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

        [iOS] Support select all in non-editable element
        https://bugs.webkit.org/show_bug.cgi?id=199257
        <rdar://problem/52553667>

        Reviewed by Wenson Hsieh.

        Unless we are populating the callout bar always advertise that WebKit can perform Select All
        when building with USE(UIKIT_KEYBOARD_ADDITIONS). This way you can press Command + A to select
        all text even in a non-editable element just like you can on Mac.

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

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

        Cleanup uses of NetworkProcess::m_sessionByConnection
        https://bugs.webkit.org/show_bug.cgi?id=199586

        Reviewed by Alex Christensen.

        Avoid double HashMap lookups and call add() instead of ensure() when appropriate.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::networkSessionByConnection const):
        (WebKit::NetworkProcess::webPageWasAdded):
        (WebKit::NetworkProcess::webProcessWasDisconnected):

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

        WKWebView fails to render when another view uses CoreImage filters
        https://bugs.webkit.org/show_bug.cgi?id=199488
        <rdar://problem/52695825>

        Reviewed by Dean Jackson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        Update m_layerHostingMode when it changes, even if we can't message
        the Web Content process. This ensures that the next time we launch
        a Web Content process, WebPageCreationParameters will have the correct
        layer hosting mode, and is the usual pattern for such things.

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

        [iPadOS] Viewport pops while loading sohu.com, xinhuanet.com, and various other websites
        https://bugs.webkit.org/show_bug.cgi?id=199575
        <rdar://problem/51842220>

        Reviewed by Simon Fraser.

        Currently, the shrink-to-fit-content heuristic added to scale desktop sites fit within the viewport on iPadOS
        only runs during two intervals: after document load, and after page load. On very script-heavy websites, this
        may cause a visible jump, as rendering may commence well before the document is finished parsing.

        To mitigate this, we move the first opportunity for the shrink-to-fit heuristic from after document, to right
        after the page transition has completed (before we unfreeze the layer tree).

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCompletePageTransition):
        (WebKit::WebPage::didFinishDocumentLoad): Deleted.

        Remove this didFinishDocumentLoad hook, which was only used to schedule the shrink-to-fit timer.

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

        m_mainFrame might be null after page transition completes, so we need to ensure immediatelyShrinkToFitContent is
        robust in this scenario.

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

        Add threading assertion to WTF::CompletionHandler
        https://bugs.webkit.org/show_bug.cgi?id=199516

        Reviewed by Alex Christensen.

        Update some MessagePort-related code to use WTF::Function instead of WTF::CompletionHandler
        since the callback is always called on the main thread, even when it was created on a
        worker thread. Ideally, this code would be refactored so that the callback gets called on
        the worker thread directly.

        * UIProcess/UIMessagePortChannelProvider.cpp:
        (WebKit::UIMessagePortChannelProvider::checkRemotePortForActivity):
        * UIProcess/UIMessagePortChannelProvider.h:
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
        (WebKit::WebMessagePortChannelProvider::checkRemotePortForActivity):
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:

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

        [Pointer Events] "touch-action: none" does not prevent double-tap-to-zoom
        https://bugs.webkit.org/show_bug.cgi?id=199571
        <rdar://problem/51715002>

        Reviewed by Wenson Hsieh.

        We add a new WKTouchActionGestureRecognizerDelegate method to check whether a gesture recognizer may lead to
        zooming the page as a result of double-tapping, which can be caused by two different gesture recognizers
        managed by WKContentViewInteraction. If that delegate method returns true and we have "touch-action: none"
        set for this touch, we cause those gesture recognizers to fail and prevent double-tap-to-zoom behavior.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizerMayDoubleTapToZoomWebView:]):
        * UIProcess/ios/WKTouchActionGestureRecognizer.h:
        * UIProcess/ios/WKTouchActionGestureRecognizer.mm:
        (-[WKTouchActionGestureRecognizer canPreventGestureRecognizer:]):

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

        [iOS] WebContent processes should not globally allow mach lookup to the AX server.
        https://bugs.webkit.org/show_bug.cgi?id=199386
        <rdar://problem/52487468>

        Reviewed by Chris Fleizach.

        Instead, a mach extension for this service should be issued to the WebContent process. This has already been implemented.

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

2019-07-08  Claudio Saavedra  <csaavedra@igalia.com>

        REGRESSION(r246671): [WPE][GTK] Crash in NetworkProcess since the DNS cache landed
        https://bugs.webkit.org/show_bug.cgi?id=199572

        Reviewed by Michael Catanzaro.

        The GError coming from the wrapped resolver shouldn't be freed,
        but passed onto the caller.

        * NetworkProcess/glib/WebKitCachedResolver.cpp:
        (webkitCachedResolverLookupByNameAsync):
        (webkitCachedResolverLookupByNameWithFlagsAsync):

2019-07-07  Antoine Quint  <graouts@apple.com>

        [Pointer Events] touch-action should affect the behavior of pinch-to-zoom to show tabs in Safari
        https://bugs.webkit.org/show_bug.cgi?id=199560
        <rdar://problem/52742265>

        Reviewed by Dean Jackson.

        There are other UIPinchGestureRecognizer objects that may lead to pinch-to-zoom behavior, for instance pinching
        out to show open tabs in Safari on iOS. We add a new WKUIDelegatePrivate method that will allow Safari to indicate
        that a UIPinchGestureRecognizer considered for prevention would lead to pinch-to-zoom behavior.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizerMayPinchToZoomWebView:]):

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

        [Pointer Events] Enable only on the most recent version of the supported iOS family
        https://bugs.webkit.org/show_bug.cgi?id=199562
        <rdar://problem/52766511>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cancelPointersForGestureRecognizer:]):
        (-[WKContentView activeTouchIdentifierForGestureRecognizer:]):
        (-[WKContentView touchActionActiveTouches]):
        * UIProcess/ios/WKSyntheticTapGestureRecognizer.m:
        (-[WKSyntheticTapGestureRecognizer touchesEnded:withEvent:]):
        * UIProcess/ios/WKTouchActionGestureRecognizer.h:
        * UIProcess/ios/WKTouchActionGestureRecognizer.mm:
        (-[WKTouchActionGestureRecognizer canPreventGestureRecognizer:]):

2019-07-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] ViewGestureController constructor leaves m_direction uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=199532

        Reviewed by Carlos Garcia Campos.

        This is harmless because it should never be read until after it's initialized, but still not
        robust. Fix it by assuming Back as the default value until the first swipe begins.

        * UIProcess/ViewGestureController.h:

2019-07-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Difficult to control videos on iqiyi.com as the actions are mouse hover
        https://bugs.webkit.org/show_bug.cgi?id=199542
        <rdar://problem/51886813>

        Reviewed by Simon Fraser.

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

2019-07-06  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Use a gesture recognizer to prevent pinch-to-zoom behavior
        https://bugs.webkit.org/show_bug.cgi?id=199543

        Reviewed by Dean Jackson.

        We used to set the "enabled" property on the main UIScrollView's UIPinchGestureRecognizer to disable pinch-to-zoom
        behavior based on the "touch-action" CSS property. This was sub-optimal since this gesture recognizer can be publicly
        accessible by third-party developers, but also because it set state instead of a run-time solution.

        We now introduce a new WKTouchActionGestureRecognizer dedicated to preventing clearly identified gesture recognizers
        from being recognized to disable some built-in behavior. As a new touch starts, we record the computed touch-action
        property for the given touch identifier on the WKTouchActionGestureRecognizer, then WKTouchActionGestureRecognizer
        determines, by implementing -[canPreventGestureRecognizer:], whether the possibly-prevented gesture recognizer
        is known to lead to a pinch-to-zoom behavior and whether it contains a touch that should prevent it.

        To support the WKTouchActionGestureRecognizer, WKContentViewInteraction implements the new WKTouchActionGestureRecognizerDelegate
        protocol to indicate whether the possibly-prevented gesture recognizer is the main UIScrollView's UIPinchGestureRecognizer.

        No new test since this changes the implementation of existing behavior.

        * SourcesCocoa.txt:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView _handleTouchActionsForTouchEvent:]):
        (-[WKContentView gestureRecognizerMayPinchToZoomWebView:]):
        (-[WKContentView touchActionActiveTouches]):
        * UIProcess/ios/WKTouchActionGestureRecognizer.h: Added.
        * UIProcess/ios/WKTouchActionGestureRecognizer.mm: Added.
        (-[WKTouchActionGestureRecognizer initWithTouchActionDelegate:]):
        (-[WKTouchActionGestureRecognizer setTouchActions:forTouchIdentifier:]):
        (-[WKTouchActionGestureRecognizer clearTouchActionsForTouchIdentifier:]):
        (-[WKTouchActionGestureRecognizer touchesBegan:withEvent:]):
        (-[WKTouchActionGestureRecognizer touchesMoved:withEvent:]):
        (-[WKTouchActionGestureRecognizer touchesEnded:withEvent:]):
        (-[WKTouchActionGestureRecognizer touchesCancelled:withEvent:]):
        (-[WKTouchActionGestureRecognizer _updateState]):
        (-[WKTouchActionGestureRecognizer canBePreventedByGestureRecognizer:]):
        (-[WKTouchActionGestureRecognizer canPreventGestureRecognizer:]):
        * WebKit.xcodeproj/project.pbxproj:

2019-07-06  Chris Fleizach  <cfleizach@apple.com>

        AX: CrashTracer: com.apple.WebKit.WebContent at WebKit: WebKit::WebSpeechSynthesisClient::speak
        https://bugs.webkit.org/show_bug.cgi?id=199435

        Reviewed by Ryosuke Niwa.

        Ensure we don't access null observers in speech callbacks.

        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp:
        (WebKit::WebSpeechSynthesisClient::voiceList):
        (WebKit::WebSpeechSynthesisClient::speak):
        (WebKit::WebSpeechSynthesisClient::pause):
        (WebKit::WebSpeechSynthesisClient::resume):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::speakingErrorOccurred):
        (WebKit::WebPage::boundaryEventOccurred):
        (WebKit::WebPage::voicesDidChange):

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

        Fix thread safety bug in WebResourceLoadStatisticsTelemetry::calculateAndSubmit()
        https://bugs.webkit.org/show_bug.cgi?id=199536

        Reviewed by Youenn Fablet.

        The resourceLoadStatisticsStore is an object that is created / used / destroyed on the background
        queue. It is therefore not safe to create a WeakPtr for it and use that WeakPtr on the main thread.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::WebResourceLoadStatisticsTelemetry::calculateAndSubmit):

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

        Unreviewed, fix -Wswitch warning

        We don't support HTTPCookieAcceptPolicy::ExclusivelyFromMainDocumentDomain.

        Fun fact, soup's OnlyFromMainDocumentDomain functions the same as Apple's
        ExclusivelyFromMainDocumentDomain. These should be renamed....

        * NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):

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

        [iOS] Context Menu - Add to Reading List does nothing
        https://bugs.webkit.org/show_bug.cgi?id=199504
        <rdar://problem/52554137>

        Reviewed by Anders Carlsson.

        We were holding weak references to the _WKElementAction in
        the handler provided to UIAction. By the time the handler was
        called, the object had been deallocated.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (-[_WKElementAction uiActionForElementInfo:]): Use strong references in handler.

2019-07-05  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Crash in WebKit::WebPage::positionInformation via Range::startPosition
        https://bugs.webkit.org/show_bug.cgi?id=199503

        Reviewed by Wenson Hsieh.

        The crash was caused because focusedElementPositionInformation asssumes Editor::compositionRange is not null
        whenever Editor::hasComposition returns true, which is not necessary the case when Editor::m_compositionNode
        contains no text (data is of length 0).

        Fixed the crash by adding an early return for when Editor::compositionRange returns nullptr.

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

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

        [ContentChangeObserver] REGRESSION (r247015): facebook photo/video upload button is unresponsive to user interaction.
        https://bugs.webkit.org/show_bug.cgi?id=199502
        <rdar://problem/52547473>

        Reviewed by Simon Fraser.

        Apparently it's a common practice to put transparent elements over visible click targets (button like divs) and use the invisible
        elements to catch the user input (e.g. Facebook's Photo/Video button).
        This patch modifies the original "do not trigger click on invisible targets" heuristic to a more restrictive "do not trigger
        click if the click target was previously hidden and became visible through touch start".
        If this still breaks some use cases, we could turn it into YouTube quirk.       

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

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

        Unreviewed, rolling out r247123.

        Caused TestWebKitAPI.Challenge.BasicProposedCredential to
        fail.

        Reverted changeset:

        "Only allow fetching and removing session credentials from
        WebsiteDataStore"
        https://bugs.webkit.org/show_bug.cgi?id=199385
        https://trac.webkit.org/changeset/247123

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

        Click events on outer page are not being dispatched correctly after touch-zooming within an iframe
        https://bugs.webkit.org/show_bug.cgi?id=185001
        <rdar://problem/40569615>

        Reviewed by Simon Fraser.

        Mitigations introduced in r227759 prevent a touch inside a document of origin A to result in a click event being
        dispatched on an element inside a document of origin B. It accomplishes this by keeping track of the security
        origin of the last touch via m_potentialTapSecurityOrigin on WebPage. However, there exists a corner case in
        which m_potentialTapSecurityOrigin, set after touching a document in a subframe, may persist even after the user
        has finished interacting, causing taps in subsequent documents to not result in synthetic click events due to
        mismatched potential tap origins.

        This may happen if the first user gesture happens inside an element in a subframe with touch event handlers, but
        no click event handler (and the touch is additionally not over some clickable element). In this case,
        m_potentialTapNode is set to null in WebPage::potentialTapAtPosition, and when we consult it in
        WebPage::commitPotentialTap, we just end up calling commitPotentialTapFailed(); and return early. This means
        that m_potentialTapNode, m_potentialTapLocation, and (importantly) m_potentialTapSecurityOrigin are not reset.
        This causes subsequent taps in the top-level document to never dispatch click events, if the security origin
        does not match with that of the subframe.

        To fix this, we add a new async IPC message from the UI process to the web process to ensure that our current
        security origin is reset before attempting to handle a tap.

        Test: http/tests/events/touch/ios/click-after-handling-touch-in-cross-origin-frame.https.html

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

        Reset any stale potential tap security origin if needed.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):

        Send the new IPC message when starting a touch.

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

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

        Touching media controls sometimes shows software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=199490
        <rdar://problem/52076270>

        Reviewed by Eric Carlson.

        In r243044, we added a compatibility hack for Google Slides (and other G-suite properties) to allow the on-
        screen keyboard to show up after a prevented touch event in the case where an element was already focused, even
        if the touch event handler doesn't explicitly refocus the element. However, this means that if a regular text
        field (or other form control) has been programmatically focused, then interacting with any other element that
        prevents default on touchstart will cause us to show the keyboard for that focused element.

        To mitigate this, only fall down this refocusing codepath in the case where the focused element is a hidden
        editable element (in the style of many Google productivity web apps). For non-hidden editable elements that are
        already focused, this refocusing logic is not necessary, since the user should be able to interact with the
        control to show the keyboard anyways; for hidden editable areas, this compatibility hack is actually needed,
        since there is typically no other way for a user to focus these elements and show an on-screen keyboard.

        Tests:  fast/events/touch/ios/show-keyboard-after-preventing-touchstart.html
                fast/events/touch/ios/do-not-show-keyboard-after-preventing-touchstart.html

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dispatchTouchEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::isTransparentOrFullyClipped const):

        Renamed from enclosingLayerIsTransparentOrFullyClipped, and pulled out into a private helper method.

        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::requestEvasionRectsAboveSelection):
        (WebKit::WebPage::getFocusedElementInformation):
        (WebKit::enclosingLayerIsTransparentOrFullyClipped): Deleted.

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

        Simplify logic that handles registering WebProcessProxy objects with their WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199412
        <rdar://problem/51899751>

        Reviewed by Ryosuke Niwa.

        Simplify logic that handles registering WebProcessProxy objects with their WebsiteDataStore to make
        it more maintainable and less error-prone (avoid bugs like <rdar://problem/51899751>).

        The following changes were made:
        1. The WebProcess now registers / unregisters itself directly with its WebsiteDataStore when needed,
           instead of having the WebPageProxy/ProvisionalPageProxy be in charge of calling the right
           WebProcessLifetimeTracker / WebProcessLifetimeObserver abstractions.
        2. The WebProcessLifetimeTracker / WebProcessLifetimeObserver abstractions were dropped. The
           WebsiteDataStore was the only observer.
        3. The WebProcessProxy is now registered with its WebsiteDataStore as soon as it has a page (provisional
           or not) instead of waiting until the process has finished launching. This simplifies the logic a
           lot and waiting until the process has launched is not needed by the WebsiteDataStore.
           

        * Sources.txt:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidTerminate):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::CachedProcess::CachedProcess):
        * UIProcess/WebProcessLifetimeObserver.cpp: Removed.
        * UIProcess/WebProcessLifetimeObserver.h: Removed.
        * UIProcess/WebProcessLifetimeTracker.cpp: Removed.
        * UIProcess/WebProcessLifetimeTracker.h: Removed.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setWebsiteDataStore):
        (WebKit::WebProcessProxy::updateRegistrationWithDataStore):
        (WebKit::WebProcessProxy::addProvisionalPageProxy):
        (WebKit::WebProcessProxy::removeProvisionalPageProxy):
        (WebKit::WebProcessProxy::connectionWillOpen):
        (WebKit::WebProcessProxy::processWillShutDown):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::removeWebPage):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::registerProcess):
        (WebKit::WebsiteDataStore::unregisterProcess):

        (WebKit::WebsiteDataStore::processPoolForCookieStorageOperations):
        Drop change that was added in r246097 to work around the fact that WebProcessProxy objects
        were only registering themselves with their data store after their process had finished
        launching.

        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::processPools const):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::processes const):
        * WebKit.xcodeproj/project.pbxproj:

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

        [ContentChangeObserver] Limit mouseOut dispatching after synthetic click to YouTube.com
        https://bugs.webkit.org/show_bug.cgi?id=199497
        <rdar://problem/52361019>

        Reviewed by Wenson Hsieh.

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

2019-07-03  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebDragClient::startDrag because GraphicsContext is nullptr
        https://bugs.webkit.org/show_bug.cgi?id=199491

        Reviewed by Wenson Hsieh.

        Added a nullptr check.

        Unfortunately no new tests since we don't have a reproducible test case.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):

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

        Data Detectors are not working for context menus in clients that use the legacy preview API
        https://bugs.webkit.org/show_bug.cgi?id=199486
        <rdar://problem/52117322>

        Reviewed by Dean Jackson.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        The Data Detectors code in the legacy preview path is guarded by a
        #define that did not survive upstreaming. Remove it.

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

        StorageManager::suspend() sometimes fails to call its completion handler
        https://bugs.webkit.org/show_bug.cgi?id=199482

        Reviewed by Youenn Fablet.

        Make sure the completion handler gets called in the early return cases.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::suspend):

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

        Make CacheStorage::Engine directory listing operations in a background thread
        https://bugs.webkit.org/show_bug.cgi?id=199470

        Reviewed by Chris Dumez.

        Use the io work queue to get the list of directories.
        Then go back to main thread and trigger clear/fetch operation as currently done.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::ReadOriginsTaskCounter::create):
        (WebKit::CacheStorage::ReadOriginsTaskCounter::ReadOriginsTaskCounter):
        (WebKit::CacheStorage::Engine::getDirectories):
        (WebKit::CacheStorage::Engine::fetchEntries):
        (WebKit::CacheStorage::Engine::fetchDirectoryEntries):
        (WebKit::CacheStorage::Engine::clearCachesForOriginFromDisk):
        (WebKit::CacheStorage::Engine::clearCachesForOriginFromDirectories):
        * NetworkProcess/cache/CacheStorageEngine.h:

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

        Only allow fetching and removing session credentials from WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199385

        Reviewed by Alex Christensen.

        Stop sending an extra message to network process for fetching or removing persistent credentials.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::originsWithPersistentCredentials): Deleted.
        (WebKit::NetworkProcess::removeCredentialsWithOrigins): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::originsWithPersistentCredentials): Deleted.
        (WebKit::NetworkProcess::removeCredentialsWithOrigins): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::computeWebProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::removeData):

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

        UI process exception when dragging an <attachment> with no content type
        https://bugs.webkit.org/show_bug.cgi?id=199480
        <rdar://problem/44351353>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::mimeType const):
        (API::Attachment::utiType const):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::startDrag):
        Make null or empty contentType fail the drag, instead of crashing.

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

        Clarify threading model for WebResourceLoadStatisticsStore::dumpResourceLoadStatistics()
        https://bugs.webkit.org/show_bug.cgi?id=199468

        Reviewed by Youenn Fablet.

        Our convention is that the WebResourceLoadStatisticsStore is always created, used and
        destroyed on the main thread, while the ResourceLoadStatisticsStore is always created,
        used and destroyed on the background queue.

        r245517 broke this convention by introducing a tryDumpResourceLoadStatistics() method
        to WebResourceLoadStatisticsStore which gets called on the background queue. This patch
        fixes this since this has been a huge source of thread-safety bugs in the past.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::dumpResourceLoadStatistics):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::dumpResourceLoadStatistics):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::ResourceLoadStatisticsStore::dataRecordsBeingRemoved const):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::dumpResourceLoadStatistics):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:

2019-07-03  Jonathan Bedard  <jbedard@apple.com>

        [Catalina] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199209

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.h: AppSSO is SPI.
        * WebKit2Prefix.h: SecTask.h declares SecTaskGetCodeSignStatus(...) unavailable
        on Mac, exclude this header.

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

        REGRESSION (r246817): fast/events/ios/key-events-comprehensive/key-events-{control, control-shift}.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=199465
        <rdar://problem/52613496>

        Reviewed by Wenson Hsieh.

        Don't advertise that WebKit can perform cursor movements when there isn't some kind of selection.

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

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

        Fix a couple of thread safety issues in ResourceLoadStatisticsStore
        https://bugs.webkit.org/show_bug.cgi?id=199463

        Reviewed by Alex Christensen.

        The ResourceLoadStatisticsStore object is constructed / used / destroyed on a background queue.
        It is therefore not safe to use a WeakPtr to the ResourceLoadStatisticsStore on the main thread.

        The safe pattern is to have the ResourceLoadStatisticsStore capture a Ref<> of its m_store before
        dispatching to the main thread and use this store on the main thread instead of weakThis->m_store.
        ResourceLoadStatisticsStore's m_store is constructed / used / destroyed on the main thread.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords):

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

        Isolate CacheStorage::Engine path when hopping to a background thread
        https://bugs.webkit.org/show_bug.cgi?id=199461

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::initialize):

2019-07-03  Jer Noble  <jer.noble@apple.com>

        Unreviewed, rolling out r246053.

        This changeset caused media playback to break when the hosting app was backgrounded.

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

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

        Use smarter pointers in WKDownloadProgress
        https://bugs.webkit.org/show_bug.cgi?id=199456
        <rdar://problem/51392926>

        Reviewed by Chris Dumez.

        There's still a problem related to our use of raw pointers.  Let's just not use raw pointers.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::publishProgress):
        * NetworkProcess/Downloads/cocoa/WKDownloadProgress.h:
        * NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm:
        (-[WKDownloadProgress performCancel]):
        (-[WKDownloadProgress initWithDownloadTask:download:URL:sandboxExtension:]):
        (-[WKDownloadProgress progressCancelled]): Deleted.

2019-07-03  Sam Weinig  <weinig@apple.com>

        Adopt simple structured bindings in more places
        https://bugs.webkit.org/show_bug.cgi?id=199247

        Reviewed by Alex Christensen.

        Replaces simple uses of std::tie() with structured bindings. Does not touch
        uses of std::tie() that are not initial declarations, use std::ignore or in
        case where the binding is captured by a lambda, as structured bindings don't
        work for those cases yet.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::printSpeculativeLoadingDiagnosticMessageCounts):
        * NetworkProcess/cache/PrefetchCache.cpp:
        (WebKit::PrefetchCache::clearExpiredEntries):
        * Platform/IPC/MessageReceiverMap.cpp:
        (IPC::MessageReceiverMap::removeMessageReceiver):
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::invalidate):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::invalidate):
        (WebKit::VideoFullscreenManagerProxy::requestHideAndExitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::hasMode const):
        (WebKit::VideoFullscreenManagerProxy::mayAutomaticallyShowVideoPictureInPicture const):
        (WebKit::VideoFullscreenManagerProxy::isPlayingVideoInEnhancedFullscreen const):
        (WebKit::VideoFullscreenManagerProxy::applicationDidBecomeActive):
        (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):
        (WebKit::VideoFullscreenManagerProxy::didCleanupFullscreen):
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::zoomFactorForTargetRect):
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        (WebKit::SmartMagnificationController::magnify):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit:: const):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionManager::~PlaybackSessionManager):
        (WebKit::PlaybackSessionManager::removeContext):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::~VideoFullscreenManager):
        (WebKit::VideoFullscreenManager::removeContext):
        (WebKit::VideoFullscreenManager::enterVideoFullscreenForVideoElement):
        (WebKit::VideoFullscreenManager::requestVideoContentLayer):
        (WebKit::VideoFullscreenManager::didSetupFullscreen):
        (WebKit::VideoFullscreenManager::willExitFullscreen):
        (WebKit::VideoFullscreenManager::didEnterFullscreen):
        (WebKit::VideoFullscreenManager::didCleanupFullscreen):
        (WebKit::VideoFullscreenManager::setVideoLayerFrameFenced):

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

        [ContentChangeObserver] REGRESSION (r244356): Drop down menus collapse without user input - Ebay.com
        https://bugs.webkit.org/show_bug.cgi?id=199457
        <rdar://problem/52386563>

        Reviewed by Simon Fraser.

        There's a fixed, 32ms window for observing content changes after the tap is committed. r244356 introduced the fast-click behavior on form elements by omitting this fixed window and
        dispatch the synthetic click on the target node.
        This patch preserves the fast-click behavior, but now we stay at hover if the mouseMove event triggers a synchronous actionable visiblity change (as opposed to always proceed with click).

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

2019-07-03  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Remove Flatpak sandbox
        https://bugs.webkit.org/show_bug.cgi?id=199416

        Reviewed by Michael Catanzaro.

        The flatpak-spawn based sandbox was only a proof of concept and
        lacks flexibility for our needs so we ended up using it with very
        permissive permissions and it still imposed limitations that our main
        bubblewrap sandbox didn't have.

        So in order to get as many applications using the sandbox as possible we
        will just remove this for now and focus on bubblewrap. At some point
        it may be possible to improve flatpak-spawn to fit our needs.

        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/Launcher/glib/FlatpakLauncher.cpp: Removed.
        * UIProcess/Launcher/glib/FlatpakLauncher.h: Removed.
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):

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

        Unreviewed, rolling out r246616.

        Caused http/tests/inspector/network/har/har-page.html to fail
        on Catalina.

        Reverted changeset:

        "Web Inspector: Network: replace CFNetwork SPI with new API
        where able"
        https://bugs.webkit.org/show_bug.cgi?id=198762
        https://trac.webkit.org/changeset/246616

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

        Crash under WTF::RefCounted<WebKit::TaskCounter>::deref()
        https://bugs.webkit.org/show_bug.cgi?id=199453
        <rdar://problem/51991477>

        Reviewed by Youenn Fablet.

        The crash was caused by StorageManager::suspend() getting called on the main thread but calling
        its completion handler on a background queue. The completion handler was capturing a TaskCounter
        object which is RefCounted (not ThreadSafeRefCounted).

        Address the issue by making sure StorageManager::suspend() calls its completion handler on the
        main thread. Also get rid of TaskCounter and use a WTF::CallbackAggregator instead.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::TaskCounter::TaskCounter): Deleted.
        (WebKit::TaskCounter::~TaskCounter): Deleted.
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::suspend):

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

        Make sure to cross-thread copy in StorageManager when hopping back to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=199423

        Reviewed by Chris Dumez.

        Make sure to isolate copy some strings that may not be isolated in case of ephemeral sessions.
        Small refactoring to use crossThreadCopy instead of doing vector copy ourselves.

        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h:
        (WebKit::LocalStorageDatabaseTracker::OriginDetails::isolatedCopy const):
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::getLocalStorageOriginDetails):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):

2019-07-02  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Fix build break introduced in r247058.

        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:

2019-07-02  Youenn Fablet  <youenn@apple.com>

        StorageManager does not need to be a WorkQueueMessageReceiver anymore
        https://bugs.webkit.org/show_bug.cgi?id=199421

        Reviewed by Chris Dumez.

        * NetworkProcess/WebStorage/StorageManager.h:

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

        ThreadSafeRefCounted<DestructionThread::Main> is not safe to use in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=199420
        <rdar://problem/52289717>

        Reviewed by Ryosuke Niwa.

        Update IPC::Connection and DeviceIdHashSaltStorage to use DestructionThread::MainRunLoop
        instead of DestructionThread::Main, since both classes are used in the UIProcess.

        Using DestructionThread::Main is not safe in the UIProcess because its implementation relies
        on isMainThread() / callOnMainThread(). Those get confused about which thread is the main
        thread when an application uses both WK1 and WK2.

        * Platform/IPC/Connection.h:
        * UIProcess/DeviceIdHashSaltStorage.h:

2019-07-02  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Explicitly blacklist problematic directories for sandbox
        https://bugs.webkit.org/show_bug.cgi?id=199367

        Reviewed by Michael Catanzaro.

        There are some directories that simply do not make sense to bind into the sandbox
        and will only cause issues such as `/proc` so lets just block them.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (path_is_not_blacklisted):
        (webkit_web_context_add_path_to_sandbox):

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

        REGRESSION (r243240): Unable to swipe back in Safari
        https://bugs.webkit.org/show_bug.cgi?id=199394
        <rdar://problem/51137447>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        r243240 started nilling out the ViewGestureController, but we don't actually
        expect that; the only time WKWebView's ViewGestureController goes away
        is if the client turns off the gestures... and so nothing ever puts it back.
        Instead, just always disconnect, don't nil it out.

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

        Protect NetworkProcess::m_networkSessions against corruption
        https://bugs.webkit.org/show_bug.cgi?id=199418
        <rdar://problem/50614019>

        Reviewed by Youenn Fablet.

        I believe the most likely reason for the crash at <rdar://problem/50614019> is that NetworkProcess::m_networkSessions
        is getting corrupted and is returning us a bad pointer.

        To harden our code, I added debug assertions to make sure that this HashMap is only used on the main thread and
        to make sure that the sessionID used as key is always valid. I have also added if checks to avoid crashing in
        release whenever possible.

        Note that we came to a similar conclusion for NetworkProcess::m_swServers when investigating rdar://problem/51859081,
        so the two radars are potentially related. Both HashMaps are owned by the NetworkProcess and use a SessionID
        as key.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::logUserInteraction):
        (WebKit::NetworkConnectionToWebProcess::logWebSocketLoading):
        (WebKit::NetworkConnectionToWebProcess::logSubresourceLoading):
        (WebKit::NetworkConnectionToWebProcess::logSubresourceRedirect):
        (WebKit::NetworkConnectionToWebProcess::hasStorageAccess):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccessUnderOpener):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::networkSession const):
        (WebKit::NetworkProcess::setSession):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::addKeptAliveLoad):
        (WebKit::NetworkProcess::removeKeptAliveLoad):
        (WebKit::NetworkProcess::webProcessWasDisconnected):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        (WebKit::NetworkResourceLoader::shouldLogCookieInformation):
        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm:
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorBoundInterfaceIdentifier):
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorCTDataConnectionServiceType):
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorSourceApplicationBundleIdentifier):
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorSourceApplicationSecondaryIdentifier):

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

        VisitedLinkStore does not need to subclass WebProcessLifetimeObserver
        https://bugs.webkit.org/show_bug.cgi?id=199407

        Reviewed by Sam Weinig.

        VisitedLinkStore does not need to subclass WebProcessLifetimeObserver, it overrides
        only 2 of WebProcessLifetimeObserver's functions and the implementation of those
        overrides is empty. It also does not use WebProcessLifetimeObserver::processes()
        since the VisitedLinkStore maintains its own list of processes.

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Automation/WebAutomationSession.cpp:
        * UIProcess/VisitedLinkStore.cpp:
        * UIProcess/VisitedLinkStore.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:

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

        Null dereference under StorageManager::destroySessionStorageNamespace()
        https://bugs.webkit.org/show_bug.cgi?id=199388
        <rdar://problem/52030641>

        Reviewed by Youenn Fablet.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        Call HashMap::ensure() instead of contains() + set() to avoid double hash lookup.

        (WebKit::StorageManager::destroySessionStorageNamespace):
        Add null check to address top crasher, similarly to what was done in r246552.
        I am keeping the debug assertion since this is not supposed to happen.

2019-07-02  Daniel Bates  <dabates@apple.com>

        [iOS] Cannot tab cycle through credit card fields on antonsvpatisserie.com checkout page
        https://bugs.webkit.org/show_bug.cgi?id=196053
        <rdar://problem/49093034>

        Reviewed by Wenson Hsieh.

        Allow iframes to be keyboard focusable when pressing the Tab key on the keyboard. This
        also allow the that the focus controller to search their content document for other
        editable elements. This makes iOS match the behavior on Mac.

        Although iframes can be focused by pressing the Tab key we maintain the current UI
        restriction on iOS of not allowing iframes themselves to be focusable via the next and
        previous accessory bar buttons. We do this because it's unclear what value supporting
        such focusing brings, but it's clear that doing so makes tab cycling more confusing
        since the default focus appearance for an iframe is indistinguishable from its non-
        focused appearance.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isAssistableElement): Do not consider an iframe as assistable.

2019-07-02  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Support cancelling touchscreen back/forward gesture
        https://bugs.webkit.org/show_bug.cgi?id=199401

        Reviewed by Michael Catanzaro.

        It should be possible to cancel the gesture when performing it on
        touchscreen, for example, by moving pen too far from the screen.
        Handle this case properly.

        Only DragGesture in GestureController needs to handle this,
        SwipeGesture simply won't emit the relevant event in this case.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/ViewGestureController.h:
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::DragGesture::cancelDrag):
        (WebKit::GestureController::DragGesture::cancel):
        (WebKit::GestureController::DragGesture::DragGesture):
        * UIProcess/gtk/GestureController.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::platformTeardown):
        (WebKit::ViewGestureController::cancelSwipe):

2019-07-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debug: "Reset Web Inspector" should also clear the saved window size and attachment side
        https://bugs.webkit.org/show_bug.cgi?id=198956

        Reviewed by Matt Baker.

        * UIProcess/WebPreferences.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::deleteKey): Added.
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformDeleteKey): Added.
        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::WebPreferences::platformDeleteKey): Added.
        * UIProcess/wpe/WebPreferencesWPE.cpp:
        (WebKit::WebPreferences::platformDeleteKey): Added.
        * UIProcess/win/WebPreferencesWin.cpp:
        (WebKit::WebPreferences::platformDeleteKey): Added.
        * Shared/WebPreferencesStore.h:
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::deleteKey): Added.

        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::resetWindowState): Added.
        (WebKit::WebInspectorProxy::platformResetWindowState): Added.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformResetWindowState): Added.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformResetWindowState): Added.
        * UIProcess/wpe/WebInspectorProxyWPE.cpp:
        (WebKit::WebInspectorProxy::platformResetWindowState): Added.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformResetWindowState): Added.
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::resetWindowState): Added.

        * UIProcess/RemoteWebInspectorProxy.messages.in:
        * UIProcess/RemoteWebInspectorProxy.h:
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::resetWindowState): Added.
        (WebKit::RemoteWebInspectorProxy::platformResetWindowState): Added.
        * UIProcess/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformResetWindowState): Added.
        * UIProcess/mac/RemoteWebInspectorProxyMac.mm:
        (WebKit::RemoteWebInspectorProxy::platformResetWindowState): Added.
        * UIProcess/win/RemoteWebInspectorProxyWin.cpp:
        (WebKit::RemoteWebInspectorProxy::platformResetWindowState): Added.
        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::resetWindowState): Added.

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

        Remove virtual functions on WebProcessLifetimeObserver that are unused after r245540
        https://bugs.webkit.org/show_bug.cgi?id=199383

        Reviewed by Alex Christensen.

        * UIProcess/WebProcessLifetimeObserver.h:
        (WebKit::WebProcessLifetimeObserver::webProcessDidCloseConnection):
        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::addObserver):
        (WebKit::WebProcessLifetimeTracker::pageWasInvalidated):

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

        StorageManager::SessionStorageNamespace::allowedConnections() should not copy the HashSet
        https://bugs.webkit.org/show_bug.cgi?id=199379

        Reviewed by Alex Christensen.

        This was pretty inefficient.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::SessionStorageNamespace::allowedConnections const):

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

        [iOS] REGRESSION (r246757): Unable to select non-editable text in subframes
        https://bugs.webkit.org/show_bug.cgi?id=199366
        <rdar://problem/52460509>

        Reviewed by Tim Horton.

        r246757 removed logic in selectionPositionInformation responsible for setting the focused frame when handling a
        position information request. As the FIXME formerly in InteractionInformationRequest.h alluded to, text
        selection gestures on iOS were dependent on this behavior when selecting text in subframes, since text selection
        helpers in WebPageIOS.mm assume that the focused frame already contains the selection being set.

        Rather than calling setFocusedFrame when requesting position information, we can fix this by making
        WebPage::selectWithGesture and WebPage::selectTextWithGranularityAtPoint both set the focused frame if needed
        before extending or moving text selections.

        Covered by layout tests that began to fail after r246757:
        - editing/selection/ios/selection-handles-in-iframe.html
        - editing/selection/ios/selection-handle-clamping-in-iframe.html

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

        Only call the new helper method, setFocusedFrameBeforeSelectingTextAtLocation, at the start of the gesture.

        (WebKit::WebPage::setFocusedFrameBeforeSelectingTextAtLocation):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):

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

        Add new decidePolicyForNavigationAction SPI with preferences and userInfo
        https://bugs.webkit.org/show_bug.cgi?id=199371
        <rdar://problem/52352905>

        Reviewed by Tim Horton.

        Also deprecate some older SPI so we may someday clean up this mess.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::NavigationClient::shouldBypassContentModeSafeguards const):

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

        Deprecate but still call _webView:showCustomSheetForElement: after transition to UIContextMenuInteraction
        https://bugs.webkit.org/show_bug.cgi?id=199296
        <rdar://problem/51041960>

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showAttachmentSheet]):
        (-[WKContentView actionSheetAssistant:showCustomSheetForElement:]):
        (-[WKContentView continueContextMenuInteraction:]):

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

        Add main thread assertions in sendWithAsyncReply code
        https://bugs.webkit.org/show_bug.cgi?id=199324

        Reviewed by Sam Weinig.

        sendWithAsyncReply can only be used on the main thread because
        the CompletionHandler will be called on the main thread, and if it's
        called from a background thread, then HashMap corruption will likely happen.
        Add assertions to alert developers that they should only call sendWithAsyncReply
        from the main thread.

        This is responding to good feedback from r237294

        * Platform/IPC/Connection.cpp:
        (IPC::asyncReplyHandlerMap):
        (IPC::nextAsyncReplyHandlerID):
        (IPC::addAsyncReplyHandler):
        (IPC::clearAsyncReplyHandlers):
        (IPC::CompletionHandler<void):

2019-07-01  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Exiting from fullscreen scrolls to top of page
        https://bugs.webkit.org/show_bug.cgi?id=199338
        <rdar://problem/51273017>

        Reviewed by Jer Noble.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _completedExitFullScreen]): Restore scroll position.
        Hide window after restoring scroll position.
        (-[WKFullScreenWindowController _exitFullscreenImmediately]): Drive-by fix: remove code
        already also done in _completedExitFullScreen.

2019-07-01  Zalan Bujtas  <zalan@apple.com>

        Tapping on the bottom part of youtube video behaves as if controls were visible
        https://bugs.webkit.org/show_bug.cgi?id=199349
        <rdar://problem/51955744>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleTouchEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver):
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::potentialTapAtPosition):

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

        iOS: REGRESSION(async scroll): Caret doesn't scroll when scrolling textarea
        https://bugs.webkit.org/show_bug.cgi?id=198217
        <rdar://problem/51097296>

        Reviewed by Simon Fraser.

        In iOS 12, when scrolling a text selection in an fast-scrolling container, editor state updates are scheduled
        under AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll after the end of the scrolling gesture,
        when the scrolling layer action is ScrollingLayerPositionAction::Set. This is no longer the case in iOS 13,
        because we now bail in ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling after scroll deceleration
        finishes since the scroll position didn't end up changing. Additionally, we no longer use
        ScrollingLayerPositionAction::Set in the case where scrolling finished decelerating, since
        ScrollingTreeScrollingNodeDelegateIOS::scrollViewDidScroll no longer uses to value of inUserInteraction to
        determine whether to Set or Sync scrolling layer positions.

        To restore iOS 12 behavior, ensure that we send a scrolling tree update using ScrollingLayerPositionAction::Set
        after scrolling ends.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::scrollViewDidScroll):

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

        Perform less work when a pre-warmed WebProcess is suspended or resumed.
        https://bugs.webkit.org/show_bug.cgi?id=199195

        Reviewed by Darin Adler.

        Return early from WebProcess::actualPrepareToSuspend and WebProcess::processDidResume
        if this is a pre-warmed process. This is a confirmed improvement in page load time.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):

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

        WebSockets: add support for sending blob messages when using web sockets platform APIs
        https://bugs.webkit.org/show_bug.cgi?id=199189

        Reviewed by Youenn Fablet.

        Add helper private class BlobLoader that uses FileReaderLoader to load the blobs. Since blob loads are
        asynchronous, the messages are queued using another helper internal class PendingMessage.

        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::increaseBufferedAmount): Increase the buffered amount checking we don't overlofw.
        (WebKit::WebSocketChannel::decreaseBufferedAmount): Decrease the buffered amount.
        (WebKit::WebSocketChannel::sendMessage): Helper class to send message to the network process and decrease the
        buffered amount when done.
        (WebKit::WebSocketChannel::send): Queue the message in pending queue if there are pending messages in the queue
        for text and binary messages. For blobs, always queue the message unless it's an empty blob that we can handle
        as empty binary data directly.
        (WebKit::PendingMessage::PendingMessage): Helper class to queue message requests.
        (WebKit::PendingMessage::type const): Type of message: Text, Binary, Blob.
        (WebKit::PendingMessage::textMessage const): The text message.
        (WebKit::PendingMessage::binaryData const): The binary data.
        (WebKit::PendingMessage::blobLoader const): The blob loader.
        (WebKit::WebSocketChannel::fail): Notify the client about the error to ensure onclose is emitted.
        (WebKit::WebSocketChannel::disconnect): Clear the pending messages queue.
        * WebProcess/Network/WebSocketChannel.h:

2019-07-01  Miguel Gomez  <magomez@igalia.com>

        [WPE][GTK] Content disappearing when using CSS transforms
        https://bugs.webkit.org/show_bug.cgi?id=181757

        Reviewed by Žan Doberšek.

        Set the appropriate AnimatedBackingStoreClient to the TextureMapperLayers when required.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::updateSceneState):

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

        Use separate variables for moving and stationary scrolling relationships in RemoteLayerTreeNode
        https://bugs.webkit.org/show_bug.cgi?id=199348

        Reviewed by Darin Adler.

        A layer can have only one acting scroll parent. Not using a vector for that case makes the code clearer.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        (WebKit::RemoteLayerTreeNode::actingScrollContainerID const):
        (WebKit::RemoteLayerTreeNode::stationaryScrollContainerIDs const):

        Separate fields for the acting container and stationary containers.

        (WebKit::RemoteLayerTreeNode::setActingScrollContainerID):
        (WebKit::RemoteLayerTreeNode::setStationaryScrollContainerIDs):
        (WebKit::RemoteLayerTreeNode::relatedScrollContainerIDs const): Deleted.
        (WebKit::RemoteLayerTreeNode::relatedScrollContainerPositioningBehavior const): Deleted.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (WebKit::RemoteLayerTreeNode::setRelatedScrollContainerBehaviorAndIDs): Deleted.
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::isScrolledBy):
        (WebKit::findActingScrollParent):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations):

2019-06-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Multiline mode of tooltip control does word-wrapping very slowly
        https://bugs.webkit.org/show_bug.cgi?id=198989

        Reviewed by Ross Kirsling.

        * UIProcess/win/WebView.cpp:
        (WebKit::truncatedString): Added.
        (WebKit::WebView::setToolTip): Use truncatedString.

2019-06-30  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        Pass WebProcess information to platformInitializeWebProcess().
        https://bugs.webkit.org/show_bug.cgi?id=199345

        Reviewed by Darin Adler.

        Add const reference to WebProcessProxy for first argument of
        WebProcessPool::platformInitializeWebProcess().

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/win/WebProcessPoolWin.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

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

        Revise WebContent sandbox based on seed feedback
        https://bugs.webkit.org/show_bug.cgi?id=199339
        <rdar://problem/49609201>

        Reviewed by Alexey Proskuryakov.

        Unblock syscall needed by CoreText.

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

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

        iOS WebKit2 find-in-page indicator doesn't move with 'overflow: scroll'
        https://bugs.webkit.org/show_bug.cgi?id=175032
        <rdar://problem/29346482>

        Reviewed by Wenson Hsieh.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        (WebKit::FindController::didScrollAffectingFindIndicatorPosition):
        Adopt the macOS code that notices that the find highlight doesn't match
        its original position, but instead of hiding the highlight like we do on macOS,
        update it. We do this asynchronously to avoid mutating the layer tree
        in the middle of painting, which is not /truly/ unsafe, but definitely
        non-ideal and causes fun flashes.

        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::updateFindIndicator):
        Store m_findIndicatorRect when updating the indicator, just like we do on macOS.

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

        Unreviewed build fix attempt after r246928.

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

2019-06-28  Youenn Fablet  <youenn@apple.com>

        Protect NetworkProcess::m_swServers from bad session IDs
        https://bugs.webkit.org/show_bug.cgi?id=199298
        <rdar://problem/51859081>

        Reviewed by Chris Dumez.

        Protect NetworkProcess from receiving bad session IDs in service worker code path by checking for session ID validity whenever interacting with the map.
        One of the check is done in WebProcess in which case, if the session ID is bad, the SW connection to NetworkProcess will not be made.
        For bad session IDs, this will in that case trigger timing out of service worker operations.

        For get/clear data, exit early in case of bad session ID.

        Made some refactoring to remove swOriginStoreForSession method.
        In the one call site where it is used, the store should already be created so we reuse existingSWOriginStoreForSession.

        Added a bunch of additional ASSERTs.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::NetworkProcess::swServerForSession):
        (WebKit::NetworkProcess::existingSWOriginStoreForSession const):
        (WebKit::NetworkProcess::registerSWServerConnection):
        * NetworkProcess/NetworkProcess.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::initializeSWClientConnection):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        (WebKit::WebSWClientConnection::initializeConnectionIfNeeded):
        (WebKit::WebSWClientConnection::ensureConnectionAndSend):

2019-06-28  Timothy Hatcher  <timothy@apple.com>

        Rename effectiveAppearanceIsInactive and useInactiveAppearance to better match UIUserInterfaceLevel.
        https://bugs.webkit.org/show_bug.cgi?id=199336
        rdar://problem/52348938

        Reviewed by Tim Horton.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _effectiveUserInterfaceLevelIsElevated]):
        (-[WKWebView _effectiveAppearanceIsInactive]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::effectiveUserInterfaceLevelIsElevated):
        (WebKit::WebViewImpl::effectiveAppearanceIsInactive): Deleted.
        * UIProcess/PageClient.h:
        (WebKit::PageClient::effectiveUserInterfaceLevelIsElevated const):
        (WebKit::PageClient::effectiveAppearanceIsInactive const): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::useElevatedUserInterfaceLevel const):
        (WebKit::WebPageProxy::effectiveAppearanceDidChange):
        (WebKit::WebPageProxy::useInactiveAppearance const): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::effectiveUserInterfaceLevelIsElevated const):
        (WebKit::PageClientImpl::effectiveAppearanceIsInactive const): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::effectiveUserInterfaceLevelIsElevated const):
        (WebKit::PageClientImpl::effectiveAppearanceIsInactive const): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetUseDarkAppearance):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shrinkToFitContentTimer):
        (WebKit::WebPage::effectiveAppearanceDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Unreviewed maccatalyst build fix; add ENABLE(FULLSCREEN) checks around calls to fullScreenManager().

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

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

        macCatalyst: Selected range sometimes wrong after autocorrection
        https://bugs.webkit.org/show_bug.cgi?id=199299
        <rdar://problem/49717224>

        Reviewed by Wenson Hsieh.

        * UIProcess/Cocoa/TextCheckingController.h:
        * UIProcess/Cocoa/TextCheckingController.mm:
        (WebKit::TextCheckingController::replaceRelativeToSelection):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView replaceSelectionOffset:length:withAnnotatedString:relativeReplacementRange:]):
        Plumb the whole relative replacement range through to the Web Content process.

        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.h:
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.messages.in:
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        (WebKit::TextCheckingControllerProxy::replaceRelativeToSelection):
        Only replace the text of the substring that changed (the replacement range),
        and fix up the selection offset math (it was really just wrong before).

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

        Need a way for SPI clients to know when to avoid resizing to accommodate for the input view bounds
        https://bugs.webkit.org/show_bug.cgi?id=199331
        <rdar://problem/52116170>

        Reviewed by Tim Horton.

        Expose new SPI, such that clients may check whether to avoid resizing the web view when changing input view
        bounds. In particular, resizing the web view in this case causes toolbar menus in Microsoft Word online to
        dismiss immediately after opening them, due to resize events fired as a result of the input view dismissing.

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

        Add a new flag to FocusedElementInformation to indicate whether we should avoid resizing the web view when an
        input view is presented.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _shouldAvoidResizingWhenInputViewBoundsChange]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidBlur]):

        Reset the value of the flag.

        (-[WKContentView _shouldAvoidResizingWhenInputViewBoundsChange]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getFocusedElementInformation):

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

        Add new -[WKWebView _closeAllMediaPresentations] SPI
        https://bugs.webkit.org/show_bug.cgi?id=199294
        <rdar://problem/51965958>

        Reviewed by Alex Christensen.

        Add a new SPI that will close all out-of-window media presentations, including
        picture-in-picture, video fullscreen, and element fullscreen.

        Drive-by fixes:

        + -[WKApplicationStateTrackingView didMoveToWindow] incorrectly assumes that a WKWebView will
          never be moved frome one window to another, and asserts.

        + -[WKFullScreenWindowController close] doesn't fire the correct 'webkitfullscreenchange' event
          when called in the middle of animating into fullscreen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _closeAllMediaPresentations]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::forEachSession):
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView didMoveToWindow]):
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController exitFullScreenImmediately]):
        (-[WKFullScreenWindowController close]):

2019-06-28  Antti Koivisto  <antti@apple.com>

        [iOS Scrolling] Propagate scrolls to non-nested UIScrollViews
        https://bugs.webkit.org/show_bug.cgi?id=199222

        Reviewed by Simon Fraser.

        We may generate scrolling hierarchies where the scrolling ancestor of a layer is not
        an ancestor in the layer tree. We  handle this in most situations but there is still
        a problem where a scroller fails to propage scroll to the ancestor when it reaches
        the edge.

        This patch hooks up a new SPI that allows us to tell UIKit about non-ancestor scrolling
        relations and solve this problem.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::findActingScrollParent):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate _actingParentScrollViewForScrollView:]):

        Hook into UIKit SPI.

        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::findActingScrollParent):

2019-06-28  Konstantin Tokarev  <annulen@yandex.ru>

        Remove traces of ENABLE_ICONDATABASE remaining after its removal in 219733
        https://bugs.webkit.org/show_bug.cgi?id=199317

        Reviewed by Michael Catanzaro.

        While IconDatabase and all code using it was removed,
        ENABLE_ICONDATABASE still exists as build option and C++ macro.

        * Configurations/FeatureDefines.xcconfig:
        * PlatformGTK.cmake: Remove reference to unused urlIcon.png file.

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

        -[WKContentView _selectionClipRects] returns a bogus value in -reloadInputViews when focusing an element
        https://bugs.webkit.org/show_bug.cgi?id=199310
        <rdar://problem/52292137>

        Reviewed by Megan Gardner.

        When reloading input views under -_elementDidFocus:, -_selectionClipRect returns the value of the previously
        focused element; this is because _selectionClipRect depends on EditorState's post layout data, which is only
        guaranteed to arrive during the next remote layer tree commit after the element is focused.

        However, some clients need to inspect this value under the call to -reloadInputViews when an element is focused;
        to make this work, simply check whether we are currently waiting for post-layout EditorState data to arrive
        following element focus; if so, return the FocusedElementInformation's elementRect, which represents the initial
        state of the focused element. Otherwise, use the EditorState's post layout data, which is guaranteed to be more
        up-to-date than the FocusedElementInformation's element rect.

        Test: KeyboardInputTests.SelectionClipRectsWhenPresentingInputView

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::waitingForPostLayoutEditorStateUpdateAfterFocusingElement const):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _selectionClipRect]):

2019-06-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] WebSockets: runtime critical warning when closing the connection in some cases
        https://bugs.webkit.org/show_bug.cgi?id=199265

        Reviewed by Michael Catanzaro.

        Ensure the connection is still open before calling soup_websocket_connection_close().

        * NetworkProcess/soup/WebSocketTaskSoup.cpp:
        (WebKit::WebSocketTask::close):

2019-06-27  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix.

        * SourcesWPE.txt: Add WebSocketTaskSoup.cpp to the build.

2019-06-27  Dean Jackson  <dino@apple.com>

        Provide overrides for UIKit's suggested actions in UIContextMenuInteraction
        https://bugs.webkit.org/show_bug.cgi?id=199301
        <rdar://problem/52297380>

        Reviewed by Tim Horton.

        We were previously wrapping the actionMenuProvider with our own block
        in order to ensure the correct suggestedActions were passed to the provider.
        UIKit added API for us to override the actions separately.

        Unfortunately we can't quite yet get rid of our access into the
        UIContextMenuConfiguration, because we still need to override the preview
        handler in the case where the user does not want link previews.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView _contextMenuInteraction:overrideSuggestedActionsForConfiguration:]):
        Implement the new delegate SPI to provide our own actions.

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

        [iOS] Select all with existing range selection replaces range instead of selecting all text
        https://bugs.webkit.org/show_bug.cgi?id=197950
        <rdar://problem/50245131>

        Reviewed by Wenson Hsieh.

        Following <rdar://problem/47333786>, UIKit now asks WebKit whether it can handle Command + A as
        "select all" instead of just demanding that we handle it. So, WebKit needs to be able to correctly
        tell UIKit in advance whether it can handle it. Currenlty WebKit tells UIKit it cannot handle a
        "select all" whenever there is an existing range selection. So, UIKit does not tell WebKit to
        perform the "select all". Moreover, since UIKit has no other means to handle this key command
        itself it tells WebKit the key command was not handled. So, WebKit tells the keyboard to insert
        the "a". Instead, WebKit should tell UIKit it can handle a "select all" even when this is an
        existing range selection. However we need to keep the current logic just for when UIKit is
        asking us with respect to populating the callout menu to not regress platform behavior.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]): Do what we do now if we are called
        when populating the callout menu and action is Select All. Otherwise, return YES for the Select All
        action if we have a non-empty selection.

2019-06-27  Andy Estes  <aestes@apple.com>

        [iOS] Stop using cached UITargetedPreviews from previous interactions when starting a new context menu interaction
        https://bugs.webkit.org/show_bug.cgi?id=199285
        <rdar://problem/52074916>

        Reviewed by Tim Horton.

        WKContentView was caching the UITargetedPreview created in
        -contextMenuInteraction:previewForHighlightingMenuWithConfiguration: for later reuse by
        -contextMenuInteraction:previewForDismissingMenuWithConfiguration:. The cached value was
        then cleared in -contextMenuInteractionDidEnd:.

        This was wrong, because -contextMenuInteractionDidEnd: can be called before
        -contextMenuInteraction:previewForDismissingMenuWithConfiguration:, so we would clear the
        cache then create and cache a new UITargetedPreview during dismissal. Then when a new
        context menu interaction started, we'd reuse the targeted preview created for the previous
        dismissal (which has the wrong geometry).

        Stop assuming an ordering between
        -contextMenuInteraction:previewForDismissingMenuWithConfiguration: and
        -contextMenuInteractionDidEnd:. Instead, always create and cache a new UITargetedPreview in
        -contextMenuInteraction:previewForHighlightingMenuWithConfiguration:, then reuse it and
        clear the cache in -contextMenuInteraction:previewForDismissingMenuWithConfiguration:.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createTargetedPreviewIfPossible]):
        (-[WKContentView contextMenuInteraction:previewForDismissingMenuWithConfiguration:]):
        (-[WKContentView contextMenuInteractionDidEnd:]):

2019-06-27  Sihui Liu  <sihui_liu@apple.com>

        Regression(r246526): StorageManager thread hangs
        https://bugs.webkit.org/show_bug.cgi?id=199278
        <rdar://problem/52202948>

        Reviewed by Geoffrey Garen.

        r246526 adds a lock m_localStorageNamespacesMutex to protect m_localStorageNamespaces, because 
        m_localStorageNamespaces is destroyed at main thread while accesses to m_localStorageNamespaces happen in the 
        background thread.
        After r246526, getOrCreateLocalStorageNamespace acquires lock m_localStorageNamespacesMutex when 
        m_localStorageNamespacesMutex is already acquired in cloneSessionStorageNamespace, so the StorageManager thread
        hangs.
        To solve this issue, we can remove the lock in getOrCreateLocalStorageNamespace, or we can remove the 
        m_localStorageNamespacesMutex. waitUntilWritesFinished() before ~StorageManager() already guarantees nothing 
        will be running in the background thread, so it is unlikely we the access to m_localStorageNamespaces in the 
        background thread would collide with the destruction of m_localStorageNamespaces. Also, we don't need 
        didDestroyStorageArea as LocalStorageNamespace can hold the last reference of StorageArea after r245881.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::StorageArea):
        (WebKit::StorageManager::StorageArea::~StorageArea):
        (WebKit::StorageManager::LocalStorageNamespace::LocalStorageNamespace):
        (WebKit::StorageManager::cloneSessionStorageNamespace):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        (WebKit::StorageManager::LocalStorageNamespace::didDestroyStorageArea): Deleted.
        * NetworkProcess/WebStorage/StorageManager.h:

2019-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebSockets: avoid data copies when queuing tasks in WebSocketChannel
        https://bugs.webkit.org/show_bug.cgi?id=199262

        Reviewed by Alex Christensen.

        For IPC message handler arguments we can receive rvalue references instead of const references.

        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::didConnect):
        (WebKit::WebSocketChannel::didReceiveText):
        (WebKit::WebSocketChannel::didReceiveBinaryData):
        (WebKit::WebSocketChannel::didClose):
        (WebKit::WebSocketChannel::didReceiveMessageError):
        * WebProcess/Network/WebSocketChannel.h:

2019-06-27  Youenn Fablet  <youenn@apple.com>

        Fix build after revision 246877
        https://bugs.webkit.org/show_bug.cgi?id=199276

        Unreviewed.

        Pass protocol parameter to NetworkSocketChannel.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:webSocketTask:didOpenWithProtocol:]):
        * NetworkProcess/cocoa/WebSocketTaskCocoa.h:
        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:
        (WebKit::WebSocketTask::didConnect):

2019-06-27  Beth Dakin  <bdakin@apple.com>

        Upstream use of MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=199245
        rdar://problem/51687723

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Network-iOSMac.entitlements: Removed.
        * Configurations/Network-macCatalyst.entitlements: Copied from Source/WebKit/Configurations/Network-iOSMac.entitlements.
        * Configurations/NetworkService.xcconfig:
        * Configurations/SDKVariant.xcconfig:
        * Configurations/WebContent-iOSMac.entitlements: Removed.
        * Configurations/WebContent-macCatalyst.entitlements: Copied from Source/WebKit/Configurations/WebContent-iOSMac.entitlements.
        * Configurations/WebContentService.xcconfig:
        * Configurations/WebKit.xcconfig:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcess):
        (WebKit::NetworkProcess::initializeProcessName):
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForExternalHostingProcess):
        * Platform/spi/ios/ManagedConfigurationSPI.h:
        * Platform/spi/ios/UIKitSPI.h:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCustomPasteboardDataEnabled):
        * Shared/ios/AuxiliaryProcessIOS.mm:
        (WebKit::AuxiliaryProcess::initializeSandbox):
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::enableSandboxStyleFileQuarantine):
        * Shared/mac/CodeSigning.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webViewPrintFormatter]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (-[WKRemoteView initWithFrame:contextID:]):
        * UIProcess/_WKWebViewPrintFormatter.mm:
        * UIProcess/_WKWebViewPrintFormatterInternal.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _elementActionForDDAction:]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView _showTapHighlight]):
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView _defineForWebView:]):
        (-[WKContentView setSelectedTextRange:]):
        (-[WKContentView closestPositionToPoint:]):
        (-[WKContentView _showShareSheet:inRect:completionHandler:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingSupported):
        (WebKit::desktopClassBrowsingRecommended):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showDocumentPickerMenu]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState const):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::selectionPositionInformation):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox):
        * WebProcess/com.apple.WebProcess.sb.in:

2019-06-27  Saam Barati  <sbarati@apple.com>

        Make WEBGPU enabled only on Mojave and later.

        Rubber-stamped by Myles C. Maxfield.

        * Configurations/FeatureDefines.xcconfig:

2019-06-27  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fix build non-unified builds after r246856
        https://bugs.webkit.org/show_bug.cgi?id=199263

        Reviewed by Michael Catanzaro.

        * UIProcess/API/C/WKMessageListener.cpp: Added missing inclusion of WKAPICast.h and usage of WebKit namespace.

2019-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] WebSockets: handle TLS certificate and errors
        https://bugs.webkit.org/show_bug.cgi?id=199223

        Reviewed by Michael Catanzaro.

        Connect to accept-certificate signal on the WebSocket message connection to decide what to do in case of TLS errors.

        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::webSocketAcceptCertificateCallback):
        (WebKit::webSocketMessageNetworkEventCallback):
        (WebKit::NetworkSessionSoup::createWebSocketTask):

2019-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Use libsoup WebSockets API
        https://bugs.webkit.org/show_bug.cgi?id=199151

        Reviewed by Michael Catanzaro.

        Use the new WebSockets code path that depends on platform specific WebSockets implementation using the libsoup
        API. This is an initial implementation manually tested using the layout tests, which most of them fail due to
        missing console messages, missing features in the new code path or differences in the platform
        implementation. It will be disabled by default until it's feature complete compared to the internal WebKit
        implementation.

        * NetworkProcess/NetworkSocketChannel.cpp:
        (WebKit::NetworkSocketChannel::NetworkSocketChannel): Null check m_socket before using it, because
        createWebSocketTask() can return nullptr;
        (WebKit::NetworkSocketChannel::didConnect): Receive the protocol accepted by the server.
        (WebKit::NetworkSocketChannel::didReceiveMessageError): Something failed in the server side.
        * NetworkProcess/NetworkSocketChannel.h:
        * NetworkProcess/WebSocketTask.h:
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::createWebSocketTask): Create a WebSocketTask.
        * NetworkProcess/soup/NetworkSessionSoup.h:
        * NetworkProcess/soup/WebSocketTaskSoup.cpp: Added.
        (WebKit::WebSocketTask::WebSocketTask):
        (WebKit::WebSocketTask::~WebSocketTask):
        (WebKit::WebSocketTask::didConnect):
        (WebKit::WebSocketTask::didReceiveMessageCallback):
        (WebKit::WebSocketTask::didReceiveErrorCallback):
        (WebKit::WebSocketTask::didFail):
        (WebKit::WebSocketTask::didCloseCallback):
        (WebKit::WebSocketTask::didClose):
        (WebKit::WebSocketTask::sendString):
        (WebKit::WebSocketTask::sendData):
        (WebKit::WebSocketTask::close):
        (WebKit::WebSocketTask::cancel):
        (WebKit::WebSocketTask::resume):
        * NetworkProcess/soup/WebSocketTaskSoup.h: Copied from Source/WebKit/NetworkProcess/WebSocketTask.h.
        * SourcesGTK.txt:
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::subprotocol): Return the protocol accepted by the server.
        (WebKit::WebSocketChannel::didConnect): Set the protocol accepted by the server.
        (WebKit::WebSocketChannel::didReceiveMessageError): It's now an IPC message handler and receives the reason as parameter.
        (WebKit::WebSocketChannel::networkProcessCrashed): Pass empty reason.
        * WebProcess/Network/WebSocketChannel.h:
        * WebProcess/Network/WebSocketChannel.messages.in:

2019-06-21  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Switch to built-in handling of C++ standard instead of hardcoding -std=c++17
        https://bugs.webkit.org/show_bug.cgi?id=199108

        Reviewed by Don Olmstead.

        Rationale:

        1. It provides an abstraction over exact flags of particular compilers -
           we just specify required version of C++ standard
        2. External libraries (like Qt used in WPEQt) may require particular C++
           standard or even particular C++ features to be availabe (e.g. Qt
           requires INTERFACE_COMPILE_FEATURES cxx_decltype, which causes cmake
           to add -std=gnu++11 unless proper CXX_STANDARD is defined)

        * PlatformWPE.cmake: Use project-level default for CXX_STANDARD
        property.

2019-06-26  Jiewen Tan  <jiewen_tan@apple.com>

        SubFrameSOAuthorizationSession should preserve the referrer header when fall back to web path
        https://bugs.webkit.org/show_bug.cgi?id=199232
        <rdar://problem/51718328>

        Reviewed by Youenn Fablet.

        The fall back to web path mechanism in SubFrameSOAuthorizationSession doesn't actually resume
        the previous navigation. Instead it starts a new one. The current implementation doesn't carry
        any information from the previous navigation. It is problematic when it comes to http referrer
        as the server might use that to determine what kind of responses to send back. Therefore, we
        add that information now.

        To accomplish the above, the patch teaches WebFrameProxy::loadURL to carry referrer information
        when it is available. Then SubFrameSOAuthorizationSession can reuses the referrer from the
        original request.

        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:
        (WebKit::SubFrameSOAuthorizationSession::fallBackToWebPathInternal):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::loadURL):
        * UIProcess/WebFrameProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLInFrame):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-06-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        testRunner.setAlwaysAcceptCookies should wait for cookie accept policy to be set
        https://bugs.webkit.org/show_bug.cgi?id=199230
        <rdar://problem/52217933>

        Unreviewed build fix for WinCairo WK2 since r246856.

        * PlatformWin.cmake: Added WKMessageListener.h to WebKit_PUBLIC_FRAMEWORK_HEADERS.

2019-06-26  Dean Jackson  <dino@apple.com>

        Add type to UIImage symbol mapping for _WKElementAction
        https://bugs.webkit.org/show_bug.cgi?id=199255

        Reviewed by Sam Weinig.

        Moving some code in from WebKitAdditions now
        that the API is public.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction imageForElementActionType:]):
        (elementActionTypeToUIActionIdentifier):
        (uiActionIdentifierToElementActionType):

2019-06-26  Dean Jackson  <dino@apple.com>

        Expose UIAction identifiers for _WKElementActions
        https://bugs.webkit.org/show_bug.cgi?id=199246
        <rdar://problem/52218950>

        Reviewed by Tim Horton.

        In order for clients to create a contextual menu, they are given
        a set of suggested UIActions, created from _WKElementActions.
        By associating identifiers (strings) with the UIActions, clients
        can inspect the suggestions and make a decision on whether or
        not to include them in the final menu.

        * UIProcess/API/Cocoa/_WKElementAction.h: Typedef UIActionIdentifier,
        add a method to create a UIAction from an _WKElementAction, and a
        helper to map between identifiers and types.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (elementActionTypeToUIActionIdentifier): Helper to convert between the two types.
        (uiActionIdentifierToElementActionType): The inverse of above.
        (+[_WKElementAction elementActionTypeForUIActionIdentifier:]): A client given
        a UIAction object can use this helper method to see what _WKElementActionType it
        corresponds to.
        (-[_WKElementAction uiActionForElementInfo:]): Used by WKContentViewInteraction to
        create a UIAction from this _WKElementAction.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (uiActionForLegacyPreviewAction): Renamed to make it clear this is a legacy approach.
        (menuFromLegacyPreviewOrDefaultActions): Split these functions to separate the legacy
        and non-legacy approach.
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (-[WKContentView continueContextMenuInteraction:]):
        (uiActionForPreviewAction): Deleted.
        (menuFromPreviewOrDefaults): Deleted.

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

        [iPadOS] Fix another crash in -[UIPreviewTarget initWithContainer:center:transform:] when generating a fallback targeted preview
        https://bugs.webkit.org/show_bug.cgi?id=199243
        <rdar://problem/51554509>

        Reviewed by Tim Horton.

        Additionally make createFallbackTargetedPreview robust in the case where the content view is unparented, and
        rename _ensureTargetedPreview to _createTargetedPreviewIfPossible, to reflect the fact that it may now return
        nil.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (createTargetedPreview):
        (createFallbackTargetedPreview):
        (-[WKContentView _createTargetedPreviewIfPossible]):
        (-[WKContentView contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):
        (-[WKContentView contextMenuInteraction:previewForDismissingMenuWithConfiguration:]):
        (-[WKContentView _ensureTargetedPreview]): Deleted.

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

        testRunner.setAlwaysAcceptCookies should wait for cookie accept policy to be set
        https://bugs.webkit.org/show_bug.cgi?id=199230
        <rdar://51757107>

        Reviewed by Andy Estes.

        This patch adds an optional callback to WKCookieManagerSetHTTPCookieAcceptPolicy which is luckily only used for testing.
        It also adds listener-based asynchronous versions of didReceiveSynchronousMessageFromInjectedBundle.
        WebKitTestRunner uses these new abilities to wait for the cookie accept policy to be set in the network process while the web process is hung.
        This removes the race condition that was causing some flakiness in tests that use testRunner.setAlwaysAcceptCookies

        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * Sources.txt:
        * UIProcess/API/APIInjectedBundleClient.h:
        (API::InjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle):
        * UIProcess/API/APIMessageListener.h: Copied from Source/WebKit/UIProcess/API/APIInjectedBundleClient.h.
        (API::MessageListener::create):
        (API::MessageListener::sendReply):
        (API::MessageListener::MessageListener):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContextInjectedBundleClient.h:
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerSetHTTPCookieAcceptPolicy):
        * UIProcess/API/C/WKCookieManager.h:
        * UIProcess/API/C/WKMessageListener.cpp: Copied from Source/WebKit/UIProcess/API/APIInjectedBundleClient.h.
        (WKMessageListenerGetTypeID):
        (WKMessageListenerSendReply):
        * UIProcess/API/C/WKMessageListener.h: Copied from Source/WebKit/UIProcess/API/APIInjectedBundleClient.h.
        * UIProcess/API/C/WKPageInjectedBundleClient.h:
        * UIProcess/WebContextInjectedBundleClient.cpp:
        (WebKit::WebContextInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle):
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebPageInjectedBundleClient.cpp:
        (WebKit::WebPageInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle):
        * UIProcess/WebPageInjectedBundleClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleSynchronousMessage):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::injectedBundleClient): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::handleSynchronousMessage):
        * WebKit.xcodeproj/project.pbxproj:

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

        [iPadOS] eddm.usps.com scrolls horizontally due to explicit width set in viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=199219
        <rdar://problem/50425765>

        Reviewed by Tim Horton.

        Currently, the heuristic to determine whether the page should be shrunk to fit the content width after loading
        works by checking whether the page's content is wider than the layout width we've provided for the page.
        However, in the case where an explicit width larger than the true view width is specified by the page's meta
        viewport, we'll end up believing that the page's content is not wider than the layout width, which is dictated
        by the fixed meta viewport width. Instead, we can shrink the page down in this scenario by comparing the content
        width against the scaled size of the view when computing the amount of horizontal overflow.

        Test: fast/viewport/ios/shrink-to-fit-content-large-constant-width.html

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

2019-06-26  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Dispatch synthetic mouse event asynchronously in completePendingSyntheticClickForContentChangeObserver
        https://bugs.webkit.org/show_bug.cgi?id=199220
        <rdar://problem/51787961>

        Reviewed by Simon Fraser.

        WebPage::completePendingSyntheticClickForContentChangeObserver should not dispatch mouse events synchronously.
        Mouse events, through style updates could destroy the element that initiated this change.
        WebPage::handleSyntheticClick() already implements this pattern.

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

2019-06-25  Jiewen Tan  <jiewen_tan@apple.com>

        Implement a new SPI to inform clients about AppSSO
        https://bugs.webkit.org/show_bug.cgi?id=199085
        <rdar://problem/50028246>

        Reviewed by Geoffrey Garen.

        This patch implements a new SPI to inform clients about incoming AppSSO interceptions during
        navigations. Therefore, clients can make an informed decision about whether this is the right
        moment to do the interception as interceptions often show native UI. Also, the SPI is designed
        to pass along a human readable name for the extension such that clients can do whatever they
        want to inform users about what's going on.

        Here is the new SPI:
        - (void)_webView:(WKWebView *)webView decidePolicyForSOAuthorizationLoadWithCurrentPolicy:(_WKSOAuthorizationLoadPolicy)policy forExtension:(NSString *)extension completionHandler:(void (^)(_WKSOAuthorizationLoadPolicy policy))completionHandler;

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::decidePolicyForSOAuthorizationLoad):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::soAuthorizationLoadPolicy):
        (WebKit::wkSOAuthorizationLoadPolicy):
        (WebKit::NavigationState::NavigationClient::decidePolicyForSOAuthorizationLoad):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationLoadPolicy.h: Added.
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::start):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForSOAuthorizationLoad):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

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

        [iOS WK2 Debug] scrollingcoordinator/scrolling-tree/scroller-with-negative-z-child.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=199218

        Reviewed by Zalan Bujtas.

        Followup to r246766; don't assert in the UI process if a ScrollingTreeOverflowScrollProxyNode
        doesn't have a related overflow node; this is currently expected behavior with negative z-order
        children of a scroller.

        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations):

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

        Non-editable text selections should be modifiable with hardware keyboard
        https://bugs.webkit.org/show_bug.cgi?id=199204
        <rdar://problem/51651496>

        Reviewed by Wenson Hsieh.

        UIKit changes are need for this to work, including <rdar://problem/48322899>.
        Note that without these changes, -canPerformAction is never called for _move*
        selectors.

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

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

        [iOS] Should not process key events in non-editable elements using IME
        https://bugs.webkit.org/show_bug.cgi?id=199122
        <rdar://problem/52006654>

        Reviewed by Brent Fulgham.

        Use the non-Input Method code path (the one we use for US keyboard input) for all key events
        targeting a non-editable element. Such key events will never require Input Method support
        (i.e. show candidate suggestions). Moreover, this behavior matches the behavior on Mac.

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

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

        Make HTTPCookieAcceptPolicy an enum class
        https://bugs.webkit.org/show_bug.cgi?id=199081

        Reviewed by Michael Catanzaro.

        Doing so reveals some interesting bugs in the C API that are also fixed:
        WKPreferencesGetIncrementalRenderingSuppressionTimeout was using its toAPI function to convert a double to a double because HTTPCookieAcceptPolicy used to be an unsigned integer.
        toAPI(WebCore::MouseButton) was also using the toAPI(HTTPCookieAcceptPolicy) because HTTPCookieAcceptPolicy used to be an unsigned integer.
        Yikes!  Type safety is our friend.

        * NetworkProcess/Cookies/WebCookieManager.messages.in:
        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::toCFHTTPCookieStorageAcceptPolicy):
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        * Shared/HTTPCookieAcceptPolicy.h:
        (): Deleted.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toHTTPCookieAcceptPolicy):
        (WebKit::toAPI):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetIncrementalRenderingSuppressionTimeout):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (toHTTPCookieAcceptPolicy):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.messages.in:

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

        Wrong title for Data Detectors tap action menu
        https://bugs.webkit.org/show_bug.cgi?id=199198
        <rdar://problem/51957842>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        Always pass the results array through to DataDetectors; they need it
        to figure out the title too!

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

        [iOS] Occasional crash under -[UIPreviewTarget initWithContainer:center:transform:] when generating a drag preview
        https://bugs.webkit.org/show_bug.cgi?id=199192
        <rdar://problem/51554509>

        Reviewed by Tim Horton.

        Tweak our preview generation code (for both the context menu and dragging) to be robust in the case where the
        content view's unscaled view is nil; this may happen in the case after the web content process is terminated
        and -cleanupInteraction is called, but before -setupInteraction is subsequently called.

        Additionally, make our logic for creating targeted previews robust in the case where the view is removed from
        the view hierarchy right before the platform asks for a targeted preview.

        Test:   DragAndDropTests.WebProcessTerminationDuringDrag
                DragAndDropTests.WebViewRemovedFromViewHierarchyDuringDrag

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView containerViewForTargetedPreviews]):
        (-[WKContentView _deliverDelayedDropPreviewIfPossible:]):
        (-[WKContentView dragInteraction:previewForLiftingItem:session:]):
        (-[WKContentView _ensureTargetedPreview]):

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

        Close sockets with too high file descriptor
        https://bugs.webkit.org/show_bug.cgi?id=199116

        Reviewed by Eric Carlson.

        Log the case of failing to open a socket.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createSocket):

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

        When Caps Lock is enabled on the Smart Keyboard, can't scroll with space or arrow keys
        https://bugs.webkit.org/show_bug.cgi?id=199187
        <rdar://problem/51521709>

        Reviewed by Anders Carlsson.

        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
        When deciding whether a key event should start a scroll, ignore all
        modifiers other than the ones we actually care about (including Caps Lock).

2019-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully rename WebKitGTK+ -> WebKitGTK everywhere
        https://bugs.webkit.org/show_bug.cgi?id=199159

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:

2019-06-24  Brady Eidson  <beidson@apple.com>

        Null deref in WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad.
        <rdar://problem/51535942> and https://bugs.webkit.org/show_bug.cgi?id=199123

        Reviewed by Andy Estes.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad): Properly detect this null DocumentLoader
          and try to learn more about the state of things.

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

        Pages using Google's anti-flicker optimization may take ~5 seconds to do initial paint
        https://bugs.webkit.org/show_bug.cgi?id=199173
        <rdar://problem/45968770>

        Reviewed by Geoffrey Garen.

        Add experimental feature for the quirk.

        * Shared/WebPreferences.yaml:

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

        Remove IsITPFirstPartyWebsiteDataRemovalEnabled as runtime check
        https://bugs.webkit.org/show_bug.cgi?id=199164
        <rdar://problem/52061147>

        Reviewed by Brent Fulgham.

        We've had this toggle as a safety thing since mid-March. No need for it any longer.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveAllButCookiesFor const):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

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

        m_focusedElement != &element in WebPage::elementDidBlur() sometimes
        https://bugs.webkit.org/show_bug.cgi?id=198928
        <rdar://problem/51814327>

        Reviewed by Brent Fulgham.

        This can happen when the focused editable element is inside a nested frame and a person
        taps outside that frame. For reasons that seem lost to time, WebKit2 on iOS would mutate
        the focused frame whenever computing selection positioning information (say, for a tap).
        This "quirk" was added in r163476, but that code has go through multiple iterations and
        is no longer comparable to the current code. Yet, the original mutation of the focused
        frame remained. As a result the UI process and Web process go out of sync with respect
        to what each thinks is the focused element and this visually manifest itself in at least
        two ways:

            1. A non-sensical DOM focus event would be dispatched at the frame tapped, but
            we would keep the focused element focused.

            2. Because we would keep the focused element focused in (1), even though its frame
            is not focused, the keyboard would be active (software keyboard on screen or candidate bar
            on screen if a hardware keyboard is attached), but appear unresponsive: any keys pressed
            would not cause text to be typed into the editable field.

        Because of (1) it was possible for m_focusedElement != &element in WebPage::elementDidBlur().
        When this happens the UI process would never receive an ElementDidBlur message and hence would
        not clear out the focused element state and hide the keyboard.

        We neither do this frame focus mutation in Legacy WebKit on iOS nor Mac. Let's remove this quirk.
        If it turns out that it causes a compatibility issue then we will be in a better position to
        understand its purpose and consider bringing this quirk back, if needed.

        * Shared/ios/InteractionInformationRequest.cpp:
        (WebKit::InteractionInformationRequest::encode const):
        (WebKit::InteractionInformationRequest::decode):
        (WebKit::InteractionInformationRequest::isValidForRequest):
        (WebKit::InteractionInformationRequest::isApproximatelyValidForRequest):
        * Shared/ios/InteractionInformationRequest.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):
        Remove the readOnly field.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::selectionPositionInformation): Remove code to mutate the focused frame.

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

        [Cocoa] Avoid creating a PlatformMediaSessionManager when the WebProcess is suspended or resumed
        https://bugs.webkit.org/show_bug.cgi?id=199160

        Reviewed by Brent Fulgham.

        When the WebProcess suspends or resumes, the PlatformMediaSessionManager is notified about this.
        Avoid creating a new PlatformMediaSessionManager if it does not already exist.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processDidResume):

2019-06-24  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Fixes for compilation with unified builds disabled
        https://bugs.webkit.org/show_bug.cgi?id=199155

        Reviewed by Michael Catanzaro.

        * NetworkProcess/glib/DNSCache.cpp: Add missing inclusion of wtf/glib/RunLoopSourcePriority.h
        * NetworkProcess/glib/DNSCache.h: Add missing forward declaration for GInetAddress

2019-06-24  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Navigation gesture should use dark fallback bg color on dark themes
        https://bugs.webkit.org/show_bug.cgi?id=199104

        Reviewed by Michael Catanzaro.

        Use theme_base_color instead of white background for swipe gesture fallback if no snapshot is found and
        the page did not specify a color. This allows it to use dark colors for dark themes. If the color was
        not found, still fall back to white.

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

2019-06-23  Dan Bernstein  <mitz@apple.com>

        Platform font class gets needlessly initialized in the Networking process
        https://bugs.webkit.org/show_bug.cgi?id=199140

        Reviewed by Tim Horton.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in: Revert a change that was made in
          r246702, which is not needed anymore.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Ditto.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::platformColorClass): Added getter that uses NSClassFromString, thereby avoiding
          initializing the class.
        (IPC::platformFontClass): Ditto.
        (IPC::typeFromObject): Changed to use the above getters instead of +class.

2019-06-23  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow scroll] Clipped composited layers inside overflow scroll jitter and get incorrectly clipped
        https://bugs.webkit.org/show_bug.cgi?id=199133
        rdar://problem/43614439

        Reviewed by Antti Koivisto.
        
        LayoutConstraints -> AbsolutePositionConstraints rename.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStatePositionedNode>::decode):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<AbsolutePositionConstraints>::encode):
        (IPC::ArgumentCoder<AbsolutePositionConstraints>::decode):
        (IPC::ArgumentCoder<LayoutConstraints>::encode): Deleted.
        (IPC::ArgumentCoder<LayoutConstraints>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebRenderLayer.cpp:
        (WebKit::WebRenderLayer::WebRenderLayer):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations): ScrollingTreeOverflowScrollProxyNode
        have overflow scroll relations now too.

2019-06-23  Simon Fraser  <simon.fraser@apple.com>

        Add OverflowScrollProxyNodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=199132

        Reviewed by Antti Koivisto.

        Add ScrollingStateOverflowScrollProxyNode and ScrollingTreeOverflowScrollProxyNode. These
        nodes represent clip and scroll position for an overflow:scroll in the containing block chain,
        but not the paint ancestor chain of a layer. They will be used to correctly manipulate clip
        rects for composited layers in non-stacking-context scrollers, and in a future patch will
        replace the functionality of "Moves" positioned nodes.

        An OverflowScrollProxyNode has the ScrollingNodeID of the scrolling node that it relates to,
        and we use the existing "related overflow nodes" to create the back references in the scrolling tree.

        These nodes are not instantiated yet; a future patch will hook them up.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateOverflowScrollProxyNode>::encode):
        (ArgumentCoder<ScrollingStateOverflowScrollProxyNode>::decode):
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::dump):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::repositionScrollingLayers):

2019-06-21  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r246701

        * Shared/LoadParameters.h:
        Add a default value for shouldOpenExternalURLsPolicy.

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

        Adjust sandboxes based on seed feedback
        https://bugs.webkit.org/show_bug.cgi?id=199119
        <rdar://problem/50164879>

        Reviewed by Geoffrey Garen.

        Update our sandboxes to address test failures and bugs encountered during initial iOS 13 and
        macOS Catalina testing.

        * 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:

2019-06-21  Jiewen Tan  <jiewen_tan@apple.com>

        WebPageProxy::loadData should accept ShouldOpenExternalURLsPolicy
        https://bugs.webkit.org/show_bug.cgi?id=199114
        <rdar://problem/51671674>

        Reviewed by Youenn Fablet.

        This patch teaches WebPageProxy::loadData to accept ShouldOpenExternalURLsPolicy policy,
        and then utilize it in RedirectSOAuthorizationSession. Therefore, the response loaded after
        successful interceptions will be able to propagate the same policy from the last navigation
        as it were continuous loading.

        Besides the above, this patch also fixes some minor issues.

        * Shared/LoadParameters.h:
        * UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.mm:
        (WebKit::NavigationSOAuthorizationSession::shouldStartInternal):
        (WebKit::NavigationSOAuthorizationSession::webViewDidMoveToWindow):
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.h:
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:
        (WebKit::PopUpSOAuthorizationSession::completeInternal):
        * UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.h:
        * UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:
        (WebKit::shouldOpenExternalURLsPolicy):
        (WebKit::RedirectSOAuthorizationSession::completeInternal):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.h:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::complete):
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.h:
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:
        (WebKit::SubFrameSOAuthorizationSession::fallBackToWebPathInternal):
        (WebKit::SubFrameSOAuthorizationSession::completeInternal):
        (WebKit::SubFrameSOAuthorizationSession::loadDataToFrame):
        (WebKit::SubFrameSOAuthorizationSession::postDidCancelMessageToParent):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::loadData):
        * WebProcess/WebPage/WebPage.h:

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

        WebKit context menu highlights include extra padding
        https://bugs.webkit.org/show_bug.cgi?id=199080
        <rdar://problem/51140126>

        Reviewed by Dean Jackson.

        * Shared/ios/InteractionInformationRequest.cpp:
        (WebKit::InteractionInformationRequest::encode const):
        (WebKit::InteractionInformationRequest::decode):
        (WebKit::InteractionInformationRequest::isValidForRequest):
        (WebKit::InteractionInformationRequest::isApproximatelyValidForRequest):
        * Shared/ios/InteractionInformationRequest.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView positionInformationForActionSheetAssistant:]):
        (-[WKContentView updatePositionInformationForActionSheetAssistant:]):
        (-[WKContentView _contextMenuInteraction:configurationForMenuAtLocation:completion:]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::linkIndicatorPositionInformation):
        Disable the margin going forward, but leave it if we're using the legacy
        API, because there is no way to add margin at the platform level with
        the legacy API.

        In the future we should always have no margin in our indicator, and just
        apply it in whatever consumes the indicator, so that there is no
        disagreement between clients about the size of the margin.

2019-06-21  Youenn Fablet  <youenn@apple.com>

        WebPageProxy should use the right path for sandbox extension
        https://bugs.webkit.org/show_bug.cgi?id=198902
        <rdar://problem/50772810>

        Reviewed by Geoffrey Garen.

        Store the sandbox path, if any, in UIProcess for each page in its PageLoadState.
        This allows proper sandbox handling for reload after crash and process swap cases.
        Store the sandbox path, if any, in the b/w list so that the sandbox path can be properly computed
        during b/f navigation works.

        Add SPI for test purposes to check what is the current sandbox path.

        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::resourceDirectoryURL const):
        (WebKit::WebBackForwardListItem::setResourceDirectoryURL):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _resourceDirectoryURL]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::resourceDirectoryURL const):
        (WebKit::PageLoadState::setPendingAPIRequestURL):
        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::setPendingAPIRequestURL):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::backForwardAddItem):
        (WebKit::WebPageProxy::backForwardGoToItemShared):
        (WebKit::WebPageProxy::currentResourceDirectoryURL const):
        * UIProcess/WebPageProxy.h:

2019-06-21  Antoine Quint  <graouts@apple.com>

        [iOS] Compatibility mouse events aren't prevented by calling preventDefault() on pointerdown
        https://bugs.webkit.org/show_bug.cgi?id=198124
        <rdar://problem/50410863>

        Reviewed by Dean Jackson.

        Ensure we wait until completion of a tap before removing the pointer ID and the preventDefault() state along with it.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _singleTapDidReset:]):
        (-[WKContentView _commitPotentialTapFailed]):
        (-[WKContentView _didCompleteSyntheticClick]):
        (-[WKContentView _singleTapRecognized:]):

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

        Address reference to UIColor.groupTableViewBackgroundColor in WKPasswordView.mm
        https://bugs.webkit.org/show_bug.cgi?id=199111
        <rdar://problem/51992107>

        Reviewed by Timothy Hatcher.

        WKPasswordView.mm is used on iOS-family devices. However, it doesn't
        build on tvOS or watchOS when "treat deprecation warnings as errors"
        is enabled. This build failure is due to a reference to
        UIColor.groupTableViewBackgroundColor in a branch of non-dark-mode
        code. Address this by surrounding the reference with
        ALLOW_DEPRECATED_DECLARATIONS_* macros.

        Attempting to address the build failure by unconditionally enabling
        the dark-mode code works for tvOS, but fails for watchOS due to lack
        of dark-mode support on that platform.

        * UIProcess/ios/WKPasswordView.mm:
        (-[WKPasswordView showInScrollView:]):

2019-06-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Bump minimum versions of GLib, GTK, libsoup, ATK, GStreamer, and Cairo
        https://bugs.webkit.org/show_bug.cgi?id=199094

        Reviewed by Carlos Garcia Campos.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest):
        (WebKit::NetworkDataTaskSoup::writeDownloadCallback):
        (WebKit::NetworkDataTaskSoup::writeDownload):
        (WebKit::NetworkDataTaskSoup::startingCallback):
        (WebKit::NetworkDataTaskSoup::requestStartedCallback): Deleted.
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::buttonForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithTouchEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (ClickCounter::currentClickCountForGdkButtonEvent):
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseHandleMouseEvent):
        (webkitWebViewBaseGetTouchPointsForEvent):
        (webkitWebViewBaseTouchEvent):
        (webkitWebViewBaseGestureController):
        (webkitWebViewBaseEvent):
        (deviceScaleFactorChanged):
        (webkitWebViewBaseCreateWebPage):
        (webkitWebViewBaseTakeViewSnapshot):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWebViewDialog.cpp:
        (webkitWebViewDialogDraw):
        (webkitWebViewDialogConstructed):
        (webkit_web_view_dialog_class_init):
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (fileChooserDialogResponseCallback):
        (webkitWebViewRunFileChooser):
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::doMouseEvent):
        (WebKit::doMotionEvent):
        (WebKit::doKeyStrokeEvent):
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::~AcceleratedBackingStoreWayland):
        (WebKit::AcceleratedBackingStoreWayland::tryEnsureGLContext):
        (WebKit::AcceleratedBackingStoreWayland::makeContextCurrent):
        (WebKit::AcceleratedBackingStoreWayland::paint):
        * UIProcess/gtk/AcceleratedBackingStoreWayland.h:
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::startDrag):
        (WebKit::DragAndDropHandler::fillDragData):
        (WebKit::DragAndDropHandler::finishDrag):
        * UIProcess/gtk/DragAndDropHandler.h:
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::handleEvent):
        * UIProcess/gtk/GestureController.h:
        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::filterKeyEvent):
        (WebKit::InputMethodFilter::logHandleKeyboardEventForTesting):
        (WebKit::InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting):
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::isEventStop):
        (WebKit::createScrollEvent):
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::append):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
        * UIProcess/gtk/WebKitInspectorWindow.cpp:
        (webkit_inspector_window_init):
        (webkitInspectorWindowSetSubtitle):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getCenterForZoomGesture):
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):
        (WebKit::WebPopupMenuProxyGtk::hidePopupMenu):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::getCenterForZoomGesture):

2019-06-20  Patrick Griffis  <pgriffis@igalia.com> and Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Implement a basic DNS cache
        https://bugs.webkit.org/show_bug.cgi?id=196094

        Reviewed by Michael Catanzaro.

        This adds a simple cache to all DNS operations in the network process.

        * NetworkProcess/glib/DNSCache.cpp: Added.
        (WebKit::DNSCache::DNSCache):
        (WebKit::DNSCache::mapForType):
        (WebKit::DNSCache::lookup):
        (WebKit::DNSCache::update):
        (WebKit::DNSCache::removeExpiredResponsesInMap):
        (WebKit::DNSCache::pruneResponsesInMap):
        (WebKit::DNSCache::removeExpiredResponsesFired):
        (WebKit::DNSCache::clear):
        * NetworkProcess/glib/DNSCache.h: Added.
        * NetworkProcess/glib/WebKitCachedResolver.cpp: Added.
        (addressListVectorToGList):
        (addressListGListToVector):
        (webkitCachedResolverLookupByName):
        (webkitCachedResolverLookupByNameAsync):
        (webkitCachedResolverLookupByNameFinish):
        (dnsCacheType):
        (webkitCachedResolverLookupByNameWithFlags):
        (webkitCachedResolverLookupByNameWithFlagsAsync):
        (webkitCachedResolverLookupByNameWithFlagsFinish):
        (webkitCachedResolverLookupByAddress):
        (webkitCachedResolverLookupByAddressAsync):
        (webkitCachedResolverLookupByAddressFinish):
        (webkitCachedResolverLookupRecords):
        (webkitCachedResolverLookupRecordsAsync):
        (webkitCachedResolverLookupRecordsFinish):
        (webkitCachedResolverReload):
        (webkit_cached_resolver_class_init):
        (webkitCachedResolverNew):
        * NetworkProcess/glib/WebKitCachedResolver.h: Added.
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:

2019-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Stop pretending WebCore::Widget can have a platform widget
        https://bugs.webkit.org/show_bug.cgi?id=199066

        Reviewed by Michael Catanzaro.

        Rename PlatformWidget as PlatformViewWidget to avoid conflict with PlatformWidget defined in WebCore.

        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::viewWidget):

2019-06-20  Megan Gardner  <megan_gardner@apple.com>

        Remove change that was causing hangs
        https://bugs.webkit.org/show_bug.cgi?id=199055
        <rdar://problem/51820516>

        Reviewed by Darin Adler.

        This fix can sometimes cause deadlocks in the UIProcess.
        We have a different fix that will go into UIKit <rdar://problem/51927701>.

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

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

        [iOS] Evernote crashes when creating a note
        https://bugs.webkit.org/show_bug.cgi?id=199083
        <rdar://problem/51759247>

        Reviewed by Brent Fulgham.

        Add a hack just for Evernote linked before iOS 13 that dynamically adds a placeholder -[WKContentView keyCommands]
        method (it just calls super). Evernote swizzles the IPI -[WKContentView keyCommands], but this
        method may not always be present in the WebKit binary following r240514. So, Evernote may end
        up swizzling -[UIResponder keyCommands], but their implementation doesn't account for this
        scenario and they end up crashing because they call an unrecognized selector.

        * UIProcess/Cocoa/VersionChecks.h: Add version check.
        * UIProcess/ios/WKContentView.mm:
        (keyCommandsPlaceholderHackForEvernote): Added.
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]): Install the hack.

2019-06-20  Brady Eidson  <beidson@apple.com>

        WebURLSchemeHandlerProxy::loadSynchronously crash with sync request.
        <rdar://problem/51862206> and https://bugs.webkit.org/show_bug.cgi?id=199063

        Reviewed by Geoffrey Garen.

        Don't use a DataReference for the sync reply type.

        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebURLSchemeHandler.h:

        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didComplete):
        * UIProcess/WebURLSchemeTask.h:

        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
        (WebKit::WebURLSchemeHandlerProxy::loadSynchronously):

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

        Add unit test for UIContextMenuConfiguration API
        https://bugs.webkit.org/show_bug.cgi?id=199043

        Reviewed by Wenson Hsieh.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::clickInteractionDriverForTesting const):
        (API::PageConfiguration::setClickInteractionDriverForTesting):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _setClickInteractionDriverForTesting:]):
        (-[WKWebViewConfiguration _clickInteractionDriverForTesting]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _registerPreview]):

2019-06-20  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Enable navigation swipe layout tests
        https://bugs.webkit.org/show_bug.cgi?id=198995

        Reviewed by Michael Catanzaro.

        Implement API for enabling and controlling swipes from WebKitTestRunner.

        Implement beginSimulatedSwipeInDirectionForTesting() and completeSimulatedSwipeInDirectionForTesting()
        in ViewGestureController for controlling the test swipes. Add functions in WebKitWebViewBase for calling
        them.

        Simulate the gesture by generating two scroll events: one to begin the gesture and one to complete it.

        Since there's no reliable way to set source device type of the generated events to touchpad, don't check
        source device type for simulated swipes.

        * UIProcess/API/C/gtk/WKView.cpp:
        (WKViewSetEnableBackForwardNavigationGesture): Added.
        (WKViewBeginBackSwipeForTesting): Added.
        (WKViewCompleteBackSwipeForTesting): Added.
        * UIProcess/API/C/gtk/WKViewPrivate.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseBeginBackSwipeForTesting): Added.
        (webkitWebViewBaseCompleteBackSwipeForTesting): Added.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/ViewGestureController.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
        Skip source device type check for simulated swipes. Also, remove an incorrect FIXME.
        (WebKit::createScrollEvent): Added.
        (WebKit::ViewGestureController::beginSimulatedSwipeInDirectionForTesting): Implemented.
        (WebKit::ViewGestureController::completeSimulatedSwipeInDirectionForTesting): Implemented.

2019-06-20  Charlie Turner  <cturner@igalia.com>

        [GTK] Make startup pause available in DEVELOPER_MODE rather than DEBUG.
        https://bugs.webkit.org/show_bug.cgi?id=199069

        Reviewed by Michael Catanzaro.

        * WebProcess/gtk/WebProcessMainGtk.cpp: Allow developers to pause
        the web process in DEVELOPER_MODE rather than only DEBUG, matching
        the WPE behaviour and also the purpose of DEVELOPER_MODE.

2019-06-20  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] The Previous/Next gesture should handle RTL
        https://bugs.webkit.org/show_bug.cgi?id=198707

        Reviewed by Michael Catanzaro.

        The gesture uses PageClientImpl::userInterfaceLayoutDirection() to determine the text
        direction. Implement that method, then adjust drawing so that the pages move from/to
        the left instead of right side for RTL locales.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::): Implemented.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::draw):

2019-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove support for GTK2 plugins
        https://bugs.webkit.org/show_bug.cgi?id=199065

        Reviewed by Sergio Villar Senin.

        * PlatformGTK.cmake:
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::moduleMixesGtkSymbols):
        * Shared/Plugins/Netscape/unix/NetscapePluginModuleUnix.cpp:
        (WebKit::NetscapePluginModule::getPluginInfo):
        * Shared/Plugins/PluginModuleInfo.h:
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::isGdkKeyCodeFromKeyPad):
        (WebKit::buttonForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * SourcesGTK.txt:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::getPluginInfo):
        (WebKit::PluginInfoCache::updatePluginInfo):
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::getPluginInfo):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptionsWithAttributes):
        (WebKit::PluginProcessProxy::scanPlugin):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:

2019-06-19  Dean Jackson  <dino@apple.com>

        No menu pop-up when long pressing on a link in Firefox app
        https://bugs.webkit.org/show_bug.cgi?id=199045
        <rdar://problem/51422407>

        Reviewed by Tim Horton.

        Add a version check for linking on-or-after iOS 13. When
        that isn't true, we don't use UIContextMenuInteraction
        and instead fall back on the legacy UIPreviewItem API.

        * UIProcess/Cocoa/VersionChecks.h: Add FirstThatHasUIContextMenuInteraction.
        * UIProcess/ios/WKContentViewInteraction.h: 
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _shouldUseContextMenus]): New method to decide if we should
        use context menus or preview items.
        (-[WKContentView setupInteraction]): Make the decision at runtime rather than
        compile time.
        (-[WKContentView _contentsOfUserInterfaceItem:]): Ditto.
        (-[WKContentView _registerPreview]): Ditto.
        (-[WKContentView _unregisterPreview]): Ditto.

2019-06-19  Andy Estes  <aestes@apple.com>

        [iOS] Fall back to taking a UIView snapshohot for UITargetedPreviews if InteractionInformationAtPosition does not have an image
        https://bugs.webkit.org/show_bug.cgi?id=199038
        <rdar://problem/50555810>

        Reviewed by Tim Horton.

        In -contextMenuInteraction:previewForHighlightingMenuWithConfiguration: and friend, we
        should always return a non-nil UITargetedPreview. When we do return nil, UIKit uses the web
        view itself as the snapshot view, creating an unsightly animation.

        For cases where we fail to create a UITargetedPreview from the information in
        InteractionInformationAtPosition, this patch falls back to creating a UITargetedPreview with
        a snapshot view obtained from
        -[UIView resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:].

        Also renamed -targetedPreview to -_ensureTargetedPreview and cached the UITargetedPreview
        for reuse in -contextMenuInteraction:previewForDismissingMenuWithConfiguration:.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (createFallbackTargetedPreview):
        (-[WKContentView _ensureTargetedPreview]):
        (-[WKContentView contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):
        (-[WKContentView contextMenuInteraction:previewForDismissingMenuWithConfiguration:]):
        (-[WKContentView contextMenuInteractionDidEnd:]):
        (-[WKContentView _targetedPreview]): Renamed to _ensureTargetedPreview.

2019-06-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: replace CFNetwork SPI with new API where able
        https://bugs.webkit.org/show_bug.cgi?id=198762

        Reviewed by Timothy Hatcher.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):

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

        DownloadMonitor::measuredThroughputRate should approach zero with no throughput
        https://bugs.webkit.org/show_bug.cgi?id=198981
        <rdar://problem/51456914>

        Reviewed by Geoffrey Garen.

        When the timer fires to approximate the download rate, add a new timestamp with 0 bytes received since the last time we received bytes.
        Then, if there's only one timestamp, assume the throughput rate is 0 instead of infinite.
        This will prevent false positives estimating large download rates based on old data when the throughput drops to 0.

        * NetworkProcess/Downloads/DownloadMonitor.cpp:
        (WebKit::DownloadMonitor::measuredThroughputRate const):
        (WebKit::DownloadMonitor::timerFired):

2019-06-19  Sihui Liu  <sihui_liu@apple.com>

        Remove unused originsWithCredentials from WebsiteData
        https://bugs.webkit.org/show_bug.cgi?id=199020

        Reviewed by Geoffrey Garen.

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

2019-06-19  Sihui Liu  <sihui_liu@apple.com>

        Crash at com.apple.WebKit: WebKit::WebsiteDataStore::processPools const
        https://bugs.webkit.org/show_bug.cgi?id=198935
        <rdar://problem/51549308>

        Reviewed by Geoffrey Garen.

        When WebProcessProxy is in WebProcessCache or is pre-warmed, it does not hold a strong reference of 
        WebProcessPool. In this case, we should not store the raw pointer of WebProcessPool and perform websiteDataStore
        operations with it.
        This patch should fix the crash at dereferencing null pointer of WebProcessPool in 
        WebsiteDataStore::processPools, but it is unclear why websiteDataStore comes to observe cached or prewarmed web 
        process that should not have web page. The release log may help us find the cause.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processPoolIfExists const):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::processPools const):

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

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

        Reviewed by Youenn Fablet.

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

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

        Update preview API deprecation message.
        https://bugs.webkit.org/show_bug.cgi?id=198974

        * UIProcess/API/Cocoa/WKUIDelegate.h:

2019-06-19  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Fix compilation errors for the GTK2 plugin process
        https://bugs.webkit.org/show_bug.cgi?id=199000

        Reviewed by Michael Catanzaro.

        * Shared/gtk/WebEventFactory.cpp: Use the GdkEvent union fields
        when directly accessing event struct fields.
        (WebKit::buttonForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2019-06-19  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Fix build with unified sources disabled
        https://bugs.webkit.org/show_bug.cgi?id=198752

        Reviewed by Michael Catanzaro.

        * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp:
        (WebKit::NetworkHTTPSUpgradeChecker::NetworkHTTPSUpgradeChecker): Qualify SQLiteDatabase
        with its namespace.
        * UIProcess/WebFrameProxy.h: Replace forward declaration of WebPageProxy with inclusion
        of WebPageProxy.h to avoid build error due to usage of undefined class. Moved DataCallback
        definition from WebPageProxy.h to avoid code using the type before its declaration.
        * UIProcess/WebPageProxy.h: Remove definition of DataCallback.
        * UIProcess/wpe/WebInspectorProxyWPE.cpp: Add missing forward declaration of
        WebCore::FloatRect.
        (WebKit::WebInspectorProxy::platformSetSheetRect): Qualify FloatRect with its namespace.
        * WebProcess/Automation/WebAutomationSessionProxy.cpp: Qualify all occurrences of
        PageIdentifier with its namespace.
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithOrdinal):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithName):
        (WebKit::WebAutomationSessionProxy::resolveParentFrame):
        (WebKit::WebAutomationSessionProxy::focusFrame):
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        (WebKit::WebAutomationSessionProxy::selectOptionElement):
        (WebKit::WebAutomationSessionProxy::takeScreenshot):
        (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
        (WebKit::WebAutomationSessionProxy::deleteCookie):
        * WebProcess/Cache/WebCacheStorageConnection.cpp: Ditto.
        (WebKit::WebCacheStorageConnection::open):
        (WebKit::WebCacheStorageConnection::remove):
        (WebKit::WebCacheStorageConnection::retrieveCaches):
        (WebKit::WebCacheStorageConnection::retrieveRecords):
        (WebKit::WebCacheStorageConnection::batchDeleteOperation):
        (WebKit::WebCacheStorageConnection::batchPutOperation):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: Add missing inclusion of WebPage.h
        * WebProcess/WebPage/gtk/WebPageGtk.cpp: Add missing inclusion of gtk/gtk.h
        * WebProcess/WebPage/wpe/WebPageWPE.cpp: Add missing inclusion of WebPageProxy.h

2019-06-19  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Page blinks after navigation swipe if it triggered PSON
        https://bugs.webkit.org/show_bug.cgi?id=198996

        Reviewed by Michael Catanzaro.

        Disconnect and then reconnect ViewGestureController during process swap
        instead of destroying and re-creating it.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::PageClientImpl::processWillSwap): Added.
        (WebKit::PageClientImpl::PageClientImpl::processDidExit): Implemented.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseWillSwapWebProcess): Added.
        Disconnect ViewGestureController if it exists.
        (webkitWebViewBaseDidExitWebProcess): Added.
        Destroy ViewGestureController.
        (webkitWebViewBaseDidRelaunchWebProcess):
        Reconnect the ViewGestureController if it exists.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2019-06-19  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] CurlRequestScheduler doesn't terminate worker thread in a certain situation.
        https://bugs.webkit.org/show_bug.cgi?id=198993

        Cancel CurlRequest before invalidation to remove tasks from CurlRequestScheduler certainly in ~NetworkDataTaskCurl.

        Reviewed by Fujii Hironori.

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

2019-06-19  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Invalidate SceneIntegration in LayerTreeHost::invalidate()
        https://bugs.webkit.org/show_bug.cgi?id=198992

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::invalidate): Invalidate the
        Nicosia::SceneIntegration object. This should properly disassociate
        the now-invalited LayerTreeHost (a SceneIntegration client) from the
        SceneIntegration object that can still be shared with platform layers
        originating from this LayerTreeHost.

2019-06-18  Dean Jackson  <dino@apple.com>

        UIContextMenuInteraction implementation for WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=198986
        <rdar://problem/51875189>

        Reviewed by Andy Estes.

        Implement UIContextMenuInteraction and its delegate as a
        replacement for UIPreviewItemController in iOS 13.

        In order to preserve existing behaviour as much as possible,
        we check for the implementation of new WebKit API to configure
        the menu. If that is not present, we attempt to convert
        the results of the existing WebKit WKPreviewAction delegates
        into something that works with UIContextMenus.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _contentsOfUserInterfaceItem:]):
        (-[WKContentView _registerPreview]):
        (-[WKContentView _unregisterPreview]):
        (-[WKContentView _showLinkPreviewsPreferenceChanged:]):
        (needsDeprecatedPreviewAPI):
        (uiActionForPreviewAction):
        (menuFromPreviewOrDefaults):
        (titleForMenu):
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (-[WKContentView contextMenuInteraction:configurationForMenuAtLocation:]):
        (-[WKContentView _contextMenuInteraction:configurationForMenuAtLocation:completion:]):
        (-[WKContentView continueContextMenuInteraction:]):
        (uiImageForImage):
        (createTargetedPreview):
        (-[WKContentView _targetedPreview]):
        (-[WKContentView contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):
        (-[WKContentView contextMenuInteractionWillPresent:]):
        (-[WKContentView contextMenuInteraction:previewForDismissingMenuWithConfiguration:]):
        (-[WKContentView contextMenuInteraction:willCommitWithAnimator:]):
        (-[WKContentView contextMenuInteractionDidEnd:]):
        (-[WKContentView shouldUsePreviewForLongPress]): Deleted.

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

        Unreviewed, rolling out r246575.

        Breaks internal builds.

        Reverted changeset:

        "Update WebKit API to separately retrieve actions and use
        context menus"
        https://bugs.webkit.org/show_bug.cgi?id=198974
        https://trac.webkit.org/changeset/246575

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

        Update WebKit API to separately retrieve actions and use context menus
        https://bugs.webkit.org/show_bug.cgi?id=198974
        <rdar://problem/50735687>

        Reviewed by Tim Horton.

        Update API and SPI, and add infrastructure for asynchronously requesting interaction information.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

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

        REGRESSION (r240757): Cannot dismiss the keyboard on http://apple.com/apple-tv-plus
        https://bugs.webkit.org/show_bug.cgi?id=198922
        <rdar://problem/50300056>

        Reviewed by Wenson Hsieh.

        Actually dismiss the keyboard as intended in r240757. Do not wait for the round-trip
        to the WebProcess to run through the -elementDidBlur steps in the UIProcess and hide
        the keyboard when a person explicitly dismisses the keyboard via the Done button (iPhone)
        or hide keyboard button (iPad).

        Note that r240757 revealed another bug in this code, <https://bugs.webkit.org/show_bug.cgi?id=198928>.
        I am unclear of the implications of that bug, but it is clear for this bug that it
        never makes sense to round-trip to the WebProcess when the keyboard is dismissed by
        a user gesture.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView endEditingAndUpdateFocusAppearanceWithReason:]): Invoke -_elementDidBlur
        to blur the element in the UIProcess and hide the keyboard.
        (-[WKContentView _elementDidBlur]): Prevent duplicate invocations of -didEndFormControlInteraction
        and setIsShowingInputViewForFocusedElement messages by only doing these actions when
        editablity changes. This covers the case where -_elementDidBlur may be invoked a second
        time (the reply in the round-trip). In that case we don't need to do these actions.

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

        NetworkSession::networkStorageSession can return null
        https://bugs.webkit.org/show_bug.cgi?id=198947
        <rdar://problem/51394449>

        Reviewed by Youenn Fablet.

        We are seeing evidence of crashes from the map owning NetworkSessions and the map owning NetworkStorageSessions becoming out of sync
        because NetworkSession is refcounted but NetworkStorageSession is not.  I started the complete fix in https://bugs.webkit.org/show_bug.cgi?id=194926
        but for now let's add less risky null checks to prevent fallout.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::updateClientSideCookiesAgeCap):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccessForFrame):
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        (WebKit::WebResourceLoadStatisticsStore::removePrevalentDomains):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::networkStorageSession const):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applyCookieBlockingPolicy):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCocoa::tryPasswordBasedAuthentication):

2019-06-18  Brady Eidson  <beidson@apple.com>

        Handle NSProgress calling our cancellation handler on background threads (and calling it more than once).
        <rdar://problem/51392926> and https://bugs.webkit.org/show_bug.cgi?id=198945

        Reviewed by Alex Christensen.

        If you have a download in progress and quickly tap the button to cancel it multiple times, then:
            - NSProgress calls our cancellation handler on a non-main thread, which we can't handle.
            - They do it more than once, which is also bad.
            - They might even do it multiple times concurrently (on different background dispatch queues)
        
        Let's work around these.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::cancel): Double check we're on the main thread, and handle being called twice.

        * NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm:
        (-[WKDownloadProgress performCancel]): Actually cancel the WebKit::Download if we still have one.
        (-[WKDownloadProgress progressCancelled]): Called when NSProgress calls the cancellation handler, no matter
          which thread it does it on. By leveraging std::call_once we handle multiple calls as well as being called
          concurrently from different threads. call_once punts the *actual* cancel operation off to the main thread.
        (-[WKDownloadProgress initWithDownloadTask:download:URL:sandboxExtension:]): The cancellation handler is
          now simply calling 'progressCancelled' on self, assuming the weak pointer for self is still valid.

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

        [iOS] Pressing key while holding Command should not insert character
        https://bugs.webkit.org/show_bug.cgi?id=198925
        <rdar://problem/51778811>

        Reviewed by Brent Fulgham.

        Do not insert a character for an unhandled key command that has a Command modifier.
        For example, pressing Command + Shift + v, which is an unhandled key command (at the
        time of writing) should not insert v. This matches iOS and Mac platform conventions.

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

2019-06-18  John Wilander  <wilander@apple.com>

        Change log channel name from ResourceLoadStatisticsDebug to ITPDebug and remove unnecessary #if !RELEASE_LOG_DISABLED
        https://bugs.webkit.org/show_bug.cgi?id=198970
        <rdar://problem/51855836>

        Reviewed by Brent Fulgham.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateCookieBlocking):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsMemoryStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::domainsToString):
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):
        (WebKit::ResourceLoadStatisticsStore::debugLogDomainsInBatches):
        * Platform/Logging.h:

2019-06-18  Youenn Fablet  <youenn@apple.com>

        StorageManager::removeAllowedSessionStorageNamespaceConnection should make sure its storageNamespaceID is valid
        https://bugs.webkit.org/show_bug.cgi?id=198966
        rdar://problem/51352080

        Reviewed by Alex Christensen.

        Make sure the namespace ID is a key of the map before using the value.
        The namespace ID is coming straight from IPC so should not be trusted.
        Also, namespace IDs are added/removed based on web pages being created/deleted.
        Namespace IDs are supposed to be scoped by session IDs.
        Using page IDs for namespace IDs works as long as the page does not change of session ID during its lifetime, which is not guaranteed.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::removeAllowedSessionStorageNamespaceConnection):

2019-06-18  David Quesada  <david_quesada@apple.com>

        Network process crash in SandboxExtension::consume() via Download::publishProgress
        https://bugs.webkit.org/show_bug.cgi?id=198968
        rdar://problem/51732997

        Reviewed by Alex Christensen.

        Add an early return if the network process fails to resolve a sandbox extension handle for publishing
        progress on a download. Creating the NSProgress doesn't do much since the progress reporting service
        won't honor the attempt to publish progress on a URL the process does not have access to, and nothing
        else in the Network process makes any use of the progress.

        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::publishProgress):

2019-06-18  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.25.1 release

        * wpe/NEWS: Add release notes for 2.25.1

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

        Expose DataDetectors context generation on WKContentViewInteraction
        https://bugs.webkit.org/show_bug.cgi?id=198950
        <rdar://problem/51116021>

        Reviewed by Andy Estes.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant currentPositionInformation]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dataDetectionContextForPositionInformation:]):
        (-[WKContentView dataDetectionContextForActionSheetAssistant:]):
        For use by other clients, add -dataDetectionContextForPositionInformation:
        and make -dataDetectionContextForActionSheetAssistant: use it.
        Also, pull the code to augment the context with surrounding text out of
        from WKActionSheetAssistant.

2019-06-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Fix building the documentation

        Unreviewed.

        * UIProcess/API/wpe/docs/wpe-docs.sgml: Fix typo "2.62" -> "2.26"

2019-06-18  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246531.

        Broke internal builds.

        Reverted changeset:

        "Expose DataDetectors context generation on
        WKContentViewInteraction"
        https://bugs.webkit.org/show_bug.cgi?id=198950
        https://trac.webkit.org/changeset/246531

2019-06-18  Simon Fraser  <simon.fraser@apple.com>

        Convert macOS to scroll by changing layer boundsOrigin
        https://bugs.webkit.org/show_bug.cgi?id=198917

        Reviewed by Antti Koivisto.

        Remove unreached and confusing code.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::repositionScrollingLayers):

2019-06-18  Dean Jackson  <dino@apple.com>

        Attachment elements are missing context menu previews
        https://bugs.webkit.org/show_bug.cgi?id=198946

        Reviewed by Tim Horton.

        When requesting position information on an <attachment> element,
        we were not providing a snapshot image.

        * WebProcess/WebPage/WebPage.h: New common method to take a snapshot.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::shareableBitmapSnapshotForNode): New helper.
        (WebKit::WebPage::positionInformation): If the element is an attachment,
        then ask for a snapshot.

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

        Expose DataDetectors context generation on WKContentViewInteraction
        https://bugs.webkit.org/show_bug.cgi?id=198950
        <rdar://problem/51116021>

        Reviewed by Andy Estes.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant currentPositionInformation]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dataDetectionContextForPositionInformation:]):
        (-[WKContentView dataDetectionContextForActionSheetAssistant:]):
        For use by other clients, add -dataDetectionContextForPositionInformation:
        and make -dataDetectionContextForActionSheetAssistant: use it.
        Also, pull the code to augment the context with surrounding text out of
        from WKActionSheetAssistant.

2019-06-17  Sihui Liu  <sihui_liu@apple.com>

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

        Reviewed by Geoffrey Garen.

        Clear persistent credentials in deleteWebsiteData of network process.

        Also, merge originsWithPersistentCredentials and removeCredentialsWithOrigins into fetchWebsiteData and
        deleteWebsiteData, and move credentials handling to WebCore.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::originsWithPersistentCredentials): Deleted.
        (WebKit::NetworkProcess::removeCredentialsWithOrigins): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::originsWithPersistentCredentials): Deleted.
        (WebKit::NetworkProcess::removeCredentialsWithOrigins): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::computeWebProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::removeData):

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

        Fix the build with case-sensitive includes
        <rdar://problem/51828273>

        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        FileSystem, not Filesystem.

2019-06-17  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix after r246514

        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationNSURLExtras.h:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationNSURLExtras.mm:
        (+[NSURL _web_canPerformAuthorizationWithURL:]):
        Expose the above method as a SPI for Safari.
        * WebKit.xcodeproj/project.pbxproj:

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

        Protect StorageManager::m_localStorageNamespaces with a Lock
        https://bugs.webkit.org/show_bug.cgi?id=198939
        <rdar://problem/51784225>

        Reviewed by Geoff Garen.

        StorageManager::LocalStorageNamespace::didDestroyStorageArea is called from StorageArea::~StorageArea which is called on the main thread.
        All other access of m_localStorageNamespaces is from the non-main thread.  Sometimes this causes hash table corruption, so wait for a mutex
        before accessing this member variable.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::LocalStorageNamespace::didDestroyStorageArea):
        (WebKit::StorageManager::cloneSessionStorageNamespace):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        * NetworkProcess/WebStorage/StorageManager.h:

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

        Add null check in WebFrameLoaderClient::assignIdentifierToInitialRequest
        https://bugs.webkit.org/show_bug.cgi?id=198926
        <rdar://problem/50079713>

        Reviewed by Brady Eidson.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest):
        WebKitLegacy's version already checks null for the corresponding call.

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

        Fix internal build after r246514
        https://bugs.webkit.org/show_bug.cgi?id=198874

        * UIProcess/API/APINavigationAction.h:
        A problematic reference to APINavigationActionAdditions.h was left.
        Its contents had been sprinkled into the correct places, though.

2019-06-17  Jiewen Tan  <jiewen_tan@apple.com>

        Move SOAuthorization from WebKitAdditions to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=198874
        <rdar://problem/47573431>

        Reviewed by Brent Fulgham.

        This patch basically moves everything from existing WebKitAdditions to WebKit.
        It also replaces the LoadOptimizer nonsense with the actual SOAuthorization API.

        * Configurations/WebKit.xcconfig:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * SourcesCocoa.txt:
        * UIProcess/API/APINavigationAction.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::trySOAuthorization):
        (WebKit::tryInterceptNavigation):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::tryOptimizingLoad): Deleted.
        * UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h: Added.
        (WebKit::NavigationSOAuthorizationSession::callback):
        * UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.mm: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm.
        (WebKit::NavigationSOAuthorizationSession::NavigationSOAuthorizationSession):
        (WebKit::NavigationSOAuthorizationSession::~NavigationSOAuthorizationSession):
        (WebKit::NavigationSOAuthorizationSession::shouldStartInternal):
        (WebKit::NavigationSOAuthorizationSession::webViewDidMoveToWindow):
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.h: Added.
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm: Added.
        (-[WKSOSecretDelegate initWithSession:]):
        (-[WKSOSecretDelegate webViewDidClose:]):
        (-[WKSOSecretDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WKSOSecretDelegate webView:didFinishNavigation:]):
        (WebKit::PopUpSOAuthorizationSession::PopUpSOAuthorizationSession):
        (WebKit::PopUpSOAuthorizationSession::~PopUpSOAuthorizationSession):
        (WebKit::PopUpSOAuthorizationSession::shouldStartInternal):
        (WebKit::PopUpSOAuthorizationSession::fallBackToWebPathInternal):
        (WebKit::PopUpSOAuthorizationSession::abortInternal):
        (WebKit::PopUpSOAuthorizationSession::completeInternal):
        (WebKit::PopUpSOAuthorizationSession::close):
        (WebKit::PopUpSOAuthorizationSession::initSecretWebView):
        * UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.h: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm.
        * UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm: Added.
        (WebKit::RedirectSOAuthorizationSession::RedirectSOAuthorizationSession):
        (WebKit::RedirectSOAuthorizationSession::fallBackToWebPathInternal):
        (WebKit::RedirectSOAuthorizationSession::abortInternal):
        (WebKit::RedirectSOAuthorizationSession::completeInternal):
        (WebKit::RedirectSOAuthorizationSession::beforeStart):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationCoordinator.h: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm.
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationCoordinator.mm: Added.
        (WebKit::SOAuthorizationCoordinator::SOAuthorizationCoordinator):
        (WebKit::SOAuthorizationCoordinator::canAuthorize const):
        (WebKit::SOAuthorizationCoordinator::tryAuthorize):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationNSURLExtras.h: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm.
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationNSURLExtras.mm: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm.
        (+[NSURL _web_canPerformAuthorizationWithURL:]):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.h: Added.
        (WebKit::SOAuthorizationSession::page const):
        (WebKit::SOAuthorizationSession::state const):
        (WebKit::SOAuthorizationSession::setState):
        (WebKit::SOAuthorizationSession::navigationAction):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm: Added.
        (WebKit::SOAuthorizationSession::SOAuthorizationSession):
        (WebKit::SOAuthorizationSession::~SOAuthorizationSession):
        (WebKit::SOAuthorizationSession::releaseNavigationAction):
        (WebKit::SOAuthorizationSession::becomeCompleted):
        (WebKit::SOAuthorizationSession::shouldStart):
        (WebKit::SOAuthorizationSession::start):
        (WebKit::SOAuthorizationSession::fallBackToWebPath):
        (WebKit::SOAuthorizationSession::abort):
        (WebKit::SOAuthorizationSession::complete):
        (WebKit::SOAuthorizationSession::presentViewController):
        (WebKit::SOAuthorizationSession::dismissViewController):
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.h: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm.
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm: Added.
        (WebKit::SubFrameSOAuthorizationSession::SubFrameSOAuthorizationSession):
        (WebKit::SubFrameSOAuthorizationSession::fallBackToWebPathInternal):
        (WebKit::SubFrameSOAuthorizationSession::abortInternal):
        (WebKit::SubFrameSOAuthorizationSession::completeInternal):
        (WebKit::SubFrameSOAuthorizationSession::beforeStart):
        (WebKit::SubFrameSOAuthorizationSession::loadDataToFrame):
        (WebKit::SubFrameSOAuthorizationSession::postDidCancelMessageToParent):
        * UIProcess/Cocoa/SOAuthorization/WKSOAuthorizationDelegate.h: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm.
        * UIProcess/Cocoa/SOAuthorization/WKSOAuthorizationDelegate.mm: Added.
        (-[WKSOAuthorizationDelegate authorization:presentViewController:withCompletion:]):
        (-[WKSOAuthorizationDelegate authorizationDidNotHandle:]):
        (-[WKSOAuthorizationDelegate authorizationDidCancel:]):
        (-[WKSOAuthorizationDelegate authorizationDidComplete:]):
        (-[WKSOAuthorizationDelegate authorization:didCompleteWithHTTPAuthorizationHeaders:]):
        (-[WKSOAuthorizationDelegate authorization:didCompleteWithHTTPResponse:httpBody:]):
        (-[WKSOAuthorizationDelegate authorization:didCompleteWithError:]):
        (-[WKSOAuthorizationDelegate setSession:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::trySOAuthorization):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::tryOptimizingLoad): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setShouldSuppressSOAuthorizationInAllNavigationPolicyDecision):
        (WebKit::WebPageProxy::setShouldSuppressSOAuthorizationInNextNavigationPolicyDecision):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::soAuthorizationCoordinator):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeProcess):

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

        Fix the build.

        * UIProcess/Gamepad/ios/UIGamepadProviderIOS.mm:
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):
        * UIProcess/_WKTouchEventGenerator.mm:
        (-[_WKTouchEventGenerator _sendHIDEvent:]):
        (-[_WKTouchEventGenerator _sendMarkerHIDEventWithCompletionBlock:]):

2019-06-17  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r242686): Paths in XPC services’ LC_DYLD_ENVIRONMENT are incorrect in built products directory
        https://bugs.webkit.org/show_bug.cgi?id=198904

        Reviewed by Alex Christensen.

        After r242686, in local builds, the XPC service executables run from their location at the
        top of the built products directory, rather than inside the framework.

        * Configurations/BaseXPCService.xcconfig: Updated the load commands that set
          DYLD_FRAMEWORK_PATH and DYLD_LIBRARY_PATH for the new location in the built products
          directory. Also removed WK_XPC_SERVICE_INSERT_LIBRARIES_DIR that had been unused.

        * WebKit.xcodeproj/project.pbxproj: Made the creation of symbolic links inside the
          framework’s XPCServices directory predicated on whether this is an install build, rather
          than on the build configuration, for consistency with the condition used in the .xcconfig.

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

        Ensure ITP state is relayed to Network Process on restart
        https://bugs.webkit.org/show_bug.cgi?id=198797
        <rdar://problem/51646944>

        Reviewed by Youenn Fablet.

        Now that the ITP state is maintained in the Network Process, we have to make sure that we update
        that process with current ITP state if the Network Process crashes and is relaunched. This wasn't a
        problem in earlier releases because we tracked all ITP state in the UIProcess.

        This patch does the following:
        1. Add a new method to WKWebsiteDataStore to allow us to trigger statistics processing, which has the
           side effect of syncing ITP state persistently so that it will be available after bouncing the process.
        2. Adds a new test that sets a tracking domain, bounces the process, and confirms the state is still
           consistent.

        Tested by TestWebKitAPI.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _clearPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _processStatisticsAndDataRecords:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::setResourceLoadStatisticsEnabled):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):

2019-06-17  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] Stop accessing GdkEvent fields when possible
        https://bugs.webkit.org/show_bug.cgi?id=198829

        Reviewed by Michael Catanzaro.

        Direct access to GdkEvent structs is no longer possible in GTK 4.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::buttonForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * UIProcess/API/gtk/WebKitEmojiChooser.cpp:
        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
        (webkitScriptDialogImplKeyPressEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (ClickCounter::currentClickCountForGdkButtonEvent):
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseHandleMouseEvent):
        (webkitWebViewBaseCrossingNotifyEvent):
        (webkitWebViewBaseGetTouchPointsForEvent):
        (webkitWebViewBaseTouchEvent):
        (webkitWebViewBaseEvent):
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::handleEvent):
        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::filterKeyEvent):
        (WebKit::InputMethodFilter::logHandleKeyboardEventForTesting):
        (WebKit::InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting):
        * UIProcess/gtk/KeyBindingTranslator.cpp:
        (WebKit::KeyBindingTranslator::commandsForKeyEvent):
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::isEventStop):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas):
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback):
        (WebKit::WebPopupMenuProxyGtk::keyPressEventCallback):

2019-06-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.25.2 release

        * gtk/NEWS: Add release notes for 2.25.2.

2019-06-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r246467.

        It broke scrolling with mouse wheel

        Reverted changeset:

        "[GTK] Stop accessing GdkEvent fields when possible"
        https://bugs.webkit.org/show_bug.cgi?id=198829
        https://trac.webkit.org/changeset/246467

2019-06-16  Darin Adler  <darin@apple.com>

        Rename AtomicString to AtomString
        https://bugs.webkit.org/show_bug.cgi?id=195276

        Reviewed by Michael Catanzaro.

        * many files: Let do-webcore-rename do the renaming.

2019-06-16  Simon Fraser  <simon.fraser@apple.com>

        Implement ScrollableArea::scrollOffset()
        https://bugs.webkit.org/show_bug.cgi?id=198895

        Reviewed by Antti Koivisto.

        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::PopupMenuWin::scrollPosition const):
        (WebKit::WebPopupMenuProxyWin::onKeyDown): Just use m_scrollOffset.
        (WebKit::WebPopupMenuProxyWin::scrollSize const): Deleted.
        * UIProcess/win/WebPopupMenuProxyWin.h: Remove the one-axis scrollOffset()
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::scrollSize const): Deleted.
        (WebKit::PDFPlugin::scrollOffset const): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect):

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

        WebProcessPool::clearWebProcessHasUploads cannot assume its given processIdentifier is valid
        https://bugs.webkit.org/show_bug.cgi?id=198865

        Unreviewed.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::clearWebProcessHasUploads):
        Remove wrong debug assertion in case of WebProcessProxy destruction.

2019-06-15  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] Stop accessing GdkEvent fields when possible
        https://bugs.webkit.org/show_bug.cgi?id=198829

        Reviewed by Michael Catanzaro.

        Direct access to GdkEvent structs is no longer possible in GTK 4.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::buttonForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * UIProcess/API/gtk/WebKitEmojiChooser.cpp:
        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
        (webkitScriptDialogImplKeyPressEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (ClickCounter::currentClickCountForGdkButtonEvent):
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseHandleMouseEvent):
        (webkitWebViewBaseCrossingNotifyEvent):
        (webkitWebViewBaseGetTouchPointsForEvent):
        (webkitWebViewBaseTouchEvent):
        (webkitWebViewBaseEvent):
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::handleEvent):
        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::filterKeyEvent):
        (WebKit::InputMethodFilter::logHandleKeyboardEventForTesting):
        (WebKit::InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting):
        * UIProcess/gtk/KeyBindingTranslator.cpp:
        (WebKit::KeyBindingTranslator::commandsForKeyEvent):
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::isEventStop):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas):
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback):
        (WebKit::WebPopupMenuProxyGtk::keyPressEventCallback):

2019-06-15  Rob Buis  <rbuis@igalia.com>

        Store prefetch redirects in the prefetch cache
        https://bugs.webkit.org/show_bug.cgi?id=197371

        Reviewed by Youenn Fablet.

        Store prefetch redirects in the prefetch cache and use them when
        navigating.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/PrefetchCache.cpp:
        (WebKit::PrefetchCache::Entry::Entry):
        (WebKit::PrefetchCache::storeRedirect):
        * NetworkProcess/cache/PrefetchCache.h:

2019-06-14  Devin Rousso  <drousso@apple.com>

        waitForNavigationToComplete may be called before WebPageProxy knows it's loading
        https://bugs.webkit.org/show_bug.cgi?id=198741
        <rdar://problem/31164316>

        Reviewed by Joseph Pecoraro.

        There's a potential race in `WebAutomationSession::waitForNavigationToCompleteOnPage` when
        querying for the `WebPageProxy`'s loading state (via `PageLoadingState::isLoading`), in that
        a pending load may be committed _after_ the `WebAutomationSession` checks it's value. This
        makes the automation session think that it isn't loading, so it will continue running
        commands, which can lead to a JavaScript error ("Callback was not called before the unload
        event") as any injected scripts will be cleared by the impending navigation, leaving the
        script evaluation callbacks "dangling".

        Expose more information from `PageLoadState` about whether it thinks there _may_ be a
        navigation currently happening, which the `WebAutomationSession` can use to delay commands.

        In the best case, no navigations are "missed".

        In the worst case, the automation session will wait `pageLoadTimeout` before continuing.

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

        * UIProcess/PageLoadState.h:
        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::hasUncommittedLoad const): Added.

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

        WebProcessPool::clearWebProcessHasUploads cannot assume its given processIdentifier is valid
        https://bugs.webkit.org/show_bug.cgi?id=198865
        <rdar://problem/51618878>

        Reviewed by Brady Eidson.

        NetworkProcess currently instructs UIProcess whether a given WebProcess is doing upload.
        There is no guarantee though that the WebProcessProxy is still there when the IPC is arriving at UIProcess.
        Instead, let WebProcess handles its upload state and notify WebProcessPool about its state.
        Make sure WebProcessProxy unregisters itself in case of crash.
        In case of NetworkProcess crash, WebProcesses will see all their uploads fail
        and will notify automatically UIProcess to update their state.

        Since the processID given to WebProcessPool is coming from IPC, we cannot not trust it.
        Add early return in case of not finding a WebProcessProxy for WebProcessPool clear/set methods.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadMap.cpp:
        (WebKit::NetworkResourceLoadMap::add):
        (WebKit::NetworkResourceLoadMap::take):
        * NetworkProcess/NetworkResourceLoadMap.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setWebProcessHasUploads):
        (WebKit::WebProcessPool::clearWebProcessHasUploads):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::remove):
        (WebKit::WebLoaderStrategy::tryLoadingSynchronouslyUsingURLSchemeHandler):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureNetworkProcessConnection):

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

        WebResourceLoadStatisticsStore should not use its network session if invalidated
        https://bugs.webkit.org/show_bug.cgi?id=198814

        Reviewed by Geoffrey Garen.

        Tell WebResourceLoadStatisticsStore that its network session is invalidated.
        WebResourceLoadStatisticsStore will then clear its reference to the network session.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):
        Added for test purposes to trigger further cookie processing.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::invalidateAndCancel):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::invalidateAndCancel):

2019-06-14  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] NSFileWrapper associated with _WKAttachment
        https://bugs.webkit.org/show_bug.cgi?id=198871
        <rdar://problem/51760625>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachment dealloc]):
        Ensure we destruct the API::Object associated with this so RetainPtrs can release.

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

        WebKit's NSAttributedString.h is not included in the WebKit.h umbrella header
        https://bugs.webkit.org/show_bug.cgi?id=198869
        <rdar://problem/51754437>

        Reviewed by Timothy Hatcher.

        * Shared/API/Cocoa/WebKit.h:
        Make the new API available to modularized clients and folks who just import WebKit.h

2019-06-14  Jiewen Tan  <jiewen_tan@apple.com>

        Disable AppSSO for web processes and plugin processes
        https://bugs.webkit.org/show_bug.cgi?id=198843
        <rdar://problem/51642920>

        Reviewed by Sam Weinig.

        This patch moves the disabling of AppSSO from AuxiliaryProcess to PluginProcess
        and WebProcess such that NetworkingProcess will not be affected.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * Shared/ios/AuxiliaryProcessIOS.mm:
        (WebKit::AuxiliaryProcess::platformInitialize):
        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::AuxiliaryProcess::platformInitialize):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeProcess):

2019-06-14  Megan Gardner  <megan_gardner@apple.com>

        Move Synthetic Editing Commands to behind an experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=198842
        <rdar://problem/50594700>

        Reviewed by Simon Fraser.

        Add a feature flag to gate synthetic editing commands.

        * Shared/WebPreferences.yaml:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getFocusedElementInformation):

2019-06-13  Megan Gardner  <megan_gardner@apple.com>

        Fix selection hang in Mail
        https://bugs.webkit.org/show_bug.cgi?id=198845
        <rdar://problem/51388180>

        Reviewed by Tim Horton.

        SelectionDidChange requires a selectionWillChange in order to keep things in line.

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

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

        No content shows up for WKWebView while locked even with _canShowWhileLocked is YES
        https://bugs.webkit.org/show_bug.cgi?id=198819
        <rdar://problem/51636240>

        Reviewed by Simon Fraser.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::didCreateContextForVisibilityPropagation):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::contextIDForVisibilityPropagation const):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::contextIDForVisibilityPropagation): Deleted.
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _setupVisibilityPropagationView]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCreateContextForVisibilityPropagation): Deleted.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::didCreateContextForVisibilityPropagation): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shrinkToFitContentTimer):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Move the creation of the visibility propagation context to WebPage instead of WebProcess,
        because canShowWhileLocked is per-page, not per-process.

        Also, pass canShowWhileLocked into the context creation function for the visibility
        propagation context, not just RemoteLayerTree contexts.

2019-06-13  Antoine Quint  <graouts@apple.com>

        "display: contents" Content click does not trigger
        https://bugs.webkit.org/show_bug.cgi?id=198559
        <rdar://problem/51488524>

        Reviewed by Antti Koivisto.

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

2019-06-13  Takashi Komori  <Takashi.Komori@sony.com>

        [curl] Remove member objects of CurlRequest not to share by different threads.
        https://bugs.webkit.org/show_bug.cgi?id=198747

        Reviewed by Fujii Hironori.

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

2019-06-13  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add SceneIntegration
        https://bugs.webkit.org/show_bug.cgi?id=198791

        Reviewed by Carlos Garcia Campos.

        Have the LayerTreeHost own the SceneIntegration object that's to be
        associated with layers used inside the LayerTreeHost's scene. The
        class now also inherits the SceneIntegration::Client interface, with the
        requestUpdate() method scheduling a scene update in ThreadedCompositor.

        CompositingCoordinator now retrieves the SceneIntegration object from
        the LayerTreeHost instance and manages association to that object for
        layers under the coordinator's control.

        ThreadedCompositor class gets a new public updateScene() method that
        schedules an update, enabling the SceneIntegration class to invoke
        scene updates.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::updateScene):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::createGraphicsLayer):
        (WebKit::CompositingCoordinator::detachLayer):
        (WebKit::CompositingCoordinator::attachLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::LayerTreeHost):
        (WebKit::LayerTreeHost::sceneIntegration):
        (WebKit::LayerTreeHost::requestUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:

2019-06-13  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] gdk_display_get_device_manager and gdk_screen_get_width/height are deprecated
        https://bugs.webkit.org/show_bug.cgi?id=198822

        Reviewed by Carlos Garcia Campos.

        GdkSeat and GdkRectangle should be used, respectively.

        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::doMouseEvent):
        (WebKit::doMotionEvent):
        (WebKit::doKeyStrokeEvent):

2019-06-12  Antoine Quint  <graouts@apple.com>

        Show the web page URL when sharing an AR model
        https://bugs.webkit.org/show_bug.cgi?id=198812
        <rdar://problem/48689498>

        Reviewed by Dean Jackson.

        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didStart):
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource initWithMIMEType:originatingPageURL:]):
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        (WebKit::SystemPreviewController::start):
        (-[_WKPreviewControllerDataSource initWithMIMEType:]): Deleted.
        * UIProcess/SystemPreviewController.h:

2019-06-12  Antti Koivisto  <antti@apple.com>

        Try to fix iOS build.

        * NetworkProcess/Downloads/DownloadMap.cpp:

2019-06-12  Youenn Fablet  <youenn@apple.com>

        Use NSURLSession for WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=198568

        Reviewed by Geoffrey Garen.

        Implement socket channel provider on WebProcess level by sending IPC to NetworkProcess.
        On NetworkProcess side, use NSURLSession API to implement the WebSocket functionality. 
        This is a partial implementation:
        - inspector integration is not working.
        - some error cases are not well handled or are not producing the same error messages.
        - some features are not implemented (extensions, subprotocols, handshake authentication challenge, cookie handling...).

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::createSocketChannel):
        (WebKit::NetworkConnectionToWebProcess::removeSocketChannel):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::createWebSocketTask):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::removeWebSocketTask):
        (WebKit::NetworkSession::addWebSocketTask):
        * NetworkProcess/NetworkSocketChannel.cpp: Added.
        (WebKit::NetworkSocketChannel::create):
        (WebKit::NetworkSocketChannel::NetworkSocketChannel):
        (WebKit::NetworkSocketChannel::~NetworkSocketChannel):
        (WebKit::NetworkSocketChannel::sendString):
        (WebKit::NetworkSocketChannel::sendData):
        (WebKit::NetworkSocketChannel::finishClosingIfPossible):
        (WebKit::NetworkSocketChannel::close):
        (WebKit::NetworkSocketChannel::didConnect):
        (WebKit::NetworkSocketChannel::didReceiveText):
        (WebKit::NetworkSocketChannel::didReceiveBinaryData):
        (WebKit::NetworkSocketChannel::didClose):
        (WebKit::NetworkSocketChannel::messageSenderConnection const):
        * NetworkProcess/NetworkSocketChannel.h: Added.
        * NetworkProcess/NetworkSocketChannel.messages.in: Added.
        * NetworkProcess/NetworkSocketStream.messages.in:
        * NetworkProcess/WebSocketTask.h: Added.
        (WebKit::WebSocketTask::sendString):
        (WebKit::WebSocketTask::sendData):
        (WebKit::WebSocketTask::close):
        (WebKit::WebSocketTask::cancel):
        (WebKit::WebSocketTask::resume):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate existingWebSocketTask:]):
        (-[WKNetworkSessionDelegate URLSession:webSocketTask:didOpenWithProtocol:]):
        (-[WKNetworkSessionDelegate URLSession:webSocketTask:didCloseWithCode:reason:]):
        (WebKit::NetworkSessionCocoa::continueDidReceiveChallenge):
        (WebKit::NetworkSessionCocoa::createWebSocketTask):
        (WebKit::NetworkSessionCocoa::addWebSocketTask):
        (WebKit::NetworkSessionCocoa::removeWebSocketTask):
        (WebKit::NetworkSessionCocoa::webSocketDataTaskForIdentifier):
        * NetworkProcess/cocoa/WebSocketTaskCocoa.h: Added.
        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm: Added.
        (WebKit::WebSocketTask::WebSocketTask):
        (WebKit::WebSocketTask::~WebSocketTask):
        (WebKit::WebSocketTask::readNextMessage):
        (WebKit::WebSocketTask::cancel):
        (WebKit::WebSocketTask::resume):
        (WebKit::WebSocketTask::didConnect):
        (WebKit::WebSocketTask::didClose):
        (WebKit::WebSocketTask::sendString):
        (WebKit::WebSocketTask::sendData):
        (WebKit::WebSocketTask::close):
        (WebKit::WebSocketTask::identifier const):
        * Shared/WebPreferences.yaml:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/WebSocketChannel.cpp: Added.
        (WebKit::WebSocketChannel::create):
        (WebKit::WebSocketChannel::WebSocketChannel):
        (WebKit::WebSocketChannel::~WebSocketChannel):
        (WebKit::WebSocketChannel::messageSenderConnection const):
        (WebKit::WebSocketChannel::messageSenderDestinationID const):
        (WebKit::WebSocketChannel::subprotocol):
        (WebKit::WebSocketChannel::extensions):
        (WebKit::WebSocketChannel::connect):
        (WebKit::WebSocketChannel::send):
        (WebKit::WebSocketChannel::bufferedAmount const):
        (WebKit::WebSocketChannel::close):
        (WebKit::WebSocketChannel::fail):
        (WebKit::WebSocketChannel::disconnect):
        (WebKit::WebSocketChannel::didConnect):
        (WebKit::WebSocketChannel::didReceiveText):
        (WebKit::WebSocketChannel::didReceiveBinaryData):
        (WebKit::WebSocketChannel::didClose):
        (WebKit::WebSocketChannel::didFail):
        (WebKit::WebSocketChannel::networkProcessCrashed):
        * WebProcess/Network/WebSocketChannel.h: Added.
        * WebProcess/Network/WebSocketChannel.messages.in: Added.
        * WebProcess/Network/WebSocketChannelManager.cpp: Added.
        (WebKit::WebSocketChannelManager::createWebSocketChannel):
        (WebKit::WebSocketChannelManager::networkProcessCrashed):
        (WebKit::WebSocketChannelManager::didReceiveMessage):
        * WebProcess/Network/WebSocketChannelManager.h: Added.
        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createWebSocketChannel):
        * WebProcess/Network/WebSocketProvider.h:
        * WebProcess/Network/WebSocketStream.cpp:
        * WebProcess/Network/WebSocketStream.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::webSocketChannelManager):

2019-06-12  Sihui Liu  <sihui_liu@apple.com>

        Add assertions to help debug crash at WebKit::HistoryEntryDataEncoder::operator<<
        https://bugs.webkit.org/show_bug.cgi?id=198766

        Reviewed by Geoffrey Garen.

        * Shared/SessionState.h:
        (WebKit::FrameState::~FrameState):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataEncoder::encodeFixedLengthData):
        (WebKit::encodeFrameStateNode):

2019-06-12  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] GTK_STOCK_* types have been deprecated since GTK 3.10
        https://bugs.webkit.org/show_bug.cgi?id=198787

        Reviewed by Michael Catanzaro.

        We completely remove the gtkStockIDFromContextMenuAction function in order to get rid of the stock items.
        This function was used only in "createActionIfNeeded" where now we pass a nullptr as a stock_id variable.

        * Shared/glib/WebContextMenuItemGlib.cpp:
        (WebKit::gtkStockIDFromContextMenuAction):

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

        Unreviewed fix after rr246360.

        The current code accidentally calls the completion handler twice.

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

2019-06-12  Jiewen Tan  <jiewen_tan@apple.com>

        REGRESSION (r245043) [Mac WK2 Debug] ASSERTION FAILED: m_services.isEmpty() && transports.size() <= maxTransportNumber seen with two http/wpt/webauthn/public-key-credential-* tests
        https://bugs.webkit.org/show_bug.cgi?id=197917
        <rdar://problem/51524958>

        Reviewed by Brent Fulgham.

        This is a race condition that when a new request comes in the middle between the previous one finishes and the clearStateAsync is queued in the main thread.
        Therefore, when the new request starts discovery, it will still see previous request's state.

        To fix this issue, clearState() will be called unconditionally for every request. And a guard is added to clearState() to prevent double clearance.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::makeCredential):
        (WebKit::AuthenticatorManager::getAssertion):
        (WebKit::AuthenticatorManager::clearState):

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

        Add mechanism and test case to check if ITP is active
        https://bugs.webkit.org/show_bug.cgi?id=198694
        <rdar://problem/51557704>

        Reviewed by Youenn Fablet.

        Add a new private SPI call on the WebsiteDataStore object that allows test code
        to mark a domain as prevalent, and check the prevalance of a resource. This
        is then used to build a test to confirm ITP is active and working.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _getIsPrevalentDomain:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

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

        Many layout tests are failing on iPad simulator due to unexpected viewport dimensions
        https://bugs.webkit.org/show_bug.cgi?id=198789
        <rdar://problem/51595519>

        Reviewed by Simon Fraser.

        Prevent the shrink-to-fit-content timer from activating on layout tests that use the testing viewport
        configuration.

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

2019-06-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Deprecate WebSQL APIs
        https://bugs.webkit.org/show_bug.cgi?id=195011

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetProperty):
        (webkit_website_data_manager_class_init):
        * UIProcess/API/gtk/WebKitWebsiteData.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/wpe/WebKitWebsiteData.h:
        * UIProcess/API/wpe/WebKitWebsiteDataManager.h:

2019-06-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Enable hyperlink auditing
        https://bugs.webkit.org/show_bug.cgi?id=197845

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init):

2019-06-12  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK] gtk_misc_set_alignment is deprecated since GTK 3.14
        https://bugs.webkit.org/show_bug.cgi?id=198785

        Reviewed by Carlos Garcia Campos.

        Replace the deprecated gtk_misc_set_alignment with halign and valign.

        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (createLabelWithLineWrap):

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

        [iOS] Idempotent text autosizing needs to react properly to viewport changes
        https://bugs.webkit.org/show_bug.cgi?id=198736
        <rdar://problem/50591911>

        Reviewed by Zalan Bujtas.

        If idempotent text autosizing is enabled, respond to viewport initial scale changes by forcing a style recalc,
        since the amount by which idempotent text autosizing boosts font sizes depends on the Page's initial scale.

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

2019-06-11  Zalan Bujtas  <zalan@apple.com>

        LayoutTests/fast/events/touch/ios/double-tap-for-double-click* test cases are failing
        https://bugs.webkit.org/show_bug.cgi?id=198764
        <rdar://problem/51035459>

        Reviewed by Wenson Hsieh.

        This patch replaces the existing, _doubleTapGestureRecognizerForDoubleClick based double click handling with a WebProcess based implementation using
        the potentialTapAtPosition/commitPotentialTap infrastructure.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::doubleTapForDoubleClickDelay):
        (WebKit::PageClientImpl::doubleTapForDoubleClickRadius):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _ensureNonBlockingDoubleTapGestureRecognizer]):
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _didStartProvisionalLoadForMainFrame]):
        (-[WKContentView _doubleTapForDoubleClickDelay]):
        (-[WKContentView _doubleTapForDoubleClickRadius]):
        (-[WKContentView _doubleTapRecognizedForDoubleClick:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handlePotentialDoubleTapForDoubleClickAtPoint):
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint): Deleted.

2019-06-11  Andy Estes  <aestes@apple.com>

        [Apple Pay] ASSERTION FAILED: m_state == State::Activating under WebPaymentCoordinatorProxy::showPaymentUI
        https://bugs.webkit.org/show_bug.cgi?id=198776
        <rdar://problem/49123795>

        Reviewed by Brian Weinstein.

        It's possible that an active session is aborted before the completion handler passed to
        platformShowPaymentUI() has executed. When that happens, m_state will be Idle even though we
        assert that it is Activating. Fix this by returning early in the platformShowPaymentUI()
        completion handler when m_state is Idle.

        It's not possible to write a layout test for this because MockPaymentCoordinator handles
        showing payment UI directly in the web process, so this code is not executed in layout
        tests. The assertion can be reproduced manually by loading
        https://w3c-test.org/payment-request/payment-is-showing.https.html and clicking the button.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI):

2019-06-11  Patrick Griffis  <pgriffis@igalia.com>

        [GTK] Fix a11y support in bubblewrap sandbox
        https://bugs.webkit.org/show_bug.cgi?id=198777

        Reviewed by Michael Catanzaro.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bindA11y):

2019-06-11  Timothy Hatcher  <timothy@apple.com>

        Flash when tapping compose button after switching to/from dark mode without restarting Mail.
        https://bugs.webkit.org/show_bug.cgi?id=198769
        rdar://problem/51370037

        Reviewed by Tim Horton.

        Accessing a dynamic color outside a normal UIView choke point without setting
        UITraitCollection.currentTraitCollection first can cause undefined results.
        Use LocalCurrentTraitCollection inside scrollViewBackgroundColor when accessing
        the dynamic system UIColors. Also use systemBackgroundColor instead of white.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (scrollViewBackgroundColor):

2019-06-11  Megan Gardner  <megan_gardner@apple.com>

        Integrate scrollbar gestures for iOS
        https://bugs.webkit.org/show_bug.cgi?id=198767

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (_WKGestureRecognizerIsBuiltInScrollViewGestureRecognizer):
        (-[WKContentView gestureRecognizer:canPreventGestureRecognizer:]):

2019-06-11  Timothy Hatcher  <timothy@apple.com>

        Scrollbar can show as white on white in dark mode on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=198772
        rdar://problem/51516743

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]): Use UIScrollViewIndicatorStyleBlack instead
        of UIScrollViewIndicatorStyleDefault to prevent getting a white scrollbar in dark mode.

2019-06-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed build warning fixes

        Silence -Wunused-variable warning

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

2019-06-11  Simon Fraser  <simon.fraser@apple.com>

        Fix non-internal builds after r246327.

        * Platform/spi/ios/UIKitSPI.h:

2019-06-10  Simon Fraser  <simon.fraser@apple.com>

        Add logging for UI-side compositing hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=198739

        Reviewed by Antti Koivisto.

        Make it easier to debug UI-side compositing hit-testing issues with a UIHitTesting log
        channel, which logs information about the UIView hierarchy, which views are found by
        hit-testing, and what touch-actions apply.

        This log channel can be set by passing the argument '-WebKit2Logging "UIHitTesting"' when
        launching a debug iOS MobileSafari instance.

        * Platform/Logging.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hitTest:withEvent:]):
        (-[WKContentView _handleTouchActionsForTouchEvent:]):

2019-06-11  Antti Koivisto  <antti@apple.com>

        REGRESSION (iOS): Can't scroll litter-robot.com checkout form's dropdown menus
        https://bugs.webkit.org/show_bug.cgi?id=198753
        <rdar://problem/51355686>

        Reviewed by Simon Fraser.

        If an element with 'overflow:scroll' also had 'visibility:hidden' or 'pointer-events:none' it would
        capture touches and prevent scrolling of any overlapped scrollers.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::collectDescendantViewsAtPoint):

        Filter out views with 'isUserInteractionEnabled == NO' (set for hidden and pointer-events:none layers).
        This prevents it being considered as the first view hit when determining scrolling relationships.

        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):

        No need to skip here anymore.

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

        Quotes are always inserted as smart quotes on stackblitz.com, causing compilation errors
        https://bugs.webkit.org/show_bug.cgi?id=198735
        <rdar://problem/51557159>

        Reviewed by Megan Gardner.

        Add a flag in FocusedElementInformation to indicate whether spellchecking is allowed in the focused element.
        If spellchecking is not allowed, then disable smart quotes and dashes, which matches behavior on macOS.

        * Shared/FocusedElementInformation.cpp:
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        * Shared/FocusedElementInformation.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textInputTraits]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getFocusedElementInformation):

2019-06-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove option REDIRECTED_XCOMPOSITE_WINDOW
        https://bugs.webkit.org/show_bug.cgi?id=198748

        Reviewed by Žan Doberšek.

        It's unused and untested, we kept that code path only because the redirected window caused performance issues in
        some drivers in embedded devices. Nowadays there are much better solutions for those cases like using WPE port
        or GTK port under wayland instead of X11.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::create): Remove the ShouldDoFrameSync parameter since it always receives Yes.
        (WebKit::ThreadedCompositor::ThreadedCompositor): Ditto.
        (WebKit::ThreadedCompositor::createGLContext): Remove the code to handle the case of ShouldDoFrameSync being No,
        since it's always Yes.
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Remove the code for !USE(REDIRECTED_XCOMPOSITE_WINDOW).
        (webkitWebViewBaseUnrealize): Ditto.
        (webkitWebViewBaseDraw): acceleratedBackingStore member can't be nullptr now.
        (webkitWebViewBaseEnterAcceleratedCompositingMode): Ditto.
        (webkitWebViewBaseUpdateAcceleratedCompositingMode): Ditto.
        (webkitWebViewBaseExitAcceleratedCompositingMode): Ditto.
        (webkitWebViewBaseMakeGLContextCurrent): Ditto.
        (webkitWebViewBaseDidRelaunchWebProcess): Remove the code for !USE(REDIRECTED_XCOMPOSITE_WINDOW).
        (webkitWebViewBasePageClosed): Ditto.
        (webkitWebViewBaseRenderHostFileDescriptor): acceleratedBackingStore member can't be nullptr now.
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaProxyCoordinatedGraphics::didUpdateBackingStoreState): Remove the code for !USE(REDIRECTED_XCOMPOSITE_WINDOW).
        (WebKit::DrawingAreaProxyCoordinatedGraphics::setNativeSurfaceHandleForCompositing): Deleted.
        (WebKit::DrawingAreaProxyCoordinatedGraphics::destroyNativeSurfaceHandleForCompositing): Deleted.
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h:
        * UIProcess/gtk/AcceleratedBackingStore.cpp:
        (WebKit::AcceleratedBackingStore::create): Add an assert to ensure we create an AcceleratedBackingStore.
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        * UIProcess/gtk/AcceleratedBackingStoreX11.h:
        * UIProcess/gtk/HardwareAccelerationManager.cpp:
        (WebKit::HardwareAccelerationManager::HardwareAccelerationManager): Remove the code for !USE(REDIRECTED_XCOMPOSITE_WINDOW).
        * WebProcess/WebPage/AcceleratedSurface.cpp:
        (WebKit::AcceleratedSurface::create): Add an assert to ensure we create an AcceleratedSurface.
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode): Remove the code for !USE(REDIRECTED_XCOMPOSITE_WINDOW).
        (WebKit::DrawingAreaCoordinatedGraphics::setNativeSurfaceHandleForCompositing): Deleted.
        (WebKit::DrawingAreaCoordinatedGraphics::destroyNativeSurfaceHandleForCompositing): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::LayerTreeHost): m_surface can't be nullptr now.
        (WebKit::LayerTreeHost::sizeDidChange): Ditto.
        (WebKit::LayerTreeHost::deviceOrPageScaleFactorChanged): Ditto.
        (WebKit::LayerTreeHost::nativeSurfaceHandleForCompositing): Ditto.
        (WebKit::LayerTreeHost::didDestroyGLContext): Ditto.
        (WebKit::LayerTreeHost::willRenderFrame): Ditto.
        (WebKit::LayerTreeHost::didRenderFrame): Ditto.
        (WebKit::LayerTreeHost::setNativeSurfaceHandleForCompositing): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::nativeWindowHandle): Deleted.
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h:

2019-06-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] bubblewrap sandbox should grant access to web extensions directory
        https://bugs.webkit.org/show_bug.cgi?id=198734

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_set_web_extensions_directory):

2019-06-10  Andy Estes  <aestes@apple.com>

        [iOS] Use PDFKit SPI for taking snapshots when the hosting app is not entitled for global capture
        https://bugs.webkit.org/show_bug.cgi?id=198731
        <rdar://problem/46215174>

        Reviewed by Tim Horton.

        PDFHostViewController renders PDF contents in a view service, and apps are unable to
        snapshot views rendered out-of-process without an entitlement.

        When an app is missing this entitlement and calls WKWebView's
        takeSnapshotWithConfiguration: API when a PDF is displayed, fall back to calling
        PDFHostViewController's snapshotting SPI.

        Testing is blocked by <https://webkit.org/b/175204>.

        * Platform/spi/ios/PDFKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        * UIProcess/ios/WKPDFView.mm:
        (+[WKPDFView web_requiresCustomSnapshotting]):
        (-[WKPDFView web_snapshotRectInContentViewCoordinates:snapshotWidth:completionHandler:]):
        * UIProcess/ios/WKSystemPreviewView.mm:
        (+[WKSystemPreviewView web_requiresCustomSnapshotting]):

2019-06-10  Sam Weinig  <weinig@apple.com>

        Remove Dashboard support
        https://bugs.webkit.org/show_bug.cgi?id=198615

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetUseDashboardCompatibilityMode): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setUseDashboardCompatibilityMode): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::annotatedRegionsChanged): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

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

        [iOS] fast/xsl tests are flaky when run after certain viewport shrink-to-fit tests
        https://bugs.webkit.org/show_bug.cgi?id=198699
        <rdar://problem/50501718>

        Reviewed by Simon Fraser.

        Lift logic that sets the "IsKnownToLayOutWiderThanViewport" flag out of resetViewportDefaultConfiguration, and
        into didCommitLoad instead (along with other logic for resetting viewport arguments). The previous method,
        resetViewportDefaultConfiguration, was being triggered very frequently undo didReceiveMobileDocType, causing the
        shrink-to-fit heuristic to sometimes take no effect. The original intention here was simply to reset the flag
        upon page load.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetViewportDefaultConfiguration):

2019-06-10  Timothy Hatcher  <timothy@apple.com>

        Integrate dark mode support for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=198687
        rdar://problem/51545643

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _effectiveAppearanceIsDark]):
        (-[WKWebView _effectiveAppearanceIsInactive]):
        (-[WKWebView _dynamicUserInterfaceTraitDidChange]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::effectiveAppearanceIsDark const):
        (WebKit::PageClientImpl::effectiveAppearanceIsInactive const):
        * UIProcess/ios/WKPasswordView.mm:
        (-[WKPasswordView showInScrollView:]):
        (configureScrollView): Deleted.

2019-06-10  Sihui Liu  <sihui_liu@apple.com>

        [WKHTTPCookieStore getAllCookies:] may return duplicate cookies
        https://bugs.webkit.org/show_bug.cgi?id=198635
        <rdar://problem/46010232>

        Reviewed by Ryosuke Niwa.

        When there is no process pool, we store cookies set in memory with HashSet m_pendingCookies of WebsiteDataStore.

        HashSet does not contain duplicate Cookies that are completely identical, but it may contain Cookies that have 
        all the other properties identical other than value. This is not correct because Cookies with same name, domain
        and path should be treated as the same cookie. When a cookie is set via API, we should either insert the 
        cookie into m_pendingCookies if the cookie does not exist, or update the cookie value if it already exists.

        Note that we still use HashSet with CookieHash for m_pendingCookies because in cookie deletion, we only delete 
        cookie when there is a complete match. If some cookie from m_pendingCookies has all other properties the same as
        the cookie specified in the deletion function, but the value is different, it will not be removed.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::addPendingCookie):

2019-06-10  Philippe Normand  <pnormand@igalia.com>

        [WPE][Qt] Port to new wpe_fdo_egl_exported_image API
        https://bugs.webkit.org/show_bug.cgi?id=198713

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/wpe/qt/WPEQtViewBackend.cpp:
        (WPEQtViewBackend::WPEQtViewBackend):
        (WPEQtViewBackend::texture):
        (WPEQtViewBackend::displayImage):
        * UIProcess/API/wpe/qt/WPEQtViewBackend.h:

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

        [iOS] ResourceLoadStatistics state is not properly relayed to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=198692
        <rdar://problem/51538088>

        Reviewed by Maciej Stachowiak.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setResourceLoadStatisticsEnabled): Message the NetworkProcess
        on state change.

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

        Drag starting state can get stuck even though the drag has ended
        https://bugs.webkit.org/show_bug.cgi?id=198696
        <rdar://problem/51556045>

        Reviewed by Wenson Hsieh.

        In iOS 13, we're seeing cases of the DragSession not
        correctly ending, and thus leaving m_isStartingDrag in
        an incorrect state. Temporarily force this to be reset
        in ::dragEnded while investigating

        * UIProcess/ios/WKContentViewInteraction.mm: Add some more release logging
        while here.
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):
        (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dragEnded):

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

        [iOS] The default application name for user agent when requesting desktop content is still "Mobile/15E148"
        https://bugs.webkit.org/show_bug.cgi?id=198693
        <rdar://problem/51555371>

        Reviewed by Tim Horton.

        Fixes the bug by introducing an applicationNameForDesktopUserAgent member to WebPageProxy. This
        applicationNameForDesktopUserAgent is set alongside the regular applicationNameForUserAgent; however, in the
        case where it is being set via WKWebViewConfiguration, use WKWebViewConfiguration's
        _applicationNameForDesktopUserAgent instead. See below for more details.

        Tested by adding to the existing API test PreferredContentMode.ApplicationNameForDesktopUserAgent.

        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        * UIProcess/API/APIWebsitePolicies.h:

        Drive-by fix: rename applicationNameForUserAgentWithModernCompatibility to applicationNameForDesktopUserAgent in
        a few places.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController setApplicationNameForUserAgent:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setApplicationNameForUserAgent:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

        Change _applicationNameForUserAgent into an Optional<RetainPtr<NSString>>. A value of WTF::nullopt allows us to
        know that the default application name should be used (which is different when requesting desktop content).

        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _applicationNameForDesktopUserAgent]):

        Add _applicationNameForDesktopUserAgent to the web view configuration. This behaves like
        applicationNameForUserAgent, with one exception: in the case where the default applicationNameForUserAgent is
        used (i.e. the client has not specified any application name), default to `nil` as the application name for user
        agent, rather than "Mobile/15E148".

        (-[WKWebViewConfiguration applicationNameForUserAgent]):
        (-[WKWebViewConfiguration setApplicationNameForUserAgent:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _applicationNameForUserAgentWithModernCompatibility]):
        (-[WKWebpagePreferences _setApplicationNameForUserAgentWithModernCompatibility:]):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setApplicationNameForDesktopUserAgent):
        (WebKit::WebPageProxy::applicationNameForDesktopUserAgent const):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):

2019-06-08  Andy Estes  <aestes@apple.com>

        [Apple Pay] If we have a bound interface identifier, set it on new PKPaymentRequests
        https://bugs.webkit.org/show_bug.cgi?id=198690
        <rdar://problem/48041803>

        Reviewed by Tim Horton.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::boundInterfaceIdentifier const): Implemented a public getter
        for m_boundInterfaceIdentifier.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm:
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorBoundInterfaceIdentifier):
        Implemented an override for paymentCoordinatorBoundInterfaceIdentifier.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.h: Declared
        paymentCoordinatorBoundInterfaceIdentifier for clients to override.

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest): If the client has a non-empty
        bound interface identifier, set it on the new PKPaymentRequest.

        * UIProcess/WebPageProxy.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::paymentCoordinatorBoundInterfaceIdentifier): Implemented an override
        for paymentCoordinatorBoundInterfaceIdentifier.

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

        REGRESSION (r245006): Setting scrollview.scrollEnabled clobbers any scrollEnabled set by a client
        https://bugs.webkit.org/show_bug.cgi?id=198656
        <rdar://problem/51494585>

        Reviewed by Tim Horton.

        Allow client to disable scrolling and zooming.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView initWithFrame:]):
        (-[WKScrollView setScrollEnabled:]):
        (-[WKScrollView _setScrollEnabledInternal:]):
        (-[WKScrollView _updateScrollability]):
        (-[WKScrollView setZoomEnabled:]):
        (-[WKScrollView _setZoomEnabledInternal:]):
        (-[WKScrollView _updateZoomability]):

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

        Allow clients to vend custom -inputView and -inputAccessoryView by overriding WKWebView methods
        https://bugs.webkit.org/show_bug.cgi?id=198631
        <rdar://problem/51505431>

        Reviewed by Tim Horton.

        Allow WKWebView API clients to override WKContentView's default input view and/or input accessory view by
        subclassing WKWebView and implementing -inputView or -inputAccessoryView.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView inputAccessoryView]):
        (-[WKWebView inputView]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputView]):
        (-[WKContentView inputViewForWebView]):
        (-[WKContentView inputAccessoryView]):
        (-[WKContentView inputAccessoryViewForWebView]):

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

        Disable focus rings on WKContentView for PLATFORM(IOSMAC)
        https://bugs.webkit.org/show_bug.cgi?id=198685

        Reviewed by Simon Fraser.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):

2019-06-07  Megan Gardner  <megan_gardner@apple.com>

        Extend quirks to emulate bold/italic/underline in hidden editable areas
        https://bugs.webkit.org/show_bug.cgi?id=198681

        Reviewed by Wenson Hsieh.

        * Shared/FocusedElementInformation.cpp:
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        * Shared/FocusedElementInformation.h:
        * Shared/SyntheticEditingCommandType.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView undoManager]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (shouldSynthezieKeyEvents):
        (-[WKContentView toggleBoldfaceForWebView:]):
        (-[WKContentView toggleItalicsForWebView:]):
        (-[WKContentView toggleUnderlineForWebView:]):
        (-[WKContentView _elementDidBlur]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::generateSyntheticEditingCommand):
        (WebKit::WebPage::getFocusedElementInformation):

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

        Introduce new SPI for context menus on iOS
        https://bugs.webkit.org/show_bug.cgi?id=198590

        Reviewed by Tim Horton.

        Also introduce WKContextMenuElementInfo which is API.
        This is part of <rdar://problem/51003503>

        * Shared/API/APIObject.h:
        * Shared/API/Cocoa/WebKit.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APIContextMenuElementInfo.cpp: Added.
        (API::ContextMenuElementInfo::ContextMenuElementInfo):
        * UIProcess/API/APIContextMenuElementInfo.h: Added.
        * UIProcess/API/Cocoa/WKContextMenuElementInfo.h: Added.
        * UIProcess/API/Cocoa/WKContextMenuElementInfo.mm: Added.
        (-[WKContextMenuElementInfo linkURL]):
        (-[WKContextMenuElementInfo _apiObject]):
        (-[WKContextMenuElementInfo _activatedElementInfo]):
        * UIProcess/API/Cocoa/WKContextMenuElementInfoInternal.h: Added.
        * UIProcess/API/Cocoa/WKContextMenuElementInfoPrivate.h: Added.
        * UIProcess/API/Cocoa/WKPreviewElementInfo.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:]):
        (-[_WKActivatedElementInfo isAnimatedImage]):
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * WebKit.xcodeproj/project.pbxproj:

2019-06-07  Antoine Quint  <graouts@apple.com>

        Restrict fast clicks everywhere to desktop content mode
        https://bugs.webkit.org/show_bug.cgi?id=198610
        <rdar://problem/50114230>

        Reviewed by Dean Jackson.

        We now set a new allowsFastClicksEverywhere property on the WebPageProxy when the content mode changes, set to true
        when we're in desktop browsing mode. We now check on this property to opt into the fast clicks everywhere behavior.

        This patch had been reverted once because it yielded some regressions in existing tests, notably under
        fast/events/touch/ios/content-observation. This updated patch addresses this by ensuring the gesture recognizers
        used for double-tap-to-zoom are disabled in -[WKContentViewInteraction _didStartProvisionalLoadForMainFrame]
        to ensure that two tests dispatching a tap at the same location don't yield the recognition of a double-tap
        rathern than the recognition of two single taps. 

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::allowsFastClicksEverywhere const):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:]):
        (_didStartProvisionalLoadForMainFrame):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):

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

        [iOS] Update sandboxes to address iokit-get-property errors
        https://bugs.webkit.org/show_bug.cgi?id=198494
        <rdar://problem/51322072> and <rdar://problem/50602737>

        Reviewed by Per Arne Vollan.

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

2019-06-07  Andy Estes  <aestes@apple.com>

        process-swap-on-navigation error when loading blocked website on iOS 12.2 only.
        https://bugs.webkit.org/show_bug.cgi?id=196930
        <rdar://problem/47819301>

        Reviewed by Chris Dumez.

        The ContentFilterDidBlockLoadForFrame message needs to be handled by ProvisionalPageProxy in
        order to look up the blocked frame in the correct WebProcessProxy.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrame):
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrameShared):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::contentFilterDidBlockLoadForFrame):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.h:

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

        Unreviewed. Fix api used to release wpe_fdo_egl_exported_image in GTK

        We are using the old deprecated API in AcceleratedBackingStoreWayland::displayBuffer().

        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::displayBuffer):

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

        REGRESSION(r243094): [GTK][WPE] Stale content after restoring the web view session
        https://bugs.webkit.org/show_bug.cgi?id=198561

        Reviewed by Chris Dumez.

        This is another regression of delaying the web process launch until the first load. If the session is restored
        before anything has been loaded, which is the normal way, the RestoreSession message is just ignored and the
        state is sent to the WebPage on creation via creation parameters. The WebPage considers that restoring a session
        from creation parameters only happens when re-launching a process after a crash or in case of process swap. In
        those cases, the history item is not marked as restored from session. We need to ensure the session is restored
        in the web process from the IPC message handler, by launching the initial process before the session is
        restored.

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

2019-06-06  Youenn Fablet  <youenn@apple.com>

        Use an enumeration in UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo callback
        https://bugs.webkit.org/show_bug.cgi?id=198548

        Reviewed by Eric Carlson.

        Move from an Optional<bool> to an enum having three values to ease readability.

        * UIProcess/UserMediaPermissionCheckProxy.cpp:
        (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo):
        (WebKit::UserMediaPermissionCheckProxy::complete):
        * UIProcess/UserMediaPermissionCheckProxy.h:
        (WebKit::UserMediaPermissionCheckProxy::invalidate):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::startProcessingUserMediaPermissionRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

2019-06-06  Youenn Fablet  <youenn@apple.com>

        Allow WebKitTestRunner to terminate network process after it finishes service worker file operations
        https://bugs.webkit.org/show_bug.cgi?id=198584

        Reviewed by Geoffrey Garen.

        Add IPC binding to new internal API.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::storeRegistrationsOnDiskForTesting):
        * WebProcess/Storage/WebSWClientConnection.h:

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

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

        Causing test failures in 7 content-observation tests.
        (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "Restrict fast clicks everywhere to desktop content mode"
        https://bugs.webkit.org/show_bug.cgi?id=198610
        https://trac.webkit.org/changeset/246165

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

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

        Causes test failures (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "[iOS] Update sandboxes to address iokit-get-property errors"
        https://bugs.webkit.org/show_bug.cgi?id=198494
        https://trac.webkit.org/changeset/246123

2019-06-06  Geoffrey Garen  <ggaren@apple.com>

        Crash using WKHTTPCookieStore when you use WKWebView and UIWebView in the same app
        https://bugs.webkit.org/show_bug.cgi?id=198622

        Reviewed by Chris Dumez.

        Today in a WWDC lab, I saw some crash reports from an app that mixed
        WKWebView and UIWebView. The proximate cause of the crash is that
        WKHTTPCookieStore queues a callOnMainThread function, and then
        UIWebView dequeues it on the WebThread.

        No test because this crash depends on mixing WKWebView and UIWebView and
        getting (un)lucky on the timing.

        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::cookies):
        (API::HTTPCookieStore::setCookies):
        (API::HTTPCookieStore::deleteCookie): Avoid using callOnMainThread
        becuase it is prohibited in the UI process.

2019-06-06  Antoine Quint  <graouts@apple.com>

        Remove duplicated websiteDataStoreParameters code from WebsitePoliciesData::applyToDocumentLoader()
        https://bugs.webkit.org/show_bug.cgi?id=198608

        Reviewed by Wenson Hsieh.

        Due to a rebasing error, r244218 re-introduced code that was removed in r244197. This patch removes this code for good.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):

2019-06-06  Antoine Quint  <graouts@apple.com>

        Restrict fast clicks everywhere to desktop content mode
        https://bugs.webkit.org/show_bug.cgi?id=198610
        <rdar://problem/50114230>

        Reviewed by Dean Jackson.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::allowsFastClicksEverywhere const):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):

2019-06-06  Sihui Liu  <sihui_liu@apple.com>

        NetworkHTTPSUpgradeChecker should construct and destruct database on the background thread
        https://bugs.webkit.org/show_bug.cgi?id=198496

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp:
        (WebKit::NetworkHTTPSUpgradeChecker::NetworkHTTPSUpgradeChecker):
        (WebKit::NetworkHTTPSUpgradeChecker::~NetworkHTTPSUpgradeChecker):
        * NetworkProcess/NetworkHTTPSUpgradeChecker.h:

2019-06-06  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246137.

        Broke internal builds.

        Reverted changeset:

        "Introduce new SPI for context menus on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=198590
        https://trac.webkit.org/changeset/246137

2019-06-06  Antti Koivisto  <antti@apple.com>

        Position fixed is buggy with overflow:auto scrolling inside iframes
        https://bugs.webkit.org/show_bug.cgi?id=154399
        <rdar://problem/24742251>

        Reviewed by Frederic Wang and Simon Fraser.

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

        Remove viewportChangedViaDelegatedScrolling call as we were just relying on its side effect of (partially) applying
        the scrolling tree. Instead call the new applyScrollingTreeLayerPositionsAfterCommit() unconditionally.
        It only does work if there are local deltas to apply.

        Local deltas will potentially need to be applied in non-fixed cases too and it is hard to reason about the conditions.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::applyScrollingTreeLayerPositionsAfterCommit):
        (WebKit::RemoteScrollingCoordinatorProxy::applyScrollingTreeLayerPositions): Deleted.
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:

2019-06-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Clean up use of initiatingPageID in implementation of webkit_uri_scheme_request_get_web_view()
        https://bugs.webkit.org/show_bug.cgi?id=198564

        Reviewed by Carlos Garcia Campos.

        Note that we have to use RefPtr rather than Ref here because the priv struct has to remain
        default-constructible.

        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestCreate):
        (webkit_uri_scheme_request_get_web_view):

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

        [GTK][WPE] Enable PSON
        https://bugs.webkit.org/show_bug.cgi?id=194979

        Reviewed by Žan Doberšek.

        * Shared/WebPreferencesDefaultValues.h:

2019-06-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested
        https://bugs.webkit.org/show_bug.cgi?id=198497

        Reviewed by Simon Fraser.

        Call InspectorController::willComposite() from the CA preCommit handler
        similar to the call to InspectorController::didComposite() in the CA
        postCommit handler. Ensure these calls will be once for nested commits.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::addCommitHandlers):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::firstFlushAfterCommit const):
        (WebKit::WebPage::setFirstFlushAfterCommit):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::addCommitHandlers):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

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

        Introduce new SPI for context menus on iOS
        https://bugs.webkit.org/show_bug.cgi?id=198590

        Reviewed by Tim Horton.

        Also introduce WKContextMenuElementInfo which is API.
        This is part of <rdar://problem/51003503>

        * Shared/API/APIObject.h:
        * Shared/API/Cocoa/WebKit.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APIContextMenuElementInfo.cpp: Added.
        (API::ContextMenuElementInfo::ContextMenuElementInfo):
        * UIProcess/API/APIContextMenuElementInfo.h: Added.
        * UIProcess/API/Cocoa/WKContextMenuElementInfo.h: Added.
        * UIProcess/API/Cocoa/WKContextMenuElementInfo.mm: Added.
        (-[WKContextMenuElementInfo linkURL]):
        (-[WKContextMenuElementInfo _apiObject]):
        (-[WKContextMenuElementInfo _activatedElementInfo]):
        * UIProcess/API/Cocoa/WKContextMenuElementInfoInternal.h: Added.
        * UIProcess/API/Cocoa/WKContextMenuElementInfoPrivate.h: Added.
        * UIProcess/API/Cocoa/WKPreviewElementInfo.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:]):
        (-[_WKActivatedElementInfo isAnimatedImage]):
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * WebKit.xcodeproj/project.pbxproj:

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

        -[WKWebView _suspendAllMediaPlayback] does not persist across navigation.
        https://bugs.webkit.org/show_bug.cgi?id=198585

        Reviewed by Chris Dumez.

        Add a new WebPageCreationParameters entry for mediaPlaybackIsSuspended, and pass
        that value across during WebPage creation.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendAllMediaPlayback):
        (WebKit::WebPageProxy::resumeAllMediaPlayback):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage):

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

        TestWebKitAPI.WKWebView.LocalStorageProcessSuspends is flaky on release builds
        https://bugs.webkit.org/show_bug.cgi?id=198582

        Reviewed by Youenn Fablet.

        Initialize the state of StorageManager.

        * NetworkProcess/WebStorage/StorageManager.h:

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

        Re-enable safe browsing in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=196161
        <rdar://problem/49171413>

        Reviewed by Ryosuke Niwa.

        This is mostly just reverting r241728.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences setSafeBrowsingEnabled:]):
        (-[WKPreferences isSafeBrowsingEnabled]):

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

        Progress towards resurrecting Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=197132

        Reviewed by Don Olmstead.

        * PlatformMac.cmake:

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

        Remove logSiteIdentifier from UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame
        https://bugs.webkit.org/show_bug.cgi?id=198575

        Reviewed by Eric Carlson.

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

== Rolled over to ChangeLog-2019-06-05 ==
