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

        [ContentChangeObserver] Cancel ongoing content observation when tap is failed/cancelled
        https://bugs.webkit.org/show_bug.cgi?id=199828
        <rdar://problem/53152696>

        Reviewed by Wenson Hsieh.

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

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

        Remove redundant WebsiteDataStoreConfiguration member
        https://bugs.webkit.org/show_bug.cgi?id=199820

        Reviewed by Geoffrey Garen.

        m_webStorageDirectory was only used for _WKWebsiteDataStoreConfiguration._webStorageDirectory's backing,
        which was copied over to m_localStorageDirectory of a new object in WKWebsiteDataStore's _initWithConfiguration.
        This is a baby step towards cleaning up this mess with no behavior change.  I see no reason to rename the SPI.

        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration _webStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration _setWebStorageDirectory:]):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::webStorageDirectory const): Deleted.
        (WebKit::WebsiteDataStoreConfiguration::setWebStorageDirectory): Deleted.

2019-07-15  Fujii Hironori  <Hironori.Fujii@sony.com>

        Make WKURLSchemeTask thread safe
        https://bugs.webkit.org/show_bug.cgi?id=199764

        Unreviewed build fix for WinCairo port.

        Source\WebKit\UIProcess\socket\RemoteInspectorProtocolHandler.cpp(82): error C2039: 'request': is not a member of 'WebKit::WebURLSchemeTask'

        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::request const): Restored WebURLSchemeTask::request with a threading assertion.

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

        Unreviewed, rolling out r247444.

        Caused two scrolling tests to fail on iOS Simulator

        Reverted changeset:

        "Typing into a cell in a Google Sheet lags behind by one
        character"
        https://bugs.webkit.org/show_bug.cgi?id=199587
        https://trac.webkit.org/changeset/247444

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

        outlook.live.com has odd viewport with edge gap
        https://bugs.webkit.org/show_bug.cgi?id=199822
        <rdar://problem/53029072>

        Reviewed by Wenson Hsieh.

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

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-15  Brady Eidson  <beidson@apple.com>

        Make WKURLSchemeTask thread safe.
        <rdar://problem/50471863> and https://bugs.webkit.org/show_bug.cgi?id=199764

        Reviewed by Alex Christensen.

        Punt most of the WKURLSchemeTask operations back to the main thread.
        Make accessing the NSURLRequest be thread safe with lock protection.

        * UIProcess/API/Cocoa/WKURLSchemeTask.mm:
        (getExceptionTypeFromMainRunLoop):
        (-[WKURLSchemeTaskImpl dealloc]):
        (-[WKURLSchemeTaskImpl request]):
        (-[WKURLSchemeTaskImpl _requestOnlyIfCached]):
        (-[WKURLSchemeTaskImpl didReceiveResponse:]):
        (-[WKURLSchemeTaskImpl didReceiveData:]):
        (-[WKURLSchemeTaskImpl didFinish]):
        (-[WKURLSchemeTaskImpl didFailWithError:]):
        (-[WKURLSchemeTaskImpl _didPerformRedirection:newRequest:]):

        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::WebURLSchemeTask):
        (WebKit::WebURLSchemeTask::~WebURLSchemeTask):
        (WebKit::WebURLSchemeTask::didPerformRedirection):
        (WebKit::WebURLSchemeTask::didReceiveResponse):
        (WebKit::WebURLSchemeTask::didReceiveData):
        (WebKit::WebURLSchemeTask::didComplete):
        (WebKit::WebURLSchemeTask::pageDestroyed):
        (WebKit::WebURLSchemeTask::stop):
        (WebKit::WebURLSchemeTask::nsRequest const):

        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::identifier const):
        (WebKit::WebURLSchemeTask::pageID const):
        (WebKit::WebURLSchemeTask::process):
        (WebKit::WebURLSchemeTask::process const): Deleted.
        (WebKit::WebURLSchemeTask::request const): Deleted.

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

        Followup to r247439
        https://bugs.webkit.org/show_bug.cgi?id=199788
        <rdar://problem/52142570>

        Reviewed by Tim Horton.

        As it turns out, sending modern async completion-handler based IPC messages while processing incoming sync
        messages results in a debug assertion. Instead of migrating FontAtSelection to the new async IPC mechanism,
        restore the older CallbackID-based async IPC.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::fontAtSelection):
        (WebKit::WebPageProxy::fontAtSelectionCallback):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::fontAtSelection):

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

        [WebGL] Remove software rendering and simplify context creation on macOS
        https://bugs.webkit.org/show_bug.cgi?id=199789

        Reviewed by Sam Weinig.

        Remove force software WebGL setting.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetForceSoftwareWebGLRendering): Deleted.
        (WKPreferencesGetForceSoftwareWebGLRendering): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

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

        Typing into a cell in a Google Sheet lags behind by one character
        https://bugs.webkit.org/show_bug.cgi?id=199587
        <rdar://problem/51616845>

        Reviewed by Brent Fulgham.

        Remove all timers from the holding tank on text insertion or deletion (represented as an
        editing command). Timers that were in the holding tank never stopped ticking and will now
        be able to execute their action.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::executeEditingCommand):
        (WebKit::WebPage::insertTextAsync):
        (WebKit::WebPage::setCompositionAsync):
        (WebKit::WebPage::confirmCompositionAsync):
        Call platformWillPerformEditingCommand().

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::platformWillPerformEditingCommand): Added.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformWillPerformEditingCommand): Remove all the timers from the holding
        tank if we have a holding tank.

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

        [macOS 10.15] Cannot unbold selected text when the system font is used
        https://bugs.webkit.org/show_bug.cgi?id=199788
        <rdar://problem/52142570>

        Reviewed by Tim Horton.

        In macOS 10.15, +[NSFont fontWithName:size:] no longer recognizes system fonts (of name
        ".SFNS-*") and returns nil instead. However, our existing implementation of
        WebPageProxy::fontAtSelection works by grabbing the font name in the web process, and
        sending it over to the UI process, where it is mapped to an NSFont. As a result, this always
        results in a nil font in macOS 10.15, which causes us to never update NSFontManager's
        selected font. In turn, this means that once selected text is bolded, it can't be unbolded
        via NSFontManager, since NSFontManager thinks that the text is still not bold.

        To fix this, we simply encode and send a platform FontInfo instead of sending the font name.
        This allows the UI process to reconstruct NSFonts from font attribute dictionaries instead,
        and update the font manager.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateFontManagerIfNeeded):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::fontAtSelection):

        Refactor this to send a FontInfo (containing a font attribute dictionary) instead of a font
        name.

        (WebKit::WebPageProxy::fontAtSelectionCallback): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Change FontAtSelection to use sendWithAsyncReply instead of sending a callback ID. This also
        allows us to remove FontAtSelectionCallback.

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

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

        [iOS] SOAuthorizationSession should tell AppSSO whether the UIClient is capable of showing the extension UI
        https://bugs.webkit.org/show_bug.cgi?id=199790
        <rdar://problem/52790112>

        Reviewed by Brent Fulgham.

        On iOS, WebKit relies on a SPI -[WKUIDelegatePrivate _presentingViewControllerForWebView:] to present the
        extension UI. However, third party clients often don't implement this SPI. Therefore, WebKit will not be
        able to present the extension UI for them.

        To be able to show the extension UI for third party WebKit clients, WebKit should unset SOAuthorization.enableEmbeddedAuthorizationViewController
        whenever clients don't implement the above SPI such that AppSSO could show the UI in their UI process.

        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::start):

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

        REGRESSION: Chase app crashes immediately after authentication
        https://bugs.webkit.org/show_bug.cgi?id=199798
        <rdar://problem/53106179>

        Reviewed by Alex Christensen.

        After r247411, we sometimes try to consult `_page` from WKWebView, before WKWebView's `_page` has been set. This
        happens under a check for -[WKWebView _isEditable], from within -[WKContentView setupInteraction], which happens
        if the host app is not linked on the iOS 12 SDK or earlier. To mitigate this, simply add a null check in
        -_isEditable.

        There's currently no great way to test this, since we don't have a mechanism for simulating linked-on checks.

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

2019-07-13  Andres Gonzalez  <andresg_22@apple.com>

        Add accessibility support to WKDataListSuggestionsView.
        https://bugs.webkit.org/show_bug.cgi?id=199772
        <rdar://problem/47095851>

        Reviewed by Chris Fleizach.

        Added accessibility announcement notifications to show, dismiss and selection change for the datalist suggestions view.
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (-[WKDataListSuggestionsView notifyAccessibilityClients:]):
        (-[WKDataListSuggestionsView moveSelectionByDirection:]):
        (-[WKDataListSuggestionsView invalidate]):
        (-[WKDataListSuggestionsView showSuggestionsDropdown:]):

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

        Cannot bring up custom media controls at all on v.youku.com
        https://bugs.webkit.org/show_bug.cgi?id=199699
        <rdar://problem/51835327>

        Reviewed by Simon Fraser.

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hitTest const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleContextMenuEvent):
        (WebKit::WebPage::characterIndexForPointAsync):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleStylusSingleTapAtPoint):
        (WebKit::textInteractionPositionInformation):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):

2019-07-12  Andy Estes  <aestes@apple.com>

        [Cocoa] -loadFileURL:allowingReadAccessToURL: should fully resolve file URLs
        https://bugs.webkit.org/show_bug.cgi?id=199768
        <rdar://problem/52002206>

        Reviewed by Geoffrey Garen.

        -loadFileURL:allowingReadAccessToURL: used -_web_originalDataAsWTFString from WKNSURLExtras
        to convert the file and read access NSURLs to strings, which under the hood calls
        CFURLGetBytes(). CFURLGetBytes() gets the URL's string without considering the base URL, so
        if the client creates a URL like this:

            NSURL *url = [NSURL fileURLWithPath:@"tmpfile.txt" relativeToURL:[NSURL fileURLWithPath:@"/tmp"]]

        ... then -_web_originalDataAsWTFString will merely return the string "tmpfile.txt". When
        that is later converted back to a URL in WebPageProxy::loadFile(), we lose track of the base
        component and refuse to load something that no longer looks like a file: URL.

        Fixed this by fully resolving the URLs passed to -loadFileURL:allowingReadAccessToURL: when
        converting to strings by using -[NSURL absoluteString] instead of -_web_originalDataAsWTFString.

        * Shared/Cocoa/WKNSURLExtras.mm:
        (-[NSURL _web_originalDataAsWTFString]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadFileURL:allowingReadAccessToURL:]):

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

        Turn off two finger gestures for editable non-scaled content
        https://bugs.webkit.org/show_bug.cgi?id=199739
        <rdar://problem/52107190>

        Reviewed by Tim Horton.

        This gesture is blocking a selection gesture. Turn it off as it is not
        even being used in editable content.

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

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

        SOAuthorizationSession::presentViewController should check WebPageProxy::isClosed()
        https://bugs.webkit.org/show_bug.cgi?id=199755
        <rdar://problem/52323585>

        Reviewed by Chris Dumez.

        WebPageProxy::pageClient() is not guaranteed to be non null all the time. Therefore, we should check
        WebPageProxy::isClosed() before using it.

        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::presentViewController):

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

        Regression(macOS Catalina): Cannot quick look html documents in Mail
        https://bugs.webkit.org/show_bug.cgi?id=199754
        <rdar://problem/51304961>

        Reviewed by Geoff Garen.

        If the client asks us to load a file URL but does not provide a resource path, WebKit
        would fallback to issuing a sandbox extension for /. This no longer works on mac OS
        Catalina and it would thus fail to load the file.

        To address the issue, if the attempt to create a sandbox extension for / fails, we now
        fall back to issuing one for the file's baseURL (path of containing folder).

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

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