2020-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Keyboard input is severely delayed after switching away from unresponsive tab
        https://bugs.webkit.org/show_bug.cgi?id=206242
        <rdar://problem/57132891>

        Reviewed by Tim Horton.

        UIKit delivers key events to WKWebView using asynchronous SPI (-handleKeyWebEvent:withCompletionHandler:). The
        completion handler is invoked when the web page has processed the event, and determines whether to proceed with
        default behavior via the `BOOL handled` argument. Using UIKeyboardImpl's UIKeyboardTaskQueue, UIKit appends
        subsequent key events to a queue, to be processed by the current first responder after the current key event
        has been handled.

        In the scenario where the web page is completely unresponsive, this means key events that come after an event
        that has been dispatched to the unresponsive page will be stuck in the task queue; this manifests in behaviors
        similar to the one in this bug:

        - Using a hardware keyboard, press any key in an unresponsive page in Safari.
        - Press CMD+T (to create a new tab and focus the unified field) or CMT+L (to just focus the unified field).
        - Try to type in the unified field.

        The result is that no characters are inserted in the unified field, because the hardware key events are stuck in
        UIKeyboardTaskQueue waiting for the unresponsive page to finish handling the current key event. To fix this, we
        introduce a mechanism for invoking the key event handler on WKContentView before the web page has actually
        finished processing the event, but only in the case where the web view has resigned first responder (and
        therefore won't receive subsequent key events anyways).

        Tests:  KeyboardInputTests.ResigningFirstResponderCancelsKeyEvents
                KeyboardInputTests.WaitForKeyEventHandlerInFirstResponder

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::hasQueuedKeyEvent const):
        (WebKit::WebPageProxy::firstQueuedKeyEvent const):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponderForWebView]):

        After the content view has resigned first responder with a pending key event handler (and if it did not
        immediately become first responder again in the same runloop), then invoke the key event handler early, passing
        in `YES` for `handled` to prevent any default actions such as text insertion from being dispatched to the view.

2020-01-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r254533

        * UIProcess/WebAuthentication/fido/FidoAuthenticator.cpp:

2020-01-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement SPI to tell UI clients to select assertion responses
        https://bugs.webkit.org/show_bug.cgi?id=206112
        <rdar://problem/58495733>

        Reviewed by Alex Christensen.

        Covered by API tests.

        This patch adds a new delegate method in _WKWebAuthenticationPanelDelegate to tell UI clients to
        select an assertion response when multiple are returned from an authenticator. Here is the SPI:
        @protocol _WKWebAuthenticationPanelDelegate <NSObject>
        @optional
        ...
        - (void)panel:(_WKWebAuthenticationPanel *)panel selectAssertionResponse:(NSArray < _WKWebAuthenticationAssertionResponse *> *)responses completionHandler:(void (^)(_WKWebAuthenticationAssertionResponse *))completionHandler;
        ...
        @end

        A new interface is introduced to represent an authenticator assertion response:
        @interface _WKWebAuthenticationAssertionResponse : NSObject
        @property (nonatomic, readonly, copy) NSString *name;
        @property (nonatomic, readonly, copy) NSString *displayName;
        @property (nonatomic, readonly, copy) NSData *userHandle;
        @end
        Only members that can assist users to make a decision are exposed to UI clients.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APIWebAuthenticationAssertionResponse.cpp: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h.
        (API::WebAuthenticationAssertionResponse::create):
        (API::WebAuthenticationAssertionResponse::WebAuthenticationAssertionResponse):
        * UIProcess/API/APIWebAuthenticationAssertionResponse.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h.
        * UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h.
        * UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.mm: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h.
        (-[_WKWebAuthenticationAssertionResponse dealloc]):
        (-[_WKWebAuthenticationAssertionResponse name]):
        (-[_WKWebAuthenticationAssertionResponse displayName]):
        (-[_WKWebAuthenticationAssertionResponse userHandle]):
        (-[_WKWebAuthenticationAssertionResponse _apiObject]):
        * UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponseInternal.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h.
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h:
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.mm:
        (WebKit::WebAuthenticationPanelClient::WebAuthenticationPanelClient):
        (WebKit::WebAuthenticationPanelClient::selectAssertionResponses const):
        * WebKit.xcodeproj/project.pbxproj:

2020-01-14  Ross Kirsling  <ross.kirsling@sony.com>

        WebPasteboardProxyWPE should be WebPasteboardProxyLibWPE
        https://bugs.webkit.org/show_bug.cgi?id=206243

        Reviewed by Adrian Perez de Castro.

        WebPasteboardProxy.h already has USE(LIBWPE) so we basically just need to move the file.

        * SourcesWPE.txt:
        * UIProcess/WebPasteboardProxy.cpp:
        * UIProcess/libwpe/WebPasteboardProxyLibWPE.cpp: Renamed from Source/WebKit/UIProcess/wpe/WebPasteboardProxyWPE.cpp.

2020-01-14  Eric Carlson  <eric.carlson@apple.com>

        Nake MediaPlayerPrivateRemoteProxy a message receiver
        https://bugs.webkit.org/show_bug.cgi?id=206237
        <rdar://problem/58569057>

        Reviewed by Youenn Fablet.

        No new tests, no functional change.

        Make MediaPlayerPrivateRemoteProxy a message receiver so we don't need a trampoline
        for every method in the MediaPlayerPrivateRemoteManagerProxy.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::didReceivePlayerMessage):
        (WebKit::RemoteMediaPlayerManagerProxy::prepareForPlayback): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::load): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::cancelLoad): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::prepareToPlay): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::play): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::pause): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::seek): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::seekWithTolerance): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setVolume): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setMuted): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setPreload): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setPrivateBrowsingMode): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setPreservesPitch): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::prepareForRendering): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setSize): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setVisible): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setShouldMaintainAspectRatio): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setVideoFullscreenFrame): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setVideoFullscreenGravity): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::acceleratedRenderingStateChanged): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setShouldDisableSleep): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::setRate): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::audioTrackSetEnabled): Deleted.
        (WebKit::RemoteMediaPlayerManagerProxy::videoTrackSetSelected): Deleted.
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
        (WebKit::AudioTrackPrivateRemote::setEnabled):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::cancelLoad):
        (WebKit::MediaPlayerPrivateRemote::prepareToPlay):
        (WebKit::MediaPlayerPrivateRemote::play):
        (WebKit::MediaPlayerPrivateRemote::pause):
        (WebKit::MediaPlayerPrivateRemote::setPreservesPitch):
        (WebKit::MediaPlayerPrivateRemote::setVolumeDouble):
        (WebKit::MediaPlayerPrivateRemote::setMuted):
        (WebKit::MediaPlayerPrivateRemote::setPreload):
        (WebKit::MediaPlayerPrivateRemote::setPrivateBrowsingMode):
        (WebKit::MediaPlayerPrivateRemote::seek):
        (WebKit::MediaPlayerPrivateRemote::seekWithTolerance):
        (WebKit::MediaPlayerPrivateRemote::prepareForRendering):
        (WebKit::MediaPlayerPrivateRemote::setSize):
        (WebKit::MediaPlayerPrivateRemote::setVisible):
        (WebKit::MediaPlayerPrivateRemote::setShouldMaintainAspectRatio):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenGravity):
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):
        (WebKit::MediaPlayerPrivateRemote::setShouldDisableSleep):
        * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
        (WebKit::VideoTrackPrivateRemote::setSelected):

2020-01-14  Don Olmstead  <don.olmstead@sony.com>

        Share TextChecker stub for ports without text checking
        https://bugs.webkit.org/show_bug.cgi?id=205964

        Reviewed by Ross Kirsling.

        No new tests. No change in behavior.

        The Windows and WPE ports have the same stub for text checking. Combine those
        two for non-Cocoa and non-GTK ports.

        * PlatformFTW.cmake:
        * PlatformWin.cmake:
        * Sources.txt:
        * SourcesWPE.txt:
        * UIProcess/TextChecker.cpp: Renamed from Source/WebKit/UIProcess/wpe/TextCheckerWPE.cpp.
        (WebKit::checkerState):
        (WebKit::TextChecker::state):
        (WebKit::TextChecker::checkTextOfParagraph):
        * UIProcess/win/TextCheckerWin.cpp: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2020-01-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r254505.

        Breaks watchOS/tvOS/Catalyst builds.

        Reverted changeset:

        "Add support for MediaStream audio track rendering in
        GPUProcess"
        https://bugs.webkit.org/show_bug.cgi?id=206175
        https://trac.webkit.org/changeset/254505

2020-01-14  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Suppress compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=206235

        Reviewed by Youenn Fablet.

        Use PRIu64 formatter for uint64_t instead of %llu.

        No functional changes.

        * UIProcess/WebPageProxy.cpp:

2020-01-13  Darin Adler  <darin@apple.com>

        Use even more "shortest form" formatting, and less "fixed precision" and "fixed width"
        https://bugs.webkit.org/show_bug.cgi?id=198918

        Reviewed by Sam Weinig.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::dumpContentsToFile): Use shortest instead of fixed.
        Also use makeString instead of StringBuilder.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::asJSON const): Use shortest instead of fixed.
        Also use multiple-argument append on StringBuilder to make the function shorter
        and easier to read.
        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::loggingString const): Ditto.

        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::startWatchdog):
        Use shortest instead of fixed.

2020-01-14  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GLib] Remove unused private variable
        https://bugs.webkit.org/show_bug.cgi?id=206232

        Reviewed by Carlos Garcia Campos.

        Remove m_context which is not used.

        No functional changes.

        * UIProcess/API/glib/WebKitProtocolHandler.cpp:
        (WebKit::WebKitProtocolHandler::WebKitProtocolHandler):
        * UIProcess/API/glib/WebKitProtocolHandler.h:

2020-01-14  youenn fablet  <youenn@apple.com>

        Add support for MediaStream audio track rendering in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=206175

        Reviewed by Eric Carlson.

        Implement an AudioMediaStreamTrackRenderer at WebKit level by creating a remote renderer in GPUProcess and sending IPC to pass
        audio data as well as orders (start/stop/setMuted).

        Implement the remote renderer using WebCore audio track renderer.

        Enable WebKit remote renderer F GPU process for media is enabled.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::audioTrackRendererManager):
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp: Added.
        (WebKit::nextLogIdentifier):
        (WebKit::nullLogger):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::RemoteAudioMediaStreamTrackRenderer):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::~RemoteAudioMediaStreamTrackRenderer):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::storage):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::start):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::stop):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::clear):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::setMuted):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::setVolume):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::audioSamplesStorageChanged):
        (WebKit::RemoteAudioMediaStreamTrackRenderer::audioSamplesAvailable):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h: Added.
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in: Added.
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp: Added.
        (WebKit::RemoteAudioMediaStreamTrackRendererManager::didReceiveRendererMessage):
        (WebKit::RemoteAudioMediaStreamTrackRendererManager::createRenderer):
        (WebKit::RemoteAudioMediaStreamTrackRendererManager::releaseRenderer):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h: Added.
        (WebKit::RemoteAudioMediaStreamTrackRendererManager::didReceiveMessageFromWebProcess):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.messages.in: Added.
        * Scripts/webkit/messages.py:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::updatePreferences):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp: Added.
        (WebKit::AudioMediaStreamTrackRenderer::create):
        (WebKit::AudioMediaStreamTrackRenderer::AudioMediaStreamTrackRenderer):
        (WebKit::AudioMediaStreamTrackRenderer::~AudioMediaStreamTrackRenderer):
        (WebKit::AudioMediaStreamTrackRenderer::start):
        (WebKit::AudioMediaStreamTrackRenderer::stop):
        (WebKit::AudioMediaStreamTrackRenderer::clear):
        (WebKit::AudioMediaStreamTrackRenderer::setMuted):
        (WebKit::AudioMediaStreamTrackRenderer::setVolume):
        (WebKit::AudioMediaStreamTrackRenderer::pushSamples):
        (WebKit::AudioMediaStreamTrackRenderer::storageChanged):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.h: Added.
        (WebKit::AudioMediaStreamTrackRenderer::identifier const):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererIdentifier.h: Added.

2020-01-14  youenn fablet  <youenn@apple.com>

        CacheStorage::Engine::clearCachesForOriginFromDisk ASSERT is buggy
        https://bugs.webkit.org/show_bug.cgi?id=206057
        <rdar://problem/57762994>

        Reviewed by John Wilander.

        The ASSERT is only valid if the engine is initialized.
        It is not needed to initialize it if the plan is to remove all disk files.
        Instead, update ASSERT to check that either m_salt is not there or the salt is there and the path is as expected.

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

2020-01-14  Eric Carlson  <eric.carlson@apple.com>

        Expose video tracks for media files in the GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=206209
        <rdar://problem/58553026>

        Reviewed by Jer Noble.

        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
        (WebKit::RemoteAudioTrackProxy::configuration):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::videoTrackSetSelected):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddVideoTrack):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveVideoTrack):
        (WebKit::RemoteMediaPlayerProxy::videoTrackSetSelected):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteVideoTrackProxy.cpp: Copied from Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp.
        (WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
        (WebKit::RemoteVideoTrackProxy::configuration):
        (WebKit::RemoteVideoTrackProxy::configurationChanged):
        (WebKit::RemoteVideoTrackProxy::willRemove):
        (WebKit::RemoteVideoTrackProxy::selectedChanged):
        (WebKit::RemoteVideoTrackProxy::idChanged):
        (WebKit::RemoteVideoTrackProxy::labelChanged):
        (WebKit::RemoteVideoTrackProxy::languageChanged):
        * GPUProcess/media/RemoteVideoTrackProxy.h: Added.
        * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
        (WebKit::TrackPrivateRemoteConfiguration::encode const):
        (WebKit::TrackPrivateRemoteConfiguration::decode):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::clearCachesForOriginFromDirectories):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
        (WebKit::AudioTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::addRemoteVideoTrack):
        (WebKit::RemoteMediaPlayerManager::removeRemoteVideoTrack):
        (WebKit::RemoteMediaPlayerManager::remoteVideoTrackConfigurationChanged):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
        * WebProcess/GPU/media/RemoteVideoTrackProxy.cpp: Copied from Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp.
        (WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
        (WebKit::RemoteVideoTrackProxy::configuration):
        (WebKit::RemoteVideoTrackProxy::configurationChanged):
        (WebKit::RemoteVideoTrackProxy::willRemove):
        (WebKit::RemoteVideoTrackProxy::selectedChanged):
        (WebKit::RemoteVideoTrackProxy::idChanged):
        (WebKit::RemoteVideoTrackProxy::labelChanged):
        (WebKit::RemoteVideoTrackProxy::languageChanged):
        * WebProcess/GPU/media/RemoteVideoTrackProxy.h: Added.
        * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp: Copied from Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp.
        (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
        (WebKit::VideoTrackPrivateRemote::setSelected):
        (WebKit::VideoTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/VideoTrackPrivateRemote.h: Added.
        (WebKit::VideoTrackPrivateRemote::create):

2020-01-13  Don Olmstead  <don.olmstead@sony.com>

        [WebAuthn] Support CTAP Client Pin
        https://bugs.webkit.org/show_bug.cgi?id=191516
        <rdar://problem/56558558>

        Unreviewed build fix after r254439.

        CryptoKeyEC was forward declared into WebCore but the namespace was not used in
        continueGetPinTokenAfterRequestPin. Looks like something in the unified sources
        was covering this issue.

        * UIProcess/WebAuthentication/fido/CtapAuthenticator.h:

2020-01-13  Ross Kirsling  <ross.kirsling@sony.com>

        Expose Phase on all WebWheelEvent implementations
        https://bugs.webkit.org/show_bug.cgi?id=206195

        Reviewed by Don Olmstead.

        No change to behavior; just unhide what needn't be hidden.

        * Shared/WebEvent.h:
        (WebKit::WebWheelEvent::directionInvertedFromDevice const):
        (WebKit::WebWheelEvent::momentumPhase const):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):

2020-01-13  Don Olmstead  <don.olmstead@sony.com>

        Share WebPreferences stub for ports without an implementation
        https://bugs.webkit.org/show_bug.cgi?id=206186

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        Moved the platform agnostic stubs that were common in the GTK, WPE and Windows ports
        into WebPreferences.cpp. Only Cocoa ports are implementing the platform specific parts
        of WebPreferences.

        Also moving WebPreferencesMac.mm to WebPreferencesCocoa.mm. There were no platform guards
        for iOS family code and there was no iOS specific implementation.

        * PlatformFTW.cmake:
        * PlatformWin.cmake:
        * SourcesCocoa.txt:
        * SourcesWPE.txt:
        * UIProcess/Cocoa/WebPreferencesCocoa.mm: Renamed from Source/WebKit/UIProcess/mac/WebPreferencesMac.mm.
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey):
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit::WebPreferences::platformDeleteKey):
        (WebKit::WebPreferences::platformGetStringUserValueForKey):
        (WebKit::WebPreferences::platformGetBoolUserValueForKey):
        (WebKit::WebPreferences::platformGetUInt32UserValueForKey):
        (WebKit::WebPreferences::platformGetDoubleUserValueForKey):
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformUpdateStringValueForKey): Deleted.
        (WebKit::WebPreferences::platformUpdateBoolValueForKey): Deleted.
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey): Deleted.
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey): Deleted.
        (WebKit::WebPreferences::platformUpdateFloatValueForKey): Deleted.
        (WebKit::WebPreferences::platformDeleteKey): Deleted.
        (WebKit::WebPreferences::platformGetStringUserValueForKey): Deleted.
        (WebKit::WebPreferences::platformGetBoolUserValueForKey): Deleted.
        (WebKit::WebPreferences::platformGetUInt32UserValueForKey): Deleted.
        (WebKit::WebPreferences::platformGetDoubleUserValueForKey): Deleted.
        * UIProcess/win/WebPreferencesWin.cpp: Removed.
        * UIProcess/wpe/WebPreferencesWPE.cpp: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2020-01-13  Keith Rollin  <krollin@apple.com>

        Reformat WebProcessPool logging
        https://bugs.webkit.org/show_bug.cgi?id=205882
        <rdar://problem/58384349>

        Reviewed by Brent Fulgham.

        Update the format used by WebProcessPool in its RELEASE_LOG logging.
        Use the format used by WebPageProxy and NetworkResourceLoader, which
        is generally of the form:

            <object-address> - [<values that help thread together operations>] <class>::<method>: <message and other useful values>

        So, for example:

            Using prewarmed process 0

        becomes:

            0x7f81e8804008 - WebProcessPool::processForRegistrableDomain: Using prewarmed process (process=0x1471c2a00, PID=64197)

        No new tests - no added or changed functionality.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::applicationIsAboutToSuspend):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::prewarmProcess):
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
        (WebKit::WebProcessPool::handleMemoryPressureWarning):
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::WebProcessPool::setWebProcessHasUploads):
        (WebKit::WebProcessPool::clearWebProcessHasUploads):
        (WebKit::WebProcessPool::setWebProcessIsPlayingAudibleMedia):
        (WebKit::WebProcessPool::clearWebProcessIsPlayingAudibleMedia):
        (WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess):

2020-01-13  Kate Cheney  <katherine_cheney@apple.com>

        _WKResourceLoadStatisticsFirstParty should be forward declared not imported in _WKResourceLoadStatisticsThirdParty
        https://bugs.webkit.org/show_bug.cgi?id=206183
        <rdar://problem/58535245>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.mm:
        The additional import statement here was unnecessary because
        this file imports _WKResourceLoadStatisticsThirdPartyInternal.h
        which forward declares the _WKResourceLoadStatisticsFirstParty class.

2020-01-13  Kate Cheney  <katherine_cheney@apple.com>

        Unreviewed followup fix to: https://bugs.webkit.org/show_bug.cgi?id=205288.
        This flag should be off-by-default.

        * Shared/WebPreferences.yaml:

2020-01-13  Alex Christensen  <achristensen@webkit.org>

        Propogate UIEdgeInsets from WKWebView to WKSafeBrowsingWarning on iOS
        https://bugs.webkit.org/show_bug.cgi?id=206201
        <rdar://problem/57135847>

        Reviewed by Tim Horton.

        Manually verified this fixes the radar.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _computedObscuredInsetForSafeBrowsingWarning]):
        (-[WKWebView safeAreaInsetsDidChange]):
        (-[WKWebView _setObscuredInsets:]):

2020-01-13  Eric Carlson  <eric.carlson@apple.com>

        Expose audio tracks for media files in the GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=206152
        <rdar://problem/58513227>

        Reviewed by youenn fablet.

        * GPUProcess/media/RemoteAudioTrackProxy.cpp: Added.
        (WebKit::RemoteAudioTrackProxy::RemoteAudioTrackProxy):
        (WebKit::RemoteAudioTrackProxy::configuration):
        (WebKit::RemoteAudioTrackProxy::configurationChanged):
        (WebKit::RemoteAudioTrackProxy::willRemove):
        (WebKit::RemoteAudioTrackProxy::enabledChanged):
        (WebKit::RemoteAudioTrackProxy::idChanged):
        (WebKit::RemoteAudioTrackProxy::labelChanged):
        (WebKit::RemoteAudioTrackProxy::languageChanged):
        * GPUProcess/media/RemoteAudioTrackProxy.h: Added.
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::setRate):
        (WebKit::RemoteMediaPlayerManagerProxy::audioTrackSetEnabled):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddAudioTrack):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveAudioTrack):
        (WebKit::RemoteMediaPlayerProxy::audioTrackSetEnabled):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/TrackPrivateRemoteConfiguration.h: Added.
        (WebKit::TrackPrivateRemoteConfiguration::encode const):
        (WebKit::TrackPrivateRemoteConfiguration::decode):
        * GPUProcess/media/TrackPrivateRemoteIdentifier.h: Added.
        * Scripts/webkit/messages.py:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp: Added.
        (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
        (WebKit::AudioTrackPrivateRemote::setEnabled):
        (WebKit::AudioTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/AudioTrackPrivateRemote.h: Added.
        (WebKit::AudioTrackPrivateRemote::create):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::timeChanged):
        (WebKit::RemoteMediaPlayerManager::durationChanged):
        (WebKit::RemoteMediaPlayerManager::engineFailedToLoad):
        (WebKit::RemoteMediaPlayerManager::characteristicChanged):
        (WebKit::RemoteMediaPlayerManager::sizeChanged):
        (WebKit::RemoteMediaPlayerManager::addRemoteAudioTrack):
        (WebKit::RemoteMediaPlayerManager::removeRemoteAudioTrack):
        (WebKit::RemoteMediaPlayerManager::remoteAudioTrackConfigurationChanged):
        (WebKit::RemoteMediaPlayerManager::updateCachedState):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:

2020-01-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support CTAP Client Pin
        https://bugs.webkit.org/show_bug.cgi?id=191516
        <rdar://problem/56558558>

        Reviewed by Brent Fulgham.

        This patch implements authenticatorClientPIN from the spec:
        https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html#authenticatorClientPIN
        Specifically, it implements section 5.5.1, 5.5.3, 5.5.4, 5.5.7, and 5.5.8.

        Here is the flow how makeCredential/getAssertion works with a PIN in our implementation:
        1. Determine if the connected authenticator has a PIN;
        2. If yes, send the makeCredential/getAssertion request to the authenticator with an empty pinAuth
        such that the authenticator will wink for user gestures. This step intends to confirm the authenticator
        is the one the user wants to use. Otherwise, we don't know which authenticator to send the PIN
        if multiple are connected;
        3. Once the user confirms the authetnicator, it will return either CTAP2_ERR_PIN_INVALID or
        CTAP2_ERR_PIN_AUTH_INVALID. Some authenticators return CTAP2_ERR_PIN_AUTH_INVALID even though
        it is not suggested by the spec;
        4. Get retries from the authenticator;
        5. Get key agreement from the authenticator;
        6. Ask the UI client for the PIN and at the meantime inform it the retries;
        7. Get pin token from the authenticator;
        8. Resend the makeCredential/getAssertion request with the desired pinAuth.

        Besides implementating the above flow, this patch also fixes some bugs within the PIN commands encoder:
        1. pinAuth/pinProtocol are wrongly encoded for makeCredential/getAssertion;
        2. AES CBC should be called without any padding. Therefore, CryptoAlgorithmAES_CBC adds a no padding mode;
        3. The sharedSecret is the SHA256 digest of the ECDH key agreement instead of the raw key agreement.

        * UIProcess/API/APIWebAuthenticationPanelClient.h:
        (API::WebAuthenticationPanelClient::requestPin const):
        * UIProcess/WebAuthentication/Authenticator.h:
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::requestPin):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h:
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.mm:
        (WebKit::WebAuthenticationPanelClient::WebAuthenticationPanelClient):
        (WebKit::WebAuthenticationPanelClient::requestPin const):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::feedReports):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::continueMakeCredentialAfterResponseReceived):
        (WebKit::CtapAuthenticator::getAssertion):
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::getRetries):
        (WebKit::CtapAuthenticator::continueGetKeyAgreementAfterGetRetries):
        (WebKit::CtapAuthenticator::continueRequestPinAfterGetKeyAgreement):
        (WebKit::CtapAuthenticator::continueGetPinTokenAfterRequestPin):
        (WebKit::CtapAuthenticator::continueRequestAfterGetPinToken):
        (WebKit::CtapAuthenticator::continueMakeCredentialAfterResponseReceived const): Deleted.
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.h:

2020-01-13  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove 'com.apple.diagnosticd' from WebContent process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=206114
        <rdar://problem/58496791>

        Reviewed by Per Arne Vollan.

        In Bug 205292 we began dynamically adding a sandbox extension for 'com.apple.diagnosticd' when needed.
        We should remove the blanket permission from the sandbox.

        Test: fast/sandbox/ios/sandbox-mach-lookup.html

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

2020-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macCatalyst] UI process crashes on launch after r254101
        https://bugs.webkit.org/show_bug.cgi?id=206156
        <rdar://problem/58514942>

        Reviewed by Brent Fulgham.

        Fixes the crash by not soft-linking BackBoardServices in an attempt to invoke BKSDisplayBrightnessGetCurrent on
        macCatalyst. Prior to r254101, this was only defined on iOS and not watchOS or tvOS; after this change, it
        should be defined only on iOS, watchOS and tvOS.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2020-01-13  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Enable LFC integration
        https://bugs.webkit.org/show_bug.cgi?id=206128

        Reviewed by Zalan Bujtas.

        * Shared/WebPreferences.yaml:

2020-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: pressed virtual keys not correctly handled in action sequences
        https://bugs.webkit.org/show_bug.cgi?id=205997

        Reviewed by Brian Burg.

        When modifiers are present we need to translate the keys that might be affected by the modifiers.

        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::doKeyStrokeEvent):

2020-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK][WPE] Add missing autocleanup definition for WebKitInputMethodContext

        I forgot to add it in r253749.

        * UIProcess/API/gtk/WebKitAutocleanups.h:
        * UIProcess/API/wpe/WebKitAutocleanups.h:

2020-01-12  Tim Horton  <timothy_horton@apple.com>

        Remove CorePDF linkage in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=206103
        <rdar://problem/58490563>

        Reviewed by Wenson Hsieh.

        * Configurations/WebKit.xcconfig:

2020-01-11  Alex Christensen  <achristensen@webkit.org>

        Expose frame information on _WKResourceLoadInfo
        https://bugs.webkit.org/show_bug.cgi?id=206104
        <rdar://problem/57132290>

        Reviewed by Dean Jackson.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::resourceLoadInfo):
        * Shared/API/Cocoa/_WKFrameHandle.h:
        * Shared/API/Cocoa/_WKFrameHandle.mm:
        (-[_WKFrameHandle frameID]):
        (-[_WKFrameHandle initWithCoder:]):
        (-[_WKFrameHandle encodeWithCoder:]):
        (-[_WKFrameHandle _frameID]): Deleted.
        * Shared/API/Cocoa/_WKFrameHandleInternal.h:
        * Shared/ResourceLoadInfo.h:
        (WebKit::ResourceLoadInfo::encode const):
        (WebKit::ResourceLoadInfo::decode):
        * UIProcess/API/APIResourceLoadInfo.h:
        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector showMainResourceForFrame:]):
        * UIProcess/API/Cocoa/_WKResourceLoadInfo.h:
        * UIProcess/API/Cocoa/_WKResourceLoadInfo.mm:
        (-[_WKResourceLoadInfo frame]):
        (-[_WKResourceLoadInfo parentFrame]):
        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView _canChangeFrameLayout:]):
        (-[WKWebView _printOperationWithPrintInfo:forFrame:]):
        * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm:
        (-[WKReloadFrameErrorRecoveryAttempter attemptRecovery]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::evaluateJavaScriptCallback):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (+[WKWebProcessPlugInFrame lookUpFrameFromHandle:]):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::addParametersFromFrame):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):

2020-01-11  Kate Cheney  <katherine_cheney@apple.com>

        Add correct grandfathering functionality to the ITP database backend
        https://bugs.webkit.org/show_bug.cgi?id=205844
        <rdar://problem/58360450>

        Reviewed by John Wilander.

        This patch adds functionality for grandfathering statistics upon
        creation of a new ITP database file. The memory store relies on
        the presence of the ITP plist to indicate whether the data should
        be grandfathered. Since the database does not use a plist, this patch
        adds a boolean variable to track whether the database file previously
        existed or not to indicate when to grandfather.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::openITPDatabase):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        The boolean variable m_isNewResourceLoadStatisticDatabaseFile is set 
        to true if the database file did not previously exist, indicating ITP
        is being used for the first time and data should be grandfathered.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::populateMemoryStoreFromDisk):
        This is where the grandfathering happens. The call to logTestingEvent
        is for API testing purposes only.

        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        If a scheduleClearInMemoryAndPersistent is called, the plist is
        deleted, and data will be grandfathered upon recreation. To mimic
        this, the ITP database store is cleared and becomes "new" again, so
        the boolean is set to true.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetIsITPDatabaseEnabled):
        (WKPreferencesGetIsITPDatabaseEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _isITPDatabaseEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        In order to properly run the grandfathering
        API tests, the 'isITPDatabaseEnabled' boolean needs to be exposed from
        Web Preferences.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        The API tests rely on the ITP database flag being set correctly. Since
        being on-by-default, the ITP database flag does not show up in the
        user defaults menu if enabled. This patch fixes this by first checking 
        to see if the value is in the defaults menu, otherwise returning the 
        default preferences value. This ensures the preferences value matches 
        the actual store being initialized.

2020-01-10  Eric Carlson  <eric.carlson@apple.com>

        [Media in GPU process] Extend the GPU process sandbox to allow access to local files when necessary
        https://bugs.webkit.org/show_bug.cgi?id=205967
        <rdar://problem/58425020>

        Reviewed by youenn fablet.

        No new tests, un-skipped existing tests that pass because of this change.
        
        The GPU process sandbox does not allow access to local files so extend it before 
        attempting to open a file:// url, and revoke the extension when the file is closed.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::load):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::invalidate):
        (WebKit::RemoteMediaPlayerProxy::load):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::openGPUProcessConnection):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/GPUProcessConnection.h:
        (WebKit::GPUProcessConnection::setAuditToken):
        (WebKit::GPUProcessConnection::auditToken const):
        * WebProcess/GPU/GPUProcessConnectionInfo.h:
        (WebKit::GPUProcessConnectionInfo::encode const):
        (WebKit::GPUProcessConnectionInfo::decode):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::cancelLoad):
        (WebKit::MediaPlayerPrivateRemote::prepareToPlay):
        (WebKit::MediaPlayerPrivateRemote::play):
        (WebKit::MediaPlayerPrivateRemote::pause):
        (WebKit::MediaPlayerPrivateRemote::setPreservesPitch):
        (WebKit::MediaPlayerPrivateRemote::setVolumeDouble):
        (WebKit::MediaPlayerPrivateRemote::setMuted):
        (WebKit::MediaPlayerPrivateRemote::setPreload):
        (WebKit::MediaPlayerPrivateRemote::setPrivateBrowsingMode):
        (WebKit::MediaPlayerPrivateRemote::seek):
        (WebKit::MediaPlayerPrivateRemote::seekWithTolerance):
        (WebKit::MediaPlayerPrivateRemote::prepareForRendering):
        (WebKit::MediaPlayerPrivateRemote::setSize):
        (WebKit::MediaPlayerPrivateRemote::setVisible):
        (WebKit::MediaPlayerPrivateRemote::setShouldMaintainAspectRatio):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenGravity):
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):
        (WebKit::MediaPlayerPrivateRemote::setShouldDisableSleep):
        (WebKit::MediaPlayerPrivateRemote::requestResource):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerMIMETypeCache.cpp:
        (WebKit::RemoteMediaPlayerMIMETypeCache::canDecodeExtendedType):
        (WebKit::RemoteMediaPlayerMIMETypeCache::supportsTypeAndCodecs):
        (WebKit::RemoteMediaPlayerMIMETypeCache::initializeCache):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):
        (WebKit::RemoteMediaPlayerManager::deleteRemoteMediaPlayer):
        (WebKit::RemoteMediaPlayerManager::getSupportedTypes):
        (WebKit::RemoteMediaPlayerManager::originsInMediaCache):
        (WebKit::RemoteMediaPlayerManager::clearMediaCache):
        (WebKit::RemoteMediaPlayerManager::clearMediaCacheForOrigins):
        (WebKit::RemoteMediaPlayerManager::gpuProcessConnection const):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
        (WebKit::RemoteMediaPlayerManager::parentProcess const):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureGPUProcessConnection):

2020-01-10  Jer Noble  <jer.noble@apple.com>

        [iOS] Audio from non-frontmost tab continues when app is backgrounded
        https://bugs.webkit.org/show_bug.cgi?id=206101
        <rdar://problem/58089916>

        Reviewed by Eric Carlson.

        Tests: WKWebViewPausePlayingAudioTests.InWindow
               WKWebViewPausePlayingAudioTests.OutOfWindow

        The ApplicationStateTracker will only send notifications about application state to 
        WebPageProxies when those proxies' views are actually in-window. Add a separate application
        state observer strictly for media which fires only when application state notifications are
        received while the view is not in-window.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView _applicationDidEnterBackground:]):
        (-[WKContentView _applicationWillEnterForeground:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackgroundForMedia):
        (WebKit::WebPageProxy::applicationWillEnterForegroundForMedia):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationDidEnterBackgroundForMedia):
        (WebKit::WebPage::applicationWillEnterForegroundForMedia):

2020-01-10  Simon Fraser  <simon.fraser@apple.com>

        Introduce ENABLE_META_VIEWPORT and use it in some WK2 code
        https://bugs.webkit.org/show_bug.cgi?id=206091

        Reviewed by Tim Horton.
        
        Use ENABLE(META_VIEWPORT) rather than PLATFORM(IOS_FAMILY) to enable various
        bits of viewport-related code.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ViewportArguments>::decode):
        (IPC::ArgumentCoder<ViewportAttributes>::encode):
        (IPC::ArgumentCoder<ViewportAttributes>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetIgnoresViewportScaleLimits):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::viewportConfiguration const):

2020-01-10  Jonathan Bedard  <jbedard@apple.com>

        Python3: Support Source/WebKit/Scripts/webkit
        https://bugs.webkit.org/show_bug.cgi?id=206078

        Reviewed by Stephanie Lewis.

        Covered by existing unit tests.

        * Scripts/webkit/LegacyMessages-expected.h: Sort forward declarations.
        * Scripts/webkit/Messages-expected.h: Ditto.
        * Scripts/webkit/messages.py: Sort printed outputs.

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove reporting for some well-understood sandbox rules
        https://bugs.webkit.org/show_bug.cgi?id=206111

        Reviewed by Per Arne Vollan.

        Remove sandbox rules designed to generate reporting about resource use for some well-understood
        items that are frequently hit in WebKit use.

        No new tests. No change in behavior.

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

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove used media-related mach services from the WebContent process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=206089
        <rdar://problem/58489478>

        Reviewed by Per Arne Vollan.

        After conducting multiple test passes and large-scale living-on testing with telemetry, we have
        confirmed that the following XPC services are not used by the media logic in WebKit, and can be
        removed:

            com.apple.coremedia.cpeprotector.xpc
            com.apple.coremedia.figcontentkeysession.xpc
            com.apple.coremedia.routingsessionmanager.xpc
            com.apple.coremedia.sts

        Test: fast/sandbox/ios/sandbox-mach-lookup.html

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

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove 'com.apple.awdd' from the WebContent process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=206095
        <rdar://problem/56871147>

        Reviewed by Per Arne Vollan.

        We no longer need access to 'com.apple.awdd' in the iOS WebContent sandbox. We should remove
        it from the sandbox.

        Test: fast/sandbox/ios/sandbox-mach-lookup.html

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

2020-01-09  Per Arne Vollan  <pvollan@apple.com>

        Map CSS value ID to system color in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=204314

        Reviewed by Dean Jackson.

        Create mapping between CSS value IDs and system colors in the UI process and send to the WebContent process
        on process startup.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-01-10  Mark Lam  <mark.lam@apple.com>

        Gardening: simple build fix after r254119.

        Not reviewed.

        We should be using ASSERT_ENABLED instead of ASSERT_DSIABLED.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::sendRequestCallback):

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove 'com.apple.powerlog.plxpclogger.xpc' from the WebContent process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=206086
        <rdar://problem/57195681>

        Reviewed by Per Arne Vollan.

        Telemetry and testing have confirmed that we no longer need a mach connection to the
        'com.apple.powerlog.plxpclogger.xpc' service. We should remove it from the WebContent process sandbox.

        Test: fast/sandbox/ios/sandbox-mach-lookup.html

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

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        Remove 'com.apple.iohideventsystem' from the WebContent process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=206085
        <rdar://problem/36085204>

        Reviewed by Alex Christensen.

        After r253357 we no longer need access to 'com.apple.iohideventsystem', and should remove it from
        the WebContent process sandbox.

        Test: fast/sandbox/ios/sandbox-mach-lookup.html

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

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove 'com.apple.cookied' from the WebContent process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=206083
        <rdar://problem/56963865>

        Reviewed by Per Arne Vollan.

        Telemetry and testing have confirmed that we no longer use the 'com.apple.cookied' mach connection
        in the WebContent process on iOS. We should remove this from the WebContent process sandbox

        Tested by fast/sandbox/ios/sandbox-mach-lookup.html.

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

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        Remove com.apple.locationd.registration from the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=206021
        <rdar://problem/58451384>

        Reviewed by Per Arne Vollan.

        Now that we generate a dynamic extension for 'com.apple.locationd.registration', we should remove
        the blanket allow rule from the sandbox.

        Test: fast/sandbox/ios/sandbox-mach-lookup.html

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

2020-01-10  Simon Fraser  <simon.fraser@apple.com>

        Clean up -[WKWebView _didCommitLayerTree:]
        https://bugs.webkit.org/show_bug.cgi?id=206049

        Reviewed by Tim Horton.

        In preparation for sharing more of this code with macOS, factors parts of -[WKWebView _didCommitLayerTree:]
        into new functions.
        
        Also pull out part of -[WKWebView _updateVisibleContentRects] into its own function.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _trackTransactionCommit:]):
        (-[WKWebView _updateScrollViewForTransaction:]):
        (-[WKWebView _restoreScrollAndZoomStateForTransaction:]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _allowsDoubleTapGestures]):
        (-[WKWebView currentlyVisibleContentInsetsWithScale:obscuredInsets:]):
        (-[WKWebView _updateVisibleContentRects]):
        (areEssentiallyEqualAsFloat): Deleted.

2020-01-10  Simon Fraser  <simon.fraser@apple.com>

        [macOS UI-side compositing] Introduce WKScrollView and WKContentView for macOS
        https://bugs.webkit.org/show_bug.cgi?id=206042

        Reviewed by Tim Horton.

        Add WKScrollViewMac and WKWebViewMac, with bare-bones implementations. WKScrollViewMac
        has a WKScrollViewDelegate to make it more iOS-like, to avoid clients having to register
        boundsDidChange notifications, and WKWebView on macOS becomes the delegate.

        These views are only created when UI-side compositing is enabled.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/mac/WKContentViewMac.h: Added.
        * UIProcess/API/mac/WKContentViewMac.mm: Added.
        (-[WKContentView initWithFrame:page:]):
        (-[WKContentView isFlipped]):
        (-[WKContentView _setAcceleratedCompositingRootLayer:]):
        * UIProcess/API/mac/WKScrollViewMac.h: Added.
        * UIProcess/API/mac/WKScrollViewMac.mm: Added.
        (+[WKScrollView isCompatibleWithResponsiveScrolling]):
        (-[WKScrollView initWithFrame:]):
        (-[WKScrollView dealloc]):
        (-[WKScrollView delegate]):
        (-[WKScrollView setDelegate:]):
        (-[WKScrollView contentOffset]):
        (-[WKScrollView boundsDidChange:]):
        (-[WKScrollView setContentInsets:]):
        * UIProcess/API/mac/WKWebViewMac.h:
        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewContentInsetsDidChange:]):
        (-[WKWebView _setupScrollAndContentViews]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        * WebKit.xcodeproj/project.pbxproj:

2020-01-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support authenticatorGetNextAssertion
        https://bugs.webkit.org/show_bug.cgi?id=203346
        <rdar://problem/56558488>

        Reviewed by Brent Fulgham.

        This patch implements authenticatorGetNextAssertion as suggested by the spec:
        https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html#authenticatorGetNextAssertion

        The work flow is as follow:
        1) When a valid assertion response is received, check its numberOfCredentials member;
        2) When it is larger then 1, use authenticatorGetNextAssertion to get all remaining responses;
        3) Once all responses are gathered, ask UI clients to pick one to return.

        * UIProcess/API/APIWebAuthenticationPanelClient.h:
        (API::WebAuthenticationPanelClient::selectAssertionResponses const):
        * UIProcess/WebAuthentication/Authenticator.h:
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::selectAssertionResponses):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::parseRequest):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::continueGetNextAssertionAfterResponseReceived):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.h:

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        Remove 'com.apple.nehelper' from the WebContent sandbox.
        https://bugs.webkit.org/show_bug.cgi?id=206025
        <rdar://problem/58453508>

        Reviewed by Per Arne Vollan.

        Now that we generate a dynamic extension for 'com.apple.nehelper' and 'com.apple.nesessionmanager.content-filter',
        we should remove the blanket allow rules from the sandbox.

        Tests: fast/sandbox/ios/sandbox-mach-lookup.html, fast/sandbox/mac/sandbox-mach-lookup.html

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

2020-01-10  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Silence compiler warning
        https://bugs.webkit.org/show_bug.cgi?id=206070

        Reviewed by Chris Dumez.

        Silence compiler by using the proper formatter for log out.

        No functional changes.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

2020-01-10  Alex Christensen  <achristensen@webkit.org>

        Expand _WKResourceLoadDelegate callbacks
        https://bugs.webkit.org/show_bug.cgi?id=206037
        <rdar://problem/57132290>

        Reviewed by Youenn Fablet.

        Add 5 informative delegate callbacks at these times during the loading process:
        1. When a request is sent.
        2. When a redirect happens.
        3. When a challenge happens.
        4. When a response is received.
        5. When loading completes or fails.

        As mentioned in r254183 these callbacks are only called when a _WKResourceLoadDelegate is given to a WKWebView.
        We add a new struct ResourceLoadInfo which will need to be expanded containing currently only the load identifier.
        Covered by new API tests which verify the validity of the sent information.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/NetworkLoadClient.h:
        (WebKit::NetworkLoadClient::didReceiveChallenge):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::generateResourceLoadID):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::resourceLoadInfo):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::didReceiveChallenge):
        Add a way to send a message informing that a challenge happened with information gathered from the NetworkResourceLoader,
        which previously was not informed of challenges because the challenges went directly from the NetworkLoad to the AuthenticationManager.
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/ResourceLoadInfo.h: Added.
        (WebKit::ResourceLoadInfo::encode const):
        (WebKit::ResourceLoadInfo::decode):
        * SourcesCocoa.txt:
        * UIProcess/API/APIResourceLoadClient.h:
        * UIProcess/API/APIResourceLoadInfo.h: Added.
        * UIProcess/API/Cocoa/_WKResourceLoadDelegate.h:
        * UIProcess/API/Cocoa/_WKResourceLoadInfo.h: Added.
        * UIProcess/API/Cocoa/_WKResourceLoadInfo.mm: Added.
        (-[_WKResourceLoadInfo dealloc]):
        (-[_WKResourceLoadInfo resourceLoadID]):
        (-[_WKResourceLoadInfo _apiObject]):
        * UIProcess/API/Cocoa/_WKResourceLoadInfoInternal.h: Added.
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        An AuthenticationChallengeProxy was only used for challenges that needed credentials, so they wrapped a CompletionHandler.
        This new type of informative-only challenge will be given a null CompletionHandler, which means no action can be taken.
        * UIProcess/Cocoa/ResourceLoadDelegate.h:
        * UIProcess/Cocoa/ResourceLoadDelegate.mm:
        (WebKit::ResourceLoadDelegate::setDelegate):
        (WebKit::ResourceLoadDelegate::ResourceLoadClient::didSendRequest const):
        (WebKit::ResourceLoadDelegate::ResourceLoadClient::didPerformHTTPRedirection const):
        (WebKit::ResourceLoadDelegate::ResourceLoadClient::didReceiveChallenge const):
        (WebKit::ResourceLoadDelegate::ResourceLoadClient::didReceiveResponse const):
        (WebKit::ResourceLoadDelegate::ResourceLoadClient::didCompleteWithError const):
        (WebKit::ResourceLoadDelegate::ResourceLoadClient::willSendRequest const): Deleted.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::resourceLoadDidSendRequest):
        (WebKit::NetworkProcessProxy::resourceLoadDidPerformHTTPRedirection):
        (WebKit::NetworkProcessProxy::resourceLoadDidReceiveChallenge):
        (WebKit::NetworkProcessProxy::resourceLoadDidReceiveResponse):
        (WebKit::NetworkProcessProxy::resourceLoadDidCompleteWithError):
        (WebKit::NetworkProcessProxy::pageWillSendRequest): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):

2020-01-10  Alex Christensen  <achristensen@webkit.org>

        Add SPI to enable TLS 1.0 and 1.1 in WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=206046

        Reviewed by Youenn Fablet.

        This is needed for <rdar://problem/58464912>
        Covered by API tests.

        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration legacyTLSEnabled]):
        (-[_WKWebsiteDataStoreConfiguration setLegacyTLSEnabled:]):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::legacyTLSEnabled const):
        (WebKit::WebsiteDataStoreConfiguration::setLegacyTLSEnabled):

2020-01-10  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Issue sandbox extension to "com.apple.nesessionmanager" prior to 10.15 
        https://bugs.webkit.org/show_bug.cgi?id=206031
        <rdar://problem/58455467>

        Reviewed by Per Arne Vollan.

        The mach name of 'com.apple.nesessionmanager' changed between macOS 10.14 and 10.15.
        We should continue to issue the old name when building for older operating systems."

        Covered by existing tests.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2020-01-10  Alex Christensen  <achristensen@webkit.org>

        Remove WebsiteDataStore::setCacheStorageDirectory which has been replaced by WebsiteDataStoreConfiguration::setCacheStorageDirectory
        https://bugs.webkit.org/show_bug.cgi?id=205841

        Reviewed by Youenn Fablet.

        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationCopyCacheStorageDirectory):
        (WKWebsiteDataStoreConfigurationSetCacheStorageDirectory):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _cacheStorageDirectory]): Deleted.
        (-[WKWebsiteDataStore _setCacheStorageDirectory:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::cacheStorageDirectory const):
        (WebKit::WebsiteDataStore::setCacheStorageDirectory): Deleted.

2020-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.27.4 release

        * gtk/NEWS: Add release notes for 2.27.4.

2020-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK and WPE API docs generation

        Fix the name of the new class. WebKitInputMethodFilter -> WebKitInputMethodContext.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/wpe/docs/wpe-docs.sgml:

2020-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Automation: resolveChildFrameWithNodeHandle should return NodeNotFound when node doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=205993

        Reviewed by Brian Burg.

        According to the spec:

        "If element is stale, return error with error code stale element reference."
        https://w3c.github.io/webdriver/#switch-to-frame

        Fixes: imported/w3c/webdriver/tests/switch_to_frame/switch.py::test_frame_id_webelement_stale_reference

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):

2020-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Automation: evaluateJavaScriptFunction should use Promises
        https://bugs.webkit.org/show_bug.cgi?id=204151

        Reviewed by Brian Burg.

        Make the function to run scripts async and handle the result as a promise. To implement the script timeout we
        use another promise that starts the timer and then we run a Promise.race() with both promises. To simplify the
        results reporting, all exceptions (including timeout errors that are now handled as exceptions) are now handled
        as errors passed to the resultCallback. The boolean parameter has been removed, we can simply check the type of
        the value received because results are always strings and errors are always exception objects.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::evaluateJavaScriptCallback): Handle the script result, including all possible errors now (not only timeouts).
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction): Any exception running the script should be an
        internal error now. The code to handle error has been moved to evaluateJavaScriptCallback().
        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (WebKitAutomation.AutomationSessionProxy.prototype.evaluateJavaScriptFunction): Call _execute and handle the
        promise result to call resultCallback wityh either the result or the error.
        (WebKitAutomation.AutomationSessionProxy.prototype._execute): Make the function to run the script async and
        handle the result as a promise.

2020-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Automation: scripts are executed in the wrong js context after a history navigation
        https://bugs.webkit.org/show_bug.cgi?id=204880
        <rdar://problem/58413615>

        Reviewed by Brian Burg.

        After a history navigation we use the script object from the previous frame js context because
        didClearWindowObjectForFrame() is not called in that case. We are caching the script object for every frame ID,
        and after a history navigation the frame ID is the same, but the frame js context isn't. That also means we might
        be leaking the script objects in those cases, because we end up calling JSValueUnprotect with the wrong
        context. It would be easier to set the script object as a property of the global object and let JSC handle the
        lifetime. Instead of caching the script object and protect/unprotect it, we just check if the global object of
        the current js context has the property or not to get or create it. We use a private symbol as the key of the
        global object property to ensure it's not visible.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::WebAutomationSessionProxy): Initialize m_scriptObjectIdentifier.
        (WebKit::WebAutomationSessionProxy::scriptObject): Helper function to get the script object for the given
        JavaScript context.
        (WebKit::WebAutomationSessionProxy::setScriptObject): Helper function to set the script object for the given
        JavaScript context.
        (WebKit::WebAutomationSessionProxy::scriptObjectForFrame): Get or create the script object.
        (WebKit::WebAutomationSessionProxy::elementForNodeHandle): Get the script object from global object.
        (WebKit::WebAutomationSessionProxy::didClearWindowObjectForFrame): Remove the code to unprotect script objects
        of the frame.
        * WebProcess/Automation/WebAutomationSessionProxy.h: Add m_scriptObjectIdentifier and remove m_webFrameScriptObjectMap.

2020-01-09  Ross Kirsling  <ross.kirsling@sony.com>

        REGRESSION(r253868): Socket-based remote inspector cannot inspect any target
        https://bugs.webkit.org/show_bug.cgi?id=206045

        Reviewed by Don Olmstead.

        Revert part of patch, ensuring Target struct stays consistent with socket inspector's messaging protocol.

        * UIProcess/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::setTargetList):
        (WebKit::debuggableTypeToString): Deleted.
        * UIProcess/socket/RemoteInspectorClient.h:
        * UIProcess/socket/RemoteInspectorProtocolHandler.cpp:
        (WebKit::RemoteInspectorProtocolHandler::targetListChanged):
        (WebKit::debuggableTypeToString): Deleted.

2020-01-09  Tim Horton  <timothy_horton@apple.com>

        Adopt TARGET_OS_MACCATALYST in more places
        https://bugs.webkit.org/show_bug.cgi?id=206040
        <rdar://problem/57127108>

        Reviewed by Simon Fraser.

        * Shared/API/Cocoa/WebKit.h:

2020-01-09  Simon Fraser  <simon.fraser@apple.com>

        Clean up -[WKWebView _initializeWithConfiguration:]
        https://bugs.webkit.org/show_bug.cgi?id=206039

        Reviewed by Tim Horton.

        -[WKWebView _initializeWithConfiguration:] is full of platform #ifdefs so needs
        cleaning up before adding more code. Factor out WKScrollView and view hookup,
        pageConfiguration setup, and notification registration.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setupPageConfiguration:]):
        * UIProcess/API/ios/WKWebViewIOS.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _setupScrollAndContentViews]):
        (-[WKWebView _registerForNotifications]):

2020-01-09  John Wilander  <wilander@apple.com>

        Check the existence of the optional m_sessionID before using it in WebProcess::setResourceLoadStatisticsEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=206035
        <rdar://problem/58455306>

        Reviewed by Brent Fulgham.

        No new tests.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setResourceLoadStatisticsEnabled):
            Added a check that m_sessionID exists.

2020-01-09  Tim Horton  <timothy_horton@apple.com>

        Install WebKit framework symlink for more iOS-derived platforms
        https://bugs.webkit.org/show_bug.cgi?id=206030

        Reviewed by Andy Estes.

        * WebKit.xcodeproj/project.pbxproj:

2020-01-09  Brent Fulgham  <bfulgham@apple.com>

        Remove AGXCompilerService access from the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=206020
        <rdar://problem/58451395>

        Reviewed by Per Arne Vollan.

        Now that we generate a dynamic extension for 'com.apple.AGXCompilerService', we should remove the
        blanket allow rule from the sandbox.

        Covered by existing tests.

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

2020-01-09  Simon Fraser  <simon.fraser@apple.com>

        Use HAVE(TOUCH_BAR) instead of PLATFORM(COCOA) in more places
        https://bugs.webkit.org/show_bug.cgi?id=205975

        Reviewed by Wenson Hsieh.

        Protect Touch Bar-related code with HAVE(TOUCH_BAR) instead of PLATFORM(COCOA).

        * Shared/TouchBarMenuData.cpp:
        * Shared/TouchBarMenuData.h:
        * Shared/TouchBarMenuItemData.cpp:
        * Shared/TouchBarMenuItemData.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::forceRequestCandidatesForTesting):
        (WebKit::WebViewImpl::setEditableElementIsFocused):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartPageTransition):
        (WebKit::WebPage::didChangeSelectionOrOverflowScrollPosition):
        (WebKit::WebPage::didInsertMenuElement):
        (WebKit::WebPage::didRemoveMenuElement):
        (WebKit::WebPage::didInsertMenuItemElement):
        (WebKit::WebPage::didRemoveMenuItemElement):
        * WebProcess/WebPage/WebPage.h:

2020-01-09  Simon Fraser  <simon.fraser@apple.com>

        Add ENABLE_UI_SIDE_COMPOSITING and use it in a few places
        https://bugs.webkit.org/show_bug.cgi?id=205982

        Reviewed by Jon Lee.

        All Remote* things should get wrapped in ENABLE(UI_SIDE_COMPOSITING)
        if other platforms build the files, so do some of that. VisibleContentRect*
        and ViewUpdateDispatcher* stuff is also UI-side compositing only.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.h:
        (WebKit::RemoteScrollingCoordinatorTransaction::scrollingStateTree):
        * Shared/VisibleContentRectUpdateInfo.cpp:
        * Shared/VisibleContentRectUpdateInfo.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::handleMouseEvent):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        * WebProcess/WebPage/ViewUpdateDispatcher.h:
        * WebProcess/WebPage/WebPage.h:

2020-01-09  Tim Horton  <timothy_horton@apple.com>

        Fix a tiny logging mistake in launchProcess
        https://bugs.webkit.org/show_bug.cgi?id=206026

        Reviewed by Wenson Hsieh.

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

2020-01-09  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add timing information to WebPageProxy::logFrameNavigation() to detect delayed client-side redirects
        https://bugs.webkit.org/show_bug.cgi?id=205522
        <rdar://problem/58125759>

        Reviewed by Chris Dumez.

        The purpose of this patch is to capture navigations that happen programmatically
        after the document has loaded. These are delayed redirects and should be counted
        as redirects in ITP.

        To achieve this, a timestamp is captured in
        WebPageProxy::didFinishDocumentLoadForFrame() to be able to calculate how much time
        has passed since that timestamp in the IPC sent from
        WebPageProxy::logFrameNavigation(). The IPC also gets information on whether
        userInitiatedActivity exists so that ITP can decide whether to treat the navigation
        as triggered by the user or not.

        A new test was added and existing test expectations were updated.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
            Now takes the extra parameters delayAfterMainFrameDocumentLoad
            and wasPotentiallyInitiatedByUser.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation):
            Now takes the extra parameters delayAfterMainFrameDocumentLoad
            and wasPotentiallyInitiatedByUser.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
            Now takes the extra parameters delayAfterMainFrameDocumentLoad
            and wasPotentiallyInitiatedByUser.
            The deleted WebResourceLoadStatisticsStore::logFrameNavigation() was dead code.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::logFrameNavigation):
            Now takes the extra parameters delayAfterMainFrameDocumentLoad
            and wasPotentiallyInitiatedByUser.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldSubmitTelemetry:]): Deleted.
            Dead code.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
            Now captures a timestamp.
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
            Removed dead code.
        (WebKit::WebPageProxy::logFrameNavigation):
            Now sends the diff between now and the timestamp captured in
            WebPageProxy::didFinishDocumentLoadForFrame().
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformInitialize):
            Removed dead code.
        (WebKit::WebsiteDataStore::platformDestroy):
            Removed dead code.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::resourceLoadStatistics const): Deleted.
            Dead code.

2020-01-09  Andres Gonzalez  <andresg_22@apple.com>

        WKAccessibilityWebPageObject should use Accessibility::retrieveValueFromMainThread.
        https://bugs.webkit.org/show_bug.cgi?id=206009

        Reviewed by Chris Fleizach.

        - WKAccessibilityWebPageObject now uses Accessibility::retrieveValueFromMainThread,
        which is consistent with WebAccessibilityObjectWrapper.
        - It also uses a captured protectedSelf to ensure the object is alive
        when the lambda is invoked on the main thread.
        - Added nullity check for m_page in accessibilityAttributeSizeValue,
        which is a potential crasher in the multithreaded mode.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKAccessibilityWebPageObject convertScreenPointToRootView:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeSizeValue]):
        (-[WKAccessibilityWebPageObject accessibilityAttributePositionValue]):
        (-[WKAccessibilityWebPageObject accessibilityDataDetectorValue:point:]):
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):
        (retrieveAccessibilityValueFromMainThread): Not needed since it uses now the one in Accessibility nasespace.

2020-01-09  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Flip experimental website data removal setting from an enable to a disable
        https://bugs.webkit.org/show_bug.cgi?id=205966
        <rdar://problem/58425000>

        Reviewed by Brent Fulgham.

        To get default on behavior, experimental features in the network process need to be
        turned from enable flags to disable flags. This patch does that for the experimental
        website data removal flag.

        This change also aligns the init values of the setting to match the default.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

2020-01-09  Megan Gardner  <megan_gardner@apple.com>

        Set the title for images so it will be correctly displayed in UIContextMenus
        https://bugs.webkit.org/show_bug.cgi?id=205980
        <rdar://problem/57701988>

        Reviewed by Dean Jackson.

        Need to set the title text for images.

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

2020-01-09  Peng Liu  <peng.liu6@apple.com>

        Fullscreen videos do not enter PiP in first tap
        https://bugs.webkit.org/show_bug.cgi?id=205986

        Reviewed by Eric Carlson.

        This patch essentially reverts the fix for webkit.org/b/204461.
        The fix for webkit.org/b/204461 depends on a fix in AVKit along
        with a corresponding update in WebKit (webkit.org/b/204979).
        We will need to reapply the fix for webkit.org/b/204461 after they are landed.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::enterVideoFullscreenForVideoElement):
        (WebKit::VideoFullscreenManager::exitVideoFullscreenForVideoElement):

2020-01-09  Kate Cheney  <katherine_cheney@apple.com>

        ITP API classes need WK_CLASS_AVAILABLE tags
        https://bugs.webkit.org/show_bug.cgi?id=205969
        <rdar://problem/58427147>

        Reviewed by Dean Jackson.

        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.h:
        * WebKit.xcodeproj/project.pbxproj:
        This updates the header file targets from Project to Private.

2020-01-09  youenn fablet  <youenn@apple.com>

        REGRESSION: [ Mac wk2 ] fast/mediastream/captureInGPUProcess.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=205873
        <rdar://problem/58380638>

        Reviewed by Eric Carlson.

        GPUProcess and UIProcess were sometimes getting out of sync with regards to using mock devices or real capture devices.
        This ended up in GPUProcess trying to find mock devices based on real device IDs.
        Fix this issue by storing this bool value in GPUProcessProxy and send IPC to GPUProcess whenver this value is changed.
        Update GPUProcessProxy value whenever UserMediaPermissionRequestManagerProxy is asked to sync this value.

        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::singleton):
        (WebKit::GPUProcessProxy::GPUProcessProxy):
        (WebKit::GPUProcessProxy::setUseMockCaptureDevices):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::syncWithWebCorePrefs const):

2020-01-09  David Kilzer  <ddkilzer@apple.com>

        WebKitTestRunner leaks objects in a top-level autoreleasePool that's never cleared
        <https://webkit.org/b/205950>
        <rdar://problem/50987831>

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::WebPreferences::platformInitializeStore):
        - Add an @autoreleasepool block around the contents of
          this method since it generates numerous autoreleased
          objects when run.

2020-01-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Reduce binary size by purging C++ type information in Objective-C fields and parameters
        https://bugs.webkit.org/show_bug.cgi?id=205905

        Reviewed by Saam Barati.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate initWithNetworkSession:wrapper:withCredentials:]):
        * Shared/API/Cocoa/WKBrowsingContextHandle.mm:
        (-[WKBrowsingContextHandle _initWithPageProxy:]):
        (-[WKBrowsingContextHandle _initWithPage:]):
        * Shared/API/Cocoa/WKBrowsingContextHandleInternal.h:
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _initWithWebPage:]):
        (-[_WKRemoteObjectRegistry _initWithWebPageProxy:]):
        * Shared/API/Cocoa/_WKRemoteObjectRegistryInternal.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _page]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getAllStorageAccessEntriesFor:completionHandler:]):
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::setLayoutMode):
        (WebKit::WebViewImpl::fullScreenWindowController):
        (WebKit::WebViewImpl::remoteObjectRegistry):
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView willMoveToWindow:]):
        (-[WKApplicationStateTrackingView didMoveToWindow]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController _manager]):
        (-[WKFullScreenViewController _togglePiPAction:]):
        (-[WKFullScreenViewController _showPhishingAlert]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (WebKit::WKWebViewState::applyTo):
        (WebKit::WKWebViewState::store):
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        (-[WKFullScreenWindowController _exitFullscreenImmediately]):
        (-[WKFullScreenWindowController _manager]):
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:]):
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController initWithPage:view:viewImpl:recognizer:]):
        (-[WKImmediateActionController _animationControllerForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):
        * UIProcess/mac/WKInspectorViewController.h:
        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController initWithInspectedPage:]):
        * UIProcess/mac/WKTextFinderClient.h:
        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient initWithPage:view:usePlatformFindUI:]):
        * UIProcess/mac/WKViewLayoutStrategy.h:
        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:viewImpl:mode:]):
        (-[WKViewLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewViewSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewFixedSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        (-[WKDOMDocumentParserYieldToken initWithDocument:]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase axObjectCache]):
        (-[WKAccessibilityWebPageObjectBase setWebPage:]):

2020-01-08  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Flip experimental cookie blocking setting from an enable to a disable
        https://bugs.webkit.org/show_bug.cgi?id=205963
        <rdar://problem/58424136>

        Reviewed by Brent Fulgham.

        To get default on behavior, experimental features in the network process need to be
        turned from enable flags to disable flags. This patch does that for the experimental
        cookie blocking flag.

        This change also aligns the init values of the setting to match the default.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

2020-01-08  Brent Fulgham  <bfulgham@apple.com>

        Allow some sysctl-read calls needed by WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=205946
        <rdar://problem/58416475>

        Reviewed by Per Arne Vollan.

        This patch allows some sysctl-read calls that are needed when running WebRTC tests.
        It also removes telemetry and logging from a UIKit class that was confirmed to be
        needed by Performance and PowerLogging code.

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

2020-01-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix some IOS_FAMILY builds after r254210.

        * Shared/AuxiliaryProcess.h:

2020-01-08  Dean Jackson  <dino@apple.com>

        [WebGL] More GraphicsContext3D to GraphicsContextGL renaming
        https://bugs.webkit.org/show_bug.cgi?id=205949
        <rdar://problem/58416989>

        Reviewed by Antoine Quint.

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::copyVideoTextureToPlatformTexture):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

2020-01-08  Simon Fraser  <simon.fraser@apple.com>

        Remove NATIVE_MOUSE_EVENT_HANDLER macros
        https://bugs.webkit.org/show_bug.cgi?id=205897

        Reviewed by Tim Horton.

        Remove the NATIVE_MOUSE_EVENT_HANDLER and NATIVE_MOUSE_EVENT_HANDLER_INTERNAL which are almost identical,
        calling a couple of shared functions instead. The only reason the eventName was used was for logging, so just
        log the -[NSEvent type] instead.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::operator<<):
        (WebKit::WebViewImpl::nativeMouseEventHandler):
        (WebKit::WebViewImpl::nativeMouseEventHandlerInternal):
        (WebKit::WebViewImpl::mouseEntered):
        (WebKit::WebViewImpl::mouseExited):
        (WebKit::WebViewImpl::otherMouseDown):
        (WebKit::WebViewImpl::otherMouseDragged):
        (WebKit::WebViewImpl::otherMouseUp):
        (WebKit::WebViewImpl::rightMouseDown):
        (WebKit::WebViewImpl::rightMouseDragged):
        (WebKit::WebViewImpl::rightMouseUp):
        (WebKit::WebViewImpl::mouseMovedInternal):
        (WebKit::WebViewImpl::mouseDownInternal):
        (WebKit::WebViewImpl::mouseUpInternal):
        (WebKit::WebViewImpl::mouseDraggedInternal):

2020-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove an unused variable in WebCoreArgumentCodersCocoa.mm after r254202
        https://bugs.webkit.org/show_bug.cgi?id=205939

        Reviewed by Tim Horton.

        Remove an unused temporary variable that was only used for debugging.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<FontHandle>::decodePlatformData):

2020-01-08  Chris Dumez  <cdumez@apple.com>

        Move UIProcess DependencyProcessAssertion from WebContent to AuxiliaryProcess
        https://bugs.webkit.org/show_bug.cgi?id=205836

        Reviewed by Alex Christensen.

        Move UIProcess DependencyProcessAssertion from WebContent to AuxiliaryProcess, so that other auxiliary
        processes (Network Process, GPU Process) also benefit from it.

        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initializeConnection):
        * Shared/AuxiliaryProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:

2020-01-08  Brent Fulgham  <bfulgham@apple.com>

        Network process sandboxes should not include 'common.sb' or 'system.sb'
        https://bugs.webkit.org/show_bug.cgi?id=205521
        <rdar://problem/58095870>

        Reviewed by Per Arne Vollan.

        This patch replaces the 'include' with a copy/paste of the contents of the relevant
        sandbox include file. I removed definitions that were not referenced in the existing
        Network sandbox, but did not otherwise edit the contents. There are duplicates and
        redundancies after this patch, which I will remove as a follow-up step once we confirm
        that this has no regressions.

        I also updated the sandbox to generate telemetry for some mach connections that we think
        are unneeded, or that should be targeted for removal.

        No new tests. There should be no change in behavior.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:

2020-01-08  David Kilzer  <ddkilzer@apple.com>

        IPC::Connection::sendMessage() should use CRASH_WITH_INFO()
        <https://webkit.org/b/205419>
        <rdar://problem/58058661>

        Reviewed by Mark Lam.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::sendMessage):
        - Switch from CRASH() to CRASH_WITH_INFO().

2020-01-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r254174.

        Broke 80 tests on Catalina

        Reverted changeset:

        "Network process sandboxes should not include 'common.sb' or
        'system.sb'"
        https://bugs.webkit.org/show_bug.cgi?id=205521
        https://trac.webkit.org/changeset/254174

2020-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for encoding WebCore::Font over IPC for DisplayList::DrawGlyphs
        https://bugs.webkit.org/show_bug.cgi?id=205830
        <rdar://problem/57347719>

        Reviewed by Dean Jackson.

        Add basic support for encoding and decoding a FontHandle.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<FontHandle>::encodePlatformData):
        (IPC::ArgumentCoder<FontHandle>::decodePlatformData):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FontHandle>::encode):
        (IPC::ArgumentCoder<FontHandle>::decode):

        When encoding a Font on Cocoa platforms, send across the font face data (if present); otherwise, fall back to
        sending the font descriptor for the UIFont or NSFont (as is the case for installed fonts).

        * Shared/WebCoreArgumentCoders.h:
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        (IPC::ArgumentCoder<FontHandle>::encodePlatformData):
        (IPC::ArgumentCoder<FontHandle>::decodePlatformData):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<FontHandle>::encodePlatformData):
        (IPC::ArgumentCoder<FontHandle>::decodePlatformData):

2020-01-08  Milan Crha  <mcrha@redhat.com>

        [GTK] Editing: Allow line breaks in lists
        https://bugs.webkit.org/show_bug.cgi?id=205913

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/KeyBindingTranslator.cpp:
        Treat Shift+Enter as "InsertLineBreak", instead of "InsertNewLine".

2020-01-08  youenn fablet  <youenn@apple.com>

        Implement MediaRecorder backend in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=205802

        Reviewed by Eric Carlson.

        Add support for sending audio/video tracks to record from WebProcess to GPUProcess.
        Add a MediaRecorderPrivate implementation that supports sending one audio track and/or one video track to GPUProcess
        and stopping/fetching data from the remote recorder in GPUProcess.

        In GPUProcess, implement the remote recorder using the existing WebCore recorder writer.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::userMediaCaptureManagerProxy):
        (WebKit::GPUConnectionToWebProcess::mediaRecorderManager):
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * GPUProcess/webrtc/RemoteMediaRecorder.cpp: Added.
        (WebKit::RemoteMediaRecorder::create):
        (WebKit::RemoteMediaRecorder::RemoteMediaRecorder):
        (WebKit::RemoteMediaRecorder::~RemoteMediaRecorder):
        (WebKit::RemoteMediaRecorder::storage):
        (WebKit::RemoteMediaRecorder::audioSamplesStorageChanged):
        (WebKit::RemoteMediaRecorder::audioSamplesAvailable):
        (WebKit::RemoteMediaRecorder::videoSampleAvailable):
        (WebKit::RemoteMediaRecorder::fetchData):
        (WebKit::RemoteMediaRecorder::stopRecording):
        * GPUProcess/webrtc/RemoteMediaRecorder.h: Added.
        * GPUProcess/webrtc/RemoteMediaRecorder.messages.in: Added.
        * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp: Added.
        (WebKit::RemoteMediaRecorderManager::RemoteMediaRecorderManager):
        (WebKit::RemoteMediaRecorderManager::~RemoteMediaRecorderManager):
        (WebKit::RemoteMediaRecorderManager::didReceiveRemoteMediaRecorderMessage):
        (WebKit::RemoteMediaRecorderManager::createRecorder):
        (WebKit::RemoteMediaRecorderManager::releaseRecorder):
        * GPUProcess/webrtc/RemoteMediaRecorderManager.h: Added.
        (WebKit::RemoteMediaRecorderManager::didReceiveMessageFromWebProcess):
        * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in: Added.
        * Scripts/webkit/messages.py:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/MediaRecorderProvider.cpp: Added.
        (WebCore::MediaRecorderProvider::createMediaRecorderPrivate):
        * WebProcess/GPU/media/MediaRecorderProvider.h: Added.
        * WebProcess/GPU/webrtc/MediaRecorderIdentifier.h: Added.
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: Added.
        (WebKit::MediaRecorderPrivate::MediaRecorderPrivate):
        (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate):
        (WebKit::MediaRecorderPrivate::sampleBufferUpdated):
        (WebKit::MediaRecorderPrivate::audioSamplesAvailable):
        (WebKit::MediaRecorderPrivate::storageChanged):
        (WebKit::MediaRecorderPrivate::fetchData):
        (WebKit::MediaRecorderPrivate::stopRecording):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: Added.
        * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp: Added.
        (WebKit::MediaRecorderProvider::createMediaRecorderPrivate):
        * WebProcess/GPU/webrtc/MediaRecorderProvider.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):

2020-01-08  youenn fablet  <youenn@apple.com>

        Improve logging of creating a service worker
        https://bugs.webkit.org/show_bug.cgi?id=205849

        Reviewed by Chris Dumez.

        Add some release logging to identify which service worker is created in which process.
        No change of observable behavior.

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

2020-01-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Implement css3-images image-orientation
        https://bugs.webkit.org/show_bug.cgi?id=89052

        Reviewed by Simon Fraser.

        Remove the ENABLE_CSS_IMAGE_ORIENTATION feature flag.

        * Configurations/FeatureDefines.xcconfig:

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

        Introduce _WKResourceLoadDelegate
        https://bugs.webkit.org/show_bug.cgi?id=205887

        Reviewed by Dean Jackson.

        Add a new delegate that will be informed about main and subresource requests.
        This is distinct from the WKNavigationDelegate, which primarily receives callbacks about main resource requests.
        Because the IPC churn can be a significant performance reduction, only send the IPC messages if the page has such a client.
        This client will need to be expanded to implement <rdar://problem/57132290> but this is a minimal testable start.
        The simple case is covered by an API test.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * SourcesCocoa.txt:
        * UIProcess/API/APIResourceLoadClient.h: Added.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _resourceLoadDelegate]):
        (-[WKWebView _setResourceLoadDelegate:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKResourceLoadDelegate.h: Added.
        * UIProcess/Cocoa/ResourceLoadDelegate.h: Added.
        * UIProcess/Cocoa/ResourceLoadDelegate.mm: Added.
        (WebKit::ResourceLoadDelegate::ResourceLoadDelegate):
        (WebKit::ResourceLoadDelegate::createResourceLoadClient):
        (WebKit::ResourceLoadDelegate::delegate):
        (WebKit::ResourceLoadDelegate::setDelegate):
        (WebKit::ResourceLoadDelegate::ResourceLoadClient::ResourceLoadClient):
        (WebKit::ResourceLoadDelegate::ResourceLoadClient::willSendRequest const):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::pageWillSendRequest):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setResourceLoadClient):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):
        (WebKit::WebPage::setHasResourceLoadClient):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-01-07  Kate Cheney  <katherine_cheney@apple.com>

        Create a mechanism for 'safe by default' web views
        https://bugs.webkit.org/show_bug.cgi?id=205407
        <rdar://problem/58053071>

        Reviewed by Alex Christensen.

        Adds common cases to be used as the basis for 'safe by default' web views.
        The cases are in the form of an NS_ENUM _WKWebViewCategory and
        its equivalent C++ enum WebViewCategory. The conversion between
        these happens in WKWebViewConfiguration.mm.

        * Shared/WebViewCategory.h: Added.
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::webViewCategory const):
        (API::PageConfiguration::setWebViewCategory):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (convertToAPIWebViewCategory):
        (convertFromAPIWebViewCategory):
        (-[WKWebViewConfiguration _webViewCategory]):
        (-[WKWebViewConfiguration _setWebViewCategory:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebKit.xcodeproj/project.pbxproj:

2020-01-07  Brent Fulgham  <bfulgham@apple.com>

        Network process sandboxes should not include 'common.sb' or 'system.sb'
        https://bugs.webkit.org/show_bug.cgi?id=205521
        <rdar://problem/58095870>

        Reviewed by Per Arne Vollan.

        This patch replaces the 'include' with a copy/paste of the contents of the relevant
        sandbox include file. I removed definitions that were not referenced in the existing
        Network sandbox, but did not otherwise edit the contents. There are duplicates and
        redundancies after this patch, which I will remove as a follow-up step once we confirm
        that this has no regressions.

        I also updated the sandbox to generate telemetry for some mach connections that we think
        are unneeded, or that should be targeted for removal.

        No new tests. There should be no change in behavior.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:

2020-01-07  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restabilization of non-unified build.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::create):
        (WebKit::WebIDBServer::WebIDBServer):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::suspend):
        (WebKit::WebIDBServer::didFireVersionChangeEvent):
        * UIProcess/WebContextClient.h:

2020-01-07  Daniel Bates  <dabates@apple.com>

        First character in each word-wrapped line has incorrect character rect when requested range spans multiple lines
        https://bugs.webkit.org/show_bug.cgi?id=205842
        <rdar://problem/56884325>

        Reviewed by Zalan Bujtas.

        Pass BoundingRectBehavior::IgnoreEmptyTextSelections to Range::absoluteBoundingBox() to compute
        the glyph bounding box ignoring empty text selections that would typically occur if the start of
        the range coincide with the edge of a line box. This makes the behavior more consistent with
        the behavior of NSLayoutManager.

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

2020-01-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r254144.

        Broke the iOS build.

        Reverted changeset:

        "First character in each word-wrapped line has incorrect
        character rect when requested range spans multiple lines"
        https://bugs.webkit.org/show_bug.cgi?id=205842
        https://trac.webkit.org/changeset/254144

2020-01-07  Keith Rollin  <krollin@apple.com>

        Reformat WebFrameLoaderClient logging
        https://bugs.webkit.org/show_bug.cgi?id=205869
        <rdar://problem/58379240>

        Reviewed by Brent Fulgham.

        Update the format used by WebFrameLoaderClient in its RELEASE_LOG
        logging. Use the format used by WebPageProxy and
        NetworkResourceLoader, which is generally of the form:

            <object-address> - [<values that help thread together operations>] <class>::<method>: <message and other useful values>

        So, for example:

            0x4a1d7c310 - WebFrameLoaderClient::dispatchDidReachLayoutMilestone: dispatching didCompletePageTransition, page = 0x7f83ba009208

        becomes:

            0x4a1d7c310 - [webFrame=0x7ff703f03b68, webFrameID=3, webPage=0x7ff704831808, webPageID=15] WebFrameLoaderClient::dispatchDidReachLayoutMilestone: dispatching didCompletePageTransition

        No new tests - no added or changed functionality.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidReachLayoutMilestone):

2020-01-07  Daniel Bates  <dabates@apple.com>

        First character in each word-wrapped line has incorrect character rect when requested range spans multiple lines
        https://bugs.webkit.org/show_bug.cgi?id=205842
        <rdar://problem/56884325>

        Reviewed by Zalan Bujtas.

        Pass BoundingRectBehavior::IgnoreEmptyTextSelections to Range::absoluteBoundingBox() to compute
        the glyph bounding box ignoring empty text selections that would typically occur if the start of
        the range coincide with the edge of a line box. This makes the behavior more consistent with
        the behavior of NSLayoutManager.

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

2020-01-07  Commit Queue  <commit-queue@webkit.org>

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

        It is breaking WinCairo build and internal builds. (Requested
        by youenn on #webkit).

        Reverted changeset:

        "Implement MediaRecorder backend in GPUProcess"
        https://bugs.webkit.org/show_bug.cgi?id=205802
        https://trac.webkit.org/changeset/254132

2020-01-07  youenn fablet  <youenn@apple.com>

        Implement MediaRecorder backend in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=205802

        Reviewed by Eric Carlson.

        Add support for sending audio/video tracks to record from WebProcess to GPUProcess.
        Add a MediaRecorderPrivate implementation that supports sending one audio track and/or one video track to GPUProcess
        and stopping/fetching data from the remote recorder in GPUProcess.

        In GPUProcess, implement the remote recorder using the existing WebCore recorder writer.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::userMediaCaptureManagerProxy):
        (WebKit::GPUConnectionToWebProcess::mediaRecorderManager):
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * GPUProcess/webrtc/RemoteMediaRecorder.cpp: Added.
        (WebKit::RemoteMediaRecorder::create):
        (WebKit::RemoteMediaRecorder::RemoteMediaRecorder):
        (WebKit::RemoteMediaRecorder::~RemoteMediaRecorder):
        (WebKit::RemoteMediaRecorder::storage):
        (WebKit::RemoteMediaRecorder::audioSamplesStorageChanged):
        (WebKit::RemoteMediaRecorder::audioSamplesAvailable):
        (WebKit::RemoteMediaRecorder::videoSampleAvailable):
        (WebKit::RemoteMediaRecorder::fetchData):
        (WebKit::RemoteMediaRecorder::stopRecording):
        * GPUProcess/webrtc/RemoteMediaRecorder.h: Added.
        * GPUProcess/webrtc/RemoteMediaRecorder.messages.in: Added.
        * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp: Added.
        (WebKit::RemoteMediaRecorderManager::RemoteMediaRecorderManager):
        (WebKit::RemoteMediaRecorderManager::~RemoteMediaRecorderManager):
        (WebKit::RemoteMediaRecorderManager::didReceiveRemoteMediaRecorderMessage):
        (WebKit::RemoteMediaRecorderManager::createRecorder):
        (WebKit::RemoteMediaRecorderManager::releaseRecorder):
        * GPUProcess/webrtc/RemoteMediaRecorderManager.h: Added.
        (WebKit::RemoteMediaRecorderManager::didReceiveMessageFromWebProcess):
        * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in: Added.
        * Scripts/webkit/messages.py:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/MediaRecorderProvider.cpp: Added.
        (WebCore::MediaRecorderProvider::createMediaRecorderPrivate):
        * WebProcess/GPU/media/MediaRecorderProvider.h: Added.
        * WebProcess/GPU/webrtc/MediaRecorderIdentifier.h: Added.
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: Added.
        (WebKit::MediaRecorderPrivate::MediaRecorderPrivate):
        (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate):
        (WebKit::MediaRecorderPrivate::sampleBufferUpdated):
        (WebKit::MediaRecorderPrivate::audioSamplesAvailable):
        (WebKit::MediaRecorderPrivate::storageChanged):
        (WebKit::MediaRecorderPrivate::fetchData):
        (WebKit::MediaRecorderPrivate::stopRecording):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: Added.
        * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp: Added.
        (WebKit::MediaRecorderProvider::createMediaRecorderPrivate):
        * WebProcess/GPU/webrtc/MediaRecorderProvider.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):

2020-01-07  youenn fablet  <youenn@apple.com>

        Add an option to make video capture in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=205853

        Reviewed by Eric Carlson.

        Add an option to make video capture in GPU process.
        Pass this option at creation of the web page so that the process can be updated after launch time.
        Apply the same principle to other audio/video capture parameters.
        Add SPI to update this preference.
        Fix bug in the passing of preference to process pool for the video capture in UIProcess parameter, which is now an experimental flag and not an internal one.

        Test: fast/mediastream/captureInGPUProcess.html

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebPreferences.yaml:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCaptureVideoInGPUProcessEnabled):
        (WKPreferencesGetCaptureVideoInGPUProcessEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateBoolValueForInternalDebugFeatureKey):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::setupCaptureProcesses):
        (WebKit::UserMediaCaptureManager::VideoFactory::createVideoCaptureSource):
        * WebProcess/cocoa/UserMediaCaptureManager.h:
        (WebKit::UserMediaCaptureManager::VideoFactory::setShouldCaptureInGPUProcess):

2020-01-07  youenn fablet  <youenn@apple.com>

        Fix non GPUProcess build issue in UserMediaCaptureManager
        https://bugs.webkit.org/show_bug.cgi?id=205851

        Reviewed by Eric Carlson.

        Build fix, no change of behavior.

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

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

        [GTK][WPE] Add API to retrieve and delete surrounding text for input methods
        https://bugs.webkit.org/show_bug.cgi?id=205716

        Reviewed by Žan Doberšek.

        Extend WebKitInputMethodContext to be able to retrieve and delete surrounding text.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const): Encode paragraphContext and paragraphContextCursorPosition.
        (WebKit::EditorState::PostLayoutData::decode): Decode paragraphContext and paragraphContextCursorPosition.
        * Shared/EditorState.h: Add paragraphContext and paragraphContextCursorPosition.
        * UIProcess/API/glib/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::deleteSurroundingCallback): Callback to handle
        WebKitInputMethodContext::delete-surrounding signal.
        (WebKit::InputMethodFilter::setContext): Connect to WebKitInputMethodContext::delete-surrounding signal.
        (WebKit::InputMethodFilter::notifySurrounding): Save the new surrounding text and position and call
        webkit_input_method_context_notify_surrounding().
        (WebKit::InputMethodFilter::deleteSurrounding): Ask WebKitWebView to delete the surrounding text.
        * UIProcess/API/glib/InputMethodFilter.h:
        * UIProcess/API/glib/WebKitInputMethodContext.cpp:
        (webkit_input_method_context_class_init): Add delete-surrounding signal.
        (webkit_input_method_context_notify_surrounding): Call the virtual method notify_surrounding if implemented.
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewDeleteSurrounding): Call WebPageProxy::deleteSurrounding().
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitInputMethodContext.h:
        * UIProcess/API/gtk/WebKitInputMethodContextImplGtk.cpp:
        (contextRetrieveSurrounding): Call gtk_im_context_set_surrounding() with the current surrounding text and position.
        (webkitInputMethodContextImplGtkConstructed): Connect to GtkIMContext::retrieve-surrounding signal.
        (webkitInputMethodContextImplGtkNotifySurrounding): Save the new surrounding text and position.
        (webkit_input_method_context_impl_gtk_class_init): Add implementation for notify_surrounding vfunc.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseUpdateTextInputState): Also notify the context about surrounding text and position.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::selectionDidChange): Ditto.
        * UIProcess/API/wpe/WebKitInputMethodContext.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::deleteSurrounding): Send DeleteSurrounding message to web process.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::deleteSurrounding): Delete the given range.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add DeleteSurrounding message.
        * WebProcess/WebPage/glib/WebPageGLib.cpp:
        (WebKit::WebPage::platformEditorState const): Moved from GTK and WPE here and also added paragraphContext and
        paragraphContextCursorPosition initialization.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp: Remove platformEditorState().
        * WebProcess/WebPage/wpe/WebPageWPE.cpp: Ditto.

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

        [GTK][WPE] Add API to set purpose and hints of active editable element to input methods
        https://bugs.webkit.org/show_bug.cgi?id=205605

        Reviewed by Žan Doberšek.

        Add input-purpose and input-hints properties to WebKitInputMethodContext. The message SetInputMethodState now
        receives an optional InputMethodState struct with information about the purpose and hints of the active editable
        element.

        * Scripts/webkit/messages.py: Only include InputMethodState.h for GTK and WPE.
        * Shared/glib/InputMethodState.cpp: Added.
        (WebKit::InputMethodState::setPurposeOrHintForInputMode):
        (WebKit::inputElementHasDigitsPattern):
        (WebKit::InputMethodState::setPurposeForInputElement):
        (WebKit::InputMethodState::addHintsForAutocapitalizeType):
        (WebKit::InputMethodState::encode const):
        (WebKit::InputMethodState::decode):
        * Shared/glib/InputMethodState.h: Added.
        (WebKit::operator==):
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::setContext): Use isEnabled() instead of m_enabled.
        (WebKit::InputMethodFilter::setState): Now receives an optional InputMethodState struct.
        (WebKit::InputMethodFilter::filterKeyEvent): Use isEnabled() instead of m_enabled.
        (WebKit::InputMethodFilter::isViewFocused const): Ditto.
        (WebKit::toWebKitPurpose): Helper to convert InputMethodState::Purpose to WebKitInputPurpose.
        (WebKit::toWebKitHints): Helper to convert InputMethodState::Hint to WebKitInputHints.
        (WebKit::InputMethodFilter::notifyFocusedIn): Set the purpose and hints to the context.
        (WebKit::InputMethodFilter::notifyFocusedOut): Use isEnabled() instead of m_enabled.
        (WebKit::InputMethodFilter::notifyCursorRect): Ditto.
        (WebKit::InputMethodFilter::preeditStarted): Ditto.
        (WebKit::InputMethodFilter::preeditChanged): Ditto.
        (WebKit::InputMethodFilter::preeditFinished): Ditto.
        (WebKit::InputMethodFilter::committed): Ditto.
        * UIProcess/API/glib/InputMethodFilter.h:
        (WebKit::InputMethodFilter::isEnabled const): Return true if we have a state.
        * UIProcess/API/glib/WebKitInputMethodContext.cpp:
        (webkitInputMethodContextSetProperty): Properties setter.
        (webkitInputMethodContextGetProperty): Properties getter.
        (webkit_input_method_context_class_init): Add implementation for properties getter and setter.
        (webkit_input_method_context_get_input_purpose):
        (webkit_input_method_context_set_input_purpose):
        (webkit_input_method_context_get_input_hints):
        (webkit_input_method_context_set_input_hints):
        * UIProcess/API/gtk/WebKitInputMethodContext.h:
        * UIProcess/API/gtk/WebKitInputMethodContextImplGtk.cpp:
        (toGtkInputPurpose): Helper to convert WebKitInputPurpose to GtkInputPurpose.
        (toGtkInputHints): Helper to convert WebKitInputHints to GtkInputHints.
        (inputPurposeChangedCallback): Set the purpose on GtkIMContext.
        (inputHintsChangedCallback): Set the hints on GtkIMContext.
        (webkitInputMethodContextImplGtkConstructed): Connect to notify signal for input-purpose and input-hints
        properties of the context.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetInputMethodState):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setInputMethodState):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::setInputMethodState):
        * UIProcess/API/wpe/WPEView.h:
        * UIProcess/API/wpe/WebKitInputMethodContext.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::setInputMethodState):
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::setInputMethodState):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::setInputMethodState):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/glib/WebPageGLib.cpp:
        (WebKit::inputMethodSateForElement): Build an InputMethodState for the given element.
        (WebKit::WebPage::setInputMethodState):

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

        WebDriver: several w3c collections tests added in r230953 are failing
        https://bugs.webkit.org/show_bug.cgi?id=184966

        Reviewed by Brian Burg.

        This is because JSON.stringify() is not enough, we need to first clone the value using the internal JSON clone
        algorithm explained in the spec. See https://w3c.github.io/webdriver/#dfn-internal-json-clone-algorithm.

        Fixes: imported/w3c/webdriver/tests/execute_script/collections.py::test_arguments
               imported/w3c/webdriver/tests/execute_script/collections.py::test_file_list
               imported/w3c/webdriver/tests/execute_script/collections.py::test_html_all_collection
               imported/w3c/webdriver/tests/execute_async_script/collections.py::test_arguments
               imported/w3c/webdriver/tests/execute_async_script/collections.py::test_file_list
               imported/w3c/webdriver/tests/execute_async_script/collections.py::test_html_all_collection

        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (WebKitAutomation.AutomationSessionProxy.prototype._jsonStringify): Call JSON.stringify(), but without the
        replacer and passing the result of _jsonClone().
        (WebKitAutomation.AutomationSessionProxy.prototype._isCollection): Helper to check if the value is a collection.
        (WebKitAutomation.AutomationSessionProxy.prototype._checkCyclic): Throw an error if the value is a cyclic structure.
        (WebKitAutomation.AutomationSessionProxy.prototype._jsonClone): Implement the internal JSON clone algorithm.
        (WebKitAutomation.AutomationSessionProxy.prototype._createNodeHandle): Trhow an error if the node is stale.

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

        [SOUP] HSTS Support causes page loading to fail with "Operation was cancelled"
        https://bugs.webkit.org/show_bug.cgi?id=203620

        Reviewed by Michael Catanzaro.

        The problem is that we are assuming that request cancellation happens synchronously, but it can happen that the
        async ready callback for the previous request is called after the new one has started.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::sendRequestCallback): Return early if this is a previous request already cancelled.

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

        WebDriver: handle no such element errors
        https://bugs.webkit.org/show_bug.cgi?id=204684

        Reviewed by Brian Burg.

        Add InvalidNodeIdentifier to be generated when the elementID provided by WebDriver is not a valid node identifier.

        * UIProcess/Automation/Automation.json: Add InvalidNodeIdentifier error.
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::isValidNodeHandle): Helper function to check the given node handle is valid.
        (WebKit::isValidNodeIdentifier): JavaScript callback function to check the node identifier is valid.
        (WebKit::WebAutomationSessionProxy::scriptObjectForFrame): Add isValidNodeIdentifier function.
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction): Handle InvalidNodeIdentifier errors.
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle): Call isValidNodeHandle() and generate
        InvalidNodeIdentifier error if it fails.
        (WebKit::WebAutomationSessionProxy::computeElementLayout): Ditto.
        (WebKit::WebAutomationSessionProxy::selectOptionElement): Ditto.
        (WebKit::WebAutomationSessionProxy::takeScreenshot): Ditto.
        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (let.AutomationSessionProxy.prototype._nodeForIdentifier): Call isValidNodeIdentifier() and throw
        InvalidNodeIdentifier if it fails.

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

        WebDriver: several tests in imported/w3c/webdriver/tests/state/get_element_attribute.py are failing
        https://bugs.webkit.org/show_bug.cgi?id=180415

        Reviewed by Brian Burg.

        Update the ElementAttribute atom to properly handle boolean attributes, following what the selenium original
        atom does.

        * UIProcess/Automation/atoms/ElementAttribute.js:
        (getAttribute):
        (tagName.string_appeared_here.lowercaseAttributeName.string_appeared_here):
        (isBooleanAttribute):

2020-01-07  Chris Fleizach  <cfleizach@apple.com>

        AX: Enable ACCESSIBILITY_ISOLATED_TREE
        https://bugs.webkit.org/show_bug.cgi?id=205535
        <rdar://problem/58131075>

        Reviewed by Zalan Bujtas.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetIsAccessibilityIsolatedTreeEnabled):
        (WKPreferencesGetIsAccessibilityIsolatedTreeEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2020-01-06  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Get display level in the UI process for all iOS platforms
        https://bugs.webkit.org/show_bug.cgi?id=205835
        <rdar://problem/58116883>

        Reviewed by Brent Fulgham.

        This was previously only done for iOS, but should be done for all iOS platforms.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2020-01-06  Eric Carlson  <eric.carlson@apple.com>

        Add some of the remote media player messages needed for video playback
        https://bugs.webkit.org/show_bug.cgi?id=205812
        <rdar://problem/58346531>

        Reviewed by Jer Noble.

        No new tests, it isn't possible to play video yet.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::prepareForRendering):
        (WebKit::RemoteMediaPlayerManagerProxy::setSize):
        (WebKit::RemoteMediaPlayerManagerProxy::setVisible):
        (WebKit::RemoteMediaPlayerManagerProxy::setShouldMaintainAspectRatio):
        (WebKit::RemoteMediaPlayerManagerProxy::setVideoFullscreenFrame):
        (WebKit::RemoteMediaPlayerManagerProxy::setVideoFullscreenGravity):
        (WebKit::RemoteMediaPlayerManagerProxy::acceleratedRenderingStateChanged):
        (WebKit::RemoteMediaPlayerManagerProxy::setShouldDisableSleep):
        (WebKit::RemoteMediaPlayerManagerProxy::setRate):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::getConfiguration):
        (WebKit::RemoteMediaPlayerProxy::prepareForRendering):
        (WebKit::RemoteMediaPlayerProxy::setSize):
        (WebKit::RemoteMediaPlayerProxy::setVisible):
        (WebKit::RemoteMediaPlayerProxy::setShouldMaintainAspectRatio):
        (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenFrame):
        (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenGravity):
        (WebKit::RemoteMediaPlayerProxy::acceleratedRenderingStateChanged):
        (WebKit::RemoteMediaPlayerProxy::setShouldDisableSleep):
        (WebKit::RemoteMediaPlayerProxy::setRate):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerReadyStateChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRenderingCanBeAccelerated):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::sizeChanged):
        (WebKit::MediaPlayerPrivateRemote::updateCachedState):
        (WebKit::MediaPlayerPrivateRemote::shouldIgnoreIntrinsicSize):
        (WebKit::MediaPlayerPrivateRemote::prepareForRendering):
        (WebKit::MediaPlayerPrivateRemote::setSize):
        (WebKit::MediaPlayerPrivateRemote::setVisible):
        (WebKit::MediaPlayerPrivateRemote::setShouldMaintainAspectRatio):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenGravity):
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):
        (WebKit::MediaPlayerPrivateRemote::setShouldDisableSleep):
        (WebKit::MediaPlayerPrivateRemote::naturalSize const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h:
        (WebKit::RemoteMediaPlayerConfiguration::encode const):
        (WebKit::RemoteMediaPlayerConfiguration::decode):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::sizeChanged):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
        * WebProcess/GPU/media/RemoteMediaPlayerState.h:
        (WebKit::RemoteMediaPlayerState::encode const):
        (WebKit::RemoteMediaPlayerState::decode):

2020-01-06  Chris Dumez  <cdumez@apple.com>

        Improve logging for when a synchronous IPC times out
        https://bugs.webkit.org/show_bug.cgi?id=205829

        Reviewed by Tim Horton.

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

2020-01-06  Peng Liu  <peng.liu6@apple.com>

        Build (unified) failure after adding source files to support media in GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205616

        Reviewed by Darin Adler.

        No new tests, no functional change.

        * Sources.txt:
        * SourcesGTK.txt:
        * WebKit.xcodeproj/project.pbxproj:

2020-01-06  Alex Christensen  <achristensen@webkit.org>

        NetworkSessionCocoa::isolatedSession should not use iterator after mutating m_isolatedSessions
        https://bugs.webkit.org/show_bug.cgi?id=205824
        <rdar://problem/55107625>

        Reviewed by Chris Dumez.

        Classic iterator use after mutating iterated container was causing crashes by returning a null SessionWrapper&
        This was introduced in r252185 or r248640.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::isolatedSession):

2020-01-06  Mark Lam  <mark.lam@apple.com>

        Convert ASSERT_DISABLED to ASSERT_ENABLED, and fix some tests of NDEBUG that should actually test for ASSERT_ENABLED.
        https://bugs.webkit.org/show_bug.cgi?id=205776

        Reviewed by Saam Barati.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::invalidateAndCancel):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::setCapacity):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNSURLSessionResponseDisposition):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForMessage):
        * Platform/IPC/MessageReceiver.h:
        (IPC::MessageReceiver::willBeAddedToMessageReceiverMap):
        (IPC::MessageReceiver::willBeRemovedFromMessageReceiverMap):
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::readFromMachPort):
        * Platform/mac/MachUtilities.cpp:
        (setMachExceptionPort):
        * Shared/API/APIClient.h:
        (API::Client::Client):
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        * Shared/Cocoa/ArgumentCodersCocoa.h:
        * Shared/SharedStringHashTableReadOnly.cpp:
        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/GenericCallback.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::Transaction::Token::Token):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::~WebPageProxy):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::NetscapePluginStream):
        (WebKit::NetscapePluginStream::notifyAndDestroyStream):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runModal):
        * WebProcess/WebProcess.cpp:
        (WebKit::checkDocumentsCaptureStateConsistency):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateProcessName):

2020-01-06  Alex Christensen  <achristensen@webkit.org>

        Remove WebsiteDataStore::setServiceWorkerRegistrationDirectory
        https://bugs.webkit.org/show_bug.cgi?id=205754

        Reviewed by Youenn Fablet.

        The directory is now only set in the configuration, which will prevent misuse of the misplaced SPI.
        Updated API tests, which still work.

        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationCopyServiceWorkerRegistrationDirectory):
        (WKWebsiteDataStoreConfigurationSetServiceWorkerRegistrationDirectory):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreCopyServiceWorkerRegistrationDirectory): Deleted.
        (WKWebsiteDataStoreSetServiceWorkerRegistrationDirectory): Deleted.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _hasRegisteredServiceWorker]):
        (-[WKWebsiteDataStore _serviceWorkerRegistrationDirectory]): Deleted.
        (-[WKWebsiteDataStore _setServiceWorkerRegistrationDirectory:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::setCacheStorageDirectory):
        (WebKit::WebsiteDataStore::serviceWorkerRegistrationDirectory const): Deleted.
        (WebKit::WebsiteDataStore::setServiceWorkerRegistrationDirectory): Deleted.

2020-01-06  Alex Christensen  <achristensen@webkit.org>

        Remove _WKProcessPoolConfiguration.CTDataConnectionServiceType and suppressesConnectionTerminationOnSystemChange
        https://bugs.webkit.org/show_bug.cgi?id=205751

        Reviewed by Darin Adler.

        Their replacements on _WKWebViewConfiguration have been adopted.

        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::suppressesConnectionTerminationOnSystemChange const): Deleted.
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::dataConnectionServiceType const):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::globalCTDataConnectionServiceType): Deleted.
        (WebKit::NetworkSessionCocoa::setCTDataConnectionServiceType): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration suppressesConnectionTerminationOnSystemChange]): Deleted.
        (-[_WKProcessPoolConfiguration setSuppressesConnectionTerminationOnSystemChange:]): Deleted.
        (-[_WKProcessPoolConfiguration CTDataConnectionServiceType]): Deleted.
        (-[_WKProcessPoolConfiguration setCTDataConnectionServiceType:]): Deleted.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::paymentCoordinatorCTDataConnectionServiceType):

2020-01-06  Keith Rollin  <krollin@apple.com>

        Reformat WebPage logging
        https://bugs.webkit.org/show_bug.cgi?id=205709
        <rdar://problem/58290285>

        Reviewed by Brent Fulgham.

        Update the format used by WebPage in its RELEASE_LOG logging. Use the
        format used by WebPageProxy and NetworkResourceLoader, which is
        generally of the form:

            <object-address> - [<values that help thread together operations>] <class>::<method>: <message and other useful values>

        So, for example:

            0x4a1df5000 - WebLoaderStrategy::scheduleLoad: Resource is being scheduled with the NetworkProcess (frame=0x4a1db0220, priority=0, webPageID=15, frameID=3, resourceID=32)',

        becomes:

            0x4a1df5000 - [resourceLoader=0x1418b7200, frameLoader=0x1326d7340, frame=0x4a1db0220, webPageID=15, frameID=3, resourceID=32] WebLoaderStrategy::scheduleLoad: Resource is being scheduled with the NetworkProcess (priority=2)

        This new form is a lot more verbose, but it really helps in tracing
        activity from the top of our page/frame/resource load stack to the
        bottom.

        No new tests - no added or changed functionality.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::tryLoadingUsingURLSchemeHandler):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::networkProcessCrashed):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebLoaderStrategy.h:

2020-01-06  Luming Yin  <luming_yin@apple.com>

        Add WKWebView SPI to query _WKMediaMutedState
        https://bugs.webkit.org/show_bug.cgi?id=205789
        <rdar://problem/58335241>

        Reviewed by Eric Carlson.

        Add plumbing for clients to query the media muted state on WKWebView.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mediaMutedState]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/MediaUtilities.h: Renamed from Source/WebKit/UIProcess/Cocoa/MediaCaptureUtilities.h.
        * UIProcess/Cocoa/MediaUtilities.mm: Renamed from Source/WebKit/UIProcess/Cocoa/MediaCaptureUtilities.mm.
        (WebKit::toWKMediaCaptureState):
        (WebKit::toWKMediaMutedState):
        * UIProcess/Cocoa/UIDelegate.mm:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::mutedStateFlags const):
        * WebKit.xcodeproj/project.pbxproj:

2020-01-05  Dean Jackson  <dino@apple.com>

        Rename GraphicsContext3D to GraphicsContextGL
        https://bugs.webkit.org/show_bug.cgi?id=205778
        <rdar://problem/58327597>

        Reviewed by Sam Weinig.

        Rename all the GraphicsContext3D things to GraphicsContextGL
        (includes Extensions3D and GRAPHICS_CONTEXT_3D).

        GraphicsContext3DBase now becomes GraphicsContextGL.
        GraphicsContext3D is now GraphicsContextGLOpenGL (since it represents
        the OpenGL implementation of the API).

        * CMakeLists.txt:
        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::initializeEGL):
        * UIProcess/mac/HighPerformanceGPUManager.cpp:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::copyVideoTextureToPlatformTexture):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::displayConfigurationChanged):

2020-01-06  Rob Buis  <rbuis@igalia.com>

        Remove unused GlobalFrameID from NetworkCacheSpeculativeLoad
        https://bugs.webkit.org/show_bug.cgi?id=205796

        Reviewed by Chris Dumez.

        Remove unused GlobalFrameID from NetworkCacheSpeculativeLoad
        and NetworkCache::update.

        No change in behavior.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::update):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveResponse):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:

2020-01-06  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Issue mach lookup extension to launch services daemon for Mail
        https://bugs.webkit.org/show_bug.cgi?id=205316

        Reviewed by Brent Fulgham.

        Issue mach lookup extension to "com.apple.lsd.open" for Mail, since this service will be removed from the WebContent sandbox.

        Test: fast/sandbox/ios/sandbox-mach-lookup-mail.html

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (+[WKWebView _setApplicationBundleIdentifier:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-01-06  Youenn Fablet  <youenn@apple.com>

        RemoteVideoSample::create does not need to take a MediaSample r value
        https://bugs.webkit.org/show_bug.cgi?id=205793

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:

2020-01-06  youenn fablet  <youenn@apple.com>

        Implement RTC VTB encoders in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=205713

        Reviewed by Eric Carlson.

        Add support for remote video encoders in GPUProcess based on libwebrtc exposed routines.
        WebProcess sets callbacks in the webrtc backend to implement H264 encoding as a remote video encoder.
        In addition to video frames, we also need to send rate setting orders.

        * Configurations/WebKit.xcconfig:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::LibWebRTCCodecsProxy::~LibWebRTCCodecsProxy):
        (WebKit::LibWebRTCCodecsProxy::createEncoder):
        (WebKit::LibWebRTCCodecsProxy::releaseEncoder):
        (WebKit::LibWebRTCCodecsProxy::initializeEncoder):
        (WebKit::toWebRTCVideoRotation):
        (WebKit::LibWebRTCCodecsProxy::encodeFrame):
        (WebKit::LibWebRTCCodecsProxy::setEncodeRates):
        * Scripts/webkit/messages.py:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::createVideoEncoder):
        (WebKit::releaseVideoEncoder):
        (WebKit::initializeVideoEncoder):
        (WebKit::toMediaSampleVideoRotation):
        (WebKit::encodeVideoFrame):
        (WebKit::registerEncodeCompleteCallback):
        (WebKit::setEncodeRatesCallback):
        (WebKit::LibWebRTCCodecs::setCallbacks):
        (WebKit::LibWebRTCCodecs::createDecoder):
        (WebKit::LibWebRTCCodecs::releaseDecoder):
        (WebKit::LibWebRTCCodecs::failedDecoding):
        (WebKit::LibWebRTCCodecs::completedDecoding):
        (WebKit::LibWebRTCCodecs::createEncoder):
        (WebKit::LibWebRTCCodecs::releaseEncoder):
        (WebKit::LibWebRTCCodecs::initializeEncoder):
        (WebKit::LibWebRTCCodecs::encodeFrame):
        (WebKit::LibWebRTCCodecs::registerEncodeFrameCallback):
        (WebKit::LibWebRTCCodecs::setEncodeRates):
        (WebKit::LibWebRTCCodecs::completedEncoding):
        (WebKit::LibWebRTCCodecs::pixelBufferPool):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.messages.in:
        * WebProcess/GPU/webrtc/RTCEncoderIdentifier.h: Added.
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createDecoderFactory):

2020-01-05  Eric Carlson  <eric.carlson@apple.com>

        [Media in GPU process] Add remote MIME type cache
        https://bugs.webkit.org/show_bug.cgi?id=205763
        <rdar://problem/58312152>

        Reviewed by Dean Jackson.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::supportsTypeAndCodecs):
        (WebKit::RemoteMediaPlayerManagerProxy::canDecodeExtendedType):
        (WebKit::RemoteMediaPlayerManagerProxy::supportsType): Deleted.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/GPU/media/RemoteMediaPlayerMIMETypeCache.cpp: Added.
        (WebKit::RemoteMediaPlayerMIMETypeCache::RemoteMediaPlayerMIMETypeCache):
        (WebKit::RemoteMediaPlayerMIMETypeCache::mimeCache const):
        (WebKit::RemoteMediaPlayerMIMETypeCache::isAvailable const):
        (WebKit::RemoteMediaPlayerMIMETypeCache::staticContainerTypeList):
        (WebKit::RemoteMediaPlayerMIMETypeCache::isUnsupportedContainerType):
        (WebKit::RemoteMediaPlayerMIMETypeCache::canDecodeExtendedType):
        (WebKit::RemoteMediaPlayerMIMETypeCache::supportsTypeAndCodecs):
        (WebKit::RemoteMediaPlayerMIMETypeCache::initializeCache):
        * WebProcess/GPU/media/RemoteMediaPlayerMIMETypeCache.h:  Added.

        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::mimeCaches):
        (WebKit::RemoteMediaPlayerManager::typeCache):
        (WebKit::RemoteMediaPlayerManager::initialize):
        (WebKit::RemoteMediaPlayerManager::getSupportedTypes):
        (WebKit::RemoteMediaPlayerManager::supportsTypeAndCodecs):

        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::setMediaMIMETypes):

2020-01-05  Sam Weinig  <weinig@apple.com>

        Further simplify StringBuilder usage by standardizing hex formating to a single hex() function
        https://bugs.webkit.org/show_bug.cgi?id=205759

        Reviewed by Dean Jackson.

        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::completeDeviceIdHashSaltForOriginCall):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::loggingString):
        Replace appendUnsignedAsHex() with append(hex()).

2020-01-05  Simon Fraser  <simon.fraser@apple.com>

        DumpRenderTree doesn't always call updateRendering() when a test completes
        https://bugs.webkit.org/show_bug.cgi?id=205761

        Reviewed by Darin Adler.

        Use the QuartzCore SPI header.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

2020-01-04  Keith Rollin  <krollin@apple.com>

        Reformat WebPage logging
        https://bugs.webkit.org/show_bug.cgi?id=205705
        <rdar://problem/58288704>

        Reviewed by Alex Christensen.

        Update the format used by WebPage in its RELEASE_LOG logging. Use the
        format used by WebPageProxy and NetworkResourceLoader, which is
        generally of the form:

            <object-address> - [<values that help thread together operations>] <class>::<method>: <message and other useful values>

        So, for example:

            0x7f83ba009208 - WebPage (webPageID=15) - Adding a reason 1 to freeze layer tree (now 1); old reasons were 0

        becomes:

            0x7f83ba009208 - [webPageID=15] WebPage::freezeLayerTree: Adding a reason to freeze layer tree (reason=1, new=1, old=0)

        No new tests - no added or changed functionality.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):
        (WebKit::WebPage::markLayersVolatile):
        (WebKit::WebPage::cancelMarkLayersVolatile):
        (WebKit::WebPage::touchEventSync):

2020-01-03  Chris Dumez  <cdumez@apple.com>

        Add support for DragEvent
        https://bugs.webkit.org/show_bug.cgi?id=205758

        Reviewed by Darin Adler.

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

2020-01-03  Garrett Davidson  <garrett_davidson@apple.com>

        IconLoadingClient::getLoadDecisionForIcon() leaks an Objective-C block
        https://bugs.webkit.org/show_bug.cgi?id=205750
        <rdar://problem/57981723>

        Reviewed by Wenson Hsieh.

        Replace a Block_copy with makeBlockPtr to prevent leaking the ObjC block.

        * UIProcess/Cocoa/IconLoadingDelegate.mm:
        (WebKit::IconLoadingDelegate::IconLoadingClient::getLoadDecisionForIcon):

2020-01-03  Tim Horton  <timothy_horton@apple.com>

        Crashes under -[WKWebView _addUpdateVisibleContentRectPreCommitHandler]_block_invoke
        https://bugs.webkit.org/show_bug.cgi?id=205749
        <rdar://problem/56433624>

        Reviewed by Simon Fraser.

        Implement a speculative fix for a common crash. We believe that this is due to
        a mechanism UIKit uses to bounce -dealloc (in our case, of WKWebView and/or WKContentView)
        to the main thread when the last reference is dropped on a background thread.
        At that point, deallocation has already begun, -retain cannot revive the object,
        but -dealloc has not yet been called (because of the nature of this mechanism).

        To avoid this, make PageClientImpl -> WKContentView and WKContentView -> WKWebView
        weak instead of raw references. This way, we won't even get to _addUpdateVisibleContentRectPreCommitHandler
        with a deallocating WKWebView, nor try (and fail) to retain it for later use in the block.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        (WebKit::PageClientImpl::createValidationBubble):
        (WebKit::PageClientImpl::createDataListSuggestionsDropdown):
        (WebKit::PageClientImpl::createDrawingView):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView webView]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:contentInsets:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView _didCommitLayerTree:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _updateLongPressAndHighlightLongPressGestures]):
        (-[WKContentView endEditingAndUpdateFocusAppearanceWithReason:]):
        (-[WKContentView gestureRecognizerMayPinchToZoomWebView:]):
        (-[WKContentView _showAttachmentSheet]):
        (-[WKContentView _actionForLongPressFromPositionInformation:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsNearMarkedText:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView _stylusSingleTapRecognized:]):
        (-[WKContentView _endPotentialTapAndEnableDoubleTapGesturesIfNecessary]):
        (-[WKContentView _updateInteractionTintColor]):
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView accessibilityRetrieveSpeakSelectionContent]):
        (-[WKContentView requestRectsToEvadeForSelectionCommandsWithCompletionHandler:]):
        (-[WKContentView accessoryAutoFill]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView _didChangeWebViewEditability]):
        (-[WKContentView insertTextSuggestion:]):
        (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]):
        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:inDirection:]):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
        (-[WKContentView addFocusedFormControlOverlay]):
        (-[WKContentView presentViewControllerForCurrentFocusedElement]):
        (-[WKContentView dismissAllInputViewControllers:]):
        (-[WKContentView _showShareSheet:inRect:completionHandler:]):
        (-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]):
        (-[WKContentView actionSheetAssistant:showCustomSheetForElement:]):
        (-[WKContentView dataDetectionContextForPositionInformation:]):
        (-[WKContentView actionSheetAssistant:getAlternateURLForImage:completion:]):
        (-[WKContentView _didChangeDragInteractionPolicy]):
        (-[WKContentView dragLiftDelay]):
        (-[WKContentView setupDragAndDropInteractions]):
        (-[WKContentView _didPerformDragOperation:]):
        (-[WKContentView _dragDestinationActionForDropSession:]):
        (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationLists:stagedDragSource:]):
        (-[WKContentView _handleDropByInsertingImagePlaceholders:session:]):
        (-[WKContentView _dragInteraction:dataOwnerForSession:]):
        (-[WKContentView dragInteraction:previewForLiftingItem:session:]):
        (-[WKContentView dragInteraction:sessionWillBegin:]):
        (-[WKContentView dragInteraction:session:didEndWithOperation:]):
        (-[WKContentView dragInteraction:previewForCancellingItem:withDefault:]):
        (-[WKContentView _dropInteraction:dataOwnerForSession:]):
        (-[WKContentView dropInteraction:sessionDidUpdate:]):
        (-[WKContentView dropInteraction:performDrop:]):
        (-[WKContentView dismissQuickboardViewControllerAndRevealFocusedFormOverlayIfNecessary:]):
        (-[WKContentView viewController:inputContextViewHeightForSize:]):
        (-[WKContentView inputContextViewForViewController:]):
        (-[WKContentView _registerPreview]):
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (-[WKContentView _contextMenuInteraction:configurationForMenuAtLocation:completion:]):
        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView _createTargetedPreviewIfPossible]):
        (-[WKContentView contextMenuInteraction:willDisplayMenuForConfiguration:animator:]):
        (-[WKContentView contextMenuInteraction:willPerformPreviewActionForMenuWithConfiguration:animator:]):
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        (-[WKContentView _previewItemController:commitPreview:]):
        (-[WKContentView _previewItemController:didDismissPreview:committing:]):

2020-01-03  Peng Liu  <peng.liu6@apple.com>

        Update the RemoteMediaPlayerManagerProxy::Load XPC message to provide the updated RemoteMediaPlayerConfiguration to the web process
        https://bugs.webkit.org/show_bug.cgi?id=205740

        Reviewed by Eric Carlson.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::load):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::load):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote::load):

2020-01-03  Andy Estes  <aestes@apple.com>

        [Apple Pay] Provide a better error message when Apple Pay blocks user agent script evaluation
        https://bugs.webkit.org/show_bug.cgi?id=205730
        <rdar://problem/55573484>

        Reviewed by Brady Eidson.

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::userAgentScriptsBlockedErrorMessage const):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

2020-01-03  Dean Jackson  <dino@apple.com>

        Provide pid to crashing service worker process and GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205564
        <rdar://problem/58300321>

        Build fix for TestWebKitAPI.

        * UIProcess/API/C/WKContext.h:

2020-01-03  Yusuke Suzuki  <ysuzuki@apple.com>

        Put more WebCore/WebKit JS objects into IsoSubspace
        https://bugs.webkit.org/show_bug.cgi?id=205711

        Reviewed by Keith Miller.

        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2020-01-03  Simon Fraser  <simon.fraser@apple.com>

        Add some shared schemes to the WebKit.xcworkspace
        https://bugs.webkit.org/show_bug.cgi?id=205698

        Reviewed by Tim Horton.

        Make WebKit.xcworkspace show the following schemes by default:
            All Source
            All Tools
            WTF
            JavaScriptCore
            WebCore
            WebKit
            WebKitLegacy
            DumpRenderTree
            WebKitTestRunner
            TestWebKitAPI
            MiniBrowser
            MobileMiniBrowser.
            
        Also remove the MobileMiniBrowserUITests scheme.

        * WebKit.xcodeproj/xcshareddata/xcschemes/WebKit.xcscheme: Copied from Tools/MobileMiniBrowser/MobileMiniBrowser.xcodeproj/xcshareddata/xcschemes/MobileMiniBrowserUITests.xcscheme.

2020-01-03  youenn fablet  <youenn@apple.com>

        Provide pid to crashing service worker process and GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205564

        Reviewed by Alex Christensen.

        No change of behavior, we provide pids to the WKContext callbacks.

        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::gpuProcessCrashed):
        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::serviceWorkerProcessDidCrash):
        (WebKit::WebContextClient::gpuProcessDidCrash):
        * UIProcess/WebContextClient.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::serviceWorkerProcessCrashed):
        (WebKit::WebProcessPool::gpuProcessCrashed):
        * UIProcess/WebProcessPool.h:

2020-01-03  Alex Christensen  <achristensen@webkit.org>

        Deprecate _WKWebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=205539

        Reviewed by Wenson Hsieh.

        Its last use was removed in rdar://problem/58064847
        but we need to keep it in WebKit until the next Safari release
        to keep Safari working with built versions of open source WebKit with run-safari.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateWebsitePolicies:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

2020-01-03  youenn fablet  <youenn@apple.com>

        NetworkResourceLoader::didFinishWithRedirectResponse should not assume the load is coming from network
        https://bugs.webkit.org/show_bug.cgi?id=205715

        Reviewed by Alex Christensen.

        Covered by updated test.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
        If redirection is coming from cache, the load is not null.
        We just need to use the request URL since the redirection mode is manual.

2020-01-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, drop new assertion added in r253984 which hits on OpenSource bots

        * Shared/ios/DependencyProcessAssertionIOS.mm:
        (WebKit::DependencyProcessAssertion::DependencyProcessAssertion):

2020-01-03  Chris Dumez  <cdumez@apple.com>

        Improve release logging in ServiceWorkerFetchTask
        https://bugs.webkit.org/show_bug.cgi?id=205692

        Reviewed by Youenn Fablet.

        Improve release logging in ServiceWorkerFetchTask to facilitate debugging.

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::~ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::start):
        (WebKit::ServiceWorkerFetchTask::contextClosed):
        (WebKit::ServiceWorkerFetchTask::startFetch):
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        (WebKit::ServiceWorkerFetchTask::didFinish):
        (WebKit::ServiceWorkerFetchTask::didFail):
        (WebKit::ServiceWorkerFetchTask::didNotHandle):
        (WebKit::ServiceWorkerFetchTask::cannotHandle):
        (WebKit::ServiceWorkerFetchTask::cancelFromClient):
        (WebKit::ServiceWorkerFetchTask::continueDidReceiveFetchResponse):
        (WebKit::ServiceWorkerFetchTask::continueFetchTaskWith):
        (WebKit::ServiceWorkerFetchTask::timeoutTimerFired):
        (WebKit::ServiceWorkerFetchTask::softUpdateIfNeeded):

2020-01-03  youenn fablet  <youenn@apple.com>

        Fix non-libwebrtc builds after r253957
        https://bugs.webkit.org/show_bug.cgi?id=205714

        Unreviewed.

        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        Move the includes inside the compilation guard.

2020-01-02  Keith Rollin  <krollin@apple.com>

        Reformat WebProcess logging
        https://bugs.webkit.org/show_bug.cgi?id=205691
        <rdar://problem/58283294>

        Reviewed by Chris Dumez.

        Update the format used by WebProcess in its RELEASE_LOG logging. Use
        the format used by WebPageProxy and NetworkResourceLoader, which is
        generally of the form:

            <object-address> - [<values that help thread together operations>] <class>::<method>: <message and other useful values>

        So, for example:

            0x6f1df7000 - WebProcess::destroyRenderingResources() took 0.02ms

        becomes:

            0x6f1df7000 - [sessionID=2] WebProcess::destroyRenderingResources: took 0.02ms

        While we're at it, also convert over to the RELEASE_LOG_IF_ALLOWED
        style of logging macro. We didn't used to be able to do this since the
        decision on whether or not to allow logging is typically based on
        SessionID, which didn't used to be an attribute of WebProcess. Now
        WebProcesses do (or can) have a SessionID, so use that to support the
        hiding of logging in private sessions.

        No new tests - no added or changed functionality.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::markAllLayersVolatile):
        (WebKit::WebProcess::freezeAllLayerTrees):
        (WebKit::WebProcess::unfreezeAllLayerTrees):
        (WebKit::WebProcess::processDidResume):
        (WebKit::WebProcess::grantUserMediaDeviceSandboxExtensions):
        (WebKit::WebProcess::revokeUserMediaDeviceSandboxExtensions):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::isAlwaysOnLoggingAllowed):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateProcessName):
        (WebKit::WebProcess::updateCPUMonitorState):
        (WebKit::WebProcess::destroyRenderingResources):
        (WebKit::WebProcess::updateFreezerStatus):

2020-01-02  Yusuke Suzuki  <ysuzuki@apple.com> and Simon Fraser  <simon.fraser@apple.com>

        Experiment: create lots of different malloc zones for easier accounting of memory use
        https://bugs.webkit.org/show_bug.cgi?id=186422

        Reviewed by Saam Barati.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::~ShareableBitmap):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataEncoder::HistoryEntryDataEncoder):
        (WebKit::HistoryEntryDataEncoder::finishEncoding):
        (WebKit::encodeSessionHistoryEntryData):
        (WebKit::encodeLegacySessionState):

2020-01-02  Chris Dumez  <cdumez@apple.com>

        [iOS] Replace "unexpectedly resumed" observer with RunningBoard suspendible assertions
        https://bugs.webkit.org/show_bug.cgi?id=205687
        <rdar://problem/57890246>

        Reviewed by Tim Horton.

        Adopt new RunningBoard process assertion to indicate that WebContent processes depend on their
        UIProcess (and therefore, the UIProcess must be running if the WebContent process is). This
        replaces our "Unexpectedly resumed" assertion which was causing unexpected terminations in some
        cases.

        * Configurations/WebKit.xcconfig:
        * Platform/spi/ios/RunningBoardServicesSPI.h: Added.
        * Scripts/process-entitlements.sh:
        * Shared/DependencyProcessAssertion.cpp: Added.
        (WebKit::DependencyProcessAssertion::DependencyProcessAssertion):
        (WebKit::DependencyProcessAssertion::~DependencyProcessAssertion):
        * Shared/DependencyProcessAssertion.h: Added.
        * Shared/ios/DependencyProcessAssertionIOS.mm: Added.
        (WebKit::DependencyProcessAssertion::DependencyProcessAssertion):
        (WebKit::DependencyProcessAssertion::~DependencyProcessAssertion):
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2020-01-02  Keith Rollin  <krollin@apple.com>

        Reformat WebProcessCache logging
        https://bugs.webkit.org/show_bug.cgi?id=205683
        <rdar://problem/58269352>

        Reviewed by Alex Christensen.

        Update the format used by WebProcessCache in its RELEASE_LOG logging.
        Use the format used by WebPageProxy and NetworkResourceLoader, which
        is generally of the form:

            <object-address> - [<values that help thread together operations>] <class>::<method>: <message and other useful values>

        So, for example:

            0x1145ed208 - WebProcessCache::canCacheProcess(): Not caching process 83671 because it does not have an associated registrable domain

        becomes:

            0x1145ed208 - [PID=83671] WebProcessCache::canCacheProcess: Not caching process because it does not have an associated registrable domain

        No new tests - no added or changed functionality.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::canCacheProcess const):
        (WebKit::WebProcessCache::addProcessIfPossible):
        (WebKit::WebProcessCache::addProcess):
        (WebKit::WebProcessCache::takeProcess):
        (WebKit::WebProcessCache::updateCapacity):
        (WebKit::WebProcessCache::clear):
        (WebKit::WebProcessCache::clearAllProcessesForSession):
        (WebKit::WebProcessCache::setApplicationIsActive):
        (WebKit::WebProcessCache::removeProcess):

2020-01-02  Keith Rollin  <krollin@apple.com>

        Reformat ProcessThrottler logging
        https://bugs.webkit.org/show_bug.cgi?id=205679
        <rdar://problem/58265958>

        Reviewed by Alex Christensen.

        Update the format used by ProcessThrottler in its RELEASE_LOG logging.
        Use the format used by WebPageProxy and NetworkResourceLoader, which
        is generally of the form:

            <object-address> - [<values that help thread together operations>] <class>::<method>: <message and other useful values>

        So, for example:

            [PID: 0] 0x1145ce5e8 - ProcessThrottler::invalidateAllActivities() BEGIN

        becomes:

            0x1145ce5e8 - [PID: 0] ProcessThrottler::invalidateAllActivities: BEGIN

        No new tests - no added or changed functionality.

        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::invalidateAllActivities):
        (WebKit::ProcessThrottler::setAssertionState):
        (WebKit::ProcessThrottler::updateAssertionIfNeeded):
        (WebKit::ProcessThrottler::didConnectToProcess):
        (WebKit::ProcessThrottler::prepareToSuspendTimeoutTimerFired):
        (WebKit::ProcessThrottler::processReadyToSuspend):
        (WebKit::ProcessThrottler::sendPrepareToSuspendIPC):
        (WebKit::ProcessThrottler::uiAssertionWillExpireImminently):
        * UIProcess/ProcessThrottler.h:
        (WebKit::ProcessThrottler::Activity::Activity):
        (WebKit::ProcessThrottler::Activity::invalidate):

2020-01-02  Keith Rollin  <krollin@apple.com>

        Reformat WebResourceLoader logging
        https://bugs.webkit.org/show_bug.cgi?id=205680
        <rdar://problem/58266105>

        Reviewed by Alex Christensen.

        Update the format used by WebResourceLoader in its RELEASE_LOG
        logging. Use the format used by WebPageProxy and
        NetworkResourceLoader, which is generally of the form:

            <object-address> - [<values that help thread together operations>] <class>::<method>: <message and other useful values>

        So, for example:

            0x4a1dbcb58 - WebResourceLoader::didFinishResourceLoad: (webPageID=15, frameID=3, resourceID=1, length=212132)

        becomes:

            0x4a1dbcb58 - [webPageID=15, frameID=3, resourceID=1] WebResourceLoader::didFinishResourceLoad: (length=212132)

        No new tests - no added or changed functionality.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::serviceWorkerDidNotHandle):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didBlockAuthenticationChallenge):
        (WebKit::WebResourceLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):
        (WebKit::WebResourceLoader::didReceiveResource):

2020-01-02  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable CORS on requests to URLs matching a pattern
        https://bugs.webkit.org/show_bug.cgi?id=205534
        <rdar://problem/58011337>

        Reviewed by Chris Dumez.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        (API::PageConfiguration::PageConfiguration): Deleted.
        (API::PageConfiguration::~PageConfiguration): Deleted.
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::corsDisablingPatterns const):
        (API::PageConfiguration::setCORSDisablingPatterns):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _corsDisablingPatterns]):
        (-[WKWebViewConfiguration _setCORSDisablingPatterns:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):

2020-01-02  Sam Weinig  <weinig@apple.com>

        Simplify StringBuilder API/align with makeString by removing appendFixed* functions and using FormatNumber struct instead
        https://bugs.webkit.org/show_bug.cgi?id=205671

        Reviewed by Alex Christensen.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::dumpContentsToFile):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::asJSON const):
        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::loggingString const):
        Replace all uses of builder.appendFixedPrecisionNumber(...) with builder.append(FormattedNumber::fixedPrecision(...)).

2020-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make ondemand hardware acceleration policy never leave AC mode
        https://bugs.webkit.org/show_bug.cgi?id=205558

        Reviewed by Sergio Villar Senin.

        We still enter AC mode on demand but we never leave it for the same drawing area. This avoids scrolling
        performance problems with some websites that start small accelerated animation while scrolling (like WebKit
        bugzilla review tool), due to constant enter/leave AC mode.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init): Update API documentation.
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode): Force AC mode the first time we enter it.

2019-12-22  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2020
        https://bugs.webkit.org/show_bug.cgi?id=205552

        Reviewed by Darin Adler.

        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-OSX.plist:
        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-iOS.plist:
        * Info.plist:
        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkService/Info-OSX.plist:
        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkService/Info-iOS.plist:
        * PluginProcess/EntryPoint/Cocoa/XPCService/PluginService.64.Info.plist:
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-OSX.plist:
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-iOS.plist:

2019-12-31  Peng Liu  <peng.liu6@apple.com>

        Add remote media resource loader for the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205379

        Reviewed by Youenn Fablet.

        In the GPU process, the RemoteMediaResourceLoader creates RemoteMediaResource(s),
        which will notify the media resource clients (WebCoreNSURLSessionDataTaskClient).
        Then the data will be forwarded to AVFoundation.

        In the Web process, MeidaResourceLoader creates MediaResource(s), which take care of
        downloading media data through the network process. The received data will be forwarded to
        RemoteMediaResourceProxy, which will forward the data to the corresponding RemoteMediaResource
        through XPC messages.

        (WebKit::GPUConnectionToWebProcess::remoteMediaResourceManager):
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::~RemoteMediaPlayerProxy):
        (WebKit::RemoteMediaPlayerProxy::requestResource):
        (WebKit::RemoteMediaPlayerProxy::removeResource):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCreateResourceLoader):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        (WebKit::RemoteMediaPlayerProxy::~RemoteMediaPlayerProxy): Deleted.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerLogIdentifier): Deleted.
        * GPUProcess/media/RemoteMediaResource.cpp: Added.
        (WebKit::RemoteMediaResource::create):
        (WebKit::RemoteMediaResource::RemoteMediaResource):
        (WebKit::RemoteMediaResource::~RemoteMediaResource):
        (WebKit::RemoteMediaResource::stop):
        (WebKit::RemoteMediaResource::didPassAccessControlCheck const):
        (WebKit::RemoteMediaResource::responseReceived):
        (WebKit::RemoteMediaResource::redirectReceived):
        (WebKit::RemoteMediaResource::shouldCacheResponse):
        (WebKit::RemoteMediaResource::dataSent):
        (WebKit::RemoteMediaResource::dataReceived):
        (WebKit::RemoteMediaResource::accessControlCheckFailed):
        (WebKit::RemoteMediaResource::loadFailed):
        (WebKit::RemoteMediaResource::loadFinished):
        * GPUProcess/media/RemoteMediaResource.h: Added.
        (WebKit::RemoteMediaResource::ready const):
        (WebKit::RemoteMediaResource::setReady):
        * GPUProcess/media/RemoteMediaResourceIdentifier.h: Added.
        * GPUProcess/media/RemoteMediaResourceLoader.cpp: Added.
        (WebKit::RemoteMediaResourceLoader::RemoteMediaResourceLoader):
        (WebKit::RemoteMediaResourceLoader::~RemoteMediaResourceLoader):
        (WebKit::RemoteMediaResourceLoader::requestResource):
        * GPUProcess/media/RemoteMediaResourceLoader.h: Added.
        * GPUProcess/media/RemoteMediaResourceManager.cpp: Added.
        (WebKit::RemoteMediaResourceManager::RemoteMediaResourceManager):
        (WebKit::RemoteMediaResourceManager::~RemoteMediaResourceManager):
        (WebKit::RemoteMediaResourceManager::addMediaResource):
        (WebKit::RemoteMediaResourceManager::removeMediaResource):
        (WebKit::RemoteMediaResourceManager::responseReceived):
        (WebKit::RemoteMediaResourceManager::redirectReceived):
        (WebKit::RemoteMediaResourceManager::dataSent):
        (WebKit::RemoteMediaResourceManager::dataReceived):
        (WebKit::RemoteMediaResourceManager::accessControlCheckFailed):
        (WebKit::RemoteMediaResourceManager::loadFailed):
        (WebKit::RemoteMediaResourceManager::loadFinished):
        * GPUProcess/media/RemoteMediaResourceManager.h: Added.
        * GPUProcess/media/RemoteMediaResourceManager.messages.in: Added.
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
        (WebKit::MediaPlayerPrivateRemote::requestResource):
        (WebKit::MediaPlayerPrivateRemote::removeResource):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemoteIdentifier.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::supportsTypeAndCodecs):
        (WebKit::RemoteMediaPlayerManager::originsInMediaCache):
        (WebKit::RemoteMediaPlayerManager::clearMediaCacheForOrigins):
        (WebKit::RemoteMediaPlayerManager::networkStateChanged):
        (WebKit::RemoteMediaPlayerManager::readyStateChanged):
        (WebKit::RemoteMediaPlayerManager::volumeChanged):
        (WebKit::RemoteMediaPlayerManager::muteChanged):
        (WebKit::RemoteMediaPlayerManager::timeChanged):
        (WebKit::RemoteMediaPlayerManager::durationChanged):
        (WebKit::RemoteMediaPlayerManager::rateChanged):
        (WebKit::RemoteMediaPlayerManager::playbackStateChanged):
        (WebKit::RemoteMediaPlayerManager::engineFailedToLoad):
        (WebKit::RemoteMediaPlayerManager::requestResource):
        (WebKit::RemoteMediaPlayerManager::removeResource):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
        (WebKit::RemoteMediaPlayerManager::didReceiveMessageFromGPUProcess):
        (WebKit::RemoteMediaPlayerManager::didReceiveMessageFromWebProcess): Deleted.
        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
        * WebProcess/GPU/media/RemoteMediaResourceProxy.cpp: Added.
        (WebKit::RemoteMediaResourceProxy::RemoteMediaResourceProxy):
        (WebKit::RemoteMediaResourceProxy::~RemoteMediaResourceProxy):
        (WebKit::RemoteMediaResourceProxy::responseReceived):
        (WebKit::RemoteMediaResourceProxy::redirectReceived):
        (WebKit::RemoteMediaResourceProxy::shouldCacheResponse):
        (WebKit::RemoteMediaResourceProxy::dataSent):
        (WebKit::RemoteMediaResourceProxy::dataReceived):
        (WebKit::RemoteMediaResourceProxy::accessControlCheckFailed):
        (WebKit::RemoteMediaResourceProxy::loadFailed):
        (WebKit::RemoteMediaResourceProxy::loadFinished):
        * WebProcess/GPU/media/RemoteMediaResourceProxy.h: Added.

2019-12-31  youenn fablet  <youenn@apple.com>

        Implement RTC VTB decoders in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=205607

        Reviewed by Eric Carlson.

        Implement decoder factory callbacks.
        Implement WebProcess codecs by sending IPC for creating/releasing/decoding a frame.
        WebProcess receives IPC messages from GPU Process whenever a frame is decoded.

        * Configurations/WebKit.xcconfig:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::libWebRTCCodecsProxy):
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h: Added.
        (WebKit::LibWebRTCCodecsProxy::didReceiveMessageFromWebProcess):
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in: Added.
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm: Added.
        (WebKit::LibWebRTCCodecsProxy::LibWebRTCCodecsProxy):
        (WebKit::LibWebRTCCodecsProxy::~LibWebRTCCodecsProxy):
        (WebKit::LibWebRTCCodecsProxy::createDecoder):
        (WebKit::LibWebRTCCodecsProxy::releaseDecoder):
        (WebKit::LibWebRTCCodecsProxy::decodeFrame):
        * Scripts/webkit/messages.py:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::didReceiveMessage):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp: Added.
        (WebKit::createVideoDecoder):
        (WebKit::releaseVideoDecoder):
        (WebKit::decodeVideoFrame):
        (WebKit::registerDecodeCompleteCallback):
        (WebKit::LibWebRTCCodecs::setVideoDecoderCallbacks):
        (WebKit::LibWebRTCCodecs::createDecoder):
        (WebKit::LibWebRTCCodecs::releaseDecoder):
        (WebKit::LibWebRTCCodecs::decodeFrame):
        (WebKit::LibWebRTCCodecs::registerDecodeFrameCallback):
        (WebKit::LibWebRTCCodecs::failedDecoding):
        (WebKit::LibWebRTCCodecs::completedDecoding):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h: Added.
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.messages.in: Added.
        * WebProcess/GPU/webrtc/RTCDecoderIdentifier.h: Added.
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createDecoderFactory):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::libWebRTCCodecs):
        * WebProcess/WebProcess.h:

2019-12-30  Brady Eidson  <beidson@apple.com>

        Add WKWebView SPI to evaluate a function with arguments
        https://bugs.webkit.org/show_bug.cgi?id=205239

        Reviewed by Alex Christensen.

        * Shared/API/APISerializedScriptValue.h:

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

        * UIProcess/API/Cocoa/APISerializedScriptValueCocoa.mm:
        (API::sharedContext):
        (API::SerializedScriptValue::deserialize):
        (API::SerializedScriptValue::wireBytesFromNSObject):

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView evaluateJavaScript:completionHandler:]):
        (validateArgument):
        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withArguments:forceUserGesture:completionHandler:]):
        (-[WKWebView _callAsyncFunction:withArguments:completionHandler:]):
        (-[WKWebView _evaluateJavaScriptWithoutUserGesture:completionHandler:]):
        (-[WKWebView _evaluateJavaScript:forceUserGesture:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_run_javascript):
        (webkit_web_view_run_javascript_in_world):
        (resourcesStreamReadCallback):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld):
        * UIProcess/WebPageProxy.h:

        * UIProcess/socket/RemoteInspectorProtocolHandler.cpp:
        (WebKit::RemoteInspectorProtocolHandler::runScript):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScript):
        (WebKit::WebPage::runJavaScriptInMainFrameScriptWorld):
        (WebKit::WebPage::runJavaScriptInFrame):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-12-29  Peng Liu  <peng.liu6@apple.com>

        Tweak the format and comment in the code to support media in GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205631

        Reviewed by Eric Carlson.

        No new tests, no functional change.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::logChannel const):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h:
        * WebProcess/GPU/GPUProcessConnectionInfo.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        * WebProcess/GPU/media/MediaPlayerPrivateRemoteIdentifier.h:
        * WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
        * WebProcess/GPU/media/RemoteMediaPlayerState.h:

2019-12-29  Eric Carlson  <eric.carlson@apple.com>

        Cleanup media IPC encoders
        https://bugs.webkit.org/show_bug.cgi?id=205630
        <rdar://problem/58232173>

        Reviewed by Anders Carlsson.

        * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h:
        (WebKit::RemoteMediaPlayerProxyConfiguration::decode):
        * WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h:
        (WebKit::RemoteMediaPlayerConfiguration::decode):

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

        Make simple line layout an internal feature
        https://bugs.webkit.org/show_bug.cgi?id=205615

        Reviewed by Zalan Bujtas.

        So it can be enabled/disabled from run-webkit-tests command line.

        This also adds it to the internal feature menus, allowing removal of hardcoded menu entries.

        * Shared/WebPreferences.yaml:

2019-12-23  Darin Adler  <darin@apple.com>

        Refactor to simplify broadcasting to all media elements
        https://bugs.webkit.org/show_bug.cgi?id=205567

        Reviewed by Eric Carlson.

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::mediaType const): Use is<HTMLMediaElement>.

2019-12-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Remove duplicated code
        https://bugs.webkit.org/show_bug.cgi?id=205560

        Reviewed by Sergio Villar Senin.

        Remove duplicated code related to IME between GTK and WPE that can be shared.

        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * WebProcess/WebCoreSupport/glib/WebEditorClientGLib.cpp: Added.
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        (WebKit::WebEditorClient::didDispatchInputMethodKeydown):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        * WebProcess/WebPage/glib/WebPageGLib.cpp:
        (WebKit::WebPage::setInputMethodState):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:

2019-12-24  Eric Carlson  <eric.carlson@apple.com>

        [Media in GPU process] Enable media player proxy logging
        https://bugs.webkit.org/show_bug.cgi?id=205557
        <rdar://problem/58160932>

        Reviewed by Youenn Fablet.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::create):
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::logger):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::createGPUConnectionToWebProcess):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::logger const):
        (WebKit::nullLogger): Deleted.
        * Platform/Logging.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::openGPUProcessConnection):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::logChannel const):

2019-12-24  youenn fablet  <youenn@apple.com>

        Service Worker doesn't terminate after a period of time when thread blocking
        https://bugs.webkit.org/show_bug.cgi?id=202992
        <rdar://problem/56298596>

        Reviewed by Chris Dumez.

        Add a preference to enable/disable service worker short timeouts.
        Add IPC handling for passing service worker heart beat failures and to get from WebProcess
        whether a given service worker is running or not.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::contextConnectionCreated):
        (WebKit::WebSWServerConnection::syncTerminateWorkerFromClient):
        (WebKit::WebSWServerConnection::isServiceWorkerRunning):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetServiceWorkerTestMode):
        (WKPreferencesSetServiceWorkerTestMode):
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::isServiceWorkerRunning):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updatePreferencesStore):
        (WebKit::WebSWContextManagerConnection::didFailHeartBeatCheck):
        * WebProcess/Storage/WebSWContextManagerConnection.h:

2019-12-23  Alexey Proskuryakov  <ap@apple.com>

        watchOS build fix attempt

        Not sure what broke the build, seems like UserInterfaceIdiom.h used to be included
        via unified build, and no longer is. Added the include.
        
        While at it, removed an ancient __IPHONE_OS_VERSION_MIN_REQUIRED version check.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:

2019-12-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the macCatalyst build after r253866

        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):

        MediaPlayer::mediaKeysStorageDirectory() is guarded by ENABLE(LEGACY_ENCRYPTED_MEDIA).

2019-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: fix handling of session timeouts for values higher than MAX_INT
        https://bugs.webkit.org/show_bug.cgi?id=204114

        Reviewed by Brian Burg.

        Use number instead of integer for all optional timeout parameters. In the case of script timeout, not passing a
        value means a timeout should not be used, so use Optional<double> also for the IPC message and handle the
        optional value in the web process to not set any timeout in that case.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::waitForNavigationToComplete):
        (WebKit::WebAutomationSession::navigateBrowsingContext):
        (WebKit::WebAutomationSession::goBackInBrowsingContext):
        (WebKit::WebAutomationSession::goForwardInBrowsingContext):
        (WebKit::WebAutomationSession::reloadBrowsingContext):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        * UIProcess/Automation/WebAutomationSession.h:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (let.AutomationSessionProxy.prototype.evaluateJavaScriptFunction):
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:

2019-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] InputMethod API unit tests don't work under X11
        https://bugs.webkit.org/show_bug.cgi?id=205497

        Reviewed by Žan Doberšek.

        Assume the web view is always focused when running tests under Xvfb, since there isn't a window manager to focus
        the toplevel window in that case.

        * UIProcess/API/glib/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::isViewFocused const):

2019-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Special combination characters doesn't respect the keystroke order when high CPU load
        https://bugs.webkit.org/show_bug.cgi?id=185248

        Reviewed by Žan Doberšek.

        Key events are queued by the WebPageProxy so that the next event is not sent to the web process until the
        previous one has been handled by the web process already. However, the composition results generated by key
        events are sent to the web process using IPC messages when they happen. In case of high CPU load it can happen
        that the composition results are sent to the web process even before the associated keys, that are still in the
        queue waiting to be sent. We need to ensure that composition results are always processed right after its
        associated key press event. So, instead of sending the results independently, we now include them as part of the
        key event.

        * Shared/NativeWebKeyboardEvent.h: Add optional preeditUnderlines and preeditSelectionRange parameters to constructor.
        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::preeditUnderlines const): Return the optional preeditUnderlines.
        (WebKit::WebKeyboardEvent::preeditSelectionRange const): Return the optional preeditSelectionRange.
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent): Copy preeditUnderlines and
        preeditSelectionRange too.
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent): Add optional preeditUnderlines and preeditSelectionRange
        parameters and initialize them.
        (WebKit::WebKeyboardEvent::encode const): Encode preeditUnderlines and preeditSelectionRange.
        (WebKit::WebKeyboardEvent::decode): Decode preeditUnderlines and preeditSelectionRange.
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): Add optional preeditUnderlines and
        preeditSelectionRange parameters and initialize them.
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent): Add optional preeditUnderlines and preeditSelectionRange
        parameters and pass them to WebKeyboardEvent constructor.
        * Shared/gtk/WebEventFactory.h:
        * Shared/libwpe/NativeWebKeyboardEventLibWPE.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): Add optional preeditUnderlines and
        preeditSelectionRange parameters and initialize them.
        * Shared/libwpe/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent): Add optional preeditUnderlines and preeditSelectionRang
        parameters and pass them to WebKeyboardEvent constructor.
        * Shared/libwpe/WebEventFactory.h: Add optional preeditUnderlines and preeditSelectionRange parameters to constructor.
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewSynthesizeCompositionKeyPress): Pass the preeditUnderlines and preeditSelectionRange to platform
        implementation.
        (webkitWebViewSetComposition): Remove the call to WebPageProxy::setComposition().
        (webkitWebViewConfirmComposition): Remove the call to WebPageProxy::confirmComposition().
        (webkitWebViewCancelComposition): Call WebPageProxy::cancelComposition();
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseKeyPressEvent): Pass the preeditUnderlines and preeditSelectionRange to NativeWebKeyboardEvent constructor.
        (webkitWebViewBaseKeyReleaseEvent): Ditto.
        (webkitWebViewBaseSynthesizeCompositionKeyPress): Ditto.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::handleKeyboardEvent): Ditto.
        (WKWPE::View::synthesizeCompositionKeyPress): Ditto.
        * UIProcess/API/wpe/WPEView.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::didDispatchInputMethodKeydown): Handle the composition results here, right after the
        associated key events has been dispatched.
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        (WebKit::WebEditorClient::didDispatchInputMethodKeydown): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::cancelComposition): Confirm the given string to cancel the composition.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Remove SetComposition message and rename ConfirmComposition as
        CancelComposition since it's now only used for canceling.

2019-12-22  Simon Fraser  <simon.fraser@apple.com>

        Make support for <dialog> an internal feature, off by default
        https://bugs.webkit.org/show_bug.cgi?id=205542

        Reviewed by Antti Koivisto.

        Make DialogElementEnabled an internal feature so it shows up in the menus and
        can be toggled on for experimentation.

        * Shared/WebPreferences.yaml:

2019-12-21  Simon Fraser  <simon.fraser@apple.com>

        Make support for <dialog> an experimental feature, off by default
        https://bugs.webkit.org/show_bug.cgi?id=205542

        Reviewed by Dean Jackson.

        Make DialogElementEnabled an experimental feature (off by default).

        * Shared/WebPreferences.yaml:

2019-12-21  Simon Fraser  <simon.fraser@apple.com>

        Make support for <dialog> an experimental feature, off by default
        https://bugs.webkit.org/show_bug.cgi?id=205542

        Reviewed by Dean Jackson.

        Make DialogElementEnabled an experimental feature (off by default).

        * Shared/WebPreferences.yaml:

2019-12-22  Eric Carlson  <eric.carlson@apple.com>

        [Media in GPU process] Add remote media player proxy configuration
        https://bugs.webkit.org/show_bug.cgi?id=205547
        <rdar://problem/58139762>

        Reviewed by Tim Horton.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::createMediaPlayer):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy):
        (WebKit::RemoteMediaPlayerProxy::getConfiguration):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaKeysStorageDirectory const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerReferrer const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerUserAgent const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSourceApplicationIdentifier const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerNetworkInterfaceName const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaCacheDirectory const):
        (WebKit::RemoteMediaPlayerProxy::mediaContentTypesRequiringHardwareSupport const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPreferredAudioCharacteristics const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerShouldUsePersistentCache const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsVideo const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerKeyNeeded):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerGetRawCookies const):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerLogIdentifier):
        * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h: Added.
        (WebKit::RemoteMediaPlayerProxyConfiguration::encode const):
        (WebKit::RemoteMediaPlayerProxyConfiguration::decode):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
        (WebKit::MediaPlayerPrivateRemote::engineDescription const):
        (WebKit::MediaPlayerPrivateRemote::supportsScanning const):
        (WebKit::MediaPlayerPrivateRemote::supportsPictureInPicture const):
        (WebKit::MediaPlayerPrivateRemote::supportsAcceleratedRendering const):
        (WebKit::MediaPlayerPrivateRemote::canPlayToWirelessPlaybackTarget const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h: Added.
        (WebKit::RemoteMediaPlayerConfiguration::encode const):
        (WebKit::RemoteMediaPlayerConfiguration::decode):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):

2019-12-21  Brian Burg  <bburg@apple.com>

        Web Inspector: add InspectedTargetTypes diagnostic event and related hooks
        https://bugs.webkit.org/show_bug.cgi?id=205174
        <rdar://problem/57887953>

        Reviewed by Devin Rousso.

        This change supplies Web Inspector with information about the debuggable that
        it is connected to. This is used for diagnostics and to customize the UI based
        on the target type being inspected.

        For remote Web Inspector, WebKit clients can populate an instance of 
        _WKInspectorDebuggableInfo and use it when calling into
        -[_WKRemoteWebInspectorViewController loadForDebuggable:backendCommandsURL:].

        For local Web Inspector, WebInspectorProxy fills in information for the local
        debuggable by consulting SystemVersion.plist (on Mac port).

        The new enum _WKInspectorDebuggableType replaces _WKRemoteWebInspectorDebuggableType.
        Its WebCore equivalent is Inspector::DebuggableType. The type and other information
        are carried around in a _WKInspectorDebuggableInfo class. The equivalents for this
        class are API::DebuggableInfo and DebuggableInfoData (for sending over IPC).

        The DebuggableInfoData is sent as part of the initial message from UIProcess
        to an Inspector WebProcess, similar to how a debuggableType string was sent before.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        Add new files.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject): Add new object type.
        * Shared/WebCoreArgumentCoders.h: Add EnumTraits for Inspector::DebuggableType.

        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewControllerPrivate.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (legacyDebuggableTypeToModernDebuggableType):
        (-[_WKRemoteWebInspectorViewController loadForDebuggableType:backendCommandsURL:]):
        (-[_WKRemoteWebInspectorViewController loadForDebuggable:backendCommandsURL:]):
        (debuggableTypeString): Deleted.
        Use the new enum in a new method that clients can switch over to. The old method
        can be removed when it is no longer being used.

        * UIProcess/RemoteWebInspectorProxy.h:
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::RemoteWebInspectorProxy):
        (WebKit::RemoteWebInspectorProxy::load):
        (WebKit::RemoteWebInspectorProxy::reopen):
        Send DebuggableInfoData struct to RemoteWebInspectorUI.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::openLocalInspectorFrontend):
        (WebKit::WebInspectorProxy::infoForLocalDebuggable):
        Send DebuggableInfoData struct to WebInspectorUI.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::systemVersionPlist):
        (WebKit::WebInspectorProxy::infoForLocalDebuggable):
        Add Mac implementation for local debuggables.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::infoForLocalDebuggable):
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::infoForLocalDebuggable):
        * UIProcess/wpe/WebInspectorProxyWPE.cpp:
        (WebKit::WebInspectorProxy::infoForLocalDebuggable):
        Add stubs for other platforms.

        * UIProcess/glib/RemoteInspectorClient.cpp:
        * UIProcess/socket/RemoteInspectorClient.h:
        * UIProcess/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::inspect):
        (WebKit::debuggableTypeToString):
        (WebKit::RemoteInspectorClient::setTargetList):
        Use Inspector::DebuggableType instead of String for debuggable type.

        * WebProcess/WebPage/RemoteWebInspectorUI.messages.in:
        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::initialize):
        (WebKit::RemoteWebInspectorUI::debuggableType const):
        (WebKit::RemoteWebInspectorUI::targetPlatformName const):
        (WebKit::RemoteWebInspectorUI::targetBuildVersion const):
        (WebKit::RemoteWebInspectorUI::targetProductVersion const):
        (WebKit::RemoteWebInspectorUI::targetIsSimulator const):
        Implement new methods needed by InspectorFrontendClient / InspectorFrontendHost.

        * WebProcess/WebPage/WebInspectorUI.messages.in:
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection):
        (WebKit::WebInspectorUI::targetPlatformName const):
        (WebKit::WebInspectorUI::targetBuildVersion const):
        (WebKit::WebInspectorUI::targetProductVersion const):
        Implement new methods needed by InspectorFrontendClient / InspectorFrontendHost. 

2019-12-21  Eric Carlson  <eric.carlson@apple.com>

        [Media in GPU process] Add remote media player configuration
        https://bugs.webkit.org/show_bug.cgi?id=205541
        <rdar://problem/58137418>

        Reviewed by Simon Fraser.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::createMediaPlayer):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaKeysStorageDirectory const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerReferrer const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerUserAgent const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSourceApplicationIdentifier const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerNetworkInterfaceName const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaCacheDirectory const):
        (WebKit::RemoteMediaPlayerProxy::mediaContentTypesRequiringHardwareSupport const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPreferredAudioCharacteristics const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerShouldUsePersistentCache const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsVideo const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerKeyNeeded):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerGetRawCookies const):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerLogIdentifier):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):

2019-12-21  Kate Cheney  <katherine_cheney@apple.com>

        Add timeStamp to ITP database
        https://bugs.webkit.org/show_bug.cgi?id=205121
        <rdar://problem/57633021>

        Reviewed by John Wilander.

        This patch adds support for collecting most-recently-updated
        timestamps for third-party/first-party domain pairs in the ITP database.
        It updates the timestamp when new statistics are merged into the
        database. It then exposes the timestamp via the
        _getResourceLoadStatisticsDataSummary API.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        Changed INSERT OR IGNORE queries to be INSERT OR REPLACE so the timestamp
        will be replaced upon a new attempted insert into one of the
        third-party/first-party relationship tables.
        ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList now
        checks for the keyword "REPLACE" to know if another bind is needed
        to update the timestamp.

        (WebKit::ResourceLoadStatisticsDatabaseStore::getMostRecentlyUpdatedTimestamp):
        Queries the most recent time that the third party has appeared as a
        subframe or subresource under the first party or redirected to the first party.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        (WebKit::ThirdPartyDataForSpecificFirstParty::toString const):
        Updated the toString to check if the timestamp occured in the last
        24 hours for testing purposes. It doesn't print the specific time
        because it would change for every run and could not be tested.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setUseITPDatabase:completionHandler:]):
        Added new function that enables the ITP Database backend so the
        timestamp parameter can be tested in in TestWebKitAPI.

        * UIProcess/API/APIResourceLoadStatisticsFirstParty.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.mm:
        (-[_WKResourceLoadStatisticsFirstParty timeLastUpdated]):
        Added the new timestamp parameter to the _WKResourceLoadStatisticsFirstParty.mm
        class and its wrapper to be sent via API call.

2019-12-20  Eric Carlson  <eric.carlson@apple.com>

        [Media in GPU process] Get audio playing
        https://bugs.webkit.org/show_bug.cgi?id=205511
        <rdar://problem/58120354>

        Reviewed by Jer Noble.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::updateCachedState):
        (WebKit::MediaPlayerPrivateRemote::maximumDurationToCacheMediaTime const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:

2019-12-20  Jer Noble  <jer.noble@apple.com>

        Enable HDR Media Capabilities by default
        https://bugs.webkit.org/show_bug.cgi?id=205518
        <rdar://problem/57674289>

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2019-12-20  Tim Horton  <timothy_horton@apple.com>

        Clean up and generalize some interaction additions
        https://bugs.webkit.org/show_bug.cgi?id=205430

        Reviewed by Wenson Hsieh.

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

2019-12-20  Tim Horton  <timothy_horton@apple.com>

        Expose approximate caret extents for the hit line via InteractionInformationAtPosition
        https://bugs.webkit.org/show_bug.cgi?id=205526
        <rdar://problem/57983076>

        Reviewed by Dean Jackson.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::positionInformation):
        Compute and expose the union of first and last caret rects on the line.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/ios/InteractionInformationRequest.cpp:
        (WebKit::InteractionInformationRequest::encode const):
        (WebKit::InteractionInformationRequest::decode):
        (WebKit::InteractionInformationRequest::isValidForRequest):
        * Shared/ios/InteractionInformationRequest.h:
        Also, add a bit so that we can only fetch this data when needed.

2019-12-20  Brent Fulgham  <bfulgham@apple.com>

        Remove access to 'com.apple.cfprefsd.agent' from the macOS sandbox
        https://bugs.webkit.org/show_bug.cgi?id=205478
        <rdar://problem/57915066>

        Reviewed by Darin Adler.

        Telemetry and thorough testing has confirmed that we do not need access to this
        mach service, and so should remove it.

        Tested by fast/sandboxing/mac

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

2019-12-20  Brian Burg  <bburg@apple.com>

        Unreviewed, try to fix the non-unified sources build.

        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::filterTransports const):
        The current chunking of unified source files seems to provide a
        'using namespace WebCore' for these references to AuthenticatorTransport.
        Add a namespace qualification so that this file compiles by itself.

2019-12-20  James Savage  <james.savage@apple.com>

        Include WKPDFConfiguration, WKFindConfiguration, and WKFindResult in umbrella header
        https://bugs.webkit.org/show_bug.cgi?id=205432
        <rdar://problem/58067946>

        Reviewed by Wenson Hsieh.

        * Shared/API/Cocoa/WebKit.h: Include new headers.

2019-12-20  Brian Burg  <bburg@apple.com>

        Web Inspector: convert some InspectorFrontendHost methods to getters
        https://bugs.webkit.org/show_bug.cgi?id=205475

        Reviewed by Devin Rousso.

        No reason for these to be method calls, so expose as getters / attributes instead.

        * WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp:
        (WebKit::WebInspectorUI::localizedStringsURL const):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL const):
        (WebKit::WebInspectorUI::localizedStringsURL): Deleted.
        (WebKit::RemoteWebInspectorUI::localizedStringsURL): Deleted.
        * WebProcess/WebPage/mac/WebInspectorUIMac.mm:
        (WebKit::WebInspectorUI::localizedStringsURL const):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL const):
        (WebKit::WebInspectorUI::localizedStringsURL): Deleted.
        (WebKit::RemoteWebInspectorUI::localizedStringsURL): Deleted.
        * WebProcess/WebPage/win/WebInspectorUIWin.cpp:
        (WebKit::WebInspectorUI::localizedStringsURL const):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL const):
        (WebKit::WebInspectorUI::localizedStringsURL): Deleted.
        (WebKit::RemoteWebInspectorUI::localizedStringsURL): Deleted.
        * WebProcess/WebPage/wpe/WebInspectorUIWPE.cpp:
        (WebKit::WebInspectorUI::localizedStringsURL const):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL const):
        (WebKit::WebInspectorUI::localizedStringsURL): Deleted.
        (WebKit::RemoteWebInspectorUI::localizedStringsURL): Deleted.

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

        Allow a managed configuration to re-enable TLS 1.0 and 1.1
        https://bugs.webkit.org/show_bug.cgi?id=205479
        <rdar://problem/54493516>

        Reviewed by Geoffrey Garen.

        * Platform/spi/ios/ManagedConfigurationSPI.h: Removed.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView _defineForWebView:]):
        * WebKit.xcodeproj/project.pbxproj:

2019-12-20  youenn fablet  <youenn@apple.com>

        Set whether to use mock capture devices at GPUProcess creation time.
        https://bugs.webkit.org/show_bug.cgi?id=205492

        Reviewed by Eric Carlson.

        This ensures UIProcess remains always in sync with GPUProcess.
        Covered by fast/mediastream/captureAudioInGPUProcess.html.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        (WebKit::GPUProcess::setMockCaptureDevicesEnabled):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::encode const):
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::singleton):

2019-12-19  Brent Fulgham  <bfulgham@apple.com>

        Log telemetry for IOUserClient lookups
        https://bugs.webkit.org/show_bug.cgi?id=205463
        <rdar://problem/57987372>

        Reviewed by Per Arne Vollan.

        This patch adds some telemetry for IOKit classes.

        No new tests. No change in behavior.

        * 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-12-19  Chris Dumez  <cdumez@apple.com>

        Use a WeakHashSet for WKProcessAssertionBackgroundTaskManager._assertionsNeedingBackgroundTask
        https://bugs.webkit.org/show_bug.cgi?id=205471

        Reviewed by Ryosuke Niwa.

        Use a WeakHashSet for WKProcessAssertionBackgroundTaskManager._assertionsNeedingBackgroundTask, instead
        of a HashSet of raw pointers, for extra safety.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager removeAssertionNeedingBackgroundTask:]):
        (-[WKProcessAssertionBackgroundTaskManager _notifyAssertionsOfImminentSuspension]):
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):

2019-12-19  Brent Fulgham  <bfulgham@apple.com>

        Unblock iokit-get-property needed for frame buffer initialization
        https://bugs.webkit.org/show_bug.cgi?id=205468
        <rdar://problem/57897684>

        Reviewed by Per Arne Vollan.

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

2019-12-19  Brent Fulgham  <bfulgham@apple.com>

        Add telemetry to macOS WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=205464
        <rdar://problem/58087833>

        Reviewed by Per Arne Vollan.

        Add telemetry to various mach lookups, like we did for iOS.

        No new tests. No change in behavior.

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

2019-12-19  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r253530): Incorrect colors in Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=205457

        Unreviewed rollout of r253530.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        Deprecate _WKRemoteObjectInterface methods without ofReply:
        https://bugs.webkit.org/show_bug.cgi?id=205073

        Reviewed by Timothy Hatcher.

        Using them makes it hard to figure out how to add classes allowed for the reply,
        and there's a comment saying to deprecate them, so let's do it.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.h:

2019-12-19  Brent Fulgham  <bfulgham@apple.com>

        WebContent process does not need access to 'com.apple.system.logger'
        https://bugs.webkit.org/show_bug.cgi?id=205411
        <rdar://problem/56966080>

        Reviewed by Per Arne Vollan.

        Telemetry and thorough testing has confirmed that we do not need access to this
        mach service, and so should remove it.

        Tested by fast/sandbox.

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

2019-12-19  Brent Fulgham  <bfulgham@apple.com>

        Deny mach lookup access to "com.apple.TextInput" in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=205423
        <rdar://problem/56990842>

        Reviewed by Per Arne Vollan.

        Telemetry and thorough testing has confirmed that we do not need access to this
        mach service, and so should remove it.

        Tested by fast/sandbox/ios/sandbox-mach-lookup.html.

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

2019-12-19  youenn fablet  <youenn@apple.com>

        CacheStorageEngine should not clear caches memory representation for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=205332

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::dispose):
        We cannot dispose an ephemeral cache memory representation
        since it can be reopened by a page with the same session.

2019-12-19  Brent Fulgham  <bfulgham@apple.com>

        Deny mach lookup access to "com.apple.pluginkit.pkd" in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=205421
        <rdar://problem/56995585>

        Reviewed by Per Arne Vollan.

        Telemetry and thorough testing has confirmed that we do not need access to this
        mach service, and so should remove it.

        Tested by fast/sandbox/ios/sandbox-mach-lookup.html.

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

2019-12-19  Brent Fulgham  <bfulgham@apple.com>

        Remove syscall filtering from GPU Process sandbox 
        https://bugs.webkit.org/show_bug.cgi?id=205456
        <rdar://problem/58080834>

        Reviewed by Tim Horton.

        We don't have a fully built-out GPU Process yet. Let's not lock down the syscall filter set until
        we know which are actually needed by the process. The current set is just copied over from the
        WebContent process, and are not likely to be the correct set.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:

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

        imported/w3c/web-platform-tests/service-workers/service-worker/skip-waiting-installed.https.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=205408

        Reviewed by Youenn Fablet.

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::didFinishSkipWaiting): Deleted.
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::skipWaiting):
        (WebKit::WebSWContextManagerConnection::didFinishSkipWaiting): Deleted.
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

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

        Stop blocking the worker thread in WorkerMessagePortChannelProvider::postMessageToRemote()
        https://bugs.webkit.org/show_bug.cgi?id=205414

        Reviewed by Youenn Fablet.

        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
        (WebKit::WebMessagePortChannelProvider::postMessageToRemote):
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:

2019-12-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add initial API for input method
        https://bugs.webkit.org/show_bug.cgi?id=204679

        Reviewed by Žan Doberšek.

        In the case of GTK port, it allows to use a custom IM instead of GtkIMContext that it's still used by
        default. In the case of WPE it brings IM support, but there's no default implementation so applications need to
        provide their own.

        * PlatformGTK.cmake: Add new public header WebKitInputMethodContext.h.
        * PlatformWPE.cmake: Ditto.
        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const): Encode caretRectAtStart for WPE too.
        (WebKit::EditorState::PostLayoutData::decode): Decode caretRectAtStart for WPE too.
        (WebKit::operator<<): Dump caretRectAtStart for WPE too.
        * Shared/EditorState.h: Define caretRectAtStart for WPE too.
        * Shared/NativeWebKeyboardEvent.h:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): Remove FakedForComposition parameter for GTK and add
        HandledByInputMethod to WPE.
        * Shared/WebEvent.h:
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent): Add handledByInputMethod parameter for WPE.
        (WebKit::WebKeyboardEvent::encode const): Encode m_handledByInputMethod in WPE too.
        (WebKit::WebKeyboardEvent::decode): Decode m_handledByInputMethod in WPE too.
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): Remove FakedForComposition and the redundant members
        that are already in the bcase class or no longer needed.
        * Shared/libwpe/NativeWebKeyboardEventLibWPE.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): Add text and handledByInputMethod parameters
        * Shared/libwpe/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent): Use the given text if not null and pass handledByInputMethod,
        to WebKeyboardEvent.
        * Shared/libwpe/WebEventFactory.h:
        * SourcesGTK.txt: Add new files to compilation.
        * SourcesWPE.txt: Ditto.
        * UIProcess/API/glib/InputMethodFilter.cpp: Added.
        (WebKit::InputMethodFilter::~InputMethodFilter):
        (WebKit::InputMethodFilter::preeditStartedCallback):
        (WebKit::InputMethodFilter::preeditChangedCallback):
        (WebKit::InputMethodFilter::preeditFinishedCallback):
        (WebKit::InputMethodFilter::committedCallback):
        (WebKit::InputMethodFilter::setContext):
        (WebKit::InputMethodFilter::setEnabled):
        (WebKit::InputMethodFilter::filterKeyEvent):
        (WebKit::InputMethodFilter::isViewFocused const):
        (WebKit::InputMethodFilter::notifyFocusedIn):
        (WebKit::InputMethodFilter::notifyFocusedOut):
        (WebKit::InputMethodFilter::notifyCursorRect):
        (WebKit::InputMethodFilter::preeditStarted):
        (WebKit::InputMethodFilter::preeditChanged):
        (WebKit::InputMethodFilter::preeditFinished):
        (WebKit::InputMethodFilter::committed):
        (WebKit::InputMethodFilter::cancelComposition):
        * UIProcess/API/glib/InputMethodFilter.h: Added.
        (WebKit::InputMethodFilter::context const):
        * UIProcess/API/glib/WebKitInputMethodContext.cpp: Added.
        (webkitInputMethodUnderlineGetCompositionUnderline):
        (webkit_input_method_underline_new):
        (webkit_input_method_underline_copy):
        (webkit_input_method_underline_free):
        (webkitInputMethodContextSetWebView):
        (webkitInputMethodContextGetWebView):
        (webkit_input_method_context_set_enable_preedit):
        (webkit_input_method_context_get_preedit):
        (webkit_input_method_context_notify_focus_in):
        (webkit_input_method_context_notify_focus_out):
        (webkit_input_method_context_notify_cursor_area):
        (webkit_input_method_context_reset):
        * UIProcess/API/glib/WebKitInputMethodContextPrivate.h: Added.
        (_WebKitInputMethodUnderline::_WebKitInputMethodUnderline):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewConstructed):
        (webkitWebViewSynthesizeCompositionKeyPress):
        (webkitWebViewSetComposition):
        (webkitWebViewConfirmComposition):
        (webkitWebViewCancelComposition):
        (webkit_web_view_set_input_method_context):
        (webkit_web_view_get_input_method_context):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/InputMethodFilterGtk.cpp: Added.
        (WebKit::InputMethodFilter::platformTransformCursorRectToViewCoordinates):
        (WebKit::InputMethodFilter::platformEventKeyIsKeyPress const):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithKeyEvent): Remove the early return in case of fake event, composition events
        are always handled by the web process.
        * UIProcess/API/gtk/WebKitInputMethodContext.h: Added.
        * UIProcess/API/gtk/WebKitInputMethodContextGtk.cpp: Added.
        (webkit_input_method_underline_set_color):
        (webkit_input_method_context_filter_key_event):
        * UIProcess/API/gtk/WebKitInputMethodContextImplGtk.cpp: Added.
        (contextPreeditStartCallback):
        (contextPreeditChangedCallback):
        (contextPreeditEndCallback):
        (contextCommitCallback):
        (webkitInputMethodContextImplGtkConstructed):
        (webkitInputMethodContextImplGtkSetEnablePreedit):
        (webkitInputMethodContextImplGtkGetPreedit):
        (webkitInputMethodContextImplGtkFilterKeyEvent):
        (webkitInputMethodContextImplGtkNotifyFocusIn):
        (webkitInputMethodContextImplGtkNotifyFocusOut):
        (webkitInputMethodContextImplGtkNotifyCursorArea):
        (webkitInputMethodContextImplGtkReset):
        (webkit_input_method_context_impl_gtk_class_init):
        (webkitInputMethodContextImplGtkNew):
        (webkitInputMethodContextImplGtkSetClientWindow):
        * UIProcess/API/gtk/WebKitInputMethodContextImplGtk.h: Added.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): If current IM filter is the default one, call webkitInputMethodContextImplGtkSetClientWindow().
        (webkitWebViewBaseUnrealize): Ditto.
        (webkitWebViewBaseDispose): Set a nullptr context on IM filter.
        (webkitWebViewBaseKeyPressEvent): Use the new IM filter that simplifies the code.
        (webkitWebViewBaseKeyReleaseEvent): Ditto.
        (webkitWebViewBaseHandleMouseEvent): Cancel composition in case of click.
        (webkitWebViewBaseCreateWebPage): The new IM filter doesn't need to know the page.
        (webkitWebViewBaseUpdateTextInputState): Use new IM filter API.
        (webkitWebViewBaseSetInputMethodContext): Set the IM filter context.
        (webkitWebViewBaseGetInputMethodContext): Get the IM filter context.
        (webkitWebViewBaseSynthesizeCompositionKeyPress): Synthesize a key event for composition.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:
        * UIProcess/API/wpe/InputMethodFilterWPE.cpp: Added.
        (WebKit::InputMethodFilter::platformTransformCursorRectToViewCoordinates):
        (WebKit::InputMethodFilter::platformEventKeyIsKeyPress const):
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setInputMethodState):
        (WebKit::PageClientImpl::selectionDidChange):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::setInputMethodContext): Set the IM filter context.
        (WKWPE::View::inputMethodContext const): Get the IM filter context.
        (WKWPE::View::setInputMethodState): Enable or disable input methods.
        (WKWPE::View::selectionDidChange): Notify the IM filter about the cursor position change.
        (WKWPE::View::setViewState): Notify the IM filter about the focus change.
        (WKWPE::View::handleKeyboardEvent): Allow the IM filter to handle the key event.
        (WKWPE::View::synthesizeCompositionKeyPress): Synthesize a key event for composition.
        * UIProcess/API/wpe/WPEView.h:
        * UIProcess/API/wpe/WebKitInputMethodContext.h: Added.
        * UIProcess/API/wpe/WebKitInputMethodContextWPE.cpp: Added.
        (webkit_input_method_underline_set_color):
        (webkit_input_method_context_filter_key_event):
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/API/wpe/docs/wpe-docs.sgml:
        * UIProcess/API/wpe/webkit.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/InputMethodFilter.cpp: Removed.
        * UIProcess/gtk/InputMethodFilter.h: Removed.
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::updateEditorState): Save the editor state and notify about selection change.
        (WebKit::WebPageProxy::setInputMethodState): Notify the page client about the input method state.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::setInputMethodState): Implement this for WPE too.
        * WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:
        (WebKit::WebEditorClient::handleInputMethodKeydown): Use handledByInputMethod() now.
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:
        (WebKit::WebPage::platformEditorState const): Save the current caret cursor rectangle in post layout data struct.
        (WebKit::WebPage::setInputMethodState): Send SetInputMethodState message to the UI process if state changed.

2019-12-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [CoordinatedGraphics] ThreadedDisplayRefreshMonitor is never released
        https://bugs.webkit.org/show_bug.cgi?id=205387

        Reviewed by Žan Doberšek.

        Update the window screen ID after creating the layer tree host to ensure that the call to
        createDisplayRefreshMonitor will create the ThreadedDisplayRefrershMonitor instead of the default one.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode): Use the dispalyID of the layer tree host.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::LayerTreeHost): Initialize the display ID.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:

2019-12-18  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: perform IDBServer work only on background thread
        https://bugs.webkit.org/show_bug.cgi?id=203690
        <rdar://problem/56908496>

        Reviewed by Alex Christensen.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient):
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::create):
        (WebKit::WebIDBServer::WebIDBServer):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::suspend):
        (WebKit::WebIDBServer::resume):
        (WebKit::WebIDBServer::openDatabase):
        (WebKit::WebIDBServer::deleteDatabase):
        (WebKit::WebIDBServer::abortTransaction):
        (WebKit::WebIDBServer::commitTransaction):
        (WebKit::WebIDBServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBServer::createObjectStore):
        (WebKit::WebIDBServer::deleteObjectStore):
        (WebKit::WebIDBServer::renameObjectStore):
        (WebKit::WebIDBServer::clearObjectStore):
        (WebKit::WebIDBServer::createIndex):
        (WebKit::WebIDBServer::deleteIndex):
        (WebKit::WebIDBServer::renameIndex):
        (WebKit::WebIDBServer::putOrAdd):
        (WebKit::WebIDBServer::getRecord):
        (WebKit::WebIDBServer::getAllRecords):
        (WebKit::WebIDBServer::getCount):
        (WebKit::WebIDBServer::deleteRecord):
        (WebKit::WebIDBServer::openCursor):
        (WebKit::WebIDBServer::iterateCursor):
        (WebKit::WebIDBServer::establishTransaction):
        (WebKit::WebIDBServer::databaseConnectionPendingClose):
        (WebKit::WebIDBServer::databaseConnectionClosed):
        (WebKit::WebIDBServer::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBServer::didFireVersionChangeEvent):
        (WebKit::WebIDBServer::openDBRequestCancelled):
        (WebKit::WebIDBServer::getAllDatabaseNames):
        (WebKit::WebIDBServer::addConnection):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::postTask):
        (WebKit::WebIDBServer::dispatchToThread):
        (WebKit::WebIDBServer::registerConnection): Deleted.
        (WebKit::WebIDBServer::unregisterConnection): Deleted.
        (WebKit::WebIDBServer::confirmDidCloseFromServer): Deleted.
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/IndexedDB/WebIDBServer.messages.in:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareToSuspend):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::confirmDidCloseFromServer): Deleted.
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2019-12-18  Commit Queue  <commit-queue@webkit.org>

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

        "We think this may have caused a membuster regression, so
        rolling it out." (Requested by nham on #webkit).

        Reverted changeset:

        "Navigation from empty page doesn't use cached web process"
        https://bugs.webkit.org/show_bug.cgi?id=205015
        https://trac.webkit.org/changeset/253646

2019-12-18  Alex Christensen  <achristensen@webkit.org>

        Add SPI WKWebView._updateWebpagePreferences to replace _updateWebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=205427

        Reviewed by Wenson Hsieh.

        This blocks the removal of _WKWebsitePolicies.
        This change is verified by an API test.

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

2019-12-18  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Cursor should update when the platform deems it necessary
        https://bugs.webkit.org/show_bug.cgi?id=205429
        <rdar://problem/57983076>

        Reviewed by Wenson Hsieh.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::positionInformation):
        Expose the current cursor and caret size on position information so
        that macCatalyst UIKit can retrieve it out-of-band (in addition to
        setting it when we do a hit-test, like in r253636.

2019-12-18  Alex Christensen  <achristensen@webkit.org>

        Add ObjC version of WKBundleFrameIsMainFrame
        https://bugs.webkit.org/show_bug.cgi?id=205415

        Reviewed by Brian Weinstein.

        I need this for rdar://problem/57132290
        Covered by API tests.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame isMainFrame]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:

2019-12-18  Eric Carlson  <eric.carlson@apple.com>

        Remove more unused MediaPlayer methods
        https://bugs.webkit.org/show_bug.cgi?id=205405
        <rdar://problem/58049744>

        Reviewed by Jer Noble.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerHandlePlaybackCommand): Deleted.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsInMediaDocument const): Deleted.
        * GPUProcess/media/RemoteMediaPlayerProxy.h:

2019-12-18  youenn fablet  <youenn@apple.com>

        Add support for Audio Capture in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=205056

        Reviewed by Eric Carlson.

        Make UserMediaCaptureManager and Proxy able to work with GPU process.
        Add support for capturing audio in the GPU process, this is limited to mock audio sources for now
        as we do not support AudioSession in the GPU process.
        Covered by rebased test.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        (WebKit::GPUConnectionToWebProcess::didReceiveSyncMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::setMockCaptureDevicesEnabled):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::UserMediaCaptureManagerProxy):
        (WebKit::UserMediaCaptureManagerProxy::~UserMediaCaptureManagerProxy):
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManagerProxy::applyConstraints):
        (WebKit::UserMediaCaptureManagerProxy::clone):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        (WebKit::UserMediaCaptureManagerProxy::didReceiveMessageFromGPUProcess):
        (WebKit::UserMediaCaptureManagerProxy::didReceiveSyncMessageFromGPUProcess):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::syncWithWebCorePrefs const):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::didReceiveMessage):
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::setShouldCaptureInGPUProcess):
        (WebKit::UserMediaCaptureManager::Source::shouldCaptureInGPUProcess const):
        (WebKit::UserMediaCaptureManager::Source::requestToEnd):
        (WebKit::UserMediaCaptureManager::createCaptureSource):
        (WebKit::UserMediaCaptureManager::sourceStopped):
        (WebKit::UserMediaCaptureManager::captureFailed):
        (WebKit::UserMediaCaptureManager::Source::connection):
        (WebKit::UserMediaCaptureManager::Source::startProducingData):
        (WebKit::UserMediaCaptureManager::Source::stopProducingData):
        (WebKit::UserMediaCaptureManager::Source::capabilities):
        (WebKit::UserMediaCaptureManager::Source::applyConstraints):
        (WebKit::UserMediaCaptureManager::sourceEnded):
        (WebKit::UserMediaCaptureManager::Source::hasEnded):
        (WebKit::UserMediaCaptureManager::Source::stopBeingObserved):
        (WebKit::UserMediaCaptureManager::AudioFactory::createAudioCaptureSource):
        * WebProcess/cocoa/UserMediaCaptureManager.h:
        (WebKit::UserMediaCaptureManager::didReceiveMessageFromGPUProcess):

2019-12-18  Ben Nham  <nham@apple.com>

        Add network loading signposts
        https://bugs.webkit.org/show_bug.cgi?id=204822
        <rdar://problem/57608824>

        Reviewed by Alex Christensen.

        This adds os_signposts related to network loads to aid in debugging networking performance
        issues. Since URLs are logged in the signposts, this capability is only enabled on Apple
        internal builds when an environment variable is set.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::signpostLogHandle):
        (WebKit::signpostsEnabled):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::didSendData):
        (WebKit::NetworkDataTaskCocoa::didReceiveChallenge):
        (WebKit::NetworkDataTaskCocoa::didCompleteWithError):
        (WebKit::NetworkDataTaskCocoa::didReceiveData):
        (WebKit::NetworkDataTaskCocoa::didReceiveResponse):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCocoa::cancel):
        (WebKit::NetworkDataTaskCocoa::resume):

2019-12-18  youenn fablet  <youenn@apple.com>

        Refine RTCMonitor logging
        https://bugs.webkit.org/show_bug.cgi?id=205384

        Reviewed by Eric Carlson.

        Catch the case where the rtc thread is blocked in WebProcess and NetworkProcess.
        Add logging of 'this' so as to disambiguate the case of several pages doing RTC in parallel.
        No change of behavior.

        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
        (WebKit::NetworkRTCMonitor::startUpdatingIfNeeded):
        (WebKit::NetworkRTCMonitor::stopUpdating):
        (WebKit::NetworkRTCMonitor::onNetworksChanged):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        (WebKit::NetworkRTCProvider::close):
        (WebKit::NetworkRTCProvider::createSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        (WebKit::NetworkRTCProvider::canLog const):
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        (WebKit::WebRTCMonitor::StartUpdating):
        (WebKit::WebRTCMonitor::StopUpdating):
        (WebKit::WebRTCMonitor::networksChanged):

2019-12-18  Kate Cheney  <katherine_cheney@apple.com>

        Only report prevalent domains in the ResourceLoadStatistics data summary API
        https://bugs.webkit.org/show_bug.cgi?id=205281
        <rdar://problem/57975017>

        Reviewed by Brent Fulgham.

        ResourceLoadStatisticsStore::aggregatedThirdPartyData() should only
        return prevalent third party domains.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:

2019-12-18  Brent Fulgham  <bfulgham@apple.com>

        Add syscall to GPU Process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=205400
        <rdar://problem/58046272>

        Reviewed by Simon Fraser.

        This patch temporarily adds a syscall to the sandbox to work around a bug in the
        system Sandbox framework. We will remove this in Bug 205400 once that issue is
        resolved.

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

2019-12-18  Eric Carlson  <eric.carlson@apple.com>

        Enable generic cue API
        https://bugs.webkit.org/show_bug.cgi?id=205398
        <rdar://problem/58044492>

        Reviewed by Jon Lee.

        No new tests, covered by existing tests.

        * Shared/WebPreferences.yaml:

2019-12-18  Eric Carlson  <eric.carlson@apple.com>

        Remove unused MediaPlayer methods
        https://bugs.webkit.org/show_bug.cgi?id=205341
        <rdar://problem/58006776>

        Reviewed by Jer Noble.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSawUnsupportedTracks): Deleted.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRepaint): Deleted.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerAcceleratedCompositingEnabled): Deleted.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSetSize): Deleted.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsPaused const): Deleted.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsLooping const): Deleted.
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::canLoadPoster const): Deleted.
        (WebKit::MediaPlayerPrivateRemote::setPoster): Deleted.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

2019-12-18  Simon Fraser  <simon.fraser@apple.com>

        Move m_exposedContentRect into the DelegatedScrollingGeometry optional
        https://bugs.webkit.org/show_bug.cgi?id=205377

        Reviewed by Tim Horton.
        
        ScrollView's m_exposedContentRect is only set for delegated scrolling, so move it into
        DelegatedScrollingGeometry and remove the iOS #ifdefs around it. Move the WAK/NSView-related
        code into platformExposedContentRect() for iOS WK1. Stub out exposedContentRect() functions
        on TiledCoreAnimationDrawingArea.        

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setExposedContentRect):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::activityStateDidChange):
        (WebKit::TiledCoreAnimationDrawingArea::setViewExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::exposedContentRect const):
        (WebKit::TiledCoreAnimationDrawingArea::setExposedContentRect):
        (WebKit::TiledCoreAnimationDrawingArea::adjustLayerFlushThrottling):

2019-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable the async clipboard API by default on macOS and iOS
        https://bugs.webkit.org/show_bug.cgi?id=205322
        <rdar://problem/55861627>

        Reviewed by Tim Horton.

        Enables the asynchronous clipboard API by default on Cocoa platforms.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2019-12-18  Philippe Normand  <pnormand@igalia.com>

        [GTK][WebInspector] Support for saving remote data
        https://bugs.webkit.org/show_bug.cgi?id=204618

        Reviewed by Carlos Garcia Campos.

        Similarly to what landed already in r251069, the Remote
        WebInspector GTK client can now save data coming from the
        inspector server.

        * UIProcess/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformSave):

2019-12-17  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r253452.
        warning: unused variable ‘isNewEntry’ [-Wunused-variable]

        No new tests, no new behavioral changes.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::addConnection):

2019-12-17  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed build fix after r253661.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:

2019-12-17  Per Arne Vollan  <pvollan@apple.com>

        [iOS] The WebContent process should not use API to get the user interface idiom
        https://bugs.webkit.org/show_bug.cgi?id=205236

        Reviewed by Brent Fulgham.

        This should be done in the UI process, since using the API in the WebContent process will connect to daemons
        we intend to block access to. Add a flag to the process creation parameters which indicates whether the user
        interface idiom is iPad or not. This flag will be set on the UI process side, and on the WebContent process
        side, this flag will be read and cached for later use.

        No new tests, covered by existing tests.

        * Platform/spi/ios/UIKitSPI.h:
        (currentUserInterfaceIdiomIsPad): Deleted.
        * Shared/UserInterfaceIdiom.h: Added.
        * Shared/UserInterfaceIdiom.mm: Added.
        (WebKit::userInterfaceIdiomIsPad):
        (WebKit::currentUserInterfaceIdiomIsPad):
        (WebKit::setCurrentUserInterfaceIdiomIsPad):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/ios/WebPreferencesDefaultValuesIOS.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/ios/SmartMagnificationController.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession setAccessoryViewCustomButtonTitle:]):
        (-[WKContentView endEditingAndUpdateFocusAppearanceWithReason:]):
        (-[WKContentView _shouldShowAutomaticKeyboardUIIgnoringInputMode]):
        (-[WKContentView _zoomToRevealFocusedElement]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView _updateAccessory]):
        (shouldShowKeyboardForElement):
        (-[WKContentView _shouldUseLegacySelectPopoverDismissalBehavior]):
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/ios/forms/WKFormColorControl.mm:
        (-[WKFormColorControl initWithView:]):
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        * UIProcess/ios/forms/WKFormInputControl.mm:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2019-12-17  Eric Carlson  <eric.carlson@apple.com>

        Add remote media player methods for prepareToPlay, preload, private browsing mode, preserves pitch, and failed to load
        https://bugs.webkit.org/show_bug.cgi?id=205351
        <rdar://problem/58018451>

        Reviewed by Jer Noble.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::prepareToPlay):
        (WebKit::RemoteMediaPlayerManagerProxy::setPreload):
        (WebKit::RemoteMediaPlayerManagerProxy::setPrivateBrowsingMode):
        (WebKit::RemoteMediaPlayerManagerProxy::setPreservesPitch):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::prepareToPlay):
        (WebKit::RemoteMediaPlayerProxy::setPreload):
        (WebKit::RemoteMediaPlayerProxy::setPrivateBrowsingMode):
        (WebKit::RemoteMediaPlayerProxy::setPreservesPitch):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareToPlay):
        (WebKit::MediaPlayerPrivateRemote::setPreservesPitch):
        (WebKit::MediaPlayerPrivateRemote::setPreload):
        (WebKit::MediaPlayerPrivateRemote::setPrivateBrowsingMode):
        (WebKit::MediaPlayerPrivateRemote::engineFailedToLoad):
        (WebKit::MediaPlayerPrivateRemote::platformErrorCode const): Deleted.
        (WebKit::MediaPlayerPrivateRemote::requiresImmediateCompositing const): Deleted.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::engineFailedToLoad):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:

2019-12-17  Kate Cheney  <katherine_cheney@apple.com>

        Add run-time flag for in-app browser privacy
        https://bugs.webkit.org/show_bug.cgi?id=205288
        <rdar://problem/57569206>

        Reviewed by John Wilander.

        * Shared/WebPreferences.yaml:

2019-12-17  Ben Nham  <nham@apple.com>

        Navigation from empty page doesn't use cached web process
        https://bugs.webkit.org/show_bug.cgi?id=205015
        <rdar://problem/57703742>

        Reviewed by Chris Dumez.

        When navigating from an empty page to another domain foo.com, we always use the source
        WebProcess (which is basically uninitialized) rather than using an already-initialized
        cached WebProcess that has navigated to foo.com. The cached WebProcess should probably be
        preferred since it has more relevant cached resources available to it (e.g. memory cache, JS
        bytecode cache, prewarmed fonts, ...).

        Added an API test.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _ensureRunningProcessForTesting]):
        Allows tests to force WebProcess to launch to an empty document for testing purposes. This
        matches the behavior of how Safari uses WKWebView.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal): Prefer cached web process over
        source process if the source process hasn't committed any loads.

2019-12-17  Benjamin Nham  <nham@apple.com>

        Drop support for NSURLCache callbacks in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=203344

        Reviewed by Alex Christensen.

        Remove the NSURLSession caching policy callback in NetworkProcess. It's no longer necessary since
        we don't use NSURLCache in NetworkProcess (https://bugs.webkit.org/show_bug.cgi?id=185990).

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:willCacheResponse:completionHandler:]): Deleted.

2019-12-17  David Kilzer  <ddkilzer@apple.com>

        Remove SafeBrowsingResult
        <https://webkit.org/b/205296>

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm: Remove.
        * UIProcess/SafeBrowsingResult.h: Remove.

2019-12-17  youenn fablet  <youenn@apple.com>

        WebKitTestRunner should report GPU process crashes
        https://bugs.webkit.org/show_bug.cgi?id=205338

        Reviewed by Tim Horton.

        Expose a callback to notify of GPU process crash.
        No change of behavior.

        * UIProcess/API/C/WKContext.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::gpuProcessCrashed):
        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::gpuProcessDidCrash):
        * UIProcess/WebContextClient.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::gpuProcessCrashed):
        * UIProcess/WebProcessPool.h:

2019-12-17  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Cursor should update on mouse movement and style change
        https://bugs.webkit.org/show_bug.cgi?id=205317
        <rdar://problem/46793696>

        Reviewed by Anders Carlsson.

        * Configurations/WebKit.xcconfig:
        Link AppKit for NSCursor.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Cursor>::decode):
        Enable Cursor encoders.

        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setCursor):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Unifdef various things.
        Implement setCursor().

2019-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] IndexedDB directory set in WebsiteDataManager is ignored
        https://bugs.webkit.org/show_bug.cgi?id=205330

        Reviewed by Youenn Fablet.

        There are two problems here:

          1- WebKitWebsiteDataManager is no longer setting the indexedDB directory to the WebsiteDatastore
             configuration. It seems the code was removed by mistake in r249778 when rolling out r249768.
          2- The WebProcessPool is not considering the primary WebsiteDataStore for indexedDB configuration.

        Fixes: /webkit/WebKitWebsiteData/databases
               /webkit/WebKitWebsiteData/configuration

        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetDataStore):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2019-12-17  youenn fablet  <youenn@apple.com>

        Bump the priority of CacheStorageEngine write operations
        https://bugs.webkit.org/show_bug.cgi?id=205329

        Reviewed by Antti Koivisto.

        Introduce an IOChannel extra optional parameter to set the QOS.
        Use this parameter for IOChannels created by CacheStorageEngine when writing files to increase the priority to default.
        Increase the priority of the CacheStorageEngine background queue to default.
        No observable change of behavior except potential speed increase.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::Engine):
        (WebKit::CacheStorage::Engine::writeFile):
        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        (WebKit::NetworkCache::IOChannel::open):
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::dispatchQueueFromPriority):
        (WebKit::NetworkCache::IOChannel::IOChannel):
        (WebKit::NetworkCache::IOChannel::open):
        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp:
        (WebKit::NetworkCache::IOChannel::open):
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::IOChannel::open):

2019-12-17  youenn fablet  <youenn@apple.com>

        WebKitTestRunner should report service worker process crashes
        https://bugs.webkit.org/show_bug.cgi?id=205267

        Reviewed by Chris Dumez.

        Expose a way for WTR to be notified of service worker process crashes.

        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::serviceWorkerProcessDidCrash):
        * UIProcess/WebContextClient.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::serviceWorkerProcessCrashed):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):

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

        Improve release logging in NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=205295

        Reviewed by Youenn Fablet.

        Improve release logging in NetworkResourceLoader to facilitate debugging of loading-related issues.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::retrieveCacheEntryInternal):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::convertToDownload):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::didBlockAuthenticationChallenge):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
        (WebKit::NetworkResourceLoader::restartNetworkLoad):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveMainResourceResponse):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        (WebKit::NetworkResourceLoader::validateCacheEntry):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
        (WebKit::NetworkResourceLoader::startWithServiceWorker):
        (WebKit::NetworkResourceLoader::serviceWorkerDidNotHandle):

2019-12-16  Simon Fraser  <simon.fraser@apple.com>

        Change 'delegatesPageScaling' from a Setting to a flag on ScrollView
        https://bugs.webkit.org/show_bug.cgi?id=205319

        Reviewed by Tim Horton.

        delegatesPageScaling() is never toggled at runtime (even by tests), and it should
        be a flag on FrameView just like delegatesScrolling (maybe in future the flags can merge).

        So remove the Setting, and have DrawingArea control whether page scaling is delegated.
        
        In WebKit1, WebFrameLoaderClient::transitionToCommittedForNewPage() turns on delegated
        page scaling for iOS.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::usesDelegatedPageScaling const):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindIndicatorOverlayClientIOS::drawRect):

2019-12-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        -[UIWKDocumentContext markedTextRange] is wrong when the caret is not at the start of marked text
        https://bugs.webkit.org/show_bug.cgi?id=205302

        Reviewed by Tim Horton.

        Makes a few minor adjustments around marked text handling in document editing context request code.

        1. In the case where markedTextRects are requested, automatically expand the context range (i.e. contextBefore
        and contextAfter) to encompass the marked text. This fixes UIWKDocumentContext's logic that computes the
        marked text range by subtracting `contextBefore` string's length from `selectedRangeInMarkedText`'s location.

        (Note that this still requires an adjustment in UIKit to actually respect `selectedRangeInMarkedText` when
        computing `markedTextRange`. This is tracked in <rdar://problem/57338528>).

        2. Stop clamping compositionStart and compositionEnd to the range of interest (in this case, the selection
        range, which is a collapsed caret selection). This makes the composition range seem as if it were empty, which
        prevents us from computing the marked text string (and importantly, its length).

        3. Flip the arguments to `distanceBetweenPositions`, such that we end up with a positive value for
        `selectedRangeInMarkedText` in the case where `compositionStart` is before `startOfRangeOfInterestInSelection`.

        Test: DocumentEditingContext.RequestMarkedTextRectsAndTextOnly

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

2019-12-16  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Issue mach lookup extension to diagnostics daemon
        https://bugs.webkit.org/show_bug.cgi?id=205292

        Reviewed by Brent Fulgham.

        For internal installs, issue a mach lookup extension to the diagnostics daemon.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::isInternalInstall):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2019-12-16  Daniel Bates  <dabates@apple.com>

        Reproducible case of backwards nextParagraph returning a position ahead of the input position
        https://bugs.webkit.org/show_bug.cgi?id=196127
        <rdar://problem/49135890>

        Reviewed by Wenson Hsieh.

        Remove workaround now that WebCore::nextParagraphBoundaryInDirection() behaves correctly.

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

2019-12-16  youenn fablet  <youenn@apple.com>

        Make ServiceWorkerSoftUpdateLoader::loadWithCacheEntry more robust
        https://bugs.webkit.org/show_bug.cgi?id=205202
        rdar://problem/57852910

        Reviewed by Chris Dumez.

        In case loading an entry from the cache, we were calling didReceiveResponse,
        which may destroy the loader and then continue processing.
        Instead, add a processResponse method that checks the response and returns an error if needed.
        didReceiveResponse calls this method and returns early in case of error.
        So does the method loading data from the cache.

        Covered by existing tests.

        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::loadWithCacheEntry):
        (WebKit::ServiceWorkerSoftUpdateLoader::didReceiveResponse):
        (WebKit::ServiceWorkerSoftUpdateLoader::processResponse):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.h:

2019-12-16  Antti Koivisto  <antti@apple.com>

        Remove display:contents feature flag
        https://bugs.webkit.org/show_bug.cgi?id=205276

        Reviewed by Ryosuke Niwa.

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

2019-12-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix API availability for -_getResourceLoadStatisticsDataSummary: after r253484
        https://bugs.webkit.org/show_bug.cgi?id=205256

        Reviewed by Alex Christensen.

        Replaces WK_API_AVAILABLE(macos(10.15), ios(13.0)) with WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)),
        since this is new WebKit SPI that hasn't made its way into the SDK.

        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

2019-12-16  Daniel Bates  <dabates@apple.com>

        -requestDocumentContext always returns 1 text unit more granularity than requested
        https://bugs.webkit.org/show_bug.cgi?id=205142
        <rdar://problem/57858236>

        Reviewed by Darin Adler and Wenson Hsieh.

        Use WebCore::atBoundaryOfGranularity() to identify each boundary so that we return the position
        exactly granularityCount text units advanced from the specified position. When using sentence
        granularity we do not need to round the resulting position to the nearest word because it already
        falls before the next word (if there is one). For all other granularities we do what we do now
        and round to the nearest word, which may cross that granularity's boundary.

        Additionally, added assertions to ensure that we are passed a non-zero granularity count and a non-
        null initial position. The function takes advantage of these assumptions to 1) ensure correct results
        and 2) make use of a do-while loop.

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

2019-12-16  Simon Fraser  <simon.fraser@apple.com>

        Let the DrawingArea decide whether scrolling is delegated
        https://bugs.webkit.org/show_bug.cgi?id=205258

        Reviewed by Anders Carlsson.
        
        Delegated scrolling was hardcoded on for iOS WK2 (as it is for iOS WK1) and off for macOS,
        but if macOS is using RemoteLayerTreeDrawingArea that should also use delegated scrolling.
        
        Also make some DrawingArea functions const, and put m_frame->coreFrame()->view() into
        a local RefPtr in WebFrameLoaderClient::transitionToCommittedForNewPage().

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::supportsAsyncScrolling const):
        (WebKit::DrawingArea::usesDelegatedScrolling const):
        (WebKit::DrawingArea::shouldUseTiledBackingForFrameView const):
        (WebKit::DrawingArea::supportsAsyncScrolling): Deleted.
        (WebKit::DrawingArea::shouldUseTiledBackingForFrameView): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::shouldUseTiledBackingForFrameView const):
        (WebKit::RemoteLayerTreeDrawingArea::shouldUseTiledBackingForFrameView): Deleted.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::shouldUseTiledBackingForFrameView const):
        (WebKit::TiledCoreAnimationDrawingArea::shouldUseTiledBackingForFrameView): Deleted.

2019-12-16  Eric Carlson  <eric.carlson@apple.com>

        Log when unimplemented remote MediaPlayer methods are called
        https://bugs.webkit.org/show_bug.cgi?id=205269
        <rdar://problem/57967733>

        Reviewed by Youenn Fablet.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPlaybackStateChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSawUnsupportedTracks):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerResourceNotSupported):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRepaint):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSizeChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerEngineUpdated):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerFirstVideoFrameAvailable):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCharacteristicChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRenderingCanBeAccelerated):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRenderingModeChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerAcceleratedCompositingEnabled):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerActiveSourceBuffersChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCachedKeyForKeyId const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerKeyNeeded):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaKeysStorageDirectory const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerInitializationDataEncountered):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerWaitingForKeyChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerReferrer const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerUserAgent const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerEnterFullscreen):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerExitFullscreen):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsFullscreen const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsFullscreenPermitted const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsVideo const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerContentBoxRect const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerContentsScale const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSetSize):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPause):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPlay):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPlatformVolumeConfigurationRequired const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsPaused const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsLooping const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCachedResourceLoader):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCreateResourceLoader):
        (WebKit::RemoteMediaPlayerProxy::doesHaveAttribute const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerShouldUsePersistentCache const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaCacheDirectory const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddAudioTrack):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddTextTrack):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddVideoTrack):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveAudioTrack):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveTextTrack):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveVideoTrack):
        (WebKit::RemoteMediaPlayerProxy::textTrackRepresentationBoundsChanged):
        (WebKit::RemoteMediaPlayerProxy::outOfBandTrackSources):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerNetworkInterfaceName const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerGetRawCookies const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerHandlePlaybackCommand):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSourceApplicationIdentifier const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsInMediaDocument const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerEngineFailedToLoad const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRequestedPlaybackRate const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerFullscreenMode const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsVideoFullscreenStandby const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPreferredAudioCharacteristics const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerShouldDisableSleep const):
        (WebKit::RemoteMediaPlayerProxy::mediaContentTypesRequiringHardwareSupport const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerShouldCheckHardwareSupport const):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:

2019-12-16  Kate Cheney  <katherine_cheney@apple.com>

        Add NS_UNAVAILABLE tags to prevent alloc inits for _WKResourceLoadStatistics* classes
        https://bugs.webkit.org/show_bug.cgi?id=205221

        Reviewed by Anders Carlsson.

        This patch ensures that no one tries to alloc init
        _WKResourceLoadStatisticsFirstParty or
        _WKResourceLoadStatisticsThirdParty. They should only be created via
        the API call to create().

        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.h:

2019-12-16  youenn fablet  <youenn@apple.com>

        http/wpt/service-workers/postMessage-fetch-order.https.html is a flaky failure after r253528
        https://bugs.webkit.org/show_bug.cgi?id=205261

        Reviewed by Chris Dumez.

        Instead of starting the fetch task asynchronously, start it synchronously but make sure that
        not handling the fetch is either coming from IPC or is done asynchronously.

        We add a boolean m_isDone that ensures that the loader will only be called once for didFail/didFinish/didNotHandle.
        This covers the potential case of a task for which cannotHandle is called synchronously at creation but the call to didNotHandle is not yet done.
        Before the call to didNotHandle is done, a timeout timer is firing and will call didNotHandle a first time.
        The second didNotHandle should be a no-op.

        Covered by existing tests and unflakes above test.

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::contextClosed):
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveData):
        (WebKit::ServiceWorkerFetchTask::didReceiveFormData):
        (WebKit::ServiceWorkerFetchTask::didFinish):
        (WebKit::ServiceWorkerFetchTask::didFail):
        (WebKit::ServiceWorkerFetchTask::didNotHandle):
        Make sure to call didNotHandle only once based on m_isDone.
        (WebKit::ServiceWorkerFetchTask::cannotHandle):
        Do not expose didNotHandle as a public method.
        Instead expose cannotHandle that will call didNotHandle asynchronously.
        (WebKit::ServiceWorkerFetchTask::continueFetchTaskWith):
        No need to set a timer if we will not create a fetch event.
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        (WebKit::ServiceWorkerFetchTask::takeRequest):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::fetchTaskTimedOut):
        Small refactoring to only use contextClosed and not expose whether the task is handled or not.
        This also potentially allows to call didNotHandle in case the service worker crashed before answering the fetch event.

2019-12-16  Emilio Cobos Álvarez  <emilio@crisal.io>

        [GTK] Build with USE_WPE_RENDERER=No fails with undefined EGL_WAYLAND_BUFFER_WL
        https://bugs.webkit.org/show_bug.cgi?id=205250

        Reviewed by Carlos Garcia Campos.

        Define the enum if not present.

        No new tests, just a build fix.

        * UIProcess/gtk/WaylandCompositor.cpp:

2019-12-16  youenn fablet  <youenn@apple.com>

        Reset cached getUserMedia queries when calling stopMediaCapture
        https://bugs.webkit.org/show_bug.cgi?id=205064

        Reviewed by Eric Carlson.

        Reset cached queries when calling stop media capture API allows to trigger again the prompt
        after the API call.
        Covered by updated API test.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::resetAccess):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        (WebKit::UserMediaPermissionRequestManagerProxy::resetAccess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::stopMediaCapture):

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

        -[WKWebView _detectDataWithTypes:completionHandler:] crashes when there is no running process
        https://bugs.webkit.org/show_bug.cgi?id=205254

        Reviewed by Tim Horton.

        Bail early and call the completion handler in the case where we don't have a running web process, to avoid a
        null `Connection*` deref. Speculative fix for <rdar://problem/57463469>.

        * UIProcess/WebPageProxy.cpp:

2019-12-14  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fix various non-unified build issues introduced since r251698
        https://bugs.webkit.org/show_bug.cgi?id=204891

        Reviewed by Alex Christensen.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp: Add missing WebCore namespace prefixes
        in function declarations.
        (WebKit::WebIDBServer::create):
        (WebKit::WebIDBServer::WebIDBServer):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::suspend):
        (WebKit::WebIDBServer::idFireVersionChangeEvent):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::requestSpace): Add missing namespace prefix for
        WebCore::ClientOrigin.
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp: Add missing inclusion of
        WebCore/RegistrableDomain.h
        (WebKit::NetworkCache::SubresourceInfo::isFirstParty const): Add missing namespace prefix
        for WebCore::RegistrableDomain.
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::setFilesForInputFileUpload): Add missing namespace
        prefix for WebCore::File::create() and WebCore::FileList::create() calls.

2019-12-14  Simon Fraser  <simon.fraser@apple.com>

        Rename "customFixedPositionRect" to "layoutViewportRect"
        https://bugs.webkit.org/show_bug.cgi?id=205241

        Reviewed by Dean Jackson.

        WK2 computes the rect used to layout out position:fixed elements in the UI process.
        For historical reasons this was called customFixedPositionRect, but rename it to
        layoutViewportRect since that what it really is.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode const):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::layoutViewportRect const):
        (WebKit::operator==):
        (WebKit::VisibleContentRectUpdateInfo::customFixedPositionRect const): Deleted.
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::currentLayoutViewport const):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::layoutViewportRect const):
        (WebKit::WebPageProxy::customFixedPositionRect const): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:contentInsets:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView _didCommitLayerTree:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeLayoutViewportRect const):
        (WebKit::WebPageProxy::unconstrainedLayoutViewportRect const):
        (WebKit::WebPageProxy::computeCustomFixedPositionRect const): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2019-12-14  Per Arne Vollan  <pvollan@apple.com>

        Map CSS value ID to system color in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=204314
        <rdar://problem/57295392>
 
        Reviewed by Brent Fulgham.
 
        Create mapping between CSS value IDs and system colors in the UI process and send to the WebContent process
        on process startup.
 
        No new tests, covered by existing tests.
 
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2019-12-14  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Deny mach lookup access to "*.viewservice" in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=205240

        Reviewed by Brent Fulgham.

        As part of sandbox hardening in the WebContent process, mach lookup access to “*.viewservice” should be removed.

        Test: fast/sandbox/ios/sandbox-mach-lookup.html

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

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

        WebSWServerConnection::startFetch() should never fail synchronously
        https://bugs.webkit.org/show_bug.cgi?id=205225
        <rdar://problem/57490508>

        Reviewed by Geoffrey Garen.

        WebSWServerConnection::startFetch() should never fail synchronously. If it does, it will
        confuse the NetworkResourceLoader. NetworkResourceLoader::serviceWorkerDidNotHandle() will
        get called *before* NetworkResourceLoader::m_serviceWorkerFetchTask has been sent, which
        means that we would not properly deal with redirects. Worse, the call site which creates
        the ServiceWorkerFetchTask would then null out m_networkLoad, which would silently cancel
        the load that WebSWServerConnection::startFetch() started synchronously.

        No new tests, I am not sure how to test this. It would have to cause a redirect do a URL
        that has a service worker and then we would have to get WebSWServerConnection::startFetch()
        to fail synchronously. I think that to fail synchronously, we would have to not find a
        ServiceWorker with the given ID, or the ServiceWorker's hasTimedOutAnyFetchTasks would have
        to be set.

        I added a RELEASE_ASSERT() in NetworkResourceLoader::serviceWorkerDidNotHandle() that would
        have caught this.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):

2019-12-14  Simon Fraser  <simon.fraser@apple.com>

        Move code out of WKWebView.mm into platform-specific files, for easier navigation
        https://bugs.webkit.org/show_bug.cgi?id=205233

        Reviewed by Tim Horton.

        Move as much platform-specific code out of WKWebView.mm as possible, moving it to WKWebViewMac/WKWebViewIOS.
        WKWebView (WKPrivate) is split into WKWebView (WKPrivateIOS) and WKWebView (WKPrivateMac) so the implementations
        of those functions can move.
        
        Code that remains in WKWebView.mm is either Cocoa-generic, or implements API.
        
        This is entirely cut/paste, other than the addition of -_takeFindStringFromSelectionInternal: for macOS
        to allow WKWebView.mm to call -takeFindStringFromSelection:.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (hardwareKeyboardAvailabilityChangedCallback):
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        (-[WKWebView allowsBackForwardNavigationGestures]):
        (-[WKWebView setPageZoom:]):
        (-[WKWebView pageZoom]):
        (toFindOptions):
        (-[WKWebView findString:withConfiguration:completionHandler:]):
        (+[WKWebView handlesURLScheme:]):
        (-[WKWebView setMediaType:]):
        (-[WKWebView mediaType]):
        (-[WKWebView scrollView]):
        (-[WKWebView setAllowsMagnification:]):
        (-[WKWebView allowsMagnification]):
        (-[WKWebView setMagnification:centeredAtPoint:]):
        (-[WKWebView setMagnification:]):
        (-[WKWebView magnification]):
        (-[WKWebView printOperationWithPrintInfo:]):
        (-[WKWebView _showSafeBrowsingWarning:completionHandler:]):
        (-[WKWebView _clearSafeBrowsingWarning]):
        (-[WKWebView _clearSafeBrowsingWarningIfForMainFrameNavigation]):
        (-[WKWebView _internalDoAfterNextPresentationUpdate:withoutWaitingForPainting:withoutWaitingForAnimatedResize:]):
        (dictionaryRepresentationForEditorState):
        (nsTextAlignment):
        (selectionAttributes):
        (-[WKWebView _didChangeEditorState]):
        (-[WKWebView _toggleStrikeThrough:]):
        (-[WKWebView _increaseListLevel:]):
        (-[WKWebView _decreaseListLevel:]):
        (-[WKWebView _changeListType:]):
        (-[WKWebView inputAccessoryView]):
        (-[WKWebView inputView]):
        (-[WKWebView inputAssistantItem]):
        (-[WKWebView _selectionAttributes]):
        (-[WKWebView _viewportSizeForCSSViewportUnits]):
        (-[WKWebView _setViewportSizeForCSSViewportUnits:]):
        (-[WKWebView _inspector]):
        (-[WKWebView _mainFrame]):
        (-[WKWebView _isEditable]):
        (-[WKWebView _setEditable:]):
        (-[WKWebView _executeEditCommand:argument:completion:]):
        (-[WKWebView _textManipulationDelegate]):
        (-[WKWebView _setTextManipulationDelegate:]):
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]):
        (-[WKWebView _completeTextManipulation:completion:]):
        (-[WKWebView _takeFindStringFromSelection:]):
        (+[WKWebView _stringForFind]):
        (+[WKWebView _setStringForFind:]):
        (-[WKWebView _remoteObjectRegistry]):
        (-[WKWebView _handle]):
        (-[WKWebView _observedRenderingProgressEvents]):
        (-[WKWebView _historyDelegate]):
        (-[WKWebView _setHistoryDelegate:]):
        (-[WKWebView _updateMediaPlaybackControlsManager]):
        (-[WKWebView _canTogglePictureInPicture]):
        (-[WKWebView _isPictureInPictureActive]):
        (-[WKWebView _togglePictureInPicture]):
        (-[WKWebView _closeAllMediaPresentations]):
        (-[WKWebView _stopMediaCapture]):
        (-[WKWebView _stopAllMediaPlayback]):
        (-[WKWebView _suspendAllMediaPlayback]):
        (-[WKWebView _resumeAllMediaPlayback]):
        (-[WKWebView _unreachableURL]):
        (-[WKWebView _mainFrameURL]):
        (-[WKWebView _loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):
        (-[WKWebView _loadRequest:shouldOpenExternalURLs:]):
        (-[WKWebView _certificateChain]):
        (-[WKWebView _committedURL]):
        (-[WKWebView _MIMEType]):
        (-[WKWebView _userAgent]):
        (-[WKWebView _applicationNameForUserAgent]):
        (-[WKWebView _setApplicationNameForUserAgent:]):
        (-[WKWebView _customUserAgent]):
        (-[WKWebView _setCustomUserAgent:]):
        (-[WKWebView _setUserContentExtensionsEnabled:]):
        (-[WKWebView _userContentExtensionsEnabled]):
        (-[WKWebView _webProcessIdentifier]):
        (-[WKWebView _provisionalWebProcessIdentifier]):
        (-[WKWebView _webProcessIsResponsive]):
        (-[WKWebView _killWebContentProcess]):
        (-[WKWebView _reloadWithoutContentBlockers]):
        (-[WKWebView _reloadExpiredOnly]):
        (-[WKWebView _killWebContentProcessAndResetState]):
        (-[WKWebView _convertRectFromRootViewCoordinates:]):
        (-[WKWebView _convertRectToRootViewCoordinates:]):
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]):
        (-[WKWebView _focusTextInputContext:completionHandler:]):
        (-[WKWebView _takePDFSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView _sessionStateData]):
        (-[WKWebView _sessionState]):
        (-[WKWebView _sessionStateWithFilter:]):
        (-[WKWebView _restoreFromSessionStateData:]):
        (-[WKWebView _restoreSessionState:andNavigate:]):
        (-[WKWebView _close]):
        (-[WKWebView _insertAttachmentWithFilename:contentType:data:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:completion:]):
        (-[WKWebView _attachmentForIdentifier:]):
        (-[WKWebView _simulateDeviceOrientationChangeWithAlpha:beta:gamma:]):
        (+[WKWebView _handlesSafeBrowsing]):
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]):
        (+[WKWebView _confirmMalwareSentinel]):
        (+[WKWebView _visitUnsafeWebsiteSentinel]):
        (-[WKWebView _isJITEnabled:]):
        (-[WKWebView _evaluateJavaScriptWithoutUserGesture:completionHandler:]):
        (-[WKWebView _updateWebsitePolicies:]):
        (-[WKWebView _allowsRemoteInspection]):
        (-[WKWebView _setAllowsRemoteInspection:]):
        (-[WKWebView _remoteInspectionNameOverride]):
        (-[WKWebView _setRemoteInspectionNameOverride:]):
        (-[WKWebView _addsVisitedLinks]):
        (-[WKWebView _setAddsVisitedLinks:]):
        (-[WKWebView _networkRequestsInProgress]):
        (layoutMilestones):
        (-[WKWebView _setObservedRenderingProgressEvents:]):
        (-[WKWebView _getMainResourceDataWithCompletionHandler:]):
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView _getContentsAsStringWithCompletionHandler:]):
        (-[WKWebView _getContentsAsAttributedStringWithCompletionHandler:]):
        (-[WKWebView _getApplicationManifestWithCompletionHandler:]):
        (-[WKWebView _paginationMode]):
        (-[WKWebView _setPaginationMode:]):
        (-[WKWebView _paginationBehavesLikeColumns]):
        (-[WKWebView _setPaginationBehavesLikeColumns:]):
        (-[WKWebView _pageLength]):
        (-[WKWebView _setPageLength:]):
        (-[WKWebView _gapBetweenPages]):
        (-[WKWebView _setGapBetweenPages:]):
        (-[WKWebView _paginationLineGridEnabled]):
        (-[WKWebView _setPaginationLineGridEnabled:]):
        (-[WKWebView _pageCount]):
        (-[WKWebView _supportsTextZoom]):
        (-[WKWebView _textZoomFactor]):
        (-[WKWebView _setTextZoomFactor:]):
        (-[WKWebView _pageZoomFactor]):
        (-[WKWebView _setPageZoomFactor:]):
        (-[WKWebView _diagnosticLoggingDelegate]):
        (-[WKWebView _setDiagnosticLoggingDelegate:]):
        (-[WKWebView _findDelegate]):
        (-[WKWebView _setFindDelegate:]):
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        (-[WKWebView _saveBackForwardSnapshotForItem:]):
        (-[WKWebView _inputDelegate]):
        (-[WKWebView _setInputDelegate:]):
        (-[WKWebView _isDisplayingStandaloneImageDocument]):
        (-[WKWebView _isDisplayingStandaloneMediaDocument]):
        (-[WKWebView _isPlayingAudio]):
        (-[WKWebView _isShowingNavigationGestureSnapshot]):
        (-[WKWebView _layoutMode]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _fixedLayoutSize]):
        (-[WKWebView _setFixedLayoutSize:]):
        (-[WKWebView _setBackgroundExtendsBeyondPage:]):
        (-[WKWebView _backgroundExtendsBeyondPage]):
        (-[WKWebView _viewScale]):
        (-[WKWebView _setViewScale:]):
        (-[WKWebView _setMinimumEffectiveDeviceWidth:]):
        (-[WKWebView _minimumEffectiveDeviceWidth]):
        (-[WKWebView _setScrollPerformanceDataCollectionEnabled:]):
        (-[WKWebView _scrollPerformanceDataCollectionEnabled]):
        (-[WKWebView _scrollPerformanceData]):
        (-[WKWebView _allowsMediaDocumentInlinePlayback]):
        (-[WKWebView _setAllowsMediaDocumentInlinePlayback:]):
        (-[WKWebView _setFullscreenDelegate:]):
        (-[WKWebView _fullscreenDelegate]):
        (-[WKWebView _isInFullscreen]):
        (-[WKWebView _mediaCaptureState]):
        (-[WKWebView _setMediaCaptureEnabled:]):
        (-[WKWebView _mediaCaptureEnabled]):
        (-[WKWebView _setPageMuted:]):
        (-[WKWebView _removeDataDetectedLinks:]):
        (-[WKWebView _doAfterNextPresentationUpdate:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForPainting:]):
        (toAPIScrollbarStyle): Deleted.
        (toCoreScrollbarStyle): Deleted.
        (deviceOrientationForUIInterfaceOrientation): Deleted.
        (deviceOrientation): Deleted.
        (-[WKWebView setFrame:]): Deleted.
        (-[WKWebView setBounds:]): Deleted.
        (-[WKWebView layoutSubviews]): Deleted.
        (-[WKWebView _isShowingVideoPictureInPicture]): Deleted.
        (-[WKWebView _mayAutomaticallyShowVideoPictureInPicture]): Deleted.
        (-[WKWebView _incrementFocusPreservationCount]): Deleted.
        (-[WKWebView _decrementFocusPreservationCount]): Deleted.
        (-[WKWebView _resetFocusPreservationCount]): Deleted.
        (-[WKWebView _isRetainingActiveFocusedState]): Deleted.
        (-[WKWebView _effectiveAppearanceIsDark]): Deleted.
        (-[WKWebView _effectiveUserInterfaceLevelIsElevated]): Deleted.
        (-[WKWebView _shouldAvoidResizingWhenInputViewBoundsChange]): Deleted.
        (-[WKWebView _dragInteractionPolicy]): Deleted.
        (-[WKWebView _setDragInteractionPolicy:]): Deleted.
        (-[WKWebView _populateArchivedSubviews:]): Deleted.
        (-[WKWebView _isBackground]): Deleted.
        (-[WKWebView browsingContextController]): Deleted.
        (-[WKWebView becomeFirstResponder]): Deleted.
        (-[WKWebView canBecomeFirstResponder]): Deleted.
        (-[WKWebView resignFirstResponder]): Deleted.
        (-[WKWebView canPerformAction:withSender:]): Deleted.
        (-[WKWebView targetForAction:withSender:]): Deleted.
        (-[WKWebView willFinishIgnoringCalloutBarFadeAfterPerformingAction]): Deleted.
        (floorToDevicePixel): Deleted.
        (pointsEqualInDevicePixels): Deleted.
        (roundScrollViewContentSize): Deleted.
        (-[WKWebView _currentContentView]): Deleted.
        (-[WKWebView _contentProviderRegistry]): Deleted.
        (-[WKWebView _selectionGranularity]): Deleted.
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]): Deleted.
        (-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:data:]): Deleted.
        (-[WKWebView _handleKeyUIEvent:]): Deleted.
        (-[WKWebView _willInvokeUIScrollViewDelegateCallback]): Deleted.
        (-[WKWebView _didInvokeUIScrollViewDelegateCallback]): Deleted.
        (contentZoomScale): Deleted.
        (baseScrollViewBackgroundColor): Deleted.
        (scrollViewBackgroundColor): Deleted.
        (-[WKWebView _updateScrollViewBackground]): Deleted.
        (-[WKWebView _videoControlsManagerDidChange]): Deleted.
        (-[WKWebView _initialContentOffsetForScrollView]): Deleted.
        (-[WKWebView _contentOffsetAdjustedForObscuredInset:]): Deleted.
        (-[WKWebView _effectiveObscuredInsetEdgesAffectedBySafeArea]): Deleted.
        (-[WKWebView _computedObscuredInset]): Deleted.
        (-[WKWebView _computedContentInset]): Deleted.
        (-[WKWebView _computedUnobscuredSafeAreaInset]): Deleted.
        (-[WKWebView _processWillSwapOrDidExit]): Deleted.
        (-[WKWebView _processWillSwap]): Deleted.
        (-[WKWebView _processDidExit]): Deleted.
        (-[WKWebView _didRelaunchProcess]): Deleted.
        (-[WKWebView _didCommitLoadForMainFrame]): Deleted.
        (contentOffsetBoundedInValidRange): Deleted.
        (changeContentOffsetBoundedInValidRange): Deleted.
        (-[WKWebView visibleRectInViewCoordinates]): Deleted.
        (areEssentiallyEqualAsFloat): Deleted.
        (-[WKWebView _didCommitLayerTreeDuringAnimatedResize:]): Deleted.
        (-[WKWebView _didCommitLayerTree:]): Deleted.
        (-[WKWebView _layerTreeCommitComplete]): Deleted.
        (-[WKWebView _couldNotRestorePageState]): Deleted.
        (-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]): Deleted.
        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]): Deleted.
        (-[WKWebView _takeViewSnapshot]): Deleted.
        (-[WKWebView _zoomToPoint:atScale:animated:]): Deleted.
        (-[WKWebView _zoomToRect:atScale:origin:animated:]): Deleted.
        (constrainContentOffset): Deleted.
        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]): Deleted.
        (-[WKWebView _scrollToRect:origin:minimumScrollDistance:]): Deleted.
        (-[WKWebView _zoomOutWithOrigin:animated:]): Deleted.
        (-[WKWebView _zoomToInitialScaleWithOrigin:animated:]): Deleted.
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]): Deleted.
        (-[WKWebView _initialScaleFactor]): Deleted.
        (-[WKWebView _contentZoomScale]): Deleted.
        (-[WKWebView _targetContentZoomScaleForRect:currentScale:fitEntireRect:minimumScale:maximumScale:]): Deleted.
        (-[WKWebView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]): Deleted.
        (-[WKWebView didMoveToWindow]): Deleted.
        (-[WKWebView _setOpaqueInternal:]): Deleted.
        (-[WKWebView setOpaque:]): Deleted.
        (-[WKWebView setBackgroundColor:]): Deleted.
        (-[WKWebView _allowsDoubleTapGestures]): Deleted.
        (-[WKWebView _stylusTapGestureShouldCreateEditableImage]): Deleted.
        (-[WKWebView usesStandardContentView]): Deleted.
        (-[WKWebView scrollView:contentSizeForZoomScale:withProposedSize:]): Deleted.
        (-[WKWebView viewForZoomingInScrollView:]): Deleted.
        (-[WKWebView scrollViewWillBeginZooming:withView:]): Deleted.
        (-[WKWebView scrollViewWillBeginDragging:]): Deleted.
        (-[WKWebView _didFinishScrolling]): Deleted.
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Deleted.
        (-[WKWebView scrollViewDidEndDragging:willDecelerate:]): Deleted.
        (-[WKWebView scrollViewDidEndDecelerating:]): Deleted.
        (-[WKWebView scrollViewDidScrollToTop:]): Deleted.
        (-[WKWebView _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]): Deleted.
        (-[WKWebView scrollViewDidScroll:]): Deleted.
        (-[WKWebView scrollViewDidZoom:]): Deleted.
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]): Deleted.
        (-[WKWebView scrollViewDidEndScrollingAnimation:]): Deleted.
        (-[WKWebView _scrollViewDidInterruptDecelerating:]): Deleted.
        (-[WKWebView _enclosingViewForExposedRectComputation]): Deleted.
        (-[WKWebView _visibleRectInEnclosingView:]): Deleted.
        (-[WKWebView _visibleContentRect]): Deleted.
        (-[WKWebView _didScroll]): Deleted.
        (-[WKWebView _enclosingScrollerScrollingEnded:]): Deleted.
        (-[WKWebView _scrollViewSystemContentInset]): Deleted.
        (-[WKWebView activeViewLayoutSize:]): Deleted.
        (-[WKWebView _dispatchSetViewLayoutSize:]): Deleted.
        (-[WKWebView _dispatchSetMaximumUnobscuredSize:]): Deleted.
        (-[WKWebView _dispatchSetDeviceOrientation:]): Deleted.
        (-[WKWebView _frameOrBoundsChanged]): Deleted.
        (-[WKWebView _contentRectForUserInteraction]): Deleted.
        (-[WKWebView _scrollViewIsRubberBanding]): Deleted.
        (-[WKWebView safeAreaInsetsDidChange]): Deleted.
        (-[WKWebView _scheduleVisibleContentRectUpdate]): Deleted.
        (-[WKWebView _scrollViewIsInStableState:]): Deleted.
        (-[WKWebView _addUpdateVisibleContentRectPreCommitHandler]): Deleted.
        (-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]): Deleted.
        (scrollViewCanScroll): Deleted.
        (-[WKWebView _contentBoundsExtendedForRubberbandingWithScale:]): Deleted.
        (-[WKWebView _updateVisibleContentRects]): Deleted.
        (-[WKWebView _didStartProvisionalLoadForMainFrame]): Deleted.
        (activeMaximumUnobscuredSize): Deleted.
        (activeOrientation): Deleted.
        (-[WKWebView _cancelAnimatedResize]): Deleted.
        (-[WKWebView _didCompleteAnimatedResize]): Deleted.
        (-[WKWebView _didFinishLoadForMainFrame]): Deleted.
        (-[WKWebView _didFailLoadForMainFrame]): Deleted.
        (-[WKWebView _didSameDocumentNavigationForMainFrame:]): Deleted.
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]): Deleted.
        (-[WKWebView _shouldUpdateKeyboardWithInfo:]): Deleted.
        (-[WKWebView _keyboardWillChangeFrame:]): Deleted.
        (-[WKWebView _keyboardDidChangeFrame:]): Deleted.
        (-[WKWebView _keyboardWillShow:]): Deleted.
        (-[WKWebView _keyboardDidShow:]): Deleted.
        (-[WKWebView _keyboardWillHide:]): Deleted.
        (-[WKWebView _windowDidRotate:]): Deleted.
        (-[WKWebView _contentSizeCategoryDidChange:]): Deleted.
        (-[WKWebView _contentSizeCategory]): Deleted.
        (-[WKWebView _accessibilitySettingsDidChange:]): Deleted.
        (-[WKWebView _isNavigationSwipeGestureRecognizer:]): Deleted.
        (-[WKWebView _navigationGestureDidBegin]): Deleted.
        (-[WKWebView _navigationGestureDidEnd]): Deleted.
        (-[WKWebView _showPasswordViewWithDocumentName:passwordHandler:]): Deleted.
        (-[WKWebView _hidePasswordView]): Deleted.
        (-[WKWebView _passwordView]): Deleted.
        (-[WKWebView _updateScrollViewInsetAdjustmentBehavior]): Deleted.
        (-[WKWebView _setAvoidsUnsafeArea:]): Deleted.
        (-[WKWebView _haveSetObscuredInsets]): Deleted.
        (-[WKWebView acceptsFirstResponder]): Deleted.
        (-[WKWebView viewWillStartLiveResize]): Deleted.
        (-[WKWebView viewDidEndLiveResize]): Deleted.
        (-[WKWebView isFlipped]): Deleted.
        (-[WKWebView intrinsicContentSize]): Deleted.
        (-[WKWebView prepareContentInRect:]): Deleted.
        (-[WKWebView setFrameSize:]): Deleted.
        (-[WKWebView _web_grantDOMPasteAccess]): Deleted.
        (-[WKWebView _prepareForImmediateActionAnimation]): Deleted.
        (-[WKWebView _cancelImmediateActionAnimation]): Deleted.
        (-[WKWebView _completeImmediateActionAnimation]): Deleted.
        (-[WKWebView ALLOW_DEPRECATED_IMPLEMENTATIONS_END]): Deleted.
        (-[WKWebView writeSelectionToPasteboard:types:]): Deleted.
        (-[WKWebView centerSelectionInVisibleArea:]): Deleted.
        (-[WKWebView validRequestorForSendType:returnType:]): Deleted.
        (-[WKWebView readSelectionFromPasteboard:]): Deleted.
        (-[WKWebView changeFont:]): Deleted.
        (-[WKWebView changeColor:]): Deleted.
        (-[WKWebView changeAttributes:]): Deleted.
        (-[WKWebView startSpeaking:]): Deleted.
        (-[WKWebView stopSpeaking:]): Deleted.
        (-[WKWebView showGuessPanel:]): Deleted.
        (-[WKWebView checkSpelling:]): Deleted.
        (-[WKWebView changeSpelling:]): Deleted.
        (-[WKWebView toggleContinuousSpellChecking:]): Deleted.
        (-[WKWebView isGrammarCheckingEnabled]): Deleted.
        (-[WKWebView setGrammarCheckingEnabled:]): Deleted.
        (-[WKWebView toggleGrammarChecking:]): Deleted.
        (-[WKWebView toggleAutomaticSpellingCorrection:]): Deleted.
        (-[WKWebView orderFrontSubstitutionsPanel:]): Deleted.
        (-[WKWebView toggleSmartInsertDelete:]): Deleted.
        (-[WKWebView isAutomaticQuoteSubstitutionEnabled]): Deleted.
        (-[WKWebView setAutomaticQuoteSubstitutionEnabled:]): Deleted.
        (-[WKWebView toggleAutomaticQuoteSubstitution:]): Deleted.
        (-[WKWebView isAutomaticDashSubstitutionEnabled]): Deleted.
        (-[WKWebView setAutomaticDashSubstitutionEnabled:]): Deleted.
        (-[WKWebView toggleAutomaticDashSubstitution:]): Deleted.
        (-[WKWebView isAutomaticLinkDetectionEnabled]): Deleted.
        (-[WKWebView setAutomaticLinkDetectionEnabled:]): Deleted.
        (-[WKWebView toggleAutomaticLinkDetection:]): Deleted.
        (-[WKWebView isAutomaticTextReplacementEnabled]): Deleted.
        (-[WKWebView setAutomaticTextReplacementEnabled:]): Deleted.
        (-[WKWebView toggleAutomaticTextReplacement:]): Deleted.
        (-[WKWebView uppercaseWord:]): Deleted.
        (-[WKWebView lowercaseWord:]): Deleted.
        (-[WKWebView capitalizeWord:]): Deleted.
        (-[WKWebView _wantsKeyDownForEvent:]): Deleted.
        (-[WKWebView scrollWheel:]): Deleted.
        (-[WKWebView swipeWithEvent:]): Deleted.
        (-[WKWebView mouseMoved:]): Deleted.
        (-[WKWebView mouseDown:]): Deleted.
        (-[WKWebView mouseUp:]): Deleted.
        (-[WKWebView mouseDragged:]): Deleted.
        (-[WKWebView mouseEntered:]): Deleted.
        (-[WKWebView mouseExited:]): Deleted.
        (-[WKWebView otherMouseDown:]): Deleted.
        (-[WKWebView otherMouseDragged:]): Deleted.
        (-[WKWebView otherMouseUp:]): Deleted.
        (-[WKWebView rightMouseDown:]): Deleted.
        (-[WKWebView rightMouseDragged:]): Deleted.
        (-[WKWebView rightMouseUp:]): Deleted.
        (-[WKWebView pressureChangeWithEvent:]): Deleted.
        (-[WKWebView acceptsFirstMouse:]): Deleted.
        (-[WKWebView shouldDelayWindowOrderingForEvent:]): Deleted.
        (-[WKWebView doCommandBySelector:]): Deleted.
        (-[WKWebView insertText:]): Deleted.
        (-[WKWebView insertText:replacementRange:]): Deleted.
        (-[WKWebView inputContext]): Deleted.
        (-[WKWebView performKeyEquivalent:]): Deleted.
        (-[WKWebView keyUp:]): Deleted.
        (-[WKWebView keyDown:]): Deleted.
        (-[WKWebView flagsChanged:]): Deleted.
        (-[WKWebView setMarkedText:selectedRange:replacementRange:]): Deleted.
        (-[WKWebView unmarkText]): Deleted.
        (-[WKWebView selectedRange]): Deleted.
        (-[WKWebView hasMarkedText]): Deleted.
        (-[WKWebView markedRange]): Deleted.
        (-[WKWebView attributedSubstringForProposedRange:actualRange:]): Deleted.
        (-[WKWebView characterIndexForPoint:]): Deleted.
        (-[WKWebView typingAttributesWithCompletionHandler:]): Deleted.
        (-[WKWebView firstRectForCharacterRange:actualRange:]): Deleted.
        (-[WKWebView selectedRangeWithCompletionHandler:]): Deleted.
        (-[WKWebView markedRangeWithCompletionHandler:]): Deleted.
        (-[WKWebView hasMarkedTextWithCompletionHandler:]): Deleted.
        (-[WKWebView attributedSubstringForProposedRange:completionHandler:]): Deleted.
        (-[WKWebView firstRectForCharacterRange:completionHandler:]): Deleted.
        (-[WKWebView characterIndexForPoint:completionHandler:]): Deleted.
        (-[WKWebView validAttributesForMarkedText]): Deleted.
        (-[WKWebView draggedImage:endedAt:operation:]): Deleted.
        (-[WKWebView draggingEntered:]): Deleted.
        (-[WKWebView draggingUpdated:]): Deleted.
        (-[WKWebView draggingExited:]): Deleted.
        (-[WKWebView prepareForDragOperation:]): Deleted.
        (-[WKWebView performDragOperation:]): Deleted.
        (-[WKWebView _hitTest:dragTypes:]): Deleted.
        (-[WKWebView _windowResizeMouseLocationIsInVisibleScrollerThumb:]): Deleted.
        (-[WKWebView viewWillMoveToWindow:]): Deleted.
        (-[WKWebView viewDidMoveToWindow]): Deleted.
        (-[WKWebView drawRect:]): Deleted.
        (-[WKWebView isOpaque]): Deleted.
        (-[WKWebView mouseDownCanMoveWindow]): Deleted.
        (-[WKWebView viewDidHide]): Deleted.
        (-[WKWebView viewDidUnhide]): Deleted.
        (-[WKWebView viewDidChangeBackingProperties]): Deleted.
        (-[WKWebView _activeSpaceDidChange:]): Deleted.
        (-[WKWebView accessibilityFocusedUIElement]): Deleted.
        (-[WKWebView accessibilityHitTest:]): Deleted.
        (-[WKWebView accessibilityAttributeValue:]): Deleted.
        (-[WKWebView accessibilityAttributeValue:forParameter:]): Deleted.
        (-[WKWebView hitTest:]): Deleted.
        (-[WKWebView conversationIdentifier]): Deleted.
        (-[WKWebView quickLookWithEvent:]): Deleted.
        (-[WKWebView addTrackingRect:owner:userData:assumeInside:]): Deleted.
        (-[WKWebView _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]): Deleted.
        (-[WKWebView _addTrackingRects:owner:userDataList:assumeInsideList:trackingNums:count:]): Deleted.
        (-[WKWebView removeTrackingRect:]): Deleted.
        (-[WKWebView _removeTrackingRects:count:]): Deleted.
        (-[WKWebView view:stringForToolTip:point:userData:]): Deleted.
        (-[WKWebView pasteboardChangedOwner:]): Deleted.
        (-[WKWebView pasteboard:provideDataForType:]): Deleted.
        (-[WKWebView namesOfPromisedFilesDroppedAtDestination:]): Deleted.
        (-[WKWebView wantsUpdateLayer]): Deleted.
        (-[WKWebView updateLayer]): Deleted.
        (-[WKWebView smartMagnifyWithEvent:]): Deleted.
        (-[WKWebView magnifyWithEvent:]): Deleted.
        (-[WKWebView rotateWithEvent:]): Deleted.
        (-[WKWebView _usePlatformFindUI]): Deleted.
        (-[WKWebView _setUsePlatformFindUI:]): Deleted.
        (-[WKWebView _ensureTextFinderClient]): Deleted.
        (-[WKWebView findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:]): Deleted.
        (-[WKWebView replaceMatches:withString:inSelectionOnly:resultCollector:]): Deleted.
        (-[WKWebView scrollFindMatchToVisible:]): Deleted.
        (-[WKWebView documentContainerView]): Deleted.
        (-[WKWebView getSelectedText:]): Deleted.
        (-[WKWebView selectFindMatch:completionHandler:]): Deleted.
        (-[WKWebView _web_superInputContext]): Deleted.
        (-[WKWebView _web_superQuickLookWithEvent:]): Deleted.
        (-[WKWebView _web_superSwipeWithEvent:]): Deleted.
        (-[WKWebView _web_superMagnifyWithEvent:]): Deleted.
        (-[WKWebView _web_superSmartMagnifyWithEvent:]): Deleted.
        (-[WKWebView _web_superRemoveTrackingRect:]): Deleted.
        (-[WKWebView _web_superAccessibilityAttributeValue:]): Deleted.
        (-[WKWebView _web_superDoCommandBySelector:]): Deleted.
        (-[WKWebView _web_superPerformKeyEquivalent:]): Deleted.
        (-[WKWebView _web_superKeyDown:]): Deleted.
        (-[WKWebView _web_superHitTest:]): Deleted.
        (-[WKWebView _web_immediateActionAnimationControllerForHitTestResultInternal:withType:userData:]): Deleted.
        (-[WKWebView _web_prepareForImmediateActionAnimation]): Deleted.
        (-[WKWebView _web_cancelImmediateActionAnimation]): Deleted.
        (-[WKWebView _web_completeImmediateActionAnimation]): Deleted.
        (-[WKWebView _web_didChangeContentSize:]): Deleted.
        (-[WKWebView _web_dragDestinationActionForDraggingInfo:]): Deleted.
        (-[WKWebView _web_didPerformDragOperation:]): Deleted.
        (-[WKWebView _web_dismissContentRelativeChildWindows]): Deleted.
        (-[WKWebView _web_dismissContentRelativeChildWindowsWithAnimation:]): Deleted.
        (-[WKWebView _web_editorStateDidChange]): Deleted.
        (-[WKWebView _web_gestureEventWasNotHandledByWebCore:]): Deleted.
        (-[WKWebView filePromiseProvider:fileNameForType:]): Deleted.
        (-[WKWebView filePromiseProvider:writePromiseToURL:completionHandler:]): Deleted.
        (-[WKWebView draggingSession:sourceOperationMaskForDraggingContext:]): Deleted.
        (-[WKWebView draggingSession:endedAtPoint:operation:]): Deleted.
        (-[WKWebView makeTouchBar]): Deleted.
        (-[WKWebView candidateListTouchBarItem]): Deleted.
        (-[WKWebView _web_didAddMediaControlsManager:]): Deleted.
        (-[WKWebView _web_didRemoveMediaControlsManager]): Deleted.
        (-[WKWebView _interactWithMediaControlsForTesting]): Deleted.
        (-[WKWebView _useSystemAppearance]): Deleted.
        (-[WKWebView _setUseSystemAppearance:]): Deleted.
        (-[WKWebView _pageRefForTransitionToWKWebView]): Deleted.
        (-[WKWebView _canChangeFrameLayout:]): Deleted.
        (-[WKWebView _tryToSwipeWithEvent:ignoringPinnedState:]): Deleted.
        (-[WKWebView _ignoresNonWheelEvents]): Deleted.
        (-[WKWebView _setIgnoresNonWheelEvents:]): Deleted.
        (-[WKWebView _hasActiveVideoForControlsManager]): Deleted.
        (-[WKWebView _dismissContentRelativeChildWindows]): Deleted.
        (-[WKWebView _gestureEventWasNotHandledByWebCore:]): Deleted.
        (-[WKWebView _disableFrameSizeUpdates]): Deleted.
        (-[WKWebView _enableFrameSizeUpdates]): Deleted.
        (-[WKWebView _beginDeferringViewInWindowChanges]): Deleted.
        (-[WKWebView _endDeferringViewInWindowChanges]): Deleted.
        (-[WKWebView _endDeferringViewInWindowChangesSync]): Deleted.
        (-[WKWebView _fullScreenPlaceholderView]): Deleted.
        (-[WKWebView _fullScreenWindow]): Deleted.
        (-[WKWebView _underlayColor]): Deleted.
        (-[WKWebView _setUnderlayColor:]): Deleted.
        (-[WKWebView _setCustomSwipeViews:]): Deleted.
        (-[WKWebView _setCustomSwipeViewsTopContentInset:]): Deleted.
        (-[WKWebView _setDidMoveSwipeSnapshotCallback:]): Deleted.
        (-[WKWebView _setFrame:andScrollBy:]): Deleted.
        (-[WKWebView _setTotalHeightOfBanners:]): Deleted.
        (-[WKWebView _totalHeightOfBanners]): Deleted.
        (-[WKWebView _setShouldSuppressFirstResponderChanges:]): Deleted.
        (-[WKWebView _setFont:sender:]): Deleted.
        (-[WKWebView _setFontSize:sender:]): Deleted.
        (-[WKWebView _setTextColor:sender:]): Deleted.
        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]): Deleted.
        (-[WKWebView _contentVisibleRect]): Deleted.
        (-[WKWebView _convertPointFromContentsToView:]): Deleted.
        (-[WKWebView _convertPointFromViewToContents:]): Deleted.
        (-[WKWebView didStartFormControlInteraction]): Deleted.
        (-[WKWebView didEndFormControlInteraction]): Deleted.
        (-[WKWebView _uiTextCaretRect]): Deleted.
        (-[WKWebView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]): Deleted.
        (-[WKWebView _accessibilityStoreSelection]): Deleted.
        (-[WKWebView _accessibilityClearSelection]): Deleted.
        (-[WKWebView _contentViewIsFirstResponder]): Deleted.
        (-[WKWebView _retainActiveFocusedState]): Deleted.
        (-[WKWebView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]): Deleted.
        (-[WKWebView _snapshotLayerContentsForBackForwardListItem:]): Deleted.
        (-[WKWebView _dataDetectionResults]): Deleted.
        (-[WKWebView _accessibilityRetrieveSpeakSelectionContent]): Deleted.
        (-[WKWebView _accessibilityDidGetSpeakSelectionContent:]): Deleted.
        (-[WKWebView _safeBrowsingWarning]): Deleted.
        (-[WKWebView _doAfterNextStablePresentationUpdate:]): Deleted.
        (-[WKWebView _detectDataWithTypes:completionHandler:]): Deleted.
        (-[WKWebView removeFromSuperview]): Deleted.
        (-[WKWebView _minimumLayoutSizeOverride]): Deleted.
        (-[WKWebView _setViewLayoutSizeOverride:]): Deleted.
        (-[WKWebView _obscuredInsets]): Deleted.
        (-[WKWebView _setObscuredInsets:]): Deleted.
        (-[WKWebView _obscuredInsetEdgesAffectedBySafeArea]): Deleted.
        (-[WKWebView _setObscuredInsetEdgesAffectedBySafeArea:]): Deleted.
        (-[WKWebView _unobscuredSafeAreaInsets]): Deleted.
        (-[WKWebView _setUnobscuredSafeAreaInsets:]): Deleted.
        (-[WKWebView _safeAreaShouldAffectObscuredInsets]): Deleted.
        (-[WKWebView _setInterfaceOrientationOverride:]): Deleted.
        (-[WKWebView _interfaceOrientationOverride]): Deleted.
        (-[WKWebView _clearInterfaceOrientationOverride]): Deleted.
        (-[WKWebView _maximumUnobscuredSizeOverride]): Deleted.
        (-[WKWebView _setMaximumUnobscuredSizeOverride:]): Deleted.
        (-[WKWebView _setAllowsViewportShrinkToFit:]): Deleted.
        (-[WKWebView _allowsViewportShrinkToFit]): Deleted.
        (-[WKWebView _beginInteractiveObscuredInsetsChange]): Deleted.
        (-[WKWebView _endInteractiveObscuredInsetsChange]): Deleted.
        (-[WKWebView _hideContentUntilNextUpdate]): Deleted.
        (-[WKWebView _beginAnimatedResizeWithUpdates:]): Deleted.
        (-[WKWebView _endAnimatedResize]): Deleted.
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]): Deleted.
        (-[WKWebView _firePresentationUpdateForPendingStableStatePresentationCallbacks]): Deleted.
        (-[WKWebView _setOverlaidAccessoryViewsInset:]): Deleted.
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]): Deleted.
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]): Deleted.
        (-[WKWebView _clearOverrideLayoutParameters]): Deleted.
        (viewportArgumentsFromDictionary): Deleted.
        (-[WKWebView _overrideViewportWithArguments:]): Deleted.
        (-[WKWebView _viewForFindUI]): Deleted.
        (-[WKWebView _isDisplayingPDF]): Deleted.
        (-[WKWebView _dataForDisplayedPDF]): Deleted.
        (-[WKWebView _suggestedFilenameForDisplayedPDF]): Deleted.
        (-[WKWebView _webViewPrintFormatter]): Deleted.
        (toUserInterfaceLayoutDirection): Deleted.
        (-[WKWebView setSemanticContentAttribute:]): Deleted.
        (-[WKWebView _drawsBackground]): Deleted.
        (-[WKWebView _setDrawsBackground:]): Deleted.
        (-[WKWebView _backgroundColor]): Deleted.
        (-[WKWebView _setBackgroundColor:]): Deleted.
        (-[WKWebView _setDrawsTransparentBackground:]): Deleted.
        (-[WKWebView _inspectorAttachmentView]): Deleted.
        (-[WKWebView _setInspectorAttachmentView:]): Deleted.
        (-[WKWebView _setOverlayScrollbarStyle:]): Deleted.
        (-[WKWebView _overlayScrollbarStyle]): Deleted.
        (-[WKWebView _windowOcclusionDetectionEnabled]): Deleted.
        (-[WKWebView _setWindowOcclusionDetectionEnabled:]): Deleted.
        (-[WKWebView shareSheetDidDismiss:]): Deleted.
        (-[WKWebView _setOverrideDeviceScaleFactor:]): Deleted.
        (-[WKWebView _overrideDeviceScaleFactor]): Deleted.
        (-[WKWebView _setTopContentInset:]): Deleted.
        (-[WKWebView _topContentInset]): Deleted.
        (-[WKWebView _pageExtendedBackgroundColor]): Deleted.
        (-[WKWebView _pinnedState]): Deleted.
        (-[WKWebView _rubberBandingEnabled]): Deleted.
        (-[WKWebView _setRubberBandingEnabled:]): Deleted.
        (-[WKWebView _immediateActionAnimationControllerForHitTestResult:withType:userData:]): Deleted.
        (-[WKWebView _setAutomaticallyAdjustsContentInsets:]): Deleted.
        (-[WKWebView _automaticallyAdjustsContentInsets]): Deleted.
        (-[WKWebView _minimumLayoutWidth]): Deleted.
        (-[WKWebView _setMinimumLayoutWidth:]): Deleted.
        (-[WKWebView _shouldExpandContentToViewHeightForAutoLayout]): Deleted.
        (-[WKWebView _setShouldExpandContentToViewHeightForAutoLayout:]): Deleted.
        (-[WKWebView _alwaysShowsHorizontalScroller]): Deleted.
        (-[WKWebView _setAlwaysShowsHorizontalScroller:]): Deleted.
        (-[WKWebView _alwaysShowsVerticalScroller]): Deleted.
        (-[WKWebView _setAlwaysShowsVerticalScroller:]): Deleted.
        (-[WKWebView _printOperationWithPrintInfo:]): Deleted.
        (-[WKWebView _printOperationWithPrintInfo:forFrame:]): Deleted.
        (-[WKWebView setUserInterfaceLayoutDirection:]): Deleted.
        (-[WKWebView _wantsMediaPlaybackControlsView]): Deleted.
        (-[WKWebView _setWantsMediaPlaybackControlsView:]): Deleted.
        (-[WKWebView _mediaPlaybackControlsView]): Deleted.
        (-[WKWebView _addMediaPlaybackControlsView:]): Deleted.
        (-[WKWebView _removeMediaPlaybackControlsView]): Deleted.
        (-[WKWebView _prepareForMoveToWindow:completionHandler:]): Deleted.
        (-[WKWebView _setThumbnailView:]): Deleted.
        (-[WKWebView _thumbnailView]): Deleted.
        (-[WKWebView _setIgnoresAllEvents:]): Deleted.
        (-[WKWebView _ignoresAllEvents]): Deleted.
        (-[WKWebView _spellCheckerDocumentTag]): Deleted.
        (-[WKWebView hasFullScreenWindowController]): Deleted.
        (-[WKWebView closeFullScreenWindowController]): Deleted.
        (-[WKWebView fullScreenWindowController]): Deleted.
        (-[WKWebView validateUserInterfaceItem:]): Deleted.
        (-[WKWebView goBack:]): Deleted.
        (-[WKWebView goForward:]): Deleted.
        (-[WKWebView reload:]): Deleted.
        (-[WKWebView reloadFromOrigin:]): Deleted.
        (-[WKWebView stopLoading:]): Deleted.
        (-[WKWebView _printFormatterClass]): Deleted.
        (-[WKWebView _printProvider]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        * UIProcess/API/ios/WKWebViewIOS.h: Copied from Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h.
        * UIProcess/API/ios/WKWebViewIOS.mm: Added.
        (deviceOrientationForUIInterfaceOrientation):
        (deviceOrientation):
        (-[WKWebView setFrame:]):
        (-[WKWebView setBounds:]):
        (-[WKWebView layoutSubviews]):
        (-[WKWebView _isShowingVideoPictureInPicture]):
        (-[WKWebView _mayAutomaticallyShowVideoPictureInPicture]):
        (-[WKWebView _incrementFocusPreservationCount]):
        (-[WKWebView _decrementFocusPreservationCount]):
        (-[WKWebView _resetFocusPreservationCount]):
        (-[WKWebView _isRetainingActiveFocusedState]):
        (-[WKWebView _effectiveAppearanceIsDark]):
        (-[WKWebView _effectiveUserInterfaceLevelIsElevated]):
        (-[WKWebView _populateArchivedSubviews:]):
        (-[WKWebView _isBackground]):
        (-[WKWebView browsingContextController]):
        (-[WKWebView becomeFirstResponder]):
        (-[WKWebView canBecomeFirstResponder]):
        (-[WKWebView resignFirstResponder]):
        (-[WKWebView canPerformAction:withSender:]):
        (-[WKWebView targetForAction:withSender:]):
        (-[WKWebView willFinishIgnoringCalloutBarFadeAfterPerformingAction]):
        (floorToDevicePixel):
        (pointsEqualInDevicePixels):
        (roundScrollViewContentSize):
        (-[WKWebView _currentContentView]):
        (-[WKWebView _contentProviderRegistry]):
        (-[WKWebView _selectionGranularity]):
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
        (-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:data:]):
        (-[WKWebView _handleKeyUIEvent:]):
        (-[WKWebView _willInvokeUIScrollViewDelegateCallback]):
        (-[WKWebView _didInvokeUIScrollViewDelegateCallback]):
        (contentZoomScale):
        (baseScrollViewBackgroundColor):
        (scrollViewBackgroundColor):
        (-[WKWebView _updateScrollViewBackground]):
        (-[WKWebView _videoControlsManagerDidChange]):
        (-[WKWebView _initialContentOffsetForScrollView]):
        (-[WKWebView _contentOffsetAdjustedForObscuredInset:]):
        (-[WKWebView _effectiveObscuredInsetEdgesAffectedBySafeArea]):
        (-[WKWebView _computedObscuredInset]):
        (-[WKWebView _computedContentInset]):
        (-[WKWebView _computedUnobscuredSafeAreaInset]):
        (-[WKWebView _processWillSwapOrDidExit]):
        (-[WKWebView _processWillSwap]):
        (-[WKWebView _processDidExit]):
        (-[WKWebView _didRelaunchProcess]):
        (-[WKWebView _didCommitLoadForMainFrame]):
        (contentOffsetBoundedInValidRange):
        (changeContentOffsetBoundedInValidRange):
        (-[WKWebView visibleRectInViewCoordinates]):
        (areEssentiallyEqualAsFloat):
        (-[WKWebView _didCommitLayerTreeDuringAnimatedResize:]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _layerTreeCommitComplete]):
        (-[WKWebView _couldNotRestorePageState]):
        (-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]):
        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _zoomToPoint:atScale:animated:]):
        (-[WKWebView _zoomToRect:atScale:origin:animated:]):
        (constrainContentOffset):
        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]):
        (-[WKWebView _scrollToRect:origin:minimumScrollDistance:]):
        (-[WKWebView _zoomOutWithOrigin:animated:]):
        (-[WKWebView _zoomToInitialScaleWithOrigin:animated:]):
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):
        (-[WKWebView _initialScaleFactor]):
        (-[WKWebView _contentZoomScale]):
        (-[WKWebView _targetContentZoomScaleForRect:currentScale:fitEntireRect:minimumScale:maximumScale:]):
        (-[WKWebView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        (-[WKWebView didMoveToWindow]):
        (-[WKWebView _setOpaqueInternal:]):
        (-[WKWebView setOpaque:]):
        (-[WKWebView setBackgroundColor:]):
        (-[WKWebView _allowsDoubleTapGestures]):
        (-[WKWebView _stylusTapGestureShouldCreateEditableImage]):
        (-[WKWebView usesStandardContentView]):
        (-[WKWebView scrollView:contentSizeForZoomScale:withProposedSize:]):
        (-[WKWebView viewForZoomingInScrollView:]):
        (-[WKWebView scrollViewWillBeginZooming:withView:]):
        (-[WKWebView scrollViewWillBeginDragging:]):
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        (-[WKWebView scrollViewDidEndDragging:willDecelerate:]):
        (-[WKWebView scrollViewDidEndDecelerating:]):
        (-[WKWebView scrollViewDidScrollToTop:]):
        (-[WKWebView _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView scrollViewDidEndScrollingAnimation:]):
        (-[WKWebView _scrollViewDidInterruptDecelerating:]):
        (-[WKWebView _visibleRectInEnclosingView:]):
        (-[WKWebView _visibleContentRect]):
        (-[WKWebView _didScroll]):
        (-[WKWebView _enclosingScrollerScrollingEnded:]):
        (-[WKWebView _scrollViewSystemContentInset]):
        (-[WKWebView activeViewLayoutSize:]):
        (-[WKWebView _dispatchSetViewLayoutSize:]):
        (-[WKWebView _dispatchSetMaximumUnobscuredSize:]):
        (-[WKWebView _dispatchSetDeviceOrientation:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _contentRectForUserInteraction]):
        (-[WKWebView _scrollViewIsRubberBanding]):
        (-[WKWebView safeAreaInsetsDidChange]):
        (-[WKWebView _scheduleVisibleContentRectUpdate]):
        (-[WKWebView _scrollViewIsInStableState:]):
        (-[WKWebView _addUpdateVisibleContentRectPreCommitHandler]):
        (-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]):
        (scrollViewCanScroll):
        (-[WKWebView _contentBoundsExtendedForRubberbandingWithScale:]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _didStartProvisionalLoadForMainFrame]):
        (activeMaximumUnobscuredSize):
        (activeOrientation):
        (-[WKWebView _cancelAnimatedResize]):
        (-[WKWebView _didCompleteAnimatedResize]):
        (-[WKWebView _didFinishLoadForMainFrame]):
        (-[WKWebView _didFailLoadForMainFrame]):
        (-[WKWebView _didSameDocumentNavigationForMainFrame:]):
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):
        (-[WKWebView _shouldUpdateKeyboardWithInfo:]):
        (-[WKWebView _keyboardWillChangeFrame:]):
        (-[WKWebView _keyboardDidChangeFrame:]):
        (-[WKWebView _keyboardWillShow:]):
        (-[WKWebView _keyboardDidShow:]):
        (-[WKWebView _keyboardWillHide:]):
        (-[WKWebView _windowDidRotate:]):
        (-[WKWebView _contentSizeCategoryDidChange:]):
        (-[WKWebView _accessibilitySettingsDidChange:]):
        (-[WKWebView _contentSizeCategory]):
        (-[WKWebView _isNavigationSwipeGestureRecognizer:]):
        (-[WKWebView _navigationGestureDidBegin]):
        (-[WKWebView _navigationGestureDidEnd]):
        (-[WKWebView _showPasswordViewWithDocumentName:passwordHandler:]):
        (-[WKWebView _hidePasswordView]):
        (-[WKWebView _passwordView]):
        (-[WKWebView _updateScrollViewInsetAdjustmentBehavior]):
        (-[WKWebView _setAvoidsUnsafeArea:]):
        (-[WKWebView _haveSetObscuredInsets]):
        (-[WKWebView removeFromSuperview]):
        (-[WKWebView _firePresentationUpdateForPendingStableStatePresentationCallbacks]):
        (toUserInterfaceLayoutDirection):
        (-[WKWebView setSemanticContentAttribute:]):
        (-[WKWebView _contentVisibleRect]):
        (-[WKWebView _minimumLayoutSizeOverride]):
        (-[WKWebView _setViewLayoutSizeOverride:]):
        (-[WKWebView _maximumUnobscuredSizeOverride]):
        (-[WKWebView _setMaximumUnobscuredSizeOverride:]):
        (-[WKWebView _obscuredInsets]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _obscuredInsetEdgesAffectedBySafeArea]):
        (-[WKWebView _setObscuredInsetEdgesAffectedBySafeArea:]):
        (-[WKWebView _unobscuredSafeAreaInsets]):
        (-[WKWebView _setUnobscuredSafeAreaInsets:]):
        (-[WKWebView _safeAreaShouldAffectObscuredInsets]):
        (-[WKWebView _enclosingViewForExposedRectComputation]):
        (-[WKWebView _setInterfaceOrientationOverride:]):
        (-[WKWebView _interfaceOrientationOverride]):
        (-[WKWebView _clearInterfaceOrientationOverride]):
        (-[WKWebView _setAllowsViewportShrinkToFit:]):
        (-[WKWebView _allowsViewportShrinkToFit]):
        (-[WKWebView _isDisplayingPDF]):
        (-[WKWebView _dataForDisplayedPDF]):
        (-[WKWebView _suggestedFilenameForDisplayedPDF]):
        (-[WKWebView _webViewPrintFormatter]):
        (-[WKWebView _dragInteractionPolicy]):
        (-[WKWebView _setDragInteractionPolicy:]):
        (-[WKWebView _shouldAvoidResizingWhenInputViewBoundsChange]):
        (-[WKWebView _contentViewIsFirstResponder]):
        (-[WKWebView _uiTextCaretRect]):
        (-[WKWebView _safeBrowsingWarning]):
        (-[WKWebView _convertPointFromContentsToView:]):
        (-[WKWebView _convertPointFromViewToContents:]):
        (-[WKWebView _doAfterNextStablePresentationUpdate:]):
        (-[WKWebView _setFont:sender:]):
        (-[WKWebView _setFontSize:sender:]):
        (-[WKWebView _setTextColor:sender:]):
        (-[WKWebView _detectDataWithTypes:completionHandler:]):
        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]):
        (-[WKWebView didStartFormControlInteraction]):
        (-[WKWebView didEndFormControlInteraction]):
        (-[WKWebView _beginInteractiveObscuredInsetsChange]):
        (-[WKWebView _endInteractiveObscuredInsetsChange]):
        (-[WKWebView _hideContentUntilNextUpdate]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _clearOverrideLayoutParameters]):
        (viewportArgumentsFromDictionary):
        (-[WKWebView _overrideViewportWithArguments:]):
        (-[WKWebView _viewForFindUI]):
        (-[WKWebView _setOverlaidAccessoryViewsInset:]):
        (-[WKWebView _retainActiveFocusedState]):
        (-[WKWebView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKWebView _snapshotLayerContentsForBackForwardListItem:]):
        (-[WKWebView _dataDetectionResults]):
        (-[WKWebView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]):
        (-[WKWebView _accessibilityStoreSelection]):
        (-[WKWebView _accessibilityClearSelection]):
        (-[WKWebView _accessibilityRetrieveSpeakSelectionContent]):
        (-[WKWebView _accessibilityDidGetSpeakSelectionContent:]):
        (-[WKWebView _fullScreenPlaceholderView]):
        (-[WKWebView hasFullScreenWindowController]):
        (-[WKWebView closeFullScreenWindowController]):
        (-[WKWebView fullScreenWindowController]):
        (-[WKWebView _printFormatterClass]):
        (-[WKWebView _printProvider]):
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        * UIProcess/API/mac/WKView.mm:
        (toCoreScrollbarStyle): Deleted.
        (toAPIScrollbarStyle): Deleted.
        * UIProcess/API/mac/WKWebViewMac.h: Added.
        * UIProcess/API/mac/WKWebViewMac.mm: Added.
        (toAPIScrollbarStyle):
        (toCoreScrollbarStyle):
        (-[WKWebView acceptsFirstResponder]):
        (-[WKWebView becomeFirstResponder]):
        (-[WKWebView resignFirstResponder]):
        (-[WKWebView viewWillStartLiveResize]):
        (-[WKWebView viewDidEndLiveResize]):
        (-[WKWebView isFlipped]):
        (-[WKWebView intrinsicContentSize]):
        (-[WKWebView prepareContentInRect:]):
        (-[WKWebView setFrameSize:]):
        (-[WKWebView setUserInterfaceLayoutDirection:]):
        (-[WKWebView ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKWebView writeSelectionToPasteboard:types:]):
        (-[WKWebView centerSelectionInVisibleArea:]):
        (-[WKWebView validRequestorForSendType:returnType:]):
        (-[WKWebView readSelectionFromPasteboard:]):
        (-[WKWebView changeFont:]):
        (-[WKWebView changeColor:]):
        (-[WKWebView changeAttributes:]):
        (-[WKWebView startSpeaking:]):
        (-[WKWebView stopSpeaking:]):
        (-[WKWebView showGuessPanel:]):
        (-[WKWebView checkSpelling:]):
        (-[WKWebView changeSpelling:]):
        (-[WKWebView toggleContinuousSpellChecking:]):
        (-[WKWebView isGrammarCheckingEnabled]):
        (-[WKWebView setGrammarCheckingEnabled:]):
        (-[WKWebView toggleGrammarChecking:]):
        (-[WKWebView toggleAutomaticSpellingCorrection:]):
        (-[WKWebView orderFrontSubstitutionsPanel:]):
        (-[WKWebView toggleSmartInsertDelete:]):
        (-[WKWebView isAutomaticQuoteSubstitutionEnabled]):
        (-[WKWebView setAutomaticQuoteSubstitutionEnabled:]):
        (-[WKWebView toggleAutomaticQuoteSubstitution:]):
        (-[WKWebView isAutomaticDashSubstitutionEnabled]):
        (-[WKWebView setAutomaticDashSubstitutionEnabled:]):
        (-[WKWebView toggleAutomaticDashSubstitution:]):
        (-[WKWebView isAutomaticLinkDetectionEnabled]):
        (-[WKWebView setAutomaticLinkDetectionEnabled:]):
        (-[WKWebView toggleAutomaticLinkDetection:]):
        (-[WKWebView isAutomaticTextReplacementEnabled]):
        (-[WKWebView setAutomaticTextReplacementEnabled:]):
        (-[WKWebView toggleAutomaticTextReplacement:]):
        (-[WKWebView uppercaseWord:]):
        (-[WKWebView lowercaseWord:]):
        (-[WKWebView capitalizeWord:]):
        (-[WKWebView _wantsKeyDownForEvent:]):
        (-[WKWebView scrollWheel:]):
        (-[WKWebView swipeWithEvent:]):
        (-[WKWebView mouseMoved:]):
        (-[WKWebView mouseDown:]):
        (-[WKWebView mouseUp:]):
        (-[WKWebView mouseDragged:]):
        (-[WKWebView mouseEntered:]):
        (-[WKWebView mouseExited:]):
        (-[WKWebView otherMouseDown:]):
        (-[WKWebView otherMouseDragged:]):
        (-[WKWebView otherMouseUp:]):
        (-[WKWebView rightMouseDown:]):
        (-[WKWebView rightMouseDragged:]):
        (-[WKWebView rightMouseUp:]):
        (-[WKWebView pressureChangeWithEvent:]):
        (-[WKWebView acceptsFirstMouse:]):
        (-[WKWebView shouldDelayWindowOrderingForEvent:]):
        (-[WKWebView doCommandBySelector:]):
        (-[WKWebView inputContext]):
        (-[WKWebView performKeyEquivalent:]):
        (-[WKWebView keyUp:]):
        (-[WKWebView keyDown:]):
        (-[WKWebView flagsChanged:]):
        (-[WKWebView setMarkedText:selectedRange:replacementRange:]):
        (-[WKWebView unmarkText]):
        (-[WKWebView selectedRange]):
        (-[WKWebView hasMarkedText]):
        (-[WKWebView markedRange]):
        (-[WKWebView attributedSubstringForProposedRange:actualRange:]):
        (-[WKWebView characterIndexForPoint:]):
        (-[WKWebView typingAttributesWithCompletionHandler:]):
        (-[WKWebView firstRectForCharacterRange:actualRange:]):
        (-[WKWebView selectedRangeWithCompletionHandler:]):
        (-[WKWebView markedRangeWithCompletionHandler:]):
        (-[WKWebView hasMarkedTextWithCompletionHandler:]):
        (-[WKWebView attributedSubstringForProposedRange:completionHandler:]):
        (-[WKWebView firstRectForCharacterRange:completionHandler:]):
        (-[WKWebView characterIndexForPoint:completionHandler:]):
        (-[WKWebView validAttributesForMarkedText]):
        (-[WKWebView draggedImage:endedAt:operation:]):
        (-[WKWebView draggingEntered:]):
        (-[WKWebView draggingUpdated:]):
        (-[WKWebView draggingExited:]):
        (-[WKWebView prepareForDragOperation:]):
        (-[WKWebView performDragOperation:]):
        (-[WKWebView _hitTest:dragTypes:]):
        (-[WKWebView _windowResizeMouseLocationIsInVisibleScrollerThumb:]):
        (-[WKWebView viewWillMoveToWindow:]):
        (-[WKWebView viewDidMoveToWindow]):
        (-[WKWebView drawRect:]):
        (-[WKWebView isOpaque]):
        (-[WKWebView mouseDownCanMoveWindow]):
        (-[WKWebView viewDidHide]):
        (-[WKWebView viewDidUnhide]):
        (-[WKWebView viewDidChangeBackingProperties]):
        (-[WKWebView _activeSpaceDidChange:]):
        (-[WKWebView accessibilityFocusedUIElement]):
        (-[WKWebView accessibilityHitTest:]):
        (-[WKWebView accessibilityAttributeValue:]):
        (-[WKWebView accessibilityAttributeValue:forParameter:]):
        (-[WKWebView hitTest:]):
        (-[WKWebView conversationIdentifier]):
        (-[WKWebView quickLookWithEvent:]):
        (-[WKWebView addTrackingRect:owner:userData:assumeInside:]):
        (-[WKWebView _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]):
        (-[WKWebView _addTrackingRects:owner:userDataList:assumeInsideList:trackingNums:count:]):
        (-[WKWebView removeTrackingRect:]):
        (-[WKWebView _removeTrackingRects:count:]):
        (-[WKWebView view:stringForToolTip:point:userData:]):
        (-[WKWebView pasteboardChangedOwner:]):
        (-[WKWebView pasteboard:provideDataForType:]):
        (-[WKWebView namesOfPromisedFilesDroppedAtDestination:]):
        (-[WKWebView wantsUpdateLayer]):
        (-[WKWebView updateLayer]):
        (-[WKWebView smartMagnifyWithEvent:]):
        (-[WKWebView magnifyWithEvent:]):
        (-[WKWebView rotateWithEvent:]):
        (-[WKWebView _ensureTextFinderClient]):
        (-[WKWebView findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:]):
        (-[WKWebView replaceMatches:withString:inSelectionOnly:resultCollector:]):
        (-[WKWebView scrollFindMatchToVisible:]):
        (-[WKWebView documentContainerView]):
        (-[WKWebView getSelectedText:]):
        (-[WKWebView selectFindMatch:completionHandler:]):
        (-[WKWebView filePromiseProvider:fileNameForType:]):
        (-[WKWebView filePromiseProvider:writePromiseToURL:completionHandler:]):
        (-[WKWebView draggingSession:sourceOperationMaskForDraggingContext:]):
        (-[WKWebView draggingSession:endedAtPoint:operation:]):
        (-[WKWebView _prepareForImmediateActionAnimation]):
        (-[WKWebView _cancelImmediateActionAnimation]):
        (-[WKWebView _completeImmediateActionAnimation]):
        (-[WKWebView _setDrawsTransparentBackground:]):
        (-[WKWebView shareSheetDidDismiss:]):
        (-[WKWebView makeTouchBar]):
        (-[WKWebView candidateListTouchBarItem]):
        (-[WKWebView _web_didAddMediaControlsManager:]):
        (-[WKWebView _web_didRemoveMediaControlsManager]):
        (-[WKWebView _interactWithMediaControlsForTesting]):
        (-[WKWebView validateUserInterfaceItem:]):
        (-[WKWebView goBack:]):
        (-[WKWebView goForward:]):
        (-[WKWebView reload:]):
        (-[WKWebView reloadFromOrigin:]):
        (-[WKWebView stopLoading:]):
        (-[WKWebView _web_superInputContext]):
        (-[WKWebView _web_superQuickLookWithEvent:]):
        (-[WKWebView _web_superSwipeWithEvent:]):
        (-[WKWebView _web_superMagnifyWithEvent:]):
        (-[WKWebView _web_superSmartMagnifyWithEvent:]):
        (-[WKWebView _web_superRemoveTrackingRect:]):
        (-[WKWebView _web_superAccessibilityAttributeValue:]):
        (-[WKWebView _web_superDoCommandBySelector:]):
        (-[WKWebView _web_superPerformKeyEquivalent:]):
        (-[WKWebView _web_superKeyDown:]):
        (-[WKWebView _web_superHitTest:]):
        (-[WKWebView _web_immediateActionAnimationControllerForHitTestResultInternal:withType:userData:]):
        (-[WKWebView _web_prepareForImmediateActionAnimation]):
        (-[WKWebView _web_cancelImmediateActionAnimation]):
        (-[WKWebView _web_completeImmediateActionAnimation]):
        (-[WKWebView _web_didChangeContentSize:]):
        (-[WKWebView _web_dragDestinationActionForDraggingInfo:]):
        (-[WKWebView _web_didPerformDragOperation:]):
        (-[WKWebView _web_dismissContentRelativeChildWindows]):
        (-[WKWebView _web_dismissContentRelativeChildWindowsWithAnimation:]):
        (-[WKWebView _web_editorStateDidChange]):
        (-[WKWebView _web_gestureEventWasNotHandledByWebCore:]):
        (-[WKWebView _web_grantDOMPasteAccess]):
        (-[WKWebView _takeFindStringFromSelectionInternal:]):
        (-[WKWebView insertText:]):
        (-[WKWebView insertText:replacementRange:]):
        (-[WKWebView _pageRefForTransitionToWKWebView]):
        (-[WKWebView _hasActiveVideoForControlsManager]):
        (-[WKWebView _ignoresNonWheelEvents]):
        (-[WKWebView _setIgnoresNonWheelEvents:]):
        (-[WKWebView _safeBrowsingWarning]):
        (-[WKWebView _pinnedState]):
        (-[WKWebView _rubberBandingEnabled]):
        (-[WKWebView _setRubberBandingEnabled:]):
        (-[WKWebView _pageExtendedBackgroundColor]):
        (-[WKWebView _backgroundColor]):
        (-[WKWebView _setBackgroundColor:]):
        (-[WKWebView _underlayColor]):
        (-[WKWebView _setUnderlayColor:]):
        (-[WKWebView _setTotalHeightOfBanners:]):
        (-[WKWebView _totalHeightOfBanners]):
        (-[WKWebView _drawsBackground]):
        (-[WKWebView _setDrawsBackground:]):
        (-[WKWebView _setTopContentInset:]):
        (-[WKWebView _topContentInset]):
        (-[WKWebView _setAutomaticallyAdjustsContentInsets:]):
        (-[WKWebView _automaticallyAdjustsContentInsets]):
        (-[WKWebView _setOverrideDeviceScaleFactor:]):
        (-[WKWebView _overrideDeviceScaleFactor]):
        (-[WKWebView _windowOcclusionDetectionEnabled]):
        (-[WKWebView _setWindowOcclusionDetectionEnabled:]):
        (-[WKWebView _spellCheckerDocumentTag]):
        (-[WKWebView _shouldExpandContentToViewHeightForAutoLayout]):
        (-[WKWebView _setShouldExpandContentToViewHeightForAutoLayout:]):
        (-[WKWebView _minimumLayoutWidth]):
        (-[WKWebView _setMinimumLayoutWidth:]):
        (-[WKWebView _alwaysShowsHorizontalScroller]):
        (-[WKWebView _setAlwaysShowsHorizontalScroller:]):
        (-[WKWebView _alwaysShowsVerticalScroller]):
        (-[WKWebView _setAlwaysShowsVerticalScroller:]):
        (-[WKWebView _useSystemAppearance]):
        (-[WKWebView _setUseSystemAppearance:]):
        (-[WKWebView _setOverlayScrollbarStyle:]):
        (-[WKWebView _overlayScrollbarStyle]):
        (-[WKWebView _inspectorAttachmentView]):
        (-[WKWebView _setInspectorAttachmentView:]):
        (-[WKWebView _setThumbnailView:]):
        (-[WKWebView _thumbnailView]):
        (-[WKWebView _setIgnoresAllEvents:]):
        (-[WKWebView _ignoresAllEvents]):
        (-[WKWebView _usePlatformFindUI]):
        (-[WKWebView _setUsePlatformFindUI:]):
        (-[WKWebView _setShouldSuppressFirstResponderChanges:]):
        (-[WKWebView _canChangeFrameLayout:]):
        (-[WKWebView _tryToSwipeWithEvent:ignoringPinnedState:]):
        (-[WKWebView _dismissContentRelativeChildWindows]):
        (-[WKWebView _setFrame:andScrollBy:]):
        (-[WKWebView _gestureEventWasNotHandledByWebCore:]):
        (-[WKWebView _disableFrameSizeUpdates]):
        (-[WKWebView _enableFrameSizeUpdates]):
        (-[WKWebView _beginDeferringViewInWindowChanges]):
        (-[WKWebView _endDeferringViewInWindowChanges]):
        (-[WKWebView _endDeferringViewInWindowChangesSync]):
        (-[WKWebView _setCustomSwipeViews:]):
        (-[WKWebView _setCustomSwipeViewsTopContentInset:]):
        (-[WKWebView _setDidMoveSwipeSnapshotCallback:]):
        (-[WKWebView _fullScreenPlaceholderView]):
        (-[WKWebView _fullScreenWindow]):
        (-[WKWebView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
        (-[WKWebView _printOperationWithPrintInfo:]):
        (-[WKWebView _printOperationWithPrintInfo:forFrame:]):
        (-[WKWebView _wantsMediaPlaybackControlsView]):
        (-[WKWebView _setWantsMediaPlaybackControlsView:]):
        (-[WKWebView _mediaPlaybackControlsView]):
        (-[WKWebView _addMediaPlaybackControlsView:]):
        (-[WKWebView _removeMediaPlaybackControlsView]):
        (-[WKWebView _prepareForMoveToWindow:completionHandler:]):
        * UIProcess/API/mac/WKWebViewTestingMac.mm:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKPDFView.mm:
        * UIProcess/ios/WKScrollView.mm:
        * UIProcess/ios/WKSystemPreviewView.mm:
        * WebKit.xcodeproj/project.pbxproj:

2019-12-14  David Kilzer  <ddkilzer@apple.com>

        Add release assert for selectedIndex in WebKit::WebPopupMenu::show()
        <https://webkit.org/b/205223>
        <rdar://problem/57929078>

        Reviewed by Wenson Hsieh.

        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::show):
        - Add release assert to check for valid `selectedIndex` to fix
          the bug.
        - Rename `index` parameter to `selectedIndex`.
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        (WebKit::WebPopupMenu::show):
        - Rename `index` parameter to `selectedIndex`.

2019-12-13  Brady Eidson  <beidson@apple.com>

        Refactor ScriptController's proliferation of ExceptionDetails*.
        https://bugs.webkit.org/show_bug.cgi?id=205151

        Reviewed by Alex Christensen.

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

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _evaluateJavaScript:forceUserGesture:completionHandler:]):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld):
        (WebKit::WebPageProxy::runJavaScriptInFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):

        * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp:
        (WebKit::WebInspectorFrontendAPIDispatcher::evaluateOrQueueExpression):
        (WebKit::WebInspectorFrontendAPIDispatcher::evaluateQueuedExpressions):

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

2019-12-13  Eric Carlson  <eric.carlson@apple.com>

        Add remote media player message to load and play
        https://bugs.webkit.org/show_bug.cgi?id=205220
        <rdar://problem/57927486>

        Reviewed by Jer Noble.
        
        Add WP -> GPU process messages: PrepareForPlayback, Load, CancelLoad, Play, Pause,
        SetVolume, and SetMuted
        Add GPUP -> WP message: PlaybackStateChanged

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::RemoteMediaPlayerManagerProxy):
        (WebKit::RemoteMediaPlayerManagerProxy::createMediaPlayer):
        (WebKit::RemoteMediaPlayerManagerProxy::deleteMediaPlayer):
        (WebKit::RemoteMediaPlayerManagerProxy::prepareForPlayback):
        (WebKit::RemoteMediaPlayerManagerProxy::load):
        (WebKit::RemoteMediaPlayerManagerProxy::cancelLoad):
        (WebKit::RemoteMediaPlayerManagerProxy::play):
        (WebKit::RemoteMediaPlayerManagerProxy::pause):
        (WebKit::RemoteMediaPlayerManagerProxy::setVolume):
        (WebKit::RemoteMediaPlayerManagerProxy::setMuted):
        (WebKit::RemoteMediaPlayerManagerProxy::logChannel const):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        (WebKit::RemoteMediaPlayerManagerProxy::gpuConnectionToWebProcess const):
        (WebKit::RemoteMediaPlayerManagerProxy::webProcessConnection const): Deleted.
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy):
        (WebKit::RemoteMediaPlayerProxy::load):
        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
        (WebKit::RemoteMediaPlayerProxy::cancelLoad):
        (WebKit::RemoteMediaPlayerProxy::play):
        (WebKit::RemoteMediaPlayerProxy::pause):
        (WebKit::RemoteMediaPlayerProxy::setVolume):
        (WebKit::RemoteMediaPlayerProxy::setMuted):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerNetworkStateChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerReadyStateChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerVolumeChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMuteChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerTimeChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDurationChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRateChanged):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::didReceiveMessage):
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::cancelLoad):
        (WebKit::MediaPlayerPrivateRemote::play):
        (WebKit::MediaPlayerPrivateRemote::pause):
        (WebKit::MediaPlayerPrivateRemote::setVolumeDouble):
        (WebKit::MediaPlayerPrivateRemote::setMuted):
        (WebKit::MediaPlayerPrivateRemote::muteChanged):
        (WebKit::MediaPlayerPrivateRemote::timeChanged):
        (WebKit::MediaPlayerPrivateRemote::playbackStateChanged):
        (WebKit::MediaPlayerPrivateRemote::paused const): Deleted.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::RemoteMediaPlayerManager):
        (WebKit::RemoteMediaPlayerManager::~RemoteMediaPlayerManager):
        (WebKit::RemoteMediaPlayerManager::playbackStateChanged):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
        (WebKit::RemoteMediaPlayerManager::didReceiveMessageFromWebProcess):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:

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

        [macOS] Swipe gesture snapshot stays too long if provisional load has not started yet when endSwipeGesture() is called
        https://bugs.webkit.org/show_bug.cgi?id=205206

        Reviewed by Tim Horton.

        Swipe gesture snapshot stays too long if provisional load has not started yet when endSwipeGesture() is called on macOS.
        This is because the SnapshotRemovalTracker::eventOccurred() calls get ignored while the SnapshotRemovalTracker is paused
        and the SnapshotRemovalTracker only gets unpaused once the provisional load has started. The idea is that we should ignore
        any events from a previous navigation. However, the SwipeGestureEnd event is a UI-side event fired by the
        ViewGestureController itself, so there is reason to ignore it. Since we ask the WebContent process to do the load in
        willEndSwipeGesture(), it is possible that the provisional load has not started yet by the time endSwipeGesture() is
        called. In such case, the SwipeGestureEnd event would get ignored and we would keep the snapshot until the timeout.

        * UIProcess/ViewGestureController.cpp:
        (WebKit::stopWaitingForEvent):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::eventOccurred):
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::stopWaitingForEvent): Deleted.
        * UIProcess/ViewGestureController.h:

2019-12-13  David Kilzer  <ddkilzer@apple.com>

        Add MESSAGE_CHECK() for selectedIndex in Messages::WebPageProxy::ShowPopupMenu
        <https://webkit.org/b/205177>
        <rdar://problem/57337872>

        Reviewed by Chris Dumez.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu): Add MESSAGE_CHECK() to
        validate the `selectedIndex` parameter, which must be -1 to
        select no items, or a valid zero-based index into `items`.

2019-12-13  Alex Christensen  <achristensen@webkit.org>

        Allow cross-origin requests to WKURLSchemeHandlers
        https://bugs.webkit.org/show_bug.cgi?id=205198
        <rdar://problem/57897836>

        Reviewed by Brady Eidson.

        Covered by an API test.

        * UIProcess/API/Cocoa/WKURLSchemeTask.h:
        Document the requirements for cross-origin requests.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::registerURLSchemeHandler):
        When we register a scheme handler, allow cross origin resources for that scheme.
        This will make the check in DocumentThreadableLoader::checkURLSchemeAsCORSEnabled allow the request to get to the WKURLSchemeHandler.
        The resposne must still have CORS header fields in order for the data to get to the web content, like CORS with HTTP.

2019-12-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement encoding/decoding for DisplayList::DrawNativeImage
        https://bugs.webkit.org/show_bug.cgi?id=205200

        Reviewed by Simon Fraser.

        Add helper functions to encode and decode NativeImagePtr (RetainPtr<CGImageRef> on Cocoa platforms). This
        mirrors the implementation of encoding and decoding for WebCore::Image, which create and draws into
        ShareableBitmap, and send a handle to the data over IPC.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeImage):
        (IPC::decodeImage):
        (IPC::encodeNativeImage):
        (IPC::decodeNativeImage):

        Additionally make Image and NativeImagePtr encoding and decoding helpers fail quickly in the case where the
        ShareableBitmap failed to create a graphics context by having the encoder indicate whether a graphics context
        was created, and having the decoder fail if the graphics context could not be created.

        (IPC::encodeOptionalNativeImage):
        (IPC::decodeOptionalNativeImage):
        (IPC::ArgumentCoder<NativeImageHandle>::encode):
        (IPC::ArgumentCoder<NativeImageHandle>::decode):
        * Shared/WebCoreArgumentCoders.h:

2019-12-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Deny mach lookup access to "*.apple-extension-service" in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=205134
        <rdar://problem/56984257>

        Reviewed by Brent Fulgham.

        Remove mach lookup access to "*.apple-extension-service" in the sandbox.

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

2019-12-13  youenn fablet  <youenn@apple.com>

        Help debugging flaky http/tests/cache-storage/page-cache-domcachestorage-pending-promise.html
        https://bugs.webkit.org/show_bug.cgi?id=205209

        Reviewed by Chris Dumez.

        Add a bunch of asserts that no pending activity is happening in the Cache Storage backend is happening
        when querying the backend representation, which is a debug tool.
        No change of behavior.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::representation):
        * NetworkProcess/cache/CacheStorageEngineCache.h:
        (WebKit::CacheStorage::Cache::hasPendingOpeningCallbacks const):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::appendRepresentation const):

2019-12-13  Kate Cheney  <katherine_cheney@apple.com>

        Create WebKit API calls for ITP Data
        https://bugs.webkit.org/show_bug.cgi?id=204932
        <rdar://problem/57632753>

        Reviewed by Alex Christensen. 

        This patch exposes ITP data captured in the network process through the
        Objective C API using two new classes: _WKResourceLoadStatisticsFirstParty
        and _WKResourceLoadStatisticsThirdParty.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ensureThirdPartyDataForSpecificFirstPartyDomain):
        (WebKit::getThirdPartyDataForSpecificFirstPartyDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::aggregatedThirdPartyData const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        Updated mentions of ThirdPartyData to include the
        WebResourceLoadStatisticsStore:: class specifier after relocating
        ThirdPartyData.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::aggregatedThirdPartyData):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        Updated the data to be sent via completion handler from
        WebResourceLoadStatisticsStore so that calls to
        aggregatedThirdPartyData() are happening on a background thread.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/APIResourceLoadStatisticsFirstParty.h: Added.
        * UIProcess/API/APIResourceLoadStatisticsThirdParty.h: Added.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getResourceLoadStatisticsDataSummary:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.h: Added.
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.mm: Added.
        (-[_WKResourceLoadStatisticsFirstParty dealloc]):
        (-[_WKResourceLoadStatisticsFirstParty firstPartyDomain]):
        (-[_WKResourceLoadStatisticsFirstParty storageAccess]):
        (-[_WKResourceLoadStatisticsFirstParty _apiObject]):
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstPartyInternal.h: Added.
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.h: Added.
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.mm: Added.
        (-[_WKResourceLoadStatisticsThirdParty dealloc]):
        (-[_WKResourceLoadStatisticsThirdParty thirdPartyDomain]):
        (-[_WKResourceLoadStatisticsThirdParty underFirstParties]):
        (-[_WKResourceLoadStatisticsThirdParty _apiObject]):
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdPartyInternal.h: Added.
        _WKResourceLoadStatisticsFirstParty and _WKResourceLoadStatisticsThirdParty
        represent first and third party domains respectively which hold ITP
        data and are strongly typed to ensure the correct data is being
        exposed via API. The function and parameter names for storage access
        specify "third party" because each WKITPFirstParty holds data relevent
        to a specific third party and storage access would not make sense in
        just a first party context.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getResourceLoadStatisticsDataSummary):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getResourceLoadStatisticsDataSummary):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getResourceLoadStatisticsDataSummary):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-12-13  Eric Carlson  <eric.carlson@apple.com>

        Add infrastructure needed for playing media player in the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205094
        <rdar://problem/57815393>

        Reviewed by Youenn Fablet.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::~GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        (WebKit::GPUConnectionToWebProcess::didReceiveSyncMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp: Added.
        (WebKit::nullLogger):
        (WebKit::RemoteMediaPlayerManagerProxy::PlayerProxy::PlayerProxy):
        (WebKit::RemoteMediaPlayerManagerProxy::PlayerProxy::~PlayerProxy):
        (WebKit::RemoteMediaPlayerManagerProxy::RemoteMediaPlayerManagerProxy):
        (WebKit::RemoteMediaPlayerManagerProxy::~RemoteMediaPlayerManagerProxy):
        (WebKit::RemoteMediaPlayerManagerProxy::createMediaPlayer):
        (WebKit::RemoteMediaPlayerManagerProxy::getSupportedTypes):
        (WebKit::RemoteMediaPlayerManagerProxy::supportsType):
        (WebKit::RemoteMediaPlayerManagerProxy::originsInMediaCache):
        (WebKit::RemoteMediaPlayerManagerProxy::clearMediaCache):
        (WebKit::RemoteMediaPlayerManagerProxy::clearMediaCacheForOrigins):
        (WebKit::RemoteMediaPlayerManagerProxy::supportsKeySystem):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h: Added.
        (WebKit::RemoteMediaPlayerManagerProxy::webProcessConnection const):
        (WebKit::RemoteMediaPlayerManagerProxy::didReceiveMessageFromWebProcess):
        (WebKit::RemoteMediaPlayerManagerProxy::didReceiveSyncMessageFromWebProcess):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in: Added.
        * Scripts/webkit/messages.py:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: Added.
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
        (WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote):
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::cancelLoad):
        (WebKit::MediaPlayerPrivateRemote::prepareToPlay):
        (WebKit::MediaPlayerPrivateRemote::platformLayer const):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenLayer):
        (WebKit::MediaPlayerPrivateRemote::updateVideoFullscreenInlineImage):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenGravity):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenMode):
        (WebKit::MediaPlayerPrivateRemote::videoFullscreenStandbyChanged):
        (WebKit::MediaPlayerPrivateRemote::accessLog const):
        (WebKit::MediaPlayerPrivateRemote::errorLog const):
        (WebKit::MediaPlayerPrivateRemote::platformErrorCode const):
        (WebKit::MediaPlayerPrivateRemote::play):
        (WebKit::MediaPlayerPrivateRemote::pause):
        (WebKit::MediaPlayerPrivateRemote::setBufferingPolicy):
        (WebKit::MediaPlayerPrivateRemote::supportsPictureInPicture const):
        (WebKit::MediaPlayerPrivateRemote::supportsFullscreen const):
        (WebKit::MediaPlayerPrivateRemote::supportsScanning const):
        (WebKit::MediaPlayerPrivateRemote::requiresImmediateCompositing const):
        (WebKit::MediaPlayerPrivateRemote::canSaveMediaData const):
        (WebKit::MediaPlayerPrivateRemote::naturalSize const):
        (WebKit::MediaPlayerPrivateRemote::hasVideo const):
        (WebKit::MediaPlayerPrivateRemote::hasAudio const):
        (WebKit::MediaPlayerPrivateRemote::setVisible):
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote::durationMediaTime const):
        (WebKit::MediaPlayerPrivateRemote::currentMediaTime const):
        (WebKit::MediaPlayerPrivateRemote::getStartDate const):
        (WebKit::MediaPlayerPrivateRemote::seek):
        (WebKit::MediaPlayerPrivateRemote::seekWithTolerance):
        (WebKit::MediaPlayerPrivateRemote::seeking const):
        (WebKit::MediaPlayerPrivateRemote::startTime const):
        (WebKit::MediaPlayerPrivateRemote::setRateDouble):
        (WebKit::MediaPlayerPrivateRemote::rate const):
        (WebKit::MediaPlayerPrivateRemote::setPreservesPitch):
        (WebKit::MediaPlayerPrivateRemote::paused const):
        (WebKit::MediaPlayerPrivateRemote::setVolumeDouble):
        (WebKit::MediaPlayerPrivateRemote::setMuted):
        (WebKit::MediaPlayerPrivateRemote::hasClosedCaptions const):
        (WebKit::MediaPlayerPrivateRemote::setClosedCaptionsVisible):
        (WebKit::MediaPlayerPrivateRemote::maxFastForwardRate const):
        (WebKit::MediaPlayerPrivateRemote::minFastReverseRate const):
        (WebKit::MediaPlayerPrivateRemote::networkState const):
        (WebKit::MediaPlayerPrivateRemote::readyState const):
        (WebKit::MediaPlayerPrivateRemote::seekable const):
        (WebKit::MediaPlayerPrivateRemote::buffered const):
        (WebKit::MediaPlayerPrivateRemote::maxMediaTimeSeekable const):
        (WebKit::MediaPlayerPrivateRemote::minMediaTimeSeekable const):
        (WebKit::MediaPlayerPrivateRemote::seekableTimeRangesLastModifiedTime const):
        (WebKit::MediaPlayerPrivateRemote::liveUpdateInterval const):
        (WebKit::MediaPlayerPrivateRemote::totalBytes const):
        (WebKit::MediaPlayerPrivateRemote::didLoadingProgress const):
        (WebKit::MediaPlayerPrivateRemote::setSize):
        (WebKit::MediaPlayerPrivateRemote::paint):
        (WebKit::MediaPlayerPrivateRemote::paintCurrentFrameInContext):
        (WebKit::MediaPlayerPrivateRemote::copyVideoTextureToPlatformTexture):
        (WebKit::MediaPlayerPrivateRemote::nativeImageForCurrentTime):
        (WebKit::MediaPlayerPrivateRemote::setPreload):
        (WebKit::MediaPlayerPrivateRemote::hasAvailableVideoFrame const):
        (WebKit::MediaPlayerPrivateRemote::canLoadPoster const):
        (WebKit::MediaPlayerPrivateRemote::setPoster):
        (WebKit::MediaPlayerPrivateRemote::enterFullscreen):
        (WebKit::MediaPlayerPrivateRemote::exitFullscreen):
        (WebKit::MediaPlayerPrivateRemote::wirelessPlaybackTargetName const):
        (WebKit::MediaPlayerPrivateRemote::wirelessPlaybackTargetType const):
        (WebKit::MediaPlayerPrivateRemote::wirelessVideoPlaybackDisabled const):
        (WebKit::MediaPlayerPrivateRemote::setWirelessVideoPlaybackDisabled):
        (WebKit::MediaPlayerPrivateRemote::canPlayToWirelessPlaybackTarget const):
        (WebKit::MediaPlayerPrivateRemote::isCurrentPlaybackTargetWireless const):
        (WebKit::MediaPlayerPrivateRemote::setWirelessPlaybackTarget):
        (WebKit::MediaPlayerPrivateRemote::setShouldPlayToPlaybackTarget):
        (WebKit::MediaPlayerPrivateRemote::canEnterFullscreen const):
        (WebKit::MediaPlayerPrivateRemote::supportsAcceleratedRendering const):
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):
        (WebKit::MediaPlayerPrivateRemote::shouldMaintainAspectRatio const):
        (WebKit::MediaPlayerPrivateRemote::setShouldMaintainAspectRatio):
        (WebKit::MediaPlayerPrivateRemote::hasSingleSecurityOrigin const):
        (WebKit::MediaPlayerPrivateRemote::didPassCORSAccessCheck const):
        (WebKit::MediaPlayerPrivateRemote::wouldTaintOrigin const):
        (WebKit::MediaPlayerPrivateRemote::movieLoadType const):
        (WebKit::MediaPlayerPrivateRemote::prepareForRendering):
        (WebKit::MediaPlayerPrivateRemote::mediaTimeForTimeValue const):
        (WebKit::MediaPlayerPrivateRemote::maximumDurationToCacheMediaTime const):
        (WebKit::MediaPlayerPrivateRemote::decodedFrameCount const):
        (WebKit::MediaPlayerPrivateRemote::droppedFrameCount const):
        (WebKit::MediaPlayerPrivateRemote::audioDecodedByteCount const):
        (WebKit::MediaPlayerPrivateRemote::videoDecodedByteCount const):
        (WebKit::MediaPlayerPrivateRemote::setPrivateBrowsingMode):
        (WebKit::MediaPlayerPrivateRemote::engineDescription const):
        (WebKit::MediaPlayerPrivateRemote::audioSourceProvider):
        (WebKit::MediaPlayerPrivateRemote::createSession):
        (WebKit::MediaPlayerPrivateRemote::setCDMSession):
        (WebKit::MediaPlayerPrivateRemote::keyAdded):
        (WebKit::MediaPlayerPrivateRemote::cdmInstanceAttached):
        (WebKit::MediaPlayerPrivateRemote::cdmInstanceDetached):
        (WebKit::MediaPlayerPrivateRemote::attemptToDecryptWithInstance):
        (WebKit::MediaPlayerPrivateRemote::waitingForKey const):
        (WebKit::MediaPlayerPrivateRemote::requiresTextTrackRepresentation const):
        (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation):
        (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds):
        (WebKit::MediaPlayerPrivateRemote::tracksChanged):
        (WebKit::MediaPlayerPrivateRemote::simulateAudioInterruption):
        (WebKit::MediaPlayerPrivateRemote::beginSimulatedHDCPError):
        (WebKit::MediaPlayerPrivateRemote::endSimulatedHDCPError):
        (WebKit::MediaPlayerPrivateRemote::languageOfPrimaryAudioTrack const):
        (WebKit::MediaPlayerPrivateRemote::extraMemoryCost const):
        (WebKit::MediaPlayerPrivateRemote::fileSize const):
        (WebKit::MediaPlayerPrivateRemote::ended const):
        (WebKit::MediaPlayerPrivateRemote::videoPlaybackQualityMetrics):
        (WebKit::MediaPlayerPrivateRemote::notifyTrackModeChanged):
        (WebKit::MediaPlayerPrivateRemote::notifyActiveSourceBuffersChanged):
        (WebKit::MediaPlayerPrivateRemote::setShouldDisableSleep):
        (WebKit::MediaPlayerPrivateRemote::applicationWillResignActive):
        (WebKit::MediaPlayerPrivateRemote::applicationDidBecomeActive):
        (WebKit::MediaPlayerPrivateRemote::performTaskAtMediaTime):
        (WebKit::MediaPlayerPrivateRemote::shouldIgnoreIntrinsicSize):
        (WebKit::MediaPlayerPrivateRemote::logChannel const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h: Added.
        * WebProcess/GPU/media/MediaPlayerPrivateRemoteIdentifier.h: Added.
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp: Added.
        (WebKit::MediaPlayerRemoteFactory::MediaPlayerRemoteFactory):
        (WebKit::RemoteMediaPlayerManager::RemoteMediaPlayerManager):
        (WebKit::RemoteMediaPlayerManager::~RemoteMediaPlayerManager):
        (WebKit::RemoteMediaPlayerManager::supplementName):
        (WebKit::RemoteMediaPlayerManager::initialize):
        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):
        (WebKit::RemoteMediaPlayerManager::getSupportedTypes):
        (WebKit::RemoteMediaPlayerManager::supportsTypeAndCodecs):
        (WebKit::RemoteMediaPlayerManager::supportsKeySystem):
        (WebKit::RemoteMediaPlayerManager::originsInMediaCache):
        (WebKit::RemoteMediaPlayerManager::clearMediaCache):
        (WebKit::RemoteMediaPlayerManager::clearMediaCacheForOrigins):
        (WebKit::RemoteMediaPlayerManager::networkStateChanged):
        (WebKit::RemoteMediaPlayerManager::updatePreferences):
        (WebKit::RemoteMediaPlayerManager::gpuProcessConnection const):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.h: Added.
        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.cpp:

2019-12-13  Jim Mason  <jmason@ibinx.com>

        [GTK] WebKitGTK build hangs on g-ir-scanner
        https://bugs.webkit.org/show_bug.cgi?id=204715

        This patch fixes the static initialization order problem
        introduced by Bug 204503.

        The patch replaces the static data members with statics that
        are constructed only upon first access (i.e., the 'construct
        on first use' idiom).

        Reviewed by Carlos Garcia Campos.

        * UIProcess/glib/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::messageHandlers):
        (WebKit::RemoteInspectorClient::RemoteInspectorClient):
        * UIProcess/glib/RemoteInspectorClient.h:

2019-12-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] The AGX compiler service is incorrectly listed as a global name in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=205189

        Reviewed by Brent Fulgham.

        It should be a XPC service name.

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

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

        Minor WKWebView.mm code rearrangement
        https://bugs.webkit.org/show_bug.cgi?id=205129

        Reviewed by Tim Horton.

        Throw in some more #pragma marks and move some functions around, with the goal of
        having the implementation order mostly follow header order, and grouping related functions.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _pageForTesting]):
        (-[WKWebView _page]):
        (-[WKWebView urlSchemeHandlerForURLScheme:]):
        (+[WKWebView handlesURLScheme:]):
        (-[WKWebView _resolutionForShareSheetImmediateCompletionForTesting]):
        (-[WKWebView createPDFWithConfiguration:completionHandler:]):
        (-[WKWebView createWebArchiveDataWithCompletionHandler:]):
        (toFindOptions):
        (-[WKWebView findString:withConfiguration:completionHandler:]):
        (-[WKWebView setMediaType:]):
        (-[WKWebView mediaType]):
        (-[WKWebView layoutSubviews]):
        (-[WKWebView scrollView]):
        (-[WKWebView _isShowingVideoPictureInPicture]):
        (-[WKWebView _mayAutomaticallyShowVideoPictureInPicture]):
        (-[WKWebView _incrementFocusPreservationCount]):
        (-[WKWebView _decrementFocusPreservationCount]):
        (-[WKWebView _resetFocusPreservationCount]):
        (-[WKWebView _isRetainingActiveFocusedState]):
        (-[WKWebView _effectiveAppearanceIsDark]):
        (-[WKWebView _effectiveUserInterfaceLevelIsElevated]):
        (-[WKWebView _shouldAvoidResizingWhenInputViewBoundsChange]):
        (-[WKWebView _dragInteractionPolicy]):
        (-[WKWebView _setDragInteractionPolicy:]):
        (-[WKWebView _populateArchivedSubviews:]):
        (-[WKWebView _isBackground]):
        (-[WKWebView _setShouldSuppressFirstResponderChanges:]):
        (-[WKWebView _retainActiveFocusedState]):
        (-[WKWebView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKWebView _snapshotLayerContentsForBackForwardListItem:]):
        (-[WKWebView _dataDetectionResults]):
        (-[WKWebView _accessibilityRetrieveSpeakSelectionContent]):
        (-[WKWebView _accessibilityDidGetSpeakSelectionContent:]):
        (-[WKWebView _viewportSizeForCSSViewportUnits]):
        (-[WKWebView _setViewportSizeForCSSViewportUnits:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationCoordinator.mm: Unified sources build fix (seen while doing other stuff).

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

        Move WKWebView code related to testing to new files, with new private "for testing" headers.
        https://bugs.webkit.org/show_bug.cgi?id=205021

        Reviewed by Tim Horton.

        Move testing-only SPI to new private headers to discourage first parties from using
        them by mistake. Move test-only code to new files to reduce the size of WKWebView.mm.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _internalDoAfterNextPresentationUpdate:withoutWaitingForPainting:withoutWaitingForAnimatedResize:]):
        (-[WKWebView _prepareForImmediateActionAnimation]):
        (-[WKWebView _cancelImmediateActionAnimation]):
        (-[WKWebView _completeImmediateActionAnimation]):
        (-[WKWebView _useSystemAppearance]):
        (-[WKWebView _setUseSystemAppearance:]):
        (-[WKWebView _pageRefForTransitionToWKWebView]):
        (-[WKWebView _canChangeFrameLayout:]):
        (-[WKWebView _tryToSwipeWithEvent:ignoringPinnedState:]):
        (-[WKWebView _ignoresNonWheelEvents]):
        (-[WKWebView _setIgnoresNonWheelEvents:]):
        (-[WKWebView _hasActiveVideoForControlsManager]):
        (-[WKWebView _dismissContentRelativeChildWindows]):
        (-[WKWebView _gestureEventWasNotHandledByWebCore:]):
        (-[WKWebView _disableFrameSizeUpdates]):
        (-[WKWebView _enableFrameSizeUpdates]):
        (-[WKWebView _beginDeferringViewInWindowChanges]):
        (-[WKWebView _endDeferringViewInWindowChanges]):
        (-[WKWebView _endDeferringViewInWindowChangesSync]):
        (-[WKWebView _fullScreenPlaceholderView]):
        (-[WKWebView _fullScreenWindow]):
        (-[WKWebView _underlayColor]):
        (-[WKWebView _setUnderlayColor:]):
        (-[WKWebView _setCustomSwipeViews:]):
        (-[WKWebView _setCustomSwipeViewsTopContentInset:]):
        (-[WKWebView _setDidMoveSwipeSnapshotCallback:]):
        (-[WKWebView _setFrame:andScrollBy:]):
        (-[WKWebView _setTotalHeightOfBanners:]):
        (-[WKWebView _totalHeightOfBanners]):
        (-[WKWebView _setFont:sender:]):
        (-[WKWebView _setFontSize:sender:]):
        (-[WKWebView _setTextColor:sender:]):
        (-[WKWebView inputAccessoryView]):
        (-[WKWebView inputView]):
        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]):
        (-[WKWebView _contentVisibleRect]):
        (-[WKWebView _convertPointFromContentsToView:]):
        (-[WKWebView _convertPointFromViewToContents:]):
        (-[WKWebView didStartFormControlInteraction]):
        (-[WKWebView didEndFormControlInteraction]):
        (-[WKWebView _uiTextCaretRect]):
        (-[WKWebView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]):
        (-[WKWebView _accessibilityStoreSelection]):
        (-[WKWebView _accessibilityClearSelection]):
        (-[WKWebView _contentViewIsFirstResponder]):
        (-[WKWebView _inspector]):
        (-[WKWebView _mainFrame]):
        (-[WKWebView _isEditable]):
        (-[WKWebView _setEditable:]):
        (-[WKWebView _executeEditCommand:argument:completion:]):
        (-[WKWebView _textManipulationDelegate]):
        (-[WKWebView _setTextManipulationDelegate:]):
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]):
        (-[WKWebView _completeTextManipulation:completion:]):
        (-[WKWebView _takeFindStringFromSelection:]):
        (+[WKWebView _stringForFind]):
        (+[WKWebView _setStringForFind:]):
        (-[WKWebView _remoteObjectRegistry]):
        (-[WKWebView _handle]):
        (-[WKWebView _observedRenderingProgressEvents]):
        (-[WKWebView _historyDelegate]):
        (-[WKWebView _setHistoryDelegate:]):
        (-[WKWebView _updateMediaPlaybackControlsManager]):
        (-[WKWebView _canTogglePictureInPicture]):
        (-[WKWebView _isPictureInPictureActive]):
        (-[WKWebView _togglePictureInPicture]):
        (-[WKWebView _closeAllMediaPresentations]):
        (-[WKWebView _stopMediaCapture]):
        (-[WKWebView _stopAllMediaPlayback]):
        (-[WKWebView _suspendAllMediaPlayback]):
        (-[WKWebView _resumeAllMediaPlayback]):
        (-[WKWebView _unreachableURL]):
        (-[WKWebView _mainFrameURL]):
        (-[WKWebView _loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):
        (-[WKWebView _loadRequest:shouldOpenExternalURLs:]):
        (-[WKWebView _certificateChain]):
        (-[WKWebView _committedURL]):
        (-[WKWebView _MIMEType]):
        (-[WKWebView _userAgent]):
        (-[WKWebView _applicationNameForUserAgent]):
        (-[WKWebView _setApplicationNameForUserAgent:]):
        (-[WKWebView _customUserAgent]):
        (-[WKWebView _setCustomUserAgent:]):
        (-[WKWebView _setUserContentExtensionsEnabled:]):
        (-[WKWebView _userContentExtensionsEnabled]):
        (-[WKWebView _webProcessIdentifier]):
        (-[WKWebView _provisionalWebProcessIdentifier]):
        (-[WKWebView _killWebContentProcess]):
        (-[WKWebView _safeBrowsingWarning]):
        (-[WKWebView _reloadWithoutContentBlockers]):
        (-[WKWebView _reloadExpiredOnly]):
        (-[WKWebView _killWebContentProcessAndResetState]):
        (-[WKWebView _convertRectFromRootViewCoordinates:]):
        (-[WKWebView _convertRectToRootViewCoordinates:]):
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]):
        (-[WKWebView _focusTextInputContext:completionHandler:]):
        (-[WKWebView _takePDFSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView _setShouldSuppressFirstResponderChanges:]):
        (-[WKWebView _retainActiveFocusedState]):
        (-[WKWebView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKWebView _snapshotLayerContentsForBackForwardListItem:]):
        (-[WKWebView _dataDetectionResults]):
        (-[WKWebView _accessibilityRetrieveSpeakSelectionContent]):
        (-[WKWebView _accessibilityDidGetSpeakSelectionContent:]):
        (-[WKWebView inputAssistantItem]):
        (-[WKWebView _sessionStateData]):
        (-[WKWebView _sessionState]):
        (-[WKWebView _sessionStateWithFilter:]):
        (-[WKWebView _restoreFromSessionStateData:]):
        (-[WKWebView _restoreSessionState:andNavigate:]):
        (-[WKWebView _close]):
        (-[WKWebView _insertAttachmentWithFilename:contentType:data:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:completion:]):
        (-[WKWebView _attachmentForIdentifier:]):
        (-[WKWebView _simulateDeviceOrientationChangeWithAlpha:beta:gamma:]):
        (+[WKWebView _handlesSafeBrowsing]):
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]):
        (+[WKWebView _confirmMalwareSentinel]):
        (+[WKWebView _visitUnsafeWebsiteSentinel]):
        (-[WKWebView _isJITEnabled:]):
        (-[WKWebView _evaluateJavaScriptWithoutUserGesture:completionHandler:]):
        (-[WKWebView _updateWebsitePolicies:]):
        (-[WKWebView _allowsRemoteInspection]):
        (-[WKWebView _setAllowsRemoteInspection:]):
        (-[WKWebView _remoteInspectionNameOverride]):
        (-[WKWebView _setRemoteInspectionNameOverride:]):
        (-[WKWebView _addsVisitedLinks]):
        (-[WKWebView _setAddsVisitedLinks:]):
        (-[WKWebView _networkRequestsInProgress]):
        (layoutMilestones):
        (-[WKWebView _setObservedRenderingProgressEvents:]):
        (-[WKWebView _getMainResourceDataWithCompletionHandler:]):
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView _getContentsAsStringWithCompletionHandler:]):
        (-[WKWebView _getContentsAsAttributedStringWithCompletionHandler:]):
        (-[WKWebView _getApplicationManifestWithCompletionHandler:]):
        (-[WKWebView _paginationMode]):
        (-[WKWebView _setPaginationMode:]):
        (-[WKWebView _paginationBehavesLikeColumns]):
        (-[WKWebView _setPaginationBehavesLikeColumns:]):
        (-[WKWebView _pageLength]):
        (-[WKWebView _setPageLength:]):
        (-[WKWebView _gapBetweenPages]):
        (-[WKWebView _setGapBetweenPages:]):
        (-[WKWebView _paginationLineGridEnabled]):
        (-[WKWebView _setPaginationLineGridEnabled:]):
        (-[WKWebView _pageCount]):
        (-[WKWebView _supportsTextZoom]):
        (-[WKWebView _textZoomFactor]):
        (-[WKWebView _setTextZoomFactor:]):
        (-[WKWebView setPageZoom:]):
        (-[WKWebView pageZoom]):
        (-[WKWebView _pageZoomFactor]):
        (-[WKWebView _setPageZoomFactor:]):
        (-[WKWebView _diagnosticLoggingDelegate]):
        (-[WKWebView _setDiagnosticLoggingDelegate:]):
        (-[WKWebView _findDelegate]):
        (-[WKWebView _setFindDelegate:]):
        (toFindOptions):
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        (-[WKWebView _saveBackForwardSnapshotForItem:]):
        (-[WKWebView _inputDelegate]):
        (-[WKWebView _setInputDelegate:]):
        (-[WKWebView _isDisplayingStandaloneImageDocument]):
        (-[WKWebView _isDisplayingStandaloneMediaDocument]):
        (-[WKWebView _isPlayingAudio]):
        (-[WKWebView _isShowingNavigationGestureSnapshot]):
        (-[WKWebView _layoutMode]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _fixedLayoutSize]):
        (-[WKWebView _setFixedLayoutSize:]):
        (-[WKWebView _setBackgroundExtendsBeyondPage:]):
        (-[WKWebView _backgroundExtendsBeyondPage]):
        (-[WKWebView _viewScale]):
        (-[WKWebView _setViewScale:]):
        (-[WKWebView _setMinimumEffectiveDeviceWidth:]):
        (-[WKWebView _minimumEffectiveDeviceWidth]):
        (-[WKWebView _setScrollPerformanceDataCollectionEnabled:]):
        (-[WKWebView _scrollPerformanceDataCollectionEnabled]):
        (-[WKWebView _scrollPerformanceData]):
        (-[WKWebView _allowsMediaDocumentInlinePlayback]):
        (-[WKWebView _setAllowsMediaDocumentInlinePlayback:]):
        (-[WKWebView _webProcessIsResponsive]):
        (-[WKWebView _setFullscreenDelegate:]):
        (-[WKWebView _fullscreenDelegate]):
        (-[WKWebView _isInFullscreen]):
        (-[WKWebView _mediaCaptureState]):
        (-[WKWebView _setMediaCaptureEnabled:]):
        (-[WKWebView _mediaCaptureEnabled]):
        (-[WKWebView _setPageMuted:]):
        (-[WKWebView _removeDataDetectedLinks:]):
        (-[WKWebView _doAfterNextPresentationUpdate:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForPainting:]):
        (-[WKWebView _doAfterNextStablePresentationUpdate:]):
        (-[WKWebView _detectDataWithTypes:completionHandler:]):
        (-[WKWebView removeFromSuperview]):
        (-[WKWebView _minimumLayoutSizeOverride]):
        (-[WKWebView _setViewLayoutSizeOverride:]):
        (-[WKWebView _obscuredInsets]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _obscuredInsetEdgesAffectedBySafeArea]):
        (-[WKWebView _setObscuredInsetEdgesAffectedBySafeArea:]):
        (-[WKWebView _unobscuredSafeAreaInsets]):
        (-[WKWebView _setUnobscuredSafeAreaInsets:]):
        (-[WKWebView _safeAreaShouldAffectObscuredInsets]):
        (-[WKWebView _setInterfaceOrientationOverride:]):
        (-[WKWebView _interfaceOrientationOverride]):
        (-[WKWebView _clearInterfaceOrientationOverride]):
        (-[WKWebView _maximumUnobscuredSizeOverride]):
        (-[WKWebView _setMaximumUnobscuredSizeOverride:]):
        (-[WKWebView _setAllowsViewportShrinkToFit:]):
        (-[WKWebView _allowsViewportShrinkToFit]):
        (-[WKWebView _beginInteractiveObscuredInsetsChange]):
        (-[WKWebView _endInteractiveObscuredInsetsChange]):
        (-[WKWebView _hideContentUntilNextUpdate]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]):
        (-[WKWebView _setOverlaidAccessoryViewsInset:]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _clearOverrideLayoutParameters]):
        (viewportArgumentsFromDictionary):
        (-[WKWebView _overrideViewportWithArguments:]):
        (-[WKWebView _viewForFindUI]):
        (-[WKWebView _isDisplayingPDF]):
        (-[WKWebView _dataForDisplayedPDF]):
        (-[WKWebView _suggestedFilenameForDisplayedPDF]):
        (-[WKWebView _webViewPrintFormatter]):
        (toUserInterfaceLayoutDirection):
        (-[WKWebView setSemanticContentAttribute:]):
        (-[WKWebView _drawsBackground]):
        (-[WKWebView _setDrawsBackground:]):
        (-[WKWebView _backgroundColor]):
        (-[WKWebView _setBackgroundColor:]):
        (-[WKWebView _setDrawsTransparentBackground:]):
        (-[WKWebView _inspectorAttachmentView]):
        (-[WKWebView _setInspectorAttachmentView:]):
        (-[WKWebView _setOverlayScrollbarStyle:]):
        (-[WKWebView _overlayScrollbarStyle]):
        (-[WKWebView _windowOcclusionDetectionEnabled]):
        (-[WKWebView _setWindowOcclusionDetectionEnabled:]):
        (-[WKWebView shareSheetDidDismiss:]):
        (-[WKWebView _setOverrideDeviceScaleFactor:]):
        (-[WKWebView _overrideDeviceScaleFactor]):
        (-[WKWebView _setTopContentInset:]):
        (-[WKWebView _topContentInset]):
        (-[WKWebView _pageExtendedBackgroundColor]):
        (-[WKWebView _pinnedState]):
        (-[WKWebView _rubberBandingEnabled]):
        (-[WKWebView _setRubberBandingEnabled:]):
        (-[WKWebView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
        (-[WKWebView _setAutomaticallyAdjustsContentInsets:]):
        (-[WKWebView _automaticallyAdjustsContentInsets]):
        (-[WKWebView _minimumLayoutWidth]):
        (-[WKWebView _setMinimumLayoutWidth:]):
        (-[WKWebView _shouldExpandContentToViewHeightForAutoLayout]):
        (-[WKWebView _setShouldExpandContentToViewHeightForAutoLayout:]):
        (-[WKWebView _alwaysShowsHorizontalScroller]):
        (-[WKWebView _setAlwaysShowsHorizontalScroller:]):
        (-[WKWebView _alwaysShowsVerticalScroller]):
        (-[WKWebView _setAlwaysShowsVerticalScroller:]):
        (-[WKWebView _printOperationWithPrintInfo:]):
        (-[WKWebView _printOperationWithPrintInfo:forFrame:]):
        (-[WKWebView setUserInterfaceLayoutDirection:]):
        (-[WKWebView _wantsMediaPlaybackControlsView]):
        (-[WKWebView _setWantsMediaPlaybackControlsView:]):
        (-[WKWebView _mediaPlaybackControlsView]):
        (-[WKWebView _addMediaPlaybackControlsView:]):
        (-[WKWebView _removeMediaPlaybackControlsView]):
        (-[WKWebView _prepareForMoveToWindow:completionHandler:]):
        (-[WKWebView _setThumbnailView:]):
        (-[WKWebView _thumbnailView]):
        (-[WKWebView _setIgnoresAllEvents:]):
        (-[WKWebView _ignoresAllEvents]):
        (-[WKWebView _spellCheckerDocumentTag]):
        (-[WKWebView _setContinuousSpellCheckingEnabledForTesting:]): Deleted.
        (-[WKWebView _contentsOfUserInterfaceItem:]): Deleted.
        (-[WKWebView _setDeviceOrientationUserPermissionHandlerForTesting:]): Deleted.
        (-[WKWebView keyboardAccessoryBarNext]): Deleted.
        (-[WKWebView keyboardAccessoryBarPrevious]): Deleted.
        (-[WKWebView applyAutocorrection:toString:withCompletionHandler:]): Deleted.
        (-[WKWebView dismissFormAccessoryView]): Deleted.
        (-[WKWebView _dismissFilePicker]): Deleted.
        (-[WKWebView setTimePickerValueToHour:minute:]): Deleted.
        (-[WKWebView selectFormAccessoryPickerRow:]): Deleted.
        (-[WKWebView selectFormPopoverTitle]): Deleted.
        (-[WKWebView textContentTypeForTesting]): Deleted.
        (-[WKWebView formInputLabel]): Deleted.
        (-[WKWebView _didShowContextMenu]): Deleted.
        (-[WKWebView _didDismissContextMenu]): Deleted.
        (-[WKWebView _inputViewBounds]): Deleted.
        (-[WKWebView _uiTextSelectionRects]): Deleted.
        (-[WKWebView _scrollingTreeAsText]): Deleted.
        (-[WKWebView _stableStateOverride]): Deleted.
        (-[WKWebView _propertiesOfLayerWithID:]): Deleted.
        (-[WKWebView _doAfterResettingSingleTapGesture:]): Deleted.
        (-[WKWebView _doAfterReceivingEditDragSnapshotForTesting:]): Deleted.
        (-[WKWebView _requestControlledElementID]): Deleted.
        (-[WKWebView _handleControlledElementIDResponse:]): Deleted.
        (-[WKWebView _handleAcceptedCandidate:]): Deleted.
        (-[WKWebView _didHandleAcceptedCandidate]): Deleted.
        (-[WKWebView _didUpdateCandidateListVisibility:]): Deleted.
        (-[WKWebView _forceRequestCandidates]): Deleted.
        (-[WKWebView _shouldRequestCandidates]): Deleted.
        (-[WKWebView _insertText:replacementRange:]): Deleted.
        (-[WKWebView _candidateRect]): Deleted.
        (-[WKWebView viewDidChangeEffectiveAppearance]): Deleted.
        (-[WKWebView _setHeaderBannerHeight:]): Deleted.
        (-[WKWebView _setFooterBannerHeight:]): Deleted.
        (-[WKWebView _doAfterProcessingAllPendingMouseEvents:]): Deleted.
        (-[WKWebView _activeMenu]): Deleted.
        (-[WKWebView _requestActiveNowPlayingSessionInfo:]): Deleted.
        (-[WKWebView _setPageScale:withOrigin:]): Deleted.
        (-[WKWebView _pageScale]): Deleted.
        (-[WKWebView _scrollingUpdatesDisabledForTesting]): Deleted.
        (-[WKWebView _setScrollingUpdatesDisabledForTesting:]): Deleted.
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForAnimatedResizeForTesting:]): Deleted.
        (-[WKWebView _doAfterNextVisibleContentRectUpdate:]): Deleted.
        (-[WKWebView _disableBackForwardSnapshotVolatilityForTesting]): Deleted.
        (-[WKWebView _dragCaretRect]): Deleted.
        (-[WKWebView _simulateLongPressActionAtLocation:]): Deleted.
        (-[WKWebView _simulateTextEntered:]): Deleted.
        (-[WKWebView _dynamicUserInterfaceTraitDidChange]): Deleted.
        (-[WKWebView _beginBackSwipeForTesting]): Deleted.
        (-[WKWebView _completeBackSwipeForTesting]): Deleted.
        (-[WKWebView _setDefersLoadingForTesting:]): Deleted.
        (-[WKWebView _setShareSheetCompletesImmediatelyWithResolutionForTesting:]): Deleted.
        (-[WKWebView _hasInspectorFrontend]): Deleted.
        (-[WKWebView _processWillSuspendImminentlyForTesting]): Deleted.
        (-[WKWebView _processDidResumeForTesting]): Deleted.
        (-[WKWebView _setAssertionStateForTesting:]): Deleted.
        (-[WKWebView _hasServiceWorkerBackgroundActivityForTesting]): Deleted.
        (-[WKWebView _hasServiceWorkerForegroundActivityForTesting]): Deleted.
        (-[WKWebView _denyNextUserMediaRequest]): Deleted.
        (-[WKWebView _triggerSystemPreviewActionOnElement:document:page:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h: Added.
        * UIProcess/API/Cocoa/WKWebViewTesting.mm: Added.
        (-[WKWebView _setPageScale:withOrigin:]):
        (-[WKWebView _pageScale]):
        (-[WKWebView _setContinuousSpellCheckingEnabledForTesting:]):
        (-[WKWebView _contentsOfUserInterfaceItem:]):
        (-[WKWebView _requestActiveNowPlayingSessionInfo:]):
        (-[WKWebView _scrollingUpdatesDisabledForTesting]):
        (-[WKWebView _setScrollingUpdatesDisabledForTesting:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForAnimatedResizeForTesting:]):
        (-[WKWebView _doAfterNextVisibleContentRectUpdate:]):
        (-[WKWebView _disableBackForwardSnapshotVolatilityForTesting]):
        (-[WKWebView _beginBackSwipeForTesting]):
        (-[WKWebView _completeBackSwipeForTesting]):
        (-[WKWebView _setDefersLoadingForTesting:]):
        (-[WKWebView _setShareSheetCompletesImmediatelyWithResolutionForTesting:]):
        (-[WKWebView _hasInspectorFrontend]):
        (-[WKWebView _processWillSuspendImminentlyForTesting]):
        (-[WKWebView _processDidResumeForTesting]):
        (-[WKWebView _setAssertionStateForTesting:]):
        (-[WKWebView _hasServiceWorkerBackgroundActivityForTesting]):
        (-[WKWebView _hasServiceWorkerForegroundActivityForTesting]):
        (-[WKWebView _denyNextUserMediaRequest]):
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h: Added.
        * UIProcess/API/ios/WKWebViewTestingIOS.mm: Added.
        (-[WKWebView keyboardAccessoryBarNext]):
        (-[WKWebView keyboardAccessoryBarPrevious]):
        (-[WKWebView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKWebView dismissFormAccessoryView]):
        (-[WKWebView _dismissFilePicker]):
        (-[WKWebView setTimePickerValueToHour:minute:]):
        (-[WKWebView selectFormAccessoryPickerRow:]):
        (-[WKWebView selectFormPopoverTitle]):
        (-[WKWebView textContentTypeForTesting]):
        (-[WKWebView formInputLabel]):
        (-[WKWebView _didShowContextMenu]):
        (-[WKWebView _didDismissContextMenu]):
        (-[WKWebView _inputViewBounds]):
        (-[WKWebView _uiTextSelectionRects]):
        (-[WKWebView _scrollingTreeAsText]):
        (-[WKWebView _stableStateOverride]):
        (-[WKWebView _propertiesOfLayerWithID:]):
        (-[WKWebView _doAfterResettingSingleTapGesture:]):
        (-[WKWebView _doAfterReceivingEditDragSnapshotForTesting:]):
        (-[WKWebView _dragCaretRect]):
        (-[WKWebView _simulateLongPressActionAtLocation:]):
        (-[WKWebView _simulateTextEntered:]):
        (-[WKWebView _dynamicUserInterfaceTraitDidChange]):
        (-[WKWebView _triggerSystemPreviewActionOnElement:document:page:]):
        (-[WKWebView _setDeviceOrientationUserPermissionHandlerForTesting:]):
        * UIProcess/API/mac/WKWebViewPrivateForTestingMac.h: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm.
        * UIProcess/API/mac/WKWebViewTestingMac.mm: Added.
        (-[WKWebView _requestControlledElementID]):
        (-[WKWebView _handleControlledElementIDResponse:]):
        (-[WKWebView _handleAcceptedCandidate:]):
        (-[WKWebView _didHandleAcceptedCandidate]):
        (-[WKWebView _didUpdateCandidateListVisibility:]):
        (-[WKWebView _forceRequestCandidates]):
        (-[WKWebView _shouldRequestCandidates]):
        (-[WKWebView _insertText:replacementRange:]):
        (-[WKWebView _candidateRect]):
        (-[WKWebView viewDidChangeEffectiveAppearance]):
        (-[WKWebView _setHeaderBannerHeight:]):
        (-[WKWebView _setFooterBannerHeight:]):
        (-[WKWebView _doAfterProcessingAllPendingMouseEvents:]):
        (-[WKWebView _activeMenu]):
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKMouseGestureRecognizer.h:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        * UIProcess/mac/PageClientImplMac.mm:
        * UIProcess/mac/WKFullScreenWindowController.h:
        * WebKit.xcodeproj/project.pbxproj:

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

        [iOS] Add sandbox telemetry to mach lookup rules in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=205175

        Reviewed by Brent Fulgham.

        We have already added telemetry to many mach lookup rules, but some were missing telemetry.

        No new tests, no behavior change.

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

2019-12-12  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: make WebIDBServer a MessageReceiver to replace WebIDBConnection
        https://bugs.webkit.org/show_bug.cgi?id=205145

        Reviewed by Alex Christensen.

        Work towards <rdar://problem/56908496>. Move message handling from WebIDBConnectionToClient to WebIDBServer.

        Also, WebIDBConnectionClient now is owned by WebIDBServer instead of NetworkConnectionToWebProcess.

        No behavior change.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::messageSenderConnection const):
        (WebKit::WebIDBConnectionToClient::idbServer): Deleted.
        (WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess): Deleted.
        (WebKit::WebIDBConnectionToClient::deleteDatabase): Deleted.
        (WebKit::WebIDBConnectionToClient::openDatabase): Deleted.
        (WebKit::WebIDBConnectionToClient::abortTransaction): Deleted.
        (WebKit::WebIDBConnectionToClient::commitTransaction): Deleted.
        (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction): Deleted.
        (WebKit::WebIDBConnectionToClient::createObjectStore): Deleted.
        (WebKit::WebIDBConnectionToClient::deleteObjectStore): Deleted.
        (WebKit::WebIDBConnectionToClient::renameObjectStore): Deleted.
        (WebKit::WebIDBConnectionToClient::clearObjectStore): Deleted.
        (WebKit::WebIDBConnectionToClient::createIndex): Deleted.
        (WebKit::WebIDBConnectionToClient::deleteIndex): Deleted.
        (WebKit::WebIDBConnectionToClient::renameIndex): Deleted.
        (WebKit::WebIDBConnectionToClient::putOrAdd): Deleted.
        (WebKit::WebIDBConnectionToClient::getRecord): Deleted.
        (WebKit::WebIDBConnectionToClient::getAllRecords): Deleted.
        (WebKit::WebIDBConnectionToClient::getCount): Deleted.
        (WebKit::WebIDBConnectionToClient::deleteRecord): Deleted.
        (WebKit::WebIDBConnectionToClient::openCursor): Deleted.
        (WebKit::WebIDBConnectionToClient::iterateCursor): Deleted.
        (WebKit::WebIDBConnectionToClient::establishTransaction): Deleted.
        (WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose): Deleted.
        (WebKit::WebIDBConnectionToClient::databaseConnectionClosed): Deleted.
        (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded): Deleted.
        (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent): Deleted.
        (WebKit::WebIDBConnectionToClient::openDBRequestCancelled): Deleted.
        (WebKit::WebIDBConnectionToClient::confirmDidCloseFromServer): Deleted.
        (WebKit::WebIDBConnectionToClient::getAllDatabaseNames): Deleted.
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::getAllDatabaseNames):
        (WebKit::WebIDBServer::addConnection):
        (WebKit::WebIDBServer::removeConnection):
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/IndexedDB/WebIDBServer.messages.in: Renamed from Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::findNetworkActivityTracker):
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer): Deleted. 
        NetworkConnectionToWebProcess::establishIDBConnectionToServer was used to ensure WebIDBConnectionToCilent member
        exists in NetworkConnectionToWebProcess. Now WebIDBConnectionToCilent is created in 
        WebIDBServer::addConnection(when NetworkConnectionToWebProcess is created), so we don't need the message to do 
        initialization.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::connectionToWebProcessClosed):
        * NetworkProcess/NetworkProcess.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        (WebKit::WebIDBConnectionToServer::deleteDatabase):
        (WebKit::WebIDBConnectionToServer::openDatabase):
        (WebKit::WebIDBConnectionToServer::abortTransaction):
        (WebKit::WebIDBConnectionToServer::commitTransaction):
        (WebKit::WebIDBConnectionToServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToServer::createObjectStore):
        (WebKit::WebIDBConnectionToServer::deleteObjectStore):
        (WebKit::WebIDBConnectionToServer::renameObjectStore):
        (WebKit::WebIDBConnectionToServer::clearObjectStore):
        (WebKit::WebIDBConnectionToServer::createIndex):
        (WebKit::WebIDBConnectionToServer::deleteIndex):
        (WebKit::WebIDBConnectionToServer::renameIndex):
        (WebKit::WebIDBConnectionToServer::putOrAdd):
        (WebKit::WebIDBConnectionToServer::getRecord):
        (WebKit::WebIDBConnectionToServer::getAllRecords):
        (WebKit::WebIDBConnectionToServer::getCount):
        (WebKit::WebIDBConnectionToServer::deleteRecord):
        (WebKit::WebIDBConnectionToServer::openCursor):
        (WebKit::WebIDBConnectionToServer::iterateCursor):
        (WebKit::WebIDBConnectionToServer::establishTransaction):
        (WebKit::WebIDBConnectionToServer::databaseConnectionPendingClose):
        (WebKit::WebIDBConnectionToServer::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToServer::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToServer::didFireVersionChangeEvent):
        (WebKit::WebIDBConnectionToServer::openDBRequestCancelled):
        (WebKit::WebIDBConnectionToServer::confirmDidCloseFromServer):
        (WebKit::WebIDBConnectionToServer::getAllDatabaseNames):

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

        Regression(r253394) swipe/basic-cached-back-swipe.html is timing out on iOS
        https://bugs.webkit.org/show_bug.cgi?id=205173

        Reviewed by Tim Horton.

        Test test was calling beginSimulatedSwipeInDirectionForTesting / completeSimulatedSwipeInDirectionForTesting
        on the ViewGestureController. This was causing beginSwipeGesture() and endSwipeGesture() but not
        willEndSwipeGesture(). This was causing the timeout since willEndSwipeGesture() now actually triggers the
        load.

        This patch also gets rid of the SnapshotRemovalTracker::SwipeAnimationEnd. We don't really need it since
        we already wait for SnapshotRemovalTracker::RepaintAfterNavigation and we won't repaint until the swipe
        animation is over (due to the layer tree being frozen during the swipe animation). The SwipeAnimationEnd
        was causing trouble because the provisional load may not have started yet by the time endSwipeGesture()
        is called, which means that the call to eventOccurred(SwipeAnimationEnd) would get ignored because the
        SnapshotRemovalTracker is still paused (it gets unpaused when the provisional load actually starts).

        * UIProcess/ViewGestureController.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::willEndSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):

2019-12-12  Alex Christensen  <achristensen@webkit.org>

        NetworkDataTaskCocoa and NetworkSessionCocoa should use public methods instead of being friends
        https://bugs.webkit.org/show_bug.cgi?id=204242

        Reviewed by Chris Dumez.

        This makes them stay good abstractions, and probably could make a good meme about not having any friends.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:

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

        [iOS] Deny mach lookup access to content filter service in the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=205077

        Reviewed by Brent Fulgham.

        Mach lookup access to the content filter service in the WebContent process is only needed if
        [WebFilterEvaluator isManagedSession] evaluates to true. If this is the case, issue the needed
        mach lookup sandbox extension to the WebContent process, where it will be consumed.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        WebDriver: tests is_element_enabled/enabled.py::test_fieldset_disabled_descendant are failing
        https://bugs.webkit.org/show_bug.cgi?id=204700

        Reviewed by Carlos Alberto Lopez Perez.

        Add ElementEnabled atom to easily implement is element enabled command.

        * UIProcess/Automation/atoms/ElementEnabled.js: Added.
        (isEnabled.isDisabledAttributeSupported):
        (isEnabled.findParent):
        (isEnabled):

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

        Unreviewed, a nit after r253366

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        Change the parameter type of the completion handler from NSData to NSString.

2019-12-11  Daniel Bates  <dabates@apple.com>

        Remove unused Frame parameter from moveByGranularityRespectingWordBoundary() and take const VisiblePosition&
        https://bugs.webkit.org/show_bug.cgi?id=205137

        Reviewed by Wenson Hsieh.

        moveByGranularityRespectingWordBoundary() never makes use of the passed Frame and does not mutate the
        passed VisiblePosition. So, do not accept the former and take the latter as a const lvalue reference.

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

2019-12-11  Daniel Bates  <dabates@apple.com>

        UIWKDocumentContext returns 0 character rects when caret is at beginning or end of text
        https://bugs.webkit.org/show_bug.cgi?id=205135
        <rdar://problem/56887914>

        Reviewed by Wenson Hsieh.

        When the specified position to move from is at the beginning or end of the text then return
        the position of the beginning or end of the nearest word based on the specified direction.

        Currently we always return the null position. As a result we do not compute a valid
        character range to convert to rectangles.

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

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

        [WebAuthn] Combine AuthenticatorResponse and PublicKeyCredentialData
        https://bugs.webkit.org/show_bug.cgi?id=190783
        <rdar://problem/57781183>

        Reviewed by Brent Fulgham.

        Code in WebKit are changed to use AuthenticatorResponse and its subtypes.

        * UIProcess/WebAuthentication/Authenticator.h:
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::invokePendingCompletionHandler):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserConsented):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::handleRequest):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.messages.in:
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::continueMakeCredentialAfterResponseReceived const):
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::continueRegisterCommandAfterResponseReceived):
        (WebKit::U2fAuthenticator::continueSignCommandAfterResponseReceived):
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:

2019-12-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r253376.

        Broke internal builds

        Reverted changeset:

        "Move WKWebView code related to testing to new files, with
        their own headers, and stop exposing test-only functions as
        SPI."
        https://bugs.webkit.org/show_bug.cgi?id=205021
        https://trac.webkit.org/changeset/253376

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

        There should be no user-noticeable delay when closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=205069
        <rdar://problem/57797494>

        Reviewed by Ryosuke Niwa.

        There should be no user-noticeable delay when closing a tab. To achieve this, use a timeout of 50ms for doing the
        IPC handshake with the WebContent process, instead of 500ms.

        * UIProcess/WebPageProxy.cpp:

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

        [iOS] Issue load sooner on swipe back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=205127
        <rdar://problem/57843862>

        Reviewed by Tim Horton.

        Issue load sooner on swipe back/forward navigation on iOS. We were waiting until the end of
        the swipe animation to issue the load. We now issue the load as soon as the user lifts the finger
        off the screen and thus commits to navigating. This results in improved perceived performance
        when swiping back/forward to navigate.

        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didStartProvisionalOrSameDocumentLoadForMainFrame):
        (WebKit::ViewGestureController::willEndSwipeGesture):
        * UIProcess/ViewGestureController.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::willEndSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):

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

        IndexedDB: Introduce WebIDBServer class
        https://bugs.webkit.org/show_bug.cgi?id=205095

        Reviewed by Alex Christensen.

        Work towards <rdar://problem/56908496>. WebIDBServer currently is just a wrapper of WebCore::IDBServer.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::idbServer):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/IndexedDB/WebIDBServer.cpp: Added.
        (WebKit::WebIDBServer::create):
        (WebKit::WebIDBServer::WebIDBServer):
        (WebKit::WebIDBServer::registerConnection):
        (WebKit::WebIDBServer::unregisterConnection):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::suspend):
        (WebKit::WebIDBServer::resume):
        (WebKit::WebIDBServer::openDatabase):
        (WebKit::WebIDBServer::deleteDatabase):
        (WebKit::WebIDBServer::abortTransaction):
        (WebKit::WebIDBServer::commitTransaction):
        (WebKit::WebIDBServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBServer::createObjectStore):
        (WebKit::WebIDBServer::deleteObjectStore):
        (WebKit::WebIDBServer::renameObjectStore):
        (WebKit::WebIDBServer::clearObjectStore):
        (WebKit::WebIDBServer::createIndex):
        (WebKit::WebIDBServer::deleteIndex):
        (WebKit::WebIDBServer::renameIndex):
        (WebKit::WebIDBServer::putOrAdd):
        (WebKit::WebIDBServer::getRecord):
        (WebKit::WebIDBServer::getAllRecords):
        (WebKit::WebIDBServer::getCount):
        (WebKit::WebIDBServer::deleteRecord):
        (WebKit::WebIDBServer::openCursor):
        (WebKit::WebIDBServer::iterateCursor):
        (WebKit::WebIDBServer::establishTransaction):
        (WebKit::WebIDBServer::databaseConnectionPendingClose):
        (WebKit::WebIDBServer::databaseConnectionClosed):
        (WebKit::WebIDBServer::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBServer::didFireVersionChangeEvent):
        (WebKit::WebIDBServer::openDBRequestCancelled):
        (WebKit::WebIDBServer::getAllDatabaseNames):
        (WebKit::WebIDBServer::confirmDidCloseFromServer):
        * NetworkProcess/IndexedDB/WebIDBServer.h: Added.
        * NetworkProcess/NetworkProcess.cpp: replace WebCore::IDBServer with WebIDBServer.
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::createWebIDBServer):
        (WebKit::NetworkProcess::webIDBServer):
        (WebKit::NetworkProcess::createIDBServer): Deleted.
        (WebKit::NetworkProcess::idbServer): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::requestSpace):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-12-11  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add HarfBuzz targets
        https://bugs.webkit.org/show_bug.cgi?id=205042

        Reviewed by Konstantin Tokarev.

        Use the HarfBuzz targets directly instead of HARFBUZZ_LIBRARIES and
        HARFBUZZ_INCLUDE_DIRS.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

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

        Unreviewed, a nit after r253366

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        Improve the naming of the new SPI a bit.

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

        Make incremental builds faster after modifying DisplayListItems.h
        https://bugs.webkit.org/show_bug.cgi?id=205032

        Reviewed by Tim Horton.

        Include DisplayListItems.h directly, since these need to know about the actual display list items (and how to
        encode or decode them).

        * GPUProcess/GPUConnectionToWebProcess.h:

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

        Move WKWebView code related to testing to new files, with their own headers, and stop exposing test-only functions as SPI.
        https://bugs.webkit.org/show_bug.cgi?id=205021

        Reviewed by Tim Horton.
        
        Stop exposing WKWebView (WKTesting) as SPI, because everyone added SPI here by mistake, and
        internal clients kept using testing SPI.
        
        Instead, move testing-only functions to internal headers that are not present in the built framework,
        and move to WKWebView (WKPrivate) properties and functions that webkit clients rely on.
        
        Add WKWebViewTesting/WKWebViewTestingMac/WKWebViewTestingIOS for test-only code.
        
        WKWebViewTesting* headers are copied to a "WebKitTestSupport" directory in the Products directory, and WTR/DRT and TestWebKitAPI
        get header search paths to find the headers there.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _internalDoAfterNextPresentationUpdate:withoutWaitingForPainting:withoutWaitingForAnimatedResize:]):
        (-[WKWebView _prepareForImmediateActionAnimation]):
        (-[WKWebView _cancelImmediateActionAnimation]):
        (-[WKWebView _completeImmediateActionAnimation]):
        (-[WKWebView _useSystemAppearance]):
        (-[WKWebView _setUseSystemAppearance:]):
        (-[WKWebView _pageRefForTransitionToWKWebView]):
        (-[WKWebView _canChangeFrameLayout:]):
        (-[WKWebView _tryToSwipeWithEvent:ignoringPinnedState:]):
        (-[WKWebView _ignoresNonWheelEvents]):
        (-[WKWebView _setIgnoresNonWheelEvents:]):
        (-[WKWebView _hasActiveVideoForControlsManager]):
        (-[WKWebView _dismissContentRelativeChildWindows]):
        (-[WKWebView _gestureEventWasNotHandledByWebCore:]):
        (-[WKWebView _disableFrameSizeUpdates]):
        (-[WKWebView _enableFrameSizeUpdates]):
        (-[WKWebView _beginDeferringViewInWindowChanges]):
        (-[WKWebView _endDeferringViewInWindowChanges]):
        (-[WKWebView _endDeferringViewInWindowChangesSync]):
        (-[WKWebView _fullScreenPlaceholderView]):
        (-[WKWebView _fullScreenWindow]):
        (-[WKWebView _underlayColor]):
        (-[WKWebView _setUnderlayColor:]):
        (-[WKWebView _setCustomSwipeViews:]):
        (-[WKWebView _setCustomSwipeViewsTopContentInset:]):
        (-[WKWebView _setDidMoveSwipeSnapshotCallback:]):
        (-[WKWebView _setFrame:andScrollBy:]):
        (-[WKWebView _setTotalHeightOfBanners:]):
        (-[WKWebView _totalHeightOfBanners]):
        (-[WKWebView _setFont:sender:]):
        (-[WKWebView _setFontSize:sender:]):
        (-[WKWebView _setTextColor:sender:]):
        (-[WKWebView inputAccessoryView]):
        (-[WKWebView inputView]):
        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]):
        (-[WKWebView _contentVisibleRect]):
        (-[WKWebView _convertPointFromContentsToView:]):
        (-[WKWebView _convertPointFromViewToContents:]):
        (-[WKWebView didStartFormControlInteraction]):
        (-[WKWebView didEndFormControlInteraction]):
        (-[WKWebView _uiTextCaretRect]):
        (-[WKWebView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]):
        (-[WKWebView _accessibilityStoreSelection]):
        (-[WKWebView _accessibilityClearSelection]):
        (-[WKWebView _contentViewIsFirstResponder]):
        (-[WKWebView _inspector]):
        (-[WKWebView _mainFrame]):
        (-[WKWebView _isEditable]):
        (-[WKWebView _setEditable:]):
        (-[WKWebView _executeEditCommand:argument:completion:]):
        (-[WKWebView _textManipulationDelegate]):
        (-[WKWebView _setTextManipulationDelegate:]):
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]):
        (-[WKWebView _completeTextManipulation:completion:]):
        (-[WKWebView _takeFindStringFromSelection:]):
        (+[WKWebView _stringForFind]):
        (+[WKWebView _setStringForFind:]):
        (-[WKWebView _remoteObjectRegistry]):
        (-[WKWebView _handle]):
        (-[WKWebView _observedRenderingProgressEvents]):
        (-[WKWebView _historyDelegate]):
        (-[WKWebView _setHistoryDelegate:]):
        (-[WKWebView _updateMediaPlaybackControlsManager]):
        (-[WKWebView _canTogglePictureInPicture]):
        (-[WKWebView _isPictureInPictureActive]):
        (-[WKWebView _togglePictureInPicture]):
        (-[WKWebView _closeAllMediaPresentations]):
        (-[WKWebView _stopMediaCapture]):
        (-[WKWebView _stopAllMediaPlayback]):
        (-[WKWebView _suspendAllMediaPlayback]):
        (-[WKWebView _resumeAllMediaPlayback]):
        (-[WKWebView _unreachableURL]):
        (-[WKWebView _mainFrameURL]):
        (-[WKWebView _loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):
        (-[WKWebView _loadRequest:shouldOpenExternalURLs:]):
        (-[WKWebView _certificateChain]):
        (-[WKWebView _committedURL]):
        (-[WKWebView _MIMEType]):
        (-[WKWebView _userAgent]):
        (-[WKWebView _applicationNameForUserAgent]):
        (-[WKWebView _setApplicationNameForUserAgent:]):
        (-[WKWebView _customUserAgent]):
        (-[WKWebView _setCustomUserAgent:]):
        (-[WKWebView _setUserContentExtensionsEnabled:]):
        (-[WKWebView _userContentExtensionsEnabled]):
        (-[WKWebView _webProcessIdentifier]):
        (-[WKWebView _provisionalWebProcessIdentifier]):
        (-[WKWebView _killWebContentProcess]):
        (-[WKWebView _safeBrowsingWarning]):
        (-[WKWebView _reloadWithoutContentBlockers]):
        (-[WKWebView _reloadExpiredOnly]):
        (-[WKWebView _killWebContentProcessAndResetState]):
        (-[WKWebView _convertRectFromRootViewCoordinates:]):
        (-[WKWebView _convertRectToRootViewCoordinates:]):
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]):
        (-[WKWebView _focusTextInputContext:completionHandler:]):
        (-[WKWebView _takePDFSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView _setShouldSuppressFirstResponderChanges:]):
        (-[WKWebView _retainActiveFocusedState]):
        (-[WKWebView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKWebView _snapshotLayerContentsForBackForwardListItem:]):
        (-[WKWebView _dataDetectionResults]):
        (-[WKWebView _accessibilityRetrieveSpeakSelectionContent]):
        (-[WKWebView _accessibilityDidGetSpeakSelectionContent:]):
        (-[WKWebView inputAssistantItem]):
        (-[WKWebView _sessionStateData]):
        (-[WKWebView _sessionState]):
        (-[WKWebView _sessionStateWithFilter:]):
        (-[WKWebView _restoreFromSessionStateData:]):
        (-[WKWebView _restoreSessionState:andNavigate:]):
        (-[WKWebView _close]):
        (-[WKWebView _insertAttachmentWithFilename:contentType:data:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:completion:]):
        (-[WKWebView _attachmentForIdentifier:]):
        (-[WKWebView _simulateDeviceOrientationChangeWithAlpha:beta:gamma:]):
        (+[WKWebView _handlesSafeBrowsing]):
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]):
        (+[WKWebView _confirmMalwareSentinel]):
        (+[WKWebView _visitUnsafeWebsiteSentinel]):
        (-[WKWebView _isJITEnabled:]):
        (-[WKWebView _evaluateJavaScriptWithoutUserGesture:completionHandler:]):
        (-[WKWebView _updateWebsitePolicies:]):
        (-[WKWebView _allowsRemoteInspection]):
        (-[WKWebView _setAllowsRemoteInspection:]):
        (-[WKWebView _remoteInspectionNameOverride]):
        (-[WKWebView _setRemoteInspectionNameOverride:]):
        (-[WKWebView _addsVisitedLinks]):
        (-[WKWebView _setAddsVisitedLinks:]):
        (-[WKWebView _networkRequestsInProgress]):
        (layoutMilestones):
        (-[WKWebView _setObservedRenderingProgressEvents:]):
        (-[WKWebView _getMainResourceDataWithCompletionHandler:]):
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView _getContentsAsStringWithCompletionHandler:]):
        (-[WKWebView _getContentsAsAttributedStringWithCompletionHandler:]):
        (-[WKWebView _getApplicationManifestWithCompletionHandler:]):
        (-[WKWebView _paginationMode]):
        (-[WKWebView _setPaginationMode:]):
        (-[WKWebView _paginationBehavesLikeColumns]):
        (-[WKWebView _setPaginationBehavesLikeColumns:]):
        (-[WKWebView _pageLength]):
        (-[WKWebView _setPageLength:]):
        (-[WKWebView _gapBetweenPages]):
        (-[WKWebView _setGapBetweenPages:]):
        (-[WKWebView _paginationLineGridEnabled]):
        (-[WKWebView _setPaginationLineGridEnabled:]):
        (-[WKWebView _pageCount]):
        (-[WKWebView _supportsTextZoom]):
        (-[WKWebView _textZoomFactor]):
        (-[WKWebView _setTextZoomFactor:]):
        (-[WKWebView setPageZoom:]):
        (-[WKWebView pageZoom]):
        (-[WKWebView _pageZoomFactor]):
        (-[WKWebView _setPageZoomFactor:]):
        (-[WKWebView _diagnosticLoggingDelegate]):
        (-[WKWebView _setDiagnosticLoggingDelegate:]):
        (-[WKWebView _findDelegate]):
        (-[WKWebView _setFindDelegate:]):
        (toFindOptions):
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        (-[WKWebView _saveBackForwardSnapshotForItem:]):
        (-[WKWebView _inputDelegate]):
        (-[WKWebView _setInputDelegate:]):
        (-[WKWebView _isDisplayingStandaloneImageDocument]):
        (-[WKWebView _isDisplayingStandaloneMediaDocument]):
        (-[WKWebView _isPlayingAudio]):
        (-[WKWebView _isShowingNavigationGestureSnapshot]):
        (-[WKWebView _layoutMode]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _fixedLayoutSize]):
        (-[WKWebView _setFixedLayoutSize:]):
        (-[WKWebView _setBackgroundExtendsBeyondPage:]):
        (-[WKWebView _backgroundExtendsBeyondPage]):
        (-[WKWebView _viewScale]):
        (-[WKWebView _setViewScale:]):
        (-[WKWebView _setMinimumEffectiveDeviceWidth:]):
        (-[WKWebView _minimumEffectiveDeviceWidth]):
        (-[WKWebView _setScrollPerformanceDataCollectionEnabled:]):
        (-[WKWebView _scrollPerformanceDataCollectionEnabled]):
        (-[WKWebView _scrollPerformanceData]):
        (-[WKWebView _allowsMediaDocumentInlinePlayback]):
        (-[WKWebView _setAllowsMediaDocumentInlinePlayback:]):
        (-[WKWebView _webProcessIsResponsive]):
        (-[WKWebView _setFullscreenDelegate:]):
        (-[WKWebView _fullscreenDelegate]):
        (-[WKWebView _isInFullscreen]):
        (-[WKWebView _mediaCaptureState]):
        (-[WKWebView _setMediaCaptureEnabled:]):
        (-[WKWebView _mediaCaptureEnabled]):
        (-[WKWebView _setPageMuted:]):
        (-[WKWebView _removeDataDetectedLinks:]):
        (-[WKWebView _doAfterNextPresentationUpdate:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForPainting:]):
        (-[WKWebView _doAfterNextStablePresentationUpdate:]):
        (-[WKWebView _detectDataWithTypes:completionHandler:]):
        (-[WKWebView removeFromSuperview]):
        (-[WKWebView _minimumLayoutSizeOverride]):
        (-[WKWebView _setViewLayoutSizeOverride:]):
        (-[WKWebView _obscuredInsets]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _obscuredInsetEdgesAffectedBySafeArea]):
        (-[WKWebView _setObscuredInsetEdgesAffectedBySafeArea:]):
        (-[WKWebView _unobscuredSafeAreaInsets]):
        (-[WKWebView _setUnobscuredSafeAreaInsets:]):
        (-[WKWebView _safeAreaShouldAffectObscuredInsets]):
        (-[WKWebView _setInterfaceOrientationOverride:]):
        (-[WKWebView _interfaceOrientationOverride]):
        (-[WKWebView _clearInterfaceOrientationOverride]):
        (-[WKWebView _maximumUnobscuredSizeOverride]):
        (-[WKWebView _setMaximumUnobscuredSizeOverride:]):
        (-[WKWebView _setAllowsViewportShrinkToFit:]):
        (-[WKWebView _allowsViewportShrinkToFit]):
        (-[WKWebView _beginInteractiveObscuredInsetsChange]):
        (-[WKWebView _endInteractiveObscuredInsetsChange]):
        (-[WKWebView _hideContentUntilNextUpdate]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]):
        (-[WKWebView _setOverlaidAccessoryViewsInset:]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _clearOverrideLayoutParameters]):
        (viewportArgumentsFromDictionary):
        (-[WKWebView _overrideViewportWithArguments:]):
        (-[WKWebView _viewForFindUI]):
        (-[WKWebView _isDisplayingPDF]):
        (-[WKWebView _dataForDisplayedPDF]):
        (-[WKWebView _suggestedFilenameForDisplayedPDF]):
        (-[WKWebView _webViewPrintFormatter]):
        (toUserInterfaceLayoutDirection):
        (-[WKWebView setSemanticContentAttribute:]):
        (-[WKWebView _drawsBackground]):
        (-[WKWebView _setDrawsBackground:]):
        (-[WKWebView _backgroundColor]):
        (-[WKWebView _setBackgroundColor:]):
        (-[WKWebView _setDrawsTransparentBackground:]):
        (-[WKWebView _inspectorAttachmentView]):
        (-[WKWebView _setInspectorAttachmentView:]):
        (-[WKWebView _setOverlayScrollbarStyle:]):
        (-[WKWebView _overlayScrollbarStyle]):
        (-[WKWebView _windowOcclusionDetectionEnabled]):
        (-[WKWebView _setWindowOcclusionDetectionEnabled:]):
        (-[WKWebView shareSheetDidDismiss:]):
        (-[WKWebView _setOverrideDeviceScaleFactor:]):
        (-[WKWebView _overrideDeviceScaleFactor]):
        (-[WKWebView _setTopContentInset:]):
        (-[WKWebView _topContentInset]):
        (-[WKWebView _pageExtendedBackgroundColor]):
        (-[WKWebView _pinnedState]):
        (-[WKWebView _rubberBandingEnabled]):
        (-[WKWebView _setRubberBandingEnabled:]):
        (-[WKWebView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
        (-[WKWebView _setAutomaticallyAdjustsContentInsets:]):
        (-[WKWebView _automaticallyAdjustsContentInsets]):
        (-[WKWebView _minimumLayoutWidth]):
        (-[WKWebView _setMinimumLayoutWidth:]):
        (-[WKWebView _shouldExpandContentToViewHeightForAutoLayout]):
        (-[WKWebView _setShouldExpandContentToViewHeightForAutoLayout:]):
        (-[WKWebView _alwaysShowsHorizontalScroller]):
        (-[WKWebView _setAlwaysShowsHorizontalScroller:]):
        (-[WKWebView _alwaysShowsVerticalScroller]):
        (-[WKWebView _setAlwaysShowsVerticalScroller:]):
        (-[WKWebView _printOperationWithPrintInfo:]):
        (-[WKWebView _printOperationWithPrintInfo:forFrame:]):
        (-[WKWebView setUserInterfaceLayoutDirection:]):
        (-[WKWebView _wantsMediaPlaybackControlsView]):
        (-[WKWebView _setWantsMediaPlaybackControlsView:]):
        (-[WKWebView _mediaPlaybackControlsView]):
        (-[WKWebView _addMediaPlaybackControlsView:]):
        (-[WKWebView _removeMediaPlaybackControlsView]):
        (-[WKWebView _prepareForMoveToWindow:completionHandler:]):
        (-[WKWebView _setThumbnailView:]):
        (-[WKWebView _thumbnailView]):
        (-[WKWebView _setIgnoresAllEvents:]):
        (-[WKWebView _ignoresAllEvents]):
        (-[WKWebView _spellCheckerDocumentTag]):
        (-[WKWebView _setContinuousSpellCheckingEnabledForTesting:]): Deleted.
        (-[WKWebView _contentsOfUserInterfaceItem:]): Deleted.
        (-[WKWebView keyboardAccessoryBarNext]): Deleted.
        (-[WKWebView keyboardAccessoryBarPrevious]): Deleted.
        (-[WKWebView applyAutocorrection:toString:withCompletionHandler:]): Deleted.
        (-[WKWebView dismissFormAccessoryView]): Deleted.
        (-[WKWebView _dismissFilePicker]): Deleted.
        (-[WKWebView setTimePickerValueToHour:minute:]): Deleted.
        (-[WKWebView selectFormAccessoryPickerRow:]): Deleted.
        (-[WKWebView selectFormPopoverTitle]): Deleted.
        (-[WKWebView textContentTypeForTesting]): Deleted.
        (-[WKWebView formInputLabel]): Deleted.
        (-[WKWebView _didShowContextMenu]): Deleted.
        (-[WKWebView _didDismissContextMenu]): Deleted.
        (-[WKWebView _inputViewBounds]): Deleted.
        (-[WKWebView _uiTextSelectionRects]): Deleted.
        (-[WKWebView _scrollingTreeAsText]): Deleted.
        (-[WKWebView _stableStateOverride]): Deleted.
        (-[WKWebView _propertiesOfLayerWithID:]): Deleted.
        (-[WKWebView _doAfterResettingSingleTapGesture:]): Deleted.
        (-[WKWebView _doAfterReceivingEditDragSnapshotForTesting:]): Deleted.
        (-[WKWebView _requestControlledElementID]): Deleted.
        (-[WKWebView _handleControlledElementIDResponse:]): Deleted.
        (-[WKWebView _handleAcceptedCandidate:]): Deleted.
        (-[WKWebView _didHandleAcceptedCandidate]): Deleted.
        (-[WKWebView _didUpdateCandidateListVisibility:]): Deleted.
        (-[WKWebView _forceRequestCandidates]): Deleted.
        (-[WKWebView _shouldRequestCandidates]): Deleted.
        (-[WKWebView _insertText:replacementRange:]): Deleted.
        (-[WKWebView _candidateRect]): Deleted.
        (-[WKWebView viewDidChangeEffectiveAppearance]): Deleted.
        (-[WKWebView _setHeaderBannerHeight:]): Deleted.
        (-[WKWebView _setFooterBannerHeight:]): Deleted.
        (-[WKWebView _doAfterProcessingAllPendingMouseEvents:]): Deleted.
        (-[WKWebView _activeMenu]): Deleted.
        (-[WKWebView _requestActiveNowPlayingSessionInfo:]): Deleted.
        (-[WKWebView _setPageScale:withOrigin:]): Deleted.
        (-[WKWebView _pageScale]): Deleted.
        (-[WKWebView _scrollingUpdatesDisabledForTesting]): Deleted.
        (-[WKWebView _setScrollingUpdatesDisabledForTesting:]): Deleted.
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForAnimatedResizeForTesting:]): Deleted.
        (-[WKWebView _doAfterNextVisibleContentRectUpdate:]): Deleted.
        (-[WKWebView _disableBackForwardSnapshotVolatilityForTesting]): Deleted.
        (-[WKWebView _dragCaretRect]): Deleted.
        (-[WKWebView _simulateLongPressActionAtLocation:]): Deleted.
        (-[WKWebView _simulateTextEntered:]): Deleted.
        (-[WKWebView _dynamicUserInterfaceTraitDidChange]): Deleted.
        (-[WKWebView _beginBackSwipeForTesting]): Deleted.
        (-[WKWebView _completeBackSwipeForTesting]): Deleted.
        (-[WKWebView _setDefersLoadingForTesting:]): Deleted.
        (-[WKWebView _setShareSheetCompletesImmediatelyWithResolutionForTesting:]): Deleted.
        (-[WKWebView _hasInspectorFrontend]): Deleted.
        (-[WKWebView _processWillSuspendImminentlyForTesting]): Deleted.
        (-[WKWebView _processDidResumeForTesting]): Deleted.
        (-[WKWebView _setAssertionStateForTesting:]): Deleted.
        (-[WKWebView _hasServiceWorkerBackgroundActivityForTesting]): Deleted.
        (-[WKWebView _hasServiceWorkerForegroundActivityForTesting]): Deleted.
        (-[WKWebView _denyNextUserMediaRequest]): Deleted.
        (-[WKWebView _triggerSystemPreviewActionOnElement:document:page:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.h: Added.
        * UIProcess/API/Cocoa/WKWebViewTesting.mm: Added.
        (-[WKWebView _setPageScale:withOrigin:]):
        (-[WKWebView _pageScale]):
        (-[WKWebView _setContinuousSpellCheckingEnabledForTesting:]):
        (-[WKWebView _contentsOfUserInterfaceItem:]):
        (-[WKWebView _requestActiveNowPlayingSessionInfo:]):
        (-[WKWebView _scrollingUpdatesDisabledForTesting]):
        (-[WKWebView _setScrollingUpdatesDisabledForTesting:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForAnimatedResizeForTesting:]):
        (-[WKWebView _doAfterNextVisibleContentRectUpdate:]):
        (-[WKWebView _disableBackForwardSnapshotVolatilityForTesting]):
        (-[WKWebView _beginBackSwipeForTesting]):
        (-[WKWebView _completeBackSwipeForTesting]):
        (-[WKWebView _setDefersLoadingForTesting:]):
        (-[WKWebView _setShareSheetCompletesImmediatelyWithResolutionForTesting:]):
        (-[WKWebView _hasInspectorFrontend]):
        (-[WKWebView _processWillSuspendImminentlyForTesting]):
        (-[WKWebView _processDidResumeForTesting]):
        (-[WKWebView _setAssertionStateForTesting:]):
        (-[WKWebView _hasServiceWorkerBackgroundActivityForTesting]):
        (-[WKWebView _hasServiceWorkerForegroundActivityForTesting]):
        (-[WKWebView _denyNextUserMediaRequest]):
        * UIProcess/API/ios/WKWebViewTestingIOS.h: Added.
        * UIProcess/API/ios/WKWebViewTestingIOS.mm: Added.
        (-[WKWebView keyboardAccessoryBarNext]):
        (-[WKWebView keyboardAccessoryBarPrevious]):
        (-[WKWebView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKWebView dismissFormAccessoryView]):
        (-[WKWebView _dismissFilePicker]):
        (-[WKWebView setTimePickerValueToHour:minute:]):
        (-[WKWebView selectFormAccessoryPickerRow:]):
        (-[WKWebView selectFormPopoverTitle]):
        (-[WKWebView textContentTypeForTesting]):
        (-[WKWebView formInputLabel]):
        (-[WKWebView _didShowContextMenu]):
        (-[WKWebView _didDismissContextMenu]):
        (-[WKWebView _inputViewBounds]):
        (-[WKWebView _uiTextSelectionRects]):
        (-[WKWebView _scrollingTreeAsText]):
        (-[WKWebView _stableStateOverride]):
        (-[WKWebView _propertiesOfLayerWithID:]):
        (-[WKWebView _doAfterResettingSingleTapGesture:]):
        (-[WKWebView _doAfterReceivingEditDragSnapshotForTesting:]):
        (-[WKWebView _dragCaretRect]):
        (-[WKWebView _simulateLongPressActionAtLocation:]):
        (-[WKWebView _simulateTextEntered:]):
        (-[WKWebView _dynamicUserInterfaceTraitDidChange]):
        (-[WKWebView _triggerSystemPreviewActionOnElement:document:page:]):
        * UIProcess/API/mac/WKWebViewTestingMac.h: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm.
        * UIProcess/API/mac/WKWebViewTestingMac.mm: Added.
        (-[WKWebView _requestControlledElementID]):
        (-[WKWebView _handleControlledElementIDResponse:]):
        (-[WKWebView _handleAcceptedCandidate:]):
        (-[WKWebView _didHandleAcceptedCandidate]):
        (-[WKWebView _didUpdateCandidateListVisibility:]):
        (-[WKWebView _forceRequestCandidates]):
        (-[WKWebView _shouldRequestCandidates]):
        (-[WKWebView _insertText:replacementRange:]):
        (-[WKWebView _candidateRect]):
        (-[WKWebView viewDidChangeEffectiveAppearance]):
        (-[WKWebView _setHeaderBannerHeight:]):
        (-[WKWebView _setFooterBannerHeight:]):
        (-[WKWebView _doAfterProcessingAllPendingMouseEvents:]):
        (-[WKWebView _activeMenu]):
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKMouseGestureRecognizer.h:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        * UIProcess/mac/PageClientImplMac.mm:
        * UIProcess/mac/WKFullScreenWindowController.h:
        * WebKit.xcodeproj/project.pbxproj:

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

        Unreviewed iOS build fix after r253343.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

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

        [WebAuthn] Implement dummy _WKWebAuthenticationPanel SPIs for CTAP PIN support
        https://bugs.webkit.org/show_bug.cgi?id=205100
        <rdar://problem/57822953>

        Reviewed by Brent Fulgham.

        This patch implements dummy _WKWebAuthenticationPanel SPIs for CTAP PIN support.
        CTAP PIN is a way for authenticators to be able to do user verification by asking
        clients/users for a pre-set PIN. Here is the spec:
        https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html#authenticatorClientPIN
        In order to support this, WebKit needs to interacts with UIClients to ask users
        to enter the PINs. Therefore, a new set of SPI is needed.

        Here is the proposed SPI for WebKit to ask Safari for the PIN:
        @protocol _WKWebAuthenticationPanelDelegate <NSObject>
        @optional
        ...
        - (void)panel:(_WKWebAuthenticationPanel *)panel requestPINWithRetries:(NSUInteger)retries completionHandler:(void (^)(NSData *))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
        ...
        @end

        Retries is the number of retires before the authenticator getting blocked, which
        is a state that only factory reset can save the authenticator. UIClients can have
        a threshold and WARN users loudly when the threshold is reached.
        A byte array that is less than or equal to 63 bytes is expected to return to the
        passed completion handler. Otherwise, the completion handler will bail out.

        For error handling:
        typedef NS_ENUM(NSInteger, _WKWebAuthenticationPanelUpdate) {
            ...
            _WKWebAuthenticationPanelUpdatePINBlocked,
            _WKWebAuthenticationPanelUpdatePINAuthBlocked,
            _WKWebAuthenticationPanelUpdatePINInvalid,
        } WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));

        The above three error will be passed to UIClients via updateWebAuthenticationPanel SPI.
        _WKWebAuthenticationPanelUpdatePINBlocked means the authenticator is dead. A factory
        reset is needed.
        _WKWebAuthenticationPanelUpdatePINAuthBlocked means 3 consecutive mismatches. The
        authenticator will need to be reconnected.
        _WKWebAuthenticationPanelUpdatePINInvalid means a wrong PIN is provided. This will
        often be followed with another requestPINWithRetries delegate call.
        Here is the spec for the error:
        https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html#using-pinToken-in-authenticatorMakeCredential.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:

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

        [macOS] Issue load sooner on swipe back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=205087

        Reviewed by Tim Horton.

        Issue load sooner on swipe back/forward navigation on macOS. We were waiting until the end of
        the swipe animation to issue the load. We now issue the load as soon as the user lifts the finger
        off the screen and thus commits to navigating. This results in improved perceived performance
        when swiping back/forward to navigate.

        This patch does not take care of iOS because the ViewGestureController logic is different on that
        platform. There is no reason we shouldn't be able to do the same optimization on iOS too though.

        To achieve the behavior change on macOS, the following was done:
        - Issue the load in ViewGestureController::willEndSwipeGesture() instead of
          ViewGestureController::endSwipeGesture().
        - Add a new SnapshotRemovalTracker::Event::SwipeAnimationEnd event and wait for this event before
          taking away the snapshot. This makes sure we do not take away the swipe snapshot until the swipe
          animation is actually over (now that we start the navigation during the animation, instead of
          after).
        - To make sure that layer being swiped away stays the same until the end of the animation, I added
          a new SwipeAnimation reason for freezing the layer tree. At the beginning of the animation, the
          UIProcess sends a FreezeLayerTreeDueToSwipeAnimation IPC to the WebProcess to add this layer tree
          freeze reason. At the end of the animation, the UIProcess sends the UnfreezeLayerTreeDueToSwipeAnimation
          IPC to remove this freeze reason. Without this change, the layer being swiped away would sometimes
          start showing the destination site being loaded before the end of the animation. On cross-process
          navigation, not freezing the layer tree would cause the swipe animation to get interrupted when
          we have something to paint in the new process before the end of the swipe animation.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::initializeWebPage):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::eventsDescription):
        (WebKit::ViewGestureController::willEndSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/ViewGestureController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::commitProvisionalPage):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isLayerTreeFrozenDueToSwipeAnimation const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::freezeLayerTreeDueToSwipeAnimation):
        (WebKit::WebPage::unfreezeLayerTreeDueToSwipeAnimation):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-12-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Fix MSVC warning C4701: potentially uninitialized local variable 'x' used
        https://bugs.webkit.org/show_bug.cgi?id=205052

        Reviewed by Don Olmstead.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveAllButCookiesFor const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::hasStatisticsExpired const):
        Zero-initialized local variables.

2019-12-10  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Calls to the device motion API should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=204770

        Reviewed by Brent Fulgham.

        The class WebDeviceOrientationUpdateProviderProxy will handle messages to start and stop updating device motion
        in the UI process. Also, add a message to update the device motion in the WebContent process. In the UI process,
        the device motion API is called through the already existing WebCoreMotionManager class.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * UIProcess/ios/WebDeviceOrientationUpdateProviderProxy.h:
        * UIProcess/ios/WebDeviceOrientationUpdateProviderProxy.messages.in:
        * UIProcess/ios/WebDeviceOrientationUpdateProviderProxy.mm:
        (WebKit::WebDeviceOrientationUpdateProviderProxy::startUpdatingDeviceMotion):
        (WebKit::WebDeviceOrientationUpdateProviderProxy::stopUpdatingDeviceMotion):
        (WebKit::WebDeviceOrientationUpdateProviderProxy::motionChanged):
        * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.cpp:
        (WebKit::WebDeviceOrientationUpdateProvider::startUpdatingDeviceOrientation):
        (WebKit::WebDeviceOrientationUpdateProvider::stopUpdatingDeviceOrientation):
        (WebKit::WebDeviceOrientationUpdateProvider::startUpdatingDeviceMotion):
        (WebKit::WebDeviceOrientationUpdateProvider::stopUpdatingDeviceMotion):
        (WebKit::WebDeviceOrientationUpdateProvider::deviceOrientationChanged):
        (WebKit::WebDeviceOrientationUpdateProvider::deviceMotionChanged):
        (WebKit::WebDeviceOrientationUpdateProvider::startUpdating): Deleted.
        (WebKit::WebDeviceOrientationUpdateProvider::stopUpdating): Deleted.
        * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.h:
        * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.messages.in:

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

        Unreviewed, drop debug assertion in InspectorTargetProxy::didCommitProvisionalTarget() that is hitting after r253337

        r253337 causes the ProvisionalPageProxy to get destroyed a little bit early, before didCommitProvisionalTarget()
        is called. didCommitProvisionalTarget() had an assertion that isProvisional() returns true, which merely checked
        that the ProvisionalPageProxy is still alive before nulling out its WeakPtr.

        * UIProcess/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::didCommitProvisionalTarget):

2019-12-10  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Deny mach lookup access to network extension services in the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=203929

        Reviewed by Brent Fulgham.

        Mach lookup access to network extension services in the WebContent process is only needed if
        NEFilterSource.filterRequired is true. If this is the case, issue the needed mach lookup
        sandbox extensions to the WebContent process, where they will be consumed. Eventually, all
        the content filtering code should be moved to the Networking process, but since this is a
        bigger undertaking, we can issue extensions in the meantime to strengthen the sandbox.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Leverage the fact that WebPageProxy subclasses IPC::MessageSender to simplify IPC sending code
        https://bugs.webkit.org/show_bug.cgi?id=205065

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::computeElementLayout):
        (WebKit::WebAutomationSession::selectOptionElement):
        (WebKit::WebAutomationSession::setFilesForInputFileUpload):
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::takeScreenshot):
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::load):
        (WebKit::RemoteWebInspectorProxy::sendMessageToFrontend):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::~UserMediaPermissionRequestManagerProxy):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply):
        (WebKit::WebEditCommandProxy::reapply):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::loadURL):
        (WebKit::WebFrameProxy::loadData):
        (WebKit::WebFrameProxy::stopLoading const):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::sendMessageToFrontend):
        (WebKit::WebInspectorProxy::connect):
        (WebKit::WebInspectorProxy::close):
        (WebKit::WebInspectorProxy::updateForNewPageProcess):
        (WebKit::WebInspectorProxy::setFrontendConnection):
        (WebKit::WebInspectorProxy::showConsole):
        (WebKit::WebInspectorProxy::showResources):
        (WebKit::WebInspectorProxy::showMainResourceForFrame):
        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::detach):
        (WebKit::WebInspectorProxy::togglePageProfiling):
        (WebKit::WebInspectorProxy::toggleElementSelection):
        (WebKit::WebInspectorProxy::openLocalInspectorFrontend):
        (WebKit::WebInspectorProxy::open):
        (WebKit::WebInspectorProxy::closeFrontendPageAndWindow):
        (WebKit::WebInspectorProxy::attachAvailabilityChanged):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setUIClient):
        (WebKit::WebPageProxy::setIconLoadingClient):
        (WebKit::WebPageProxy::launchProcessForReload):
        (WebKit::WebPageProxy::launchProcessWithItem):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::tryRestoreScrollPosition):
        (WebKit::WebPageProxy::setControlledByAutomation):
        (WebKit::WebPageProxy::setIndicating):
        (WebKit::WebPageProxy::setBackgroundColor):
        (WebKit::WebPageProxy::setTopContentInset):
        (WebKit::WebPageProxy::setUnderlayColor):
        (WebKit::WebPageProxy::viewWillStartLiveResize):
        (WebKit::WebPageProxy::viewWillEndLiveResize):
        (WebKit::WebPageProxy::viewDidEnterWindow):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        (WebKit::WebPageProxy::setInitialFocus):
        (WebKit::WebPageProxy::clearSelection):
        (WebKit::WebPageProxy::restoreSelectionInFocusedEditableElement):
        (WebKit::WebPageProxy::validateCommand):
        (WebKit::WebPageProxy::increaseListLevel):
        (WebKit::WebPageProxy::decreaseListLevel):
        (WebKit::WebPageProxy::changeListType):
        (WebKit::WebPageProxy::setBaseWritingDirection):
        (WebKit::WebPageProxy::setNeedsFontAttributes):
        (WebKit::WebPageProxy::scheduleFullEditorStateUpdate):
        (WebKit::WebPageProxy::selectAll):
        (WebKit::WebPageProxy::executeEditCommand):
        (WebKit::WebPageProxy::requestFontAttributesAtSelectionStart):
        (WebKit::WebPageProxy::setEditable):
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::dragEnded):
        (WebKit::WebPageProxy::didStartDrag):
        (WebKit::WebPageProxy::dragCancelled):
        (WebKit::WebPageProxy::processNextQueuedMouseEvent):
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::handleGestureEvent):
        (WebKit::WebPageProxy::handlePreventableTouchEvent):
        (WebKit::WebPageProxy::resetPotentialTapSecurityOrigin):
        (WebKit::WebPageProxy::handleUnpreventableTouchEvent):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::cancelPointer):
        (WebKit::WebPageProxy::touchWithIdentifierWasRemoved):
        (WebKit::WebPageProxy::scrollBy):
        (WebKit::WebPageProxy::centerSelectionInVisibleArea):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::setUserAgent):
        (WebKit::WebPageProxy::resumeActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::suspendActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::setCustomTextEncodingName):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::setTextZoomFactor):
        (WebKit::WebPageProxy::setPageZoomFactor):
        (WebKit::WebPageProxy::setPageAndTextZoomFactors):
        (WebKit::WebPageProxy::scalePage):
        (WebKit::WebPageProxy::scalePageInViewCoordinates):
        (WebKit::WebPageProxy::scaleView):
        (WebKit::WebPageProxy::windowScreenDidChange):
        (WebKit::WebPageProxy::accessibilitySettingsDidChange):
        (WebKit::WebPageProxy::setUseFixedLayout):
        (WebKit::WebPageProxy::setFixedLayoutSize):
        (WebKit::WebPageProxy::setAlwaysShowsHorizontalScroller):
        (WebKit::WebPageProxy::setAlwaysShowsVerticalScroller):
        (WebKit::WebPageProxy::listenForLayoutMilestones):
        (WebKit::WebPageProxy::setSuppressScrollbarAnimations):
        (WebKit::WebPageProxy::setEnableVerticalRubberBanding):
        (WebKit::WebPageProxy::setEnableHorizontalRubberBanding):
        (WebKit::WebPageProxy::setBackgroundExtendsBeyondPage):
        (WebKit::WebPageProxy::setPaginationMode):
        (WebKit::WebPageProxy::setPaginationBehavesLikeColumns):
        (WebKit::WebPageProxy::setPageLength):
        (WebKit::WebPageProxy::setGapBetweenPages):
        (WebKit::WebPageProxy::setPaginationLineGridEnabled):
        (WebKit::WebPageProxy::findStringMatches):
        (WebKit::WebPageProxy::findString):
        (WebKit::WebPageProxy::getImageForFindMatch):
        (WebKit::WebPageProxy::selectFindMatch):
        (WebKit::WebPageProxy::indicateFindMatch):
        (WebKit::WebPageProxy::hideFindUI):
        (WebKit::WebPageProxy::countStringMatches):
        (WebKit::WebPageProxy::replaceMatches):
        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld):
        (WebKit::WebPageProxy::runJavaScriptInFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getBytecodeProfile):
        (WebKit::WebPageProxy::getSamplingProfilerOutput):
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::preferencesDidChange):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::showShareSheet):
        (WebKit::WebPageProxy::setMediaVolume):
        (WebKit::WebPageProxy::setMuted):
        (WebKit::WebPageProxy::stopMediaCapture):
        (WebKit::WebPageProxy::stopAllMediaPlayback):
        (WebKit::WebPageProxy::suspendAllMediaPlayback):
        (WebKit::WebPageProxy::resumeAllMediaPlayback):
        (WebKit::WebPageProxy::handleMediaEvent):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSave):

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

        Gyroscope (DeviceMotion related) permission cannot be requested in WKWebView unless the client app sets a WKUIDelegate
        https://bugs.webkit.org/show_bug.cgi?id=203287

        Reviewed by Alex Christensen.

        Device orientation / motion events permission dialog would not be shown unless the client app
        set a WKUIDelegate on the WKWebView, even though we do not need this WKUIDelegate to show the
        prompt.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _deviceOrientationUserPermissionHandler]):
        (-[WKWebView _setDeviceOrientationUserPermissionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/Cocoa/WKOrientationAccessAlert.mm:
        (WebKit::presentOrientationAccessAlert):

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

        Unreviewed, drop bad assertion in PreconnectTask::willSendRedirectedRequest()

        PreconnectTask::willSendRedirectedRequest() may get called in case of HSTS redirect,
        so the ASSERT_NOT_REACHED() is wrong.

        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::willSendRedirectedRequest):

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

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

        '<rdar://problem/57771300> REGRESSION (253212): Safari does
        not load local html file, base system Safari does not load
        RecoveryInformation.html' (Requested by nham on #webkit).

        Reverted changeset:

        "Drop support for NSURLCache callbacks in NetworkProcess"
        https://bugs.webkit.org/show_bug.cgi?id=203344
        https://trac.webkit.org/changeset/253212

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

        [WK2][iOS] Visibility propagation view is not properly updated when navigating cross-process
        https://bugs.webkit.org/show_bug.cgi?id=205028

        Reviewed by Tim Horton.

        Make sure we keep the contextIDForVisibilityPropagation on the ProvisionalPageProxy / SuspendedPageProxy
        objects and update WebPageProxy::m_contextIDForVisibilityPropagation whenever we commit a provisional
        page. Also update ProvisionalPageProxy to listen for the WebPageProxy::DidCreateContextForVisibilityPropagation
        IPC so that it can update m_contextIDForVisibilityPropagation once the WebPage is created in the
        provisional WebProcess (which creates the visibility propagation view).

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::didCreateContextForVisibilityPropagation):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::contextIDForVisibilityPropagation const):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToProvisionalPage):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::swapToWebProcess): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _setupVisibilityPropagationView]):
        (-[WKContentView _removeVisibilityPropagationView]):

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

        Regression(r253277) ASSERTION FAILED: !parameters.request.httpBody() in NetworkConnectionToWebProcess::preconnectTo()
        https://bugs.webkit.org/show_bug.cgi?id=205030

        Reviewed by Antti Koivisto.

        Instead of using the full request as preconnect request, create a simple one that contains only the destination URL.
        This avoids sending a request body unnecessarily over IPC, which was the cause of the assertion.

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

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

        Make preconnectTo()'s completionHandler optional
        https://bugs.webkit.org/show_bug.cgi?id=205011

        Reviewed by Antti Koivisto.

        Make preconnectTo()'s completionHandler optional, so that the network process does not unnecessarily
        send an IPC back if the client is not interested.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):

2019-12-09  Eric Carlson  <eric.carlson@apple.com>

        Rename media in the GPU process preference
        https://bugs.webkit.org/show_bug.cgi?id=205013
        <rdar://problem/57755319>

        Reviewed by Tim Horton.

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

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

        Unreviewed, rolling out r253299.

        Casued 30+ imported/ test failures on Mac wk2

        Reverted changeset:

        "Throttling requestAnimationFrame should be controlled by
        RenderingUpdateScheduler"
        https://bugs.webkit.org/show_bug.cgi?id=204713
        https://trac.webkit.org/changeset/253299

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

        Regression(r249329) ViewGestureController::requestRenderTreeSizeNotificationIfNeeded() sometimes uses wrong webPageID for IPC
        https://bugs.webkit.org/show_bug.cgi?id=205012

        Reviewed by Tim Horton.

        * UIProcess/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::connect):
        (WebKit::InspectorTargetProxy::disconnect):
        (WebKit::InspectorTargetProxy::sendMessageToTargetBackend):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::initializeWebPage):
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        (WebKit::ProvisionalPageProxy::messageSenderConnection const):
        (WebKit::ProvisionalPageProxy::messageSenderDestinationID const):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::unsuspend):
        (WebKit::SuspendedPageProxy::close):
        (WebKit::SuspendedPageProxy::messageSenderConnection const):
        (WebKit::SuspendedPageProxy::messageSenderDestinationID const):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        Have SuspendedPageProxy & ProvisionalPageProxy subclass IPC::MessageSender so that we can call send()
        on them without having to pass in a PageIdentifier. Passing a PageIdentifier was error-prone.

        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::requestRenderTreeSizeNotificationIfNeeded):
        When there was a provisonal page proxy, we would properly send the IPC to the provisional page's process
        but would use the wrong PageIdentifier for the IPC. We would use the identifier of the committed WebPage
        instead of the one of the provisional WebPage.

2019-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Finish encoding/decoding support for DisplayList::SetState
        https://bugs.webkit.org/show_bug.cgi?id=205018

        Reviewed by Tim Horton.

        Replaces WebCore::DisplayList::ImageHandle with just WebCore::ImageHandle. See WebCore ChangeLog for more
        details.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ImageHandle>::encode):
        (IPC::ArgumentCoder<ImageHandle>::decode):
        (IPC::ArgumentCoder<DisplayList::ImageHandle>::encode): Deleted.
        (IPC::ArgumentCoder<DisplayList::ImageHandle>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:

2019-12-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Throttling requestAnimationFrame should be controlled by RenderingUpdateScheduler
        https://bugs.webkit.org/show_bug.cgi?id=204713

        Reviewed by Simon Fraser.

        Create an IPC message on the DrawingArea to send a message from the
        WebProcess to the UIProcess to setPreferredFramesPerSecond of the
        DisplayRefreshMonitor.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.messages.in:

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[WKOneShotDisplayLinkHandler setPreferredFramesPerSecond:]):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::setPreferredFramesPerSecond):
        Set the preferredFramesPerSecond of the CADisplayLink.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::setPreferredFramesPerSecond):
        Delegate the call to RemoteLayerTreeDrawingArea.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setPreferredFramesPerSecond):
        Send the IPC message from the WebProcess to the UIProcess.

2019-12-09  youenn fablet  <youenn@apple.com>

        NetworkResourceLoader should consume its sandbox extensions when starting a fetch through service worker
        https://bugs.webkit.org/show_bug.cgi?id=204883
        <rdar://problem/57568535>

        Reviewed by Alex Christensen.

        Consume sandbox extensions in network process before sending fetch task to service worker.
        This makes sure network process can send proper sandbox extensions to the service worker and it also ensures
        it will have the necessary rights to access the file if the fetch task is not handled by service worker.
        Test: http/wpt/service-workers/file-upload.html

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::consumeSandboxExtensionsIfNeeded):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::startFetch):

2019-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the macCatalyst build after r253267

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

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

        Re-disable TLS1.0 and TLS1.1 by default
        https://bugs.webkit.org/show_bug.cgi?id=204922
        <rdar://problem/57677752>

        Reviewed by Youenn Fablet.

        Covered by updated API tests.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

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

        Unreviewed, fix debug assertion for ApplePay API tests on iOS after r253277.

        Disable server preconnect if the load will be handled by the LegacyCustomProtocolManager.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):

2019-12-09  youenn fablet  <youenn@apple.com>

        Add an option to capture audio in GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205007

        Reviewed by Eric Carlson.

        Add a flag to make audio capture in GPU process.
        In WebProcess, if trying to capture through GPUProcess, send back an error since this is not implemented.

        * Shared/WebPreferences.yaml:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCaptureAudioInGPUProcessEnabled):
        (WKPreferencesGetCaptureAudioInGPUProcessEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateBoolValueForInternalDebugFeatureKey):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::createWebPage):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::initialize):
        (WebKit::UserMediaCaptureManager::AudioFactory::createAudioCaptureSource):
        * WebProcess/cocoa/UserMediaCaptureManager.h:
        (WebKit::UserMediaCaptureManager::AudioFactory::setShouldCaptureInGPUProcess):

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

        Move WebCore::Path encoders and decoders into WebCore from WebCoreArgumentCoders
        https://bugs.webkit.org/show_bug.cgi?id=204993

        Reviewed by Tim Horton.

        Remove Encoder/Decoder support for WebCore::Path.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::pathEncodeApplierFunction): Deleted.
        (IPC::ArgumentCoder<Path>::encode): Deleted.
        (IPC::ArgumentCoder<Path>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:

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

        Preconnect to server as early as possible in WebPage::LoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=204992

        Reviewed by Antti Koivisto.

        Preconnect to server as early as possible in WebPage::LoadRequest. This avoids delaying the
        connection to the server until after the policy check and is a ~1.3% progression on PLT5 on
        both macOS and iOS.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):

2019-12-08  youenn fablet  <youenn@apple.com>

        Support different resolutions for video tracks captured from UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=204945

        Reviewed by Eric Carlson.

        Change video capture in uiprocess to an experimental flag.
        Add support for remote video source cloning by sending some IPC to UIProcess and cloning the source there.
        This triggers IPC for both cloning and cloned sources but this allows to do resizing in UIProcess instead of WebProcess.
        We thus disable video capture resizing in WebProcess.

        * Shared/WebPreferences.yaml:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::start):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::stop):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::requestToEnd):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::preventSourceFromStopping):
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManagerProxy::startProducingData):
        (WebKit::UserMediaCaptureManagerProxy::stopProducingData):
        (WebKit::UserMediaCaptureManagerProxy::clone):
        (WebKit::UserMediaCaptureManagerProxy::requestToEnd):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::sourceID const):
        (WebKit::UserMediaCaptureManager::Source::settings const):
        (WebKit::UserMediaCaptureManager::Source::remoteVideoSampleAvailable):
        (WebKit::UserMediaCaptureManager::Source::requestToEnd):
        (WebKit::UserMediaCaptureManager::Source::stopBeingObserved):
        (WebKit::UserMediaCaptureManager::cloneSource):
        (WebKit::UserMediaCaptureManager::cloneVideoSource):
        (WebKit::UserMediaCaptureManager::requestToEnd):
        (WebKit::UserMediaCaptureManager::VideoFactory::setVideoCapturePageState):
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2019-12-08  youenn fablet  <youenn@apple.com>

        Tighten Mac sandbox by removing microphone access
        https://bugs.webkit.org/show_bug.cgi?id=204939

        Reviewed by Brent Fulgham.

        No change of behavior, we do audio capture in UIProcess.

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

2019-12-08  youenn fablet  <youenn@apple.com>

        Add logging to NetworkRTCMonitor
        https://bugs.webkit.org/show_bug.cgi?id=204850
        <rdar://problem/57618773>

        Reviewed by Eric Carlson.

        Add logging and send IPC message back to WebProcess even if monitoring is stopped.
        No observable change of behavior.

        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
        (WebKit::NetworkRTCMonitor::startUpdatingIfNeeded):
        (WebKit::NetworkRTCMonitor::stopUpdating):
        (WebKit::NetworkRTCMonitor::onNetworksChanged):

2019-12-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

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

        Reviewed by Sam Weinig.

        * Shared/WebCoreArgumentCoders.h:

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

        [iOS] WKWebView touch event gesture recognition should not block the application process main thread when possible
        https://bugs.webkit.org/show_bug.cgi?id=204664
        <rdar://problem/38670692>

        Reviewed by Tim Horton.

        Adds a mechanism that allows some sync touch events on iOS to be sent asynchronously. To do this, we use the
        deferring gesture mechanism introduced in trac.webkit.org/r253005 to defer all gestures under WKContentView (and
        WebKit-owned scroll views) when a touch starts, such that they will not recognize until we know that the page
        has either prevented default or not (assuming that the touch was over an active listener). See below for more
        details.

        Tests: fast/events/touch/ios/prevent-default-on-touch-start-with-slow-event-listener.html
               fast/events/touch/ios/scroll-on-touch-start-with-slow-event-listener.html

        * UIProcess/GenericCallback.h:
        * UIProcess/PageClient.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (-[WKChildScrollView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
        (-[WKChildScrollView gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:]):

        Implement gesture recognizer delegate hooks to add dynamic failure requirements between a child scroll view's
        gestures and the new deferring gesture recognizers on WKContentView. This allows pan gestures over a scrollable
        container to hold off on recognizing while the deferring gesture recognizer has not failed yet.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handlePreventableTouchEvent):
        (WebKit::WebPageProxy::handleUnpreventableTouchEvent):

        Rename handleTouchEventSynchronously and handleTouchEventAsynchronously to handlePreventableTouchEvent and
        handleUnpreventableTouchEvent, respectively. Instead of always sending touchstart events that may prevent native
        gestures synchronously, we may now go through the same `EventDispatcher::TouchEvent` codepath used when
        dispatching touch events in passive tracking regions. However, in the case of preventable touchstarts, we
        additionally store a completion callback that is invoked after the touch event has been handled by the page; we
        then either un-defer or prevent native gestures here (depending on whether the page prevented default) by
        calling PageClient::doneDeferringNativeGestures.

        Non-touchstart events are still dispatched synchronously, to ensure that calling preventDefault() on touchmove
        and touchend continue to prevent default gestures from recognizing.

        (WebKit::WebPageProxy::boolCallback):
        (WebKit::WebPageProxy::handleTouchEventSynchronously): Deleted.
        (WebKit::WebPageProxy::handleTouchEventAsynchronously): Deleted.

        See above.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isHandlingPreventableTouchStart const):

        This is used in WKContentView to determine whether deferring gestures need to remain active after the touch
        ends. See below for more detail.

        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::doneDeferringNativeGestures):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[UIGestureRecognizer _wk_cancel]):
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):

        Add and remove the new deferring gesture recognizers here.

        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _webTouchEvent:preventsNativeGestures:]):
        (-[WKContentView _doneDeferringNativeGestures:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView ensurePositionInformationIsUpToDate:]):

        Drive-by fix: add a missing hasRunningProcess check that causes a flaky assertion under
        `AuxiliaryProcessProxy::connection()` in layout tests.

        (-[WKContentView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:]):

        Add dynamic failure requirements between WKContentView's gestures (including all text interaction, context menu,
        and drag and drop gestures) and the new deferring gesture recognizers.

        (-[WKContentView _didStartProvisionalLoadForMainFrame]):

        Force the two-finger double tap gesture recognizer to reset when loading a new page. Without this, the layout
        test fast/events/ios/click-event-while-editing-node.html will rarely fail when run after a test that dispatches
        a two-finger tap, such as fast/events/ios/click-event-two-finger-single-tap-meta-key.html. This is because the
        new deferring gestures will temporarily unite multi-finger tap gestures with one-finger double tap gestures in
        the same subgraph when performing a tap gesture with more than one finger. This means that there's a 300 ms
        delay before a normal single tap can be recognized again, which (without forcing the two-finger double tap to
        reset) would cause a subsequent test that loads in under 300 ms and attempts to send a tap to fail.

        (-[WKContentView deferringGestureRecognizer:shouldDeferGesturesAfterBeginningTouchesWithEvent:]):

        Avoid deferring native gestures if the scroll view is decelerating; this matches behavior of the web touch event
        gesture recognizer.

        (-[WKContentView deferringGestureRecognizer:shouldDeferGesturesAfterEndingTouchesWithEvent:]):

        Normally, after -touchesEnded:withEvent:, we stop deferring native gesture recognizers by failing the deferring
        gestures. However, if we're still waiting for a response from the web process, then let
        -_doneDeferringNativeGestures: handle this instead.

        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):
        (-[WKContentView deferringGestureRecognizer:shouldDeferGesturesWithEvent:]): Deleted.

        Renamed to -shouldDeferGesturesAfterBeginningTouchesWithEvent:.

        * UIProcess/ios/WKDeferringGestureRecognizer.h:
        * UIProcess/ios/WKDeferringGestureRecognizer.mm:
        (-[WKDeferringGestureRecognizer touchesBegan:withEvent:]):
        (-[WKDeferringGestureRecognizer touchesEnded:withEvent:]):

        Override this and add a new delegate hook to determine whether we want the deferring gesture recognizer to
        immediately fail when touches end. It's important to override this and transition to failure state in this case,
        since not doing so could mean that the deferring gestures stay in Possible state forever; this may lead to the
        gesture subgraph containing these deferring gestures being unable to reset, since it's waiting for the deferring
        gesture to either fail or end.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
        (-[WKScrollView gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:]):

        Defer more scroll view gestures.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::touchEvent):

        Add an optional CallbackID parameter to this IPC message. If a callback ID is given, then we avoid coalescing
        the touch event. To implement this, we additionally refactor the queued touch events map to contain lists of
        <WebTouchEvent, Optional<CallbackID>> pairs; if a queued touch event has a corresponding CallbackID, then we
        fire the callback corresponding to the ID, indicating whether the touch event was handled by the page.

        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dispatchAsynchronousTouchEvents):

2019-12-07  David Quesada  <david_quesada@apple.com>

        REGRESSION(r253231): Debug assertion failures under ~WebDeviceOrientationUpdateProvider(Proxy)
        https://bugs.webkit.org/show_bug.cgi?id=204977
        rdar://problem/57724251

        Reviewed by Per Arne Vollan.

        In the UI process, have the WebPageProxy swap out its WebDeviceOrientationUpdateProviderProxy whenever
        it connects to a new process, instead of creating one on construction and holding onto it for the rest
        of the WebPageProxy lifetime. The …UpdateProviderProxy assumes that its page will have the same ID
        at the time of registering as a message receiver and later unregistering, but the page ID could change
        if the WebPageProxy swaps web processes. Using a new instance per web page ID ensures that the
        updater is always able to successfully remove itself as a message receiver when deallocating.

        In the Web process, ~WebDeviceOrientationUpdateProvider() should remove itself as a message receiver
        specifically for its page ID, rather than as a global message receiver.

        No new tests -- existing tests (at least the ProcessSwap API tests) revealed the regression.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_tryCloseTimeoutTimer):
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::resetState):
        (WebKit::m_webDeviceOrientationUpdateProviderProxy): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebDeviceOrientationUpdateProviderProxy.h:
        * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.cpp:
        (WebKit::WebDeviceOrientationUpdateProvider::WebDeviceOrientationUpdateProvider):
        (WebKit::WebDeviceOrientationUpdateProvider::~WebDeviceOrientationUpdateProvider):
        * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.h:

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

        Implement encoding for DrawImage and DrawRoundedRect display list items
        https://bugs.webkit.org/show_bug.cgi?id=204881

        Reviewed by Simon Fraser.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DisplayList::ImageHandle>::encode):
        (IPC::ArgumentCoder<DisplayList::ImageHandle>::decode):
        * Shared/WebCoreArgumentCoders.h:

2019-12-06  Commit Queue  <commit-queue@webkit.org>

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

        Broke the build (Requested by ap on #webkit).

        Reverted changeset:

        "Remove various .order files."
        https://bugs.webkit.org/show_bug.cgi?id=204959
        https://trac.webkit.org/changeset/253218

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

        [IPC] MESSAGE_CHECK() parameters for AddPlugInAutoStartOriginHash / PlugInDidReceiveUserInteraction IPCs
        https://bugs.webkit.org/show_bug.cgi?id=204962

        Reviewed by Ryosuke Niwa.

        MESSAGE_CHECK() parameters for AddPlugInAutoStartOriginHash / PlugInDidReceiveUserInteraction IPCs. Those parameters
        are used as keys in HashMaps.

        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::PlugInAutoStartProvider):
        (WebKit::PlugInAutoStartProvider::addAutoStartOriginHash):
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTableWithItemsPassingTest):
        (WebKit::PlugInAutoStartProvider::didReceiveUserInteraction):
        * UIProcess/Plugins/PlugInAutoStartProvider.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addPlugInAutoStartOriginHash):
        (WebKit::WebProcessProxy::plugInDidReceiveUserInteraction):

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

        [iOS] Calls to device orientation API should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=204720

        Reviewed by Alex Christensen.

        Add a new class, WebDeviceOrientationUpdateProviderProxy, to handle messages to start and stop updating device orientation
        in the UI process. Also, add a message to update the device orientation in the WebContent process. In the UI process, the
        device orientation API is called through the already existing WebCoreMotionManager class.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_webDeviceOrientationUpdateProviderProxy):
        (WebKit::m_resetRecentCrashCountTimer): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):

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

        Reduce timeout for page to handle beforeunload events when trying to close a page
        https://bugs.webkit.org/show_bug.cgi?id=204950
        <rdar://problem/57700419>

        Reviewed by Ryosuke Niwa.

        Reduce timeout for page to handle beforeunload events when trying to close a page. It would previously
        take up to 3 seconds to actually close a tab after the user would click on the "X" to close it. This
        is because we would wait for the page to fire and handle the beforeunload events and only give up after
        3 seconds. This patch reduces this timeout to something more reasonable from a user standpoint (500ms).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_tryCloseTimeoutTimer):
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::tryCloseTimedOut):
        (WebKit::WebPageProxy::closePage):
        (WebKit::m_resetRecentCrashCountTimer): Deleted.
        * UIProcess/WebPageProxy.h:

2019-12-06  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.test
        https://bugs.webkit.org/show_bug.cgi?id=204952

        Reviewed by Stephanie Lewis.

        Tested by test-webkitpy.

        * Scripts/webkit/messages_unittest.py: Use Python 2/3 compatible StringIO.

2019-12-06  Keith Miller  <keith_miller@apple.com>

        Remove various .order files.
        https://bugs.webkit.org/show_bug.cgi?id=204959

        Reviewed by Yusuke Suzuki.

        These files are all super out of date and likely don't do anything anymore.
        The signatures of the functions have changed thus the mangled name has changed.

        * mac/WebKit2.order: Removed.

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

        Address <https://bugs.webkit.org/show_bug.cgi?id=189222#c3>

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView valueForUndefinedKey:]): Added a newline.

2019-12-06  Benjamin Nham  <nham@apple.com>

        Drop support for NSURLCache callbacks in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=203344

        Reviewed by Alex Christensen.

        Remove the NSURLSession caching policy callback in NetworkProcess. It's no longer necessary since
        we don't use NSURLCache in NetworkProcess (https://bugs.webkit.org/show_bug.cgi?id=185990).

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:willCacheResponse:completionHandler:]): Deleted.

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

        Stop using reserveCapacity() / reserveInitialCapacity() in IPC decoders
        https://bugs.webkit.org/show_bug.cgi?id=204930
        <rdar://problem/57682737>

        Reviewed by Ryosuke Niwa.

        This is IPC hardening since the size we use to reserve the capacity is encoded over IPC
        and cannot be trusted in some cases.

        * Platform/IPC/ArgumentCoders.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Vector<RefPtr<SecurityOrigin>>>::decode):

2019-12-06  youenn fablet  <youenn@apple.com>

        Protect WebRTC network monitoring to wait forever in edge cases
        https://bugs.webkit.org/show_bug.cgi?id=204846

        Reviewed by Eric Carlson.

        We were limiting the number of IPC message sent to network process by only sending the start monitoring event for the first client.
        The issue is that, if network process crashes for instance while having not yet given the list of networks, all clients will be hanging
        waiting for the completion of network list.
        We are now sending an IPC message for every client and the network process will ignore the ones that are not useful.
        In addition, in case of network process crash, we send a signal that network list has changed to make sure clients will never hang.
        They might still fail connecting, which is ok since network process crashed.

        Test: webrtc/datachannel/gather-candidates-networkprocess-crash.html

        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
        (WebKit::NetworkRTCMonitor::startUpdatingIfNeeded):
        * NetworkProcess/webrtc/NetworkRTCMonitor.h:
        * NetworkProcess/webrtc/NetworkRTCMonitor.messages.in:
        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
        (WebKit::LibWebRTCNetwork::networkProcessCrashed):
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        (WebKit::WebRTCMonitor::StartUpdating):
        (WebKit::WebRTCMonitor::StopUpdating):
        (WebKit::WebRTCMonitor::networksChanged):
        (WebKit::WebRTCMonitor::networkProcessCrashed):
        * WebProcess/Network/webrtc/WebRTCMonitor.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):

2019-12-06  youenn fablet  <youenn@apple.com>

        Output libwebrtc logging from Network Process as release logging
        https://bugs.webkit.org/show_bug.cgi?id=204853

        Reviewed by Eric Carlson.

        This will help debugging WebRTC networking issues.
        No observable change of behavior.

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

2019-12-05  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Improve Inspectable Target Page to adapt a long title and URL
        https://bugs.webkit.org/show_bug.cgi?id=204874

        Reviewed by Fujii Hironori.

        Add some CSS atributes to make such long titles and URLs fit the width
        of a window size. Then "Inspector" button is shown at the visible area.
        No new tests, since there is no change in behavior.

        * UIProcess/socket/RemoteInspectorProtocolHandler.cpp:
        (WebKit::RemoteInspectorProtocolHandler::platformStartTask):

2019-12-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WebKit] Fix compilation warnings for MSVC
        https://bugs.webkit.org/show_bug.cgi?id=204661

        Reviewed by Don Olmstead.

        No behavior changes.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::makeDescription):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp:
        (WebKit::NetworkCache::IOChannel::IOChannel):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toDiagnosticLoggingResultType):
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didReceiveData):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerAttachmentIdentifier):

2019-12-05  Brian Burg  <bburg@apple.com>

        [Cocoa] _WKInspector uses wrong WKWebView in -setDiagnosticLoggingDelegate:
        https://bugs.webkit.org/show_bug.cgi?id=204928

        Reviewed by Timothy Hatcher.

        I feel like I've made this mistake before. To make the right thing more obvious,
        add a property named inspectorWebView that returns the Inspector WKWebView.

        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector inspectorWebView]):
        (-[_WKInspector _setDiagnosticLoggingDelegate:]):
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::inspectorPage const):

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

        Use sendWithAsyncReply() for WebPage::TryClose IPC
        https://bugs.webkit.org/show_bug.cgi?id=204926

        Reviewed by Alex Christensen.

        Use sendWithAsyncReply() for WebPage::TryClose IPC, instead of 2 separate IPCs.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::closeBrowsingContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::closePage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::tryClose):
        (WebKit::WebPage::sendClose):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-12-05  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Add fast mode for non-cookie website data deletion
        https://bugs.webkit.org/show_bug.cgi?id=204858
        <rdar://problem/57639851>

        Reviewed by Alex Christensen.

        The purpose of this change is to allow for dedicated testing of the change in
        https://trac.webkit.org/changeset/253082/webkit. Waiting seven days just isn't a good
        starting point.

        This change adds two internal flags:
        - "Live-On Testing" with a one hour timeout instead of seven days.
        - "Repro Testing" with an instant timeout (bar ITP's regular delays) instead of seven days.

        The change also makes sure that hasHadUnexpiredRecentUserInteraction() in
        ResourceLoadStatisticsDatabaseStore and ResourceLoadStatisticsMemoryStore only
        age out the user interaction timestamp if the OperatingDatesWindow is Long so
        that we don't age out timestamps early with the shorter OperatingDatesWindows.

        This change changes the default value of IsFirstPartyWebsiteDataRemovalEnabled to true.

        These internal flags should be removed once testing is complete: <rdar://problem/57673418>

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::hasHadUnexpiredRecentUserInteraction const):
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveAllButCookiesFor const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::hasStatisticsExpired const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setFirstPartyWebsiteDataRemovalMode):
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/WebPreferences.yaml:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

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

        Optimize IPC::Connection::SyncMessageState methods
        https://bugs.webkit.org/show_bug.cgi?id=204890

        Reviewed by Alex Christensen.

        Optimize IPC::Connection::SyncMessageState methods. We are seeing lock contention on some (app launch)
        benchmarks, resulting in the main thread yielding for 10ms.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState): Make constructor private since this is a singleton class.
        (IPC::Connection::ConnectionAndIncomingMessage): Add convenience dispatch() method.

        (IPC::Connection::SyncMessageState::processIncomingMessage):
        Drop the lock as early as possible, *before* calling RunLoop::main().dispatch().

        (IPC::Connection::SyncMessageState::dispatchMessages):
        Drop allowedConnection parameter and simplify the code a lot as a result. Only dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection()
        needed the pass an allowedConnection but having dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection() call dispatchMessages() was
        inefficient since it would cause us to grab the lock in dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection() to update
        m_didScheduleDispatchMessagesWorkSet, then release it, then grab the lock again in dispatchMessages() for m_messagesToDispatchWhileWaitingForSyncReply.

        (IPC::Connection::SyncMessageState::dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection):
        Grab the lock only once to update m_didScheduleDispatchMessagesWorkSet and m_messagesToDispatchWhileWaitingForSyncReply, instead of doing it in 2
        separate steps, each one taking the lock.

        (IPC::Connection::waitForMessage):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::dispatchSyncMessage):
        stop passing a null allowedConnection when calling dispatchMessages().

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

        PageConfiguration::dragClient should use a smart pointer
        https://bugs.webkit.org/show_bug.cgi?id=204816

        Reviewed by Alex Christensen.

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

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

        [IPC] Fail BackForwardItemIdentifier decoding if the decoded integer is not a valid ID
        https://bugs.webkit.org/show_bug.cgi?id=204920
        <rdar://problem/57677453>

        Reviewed by Ryosuke Niwa.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::backForwardGoToItemShared):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateBackForwardItem):

2019-12-05  Sihui Liu  <sihui_liu@apple.com>

        Move InProcessIDBServer to WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=204896

        Reviewed by Brady Eidson.

        * WebProcess/Databases/WebDatabaseProvider.h:

2019-12-05  Sihui Liu  <sihui_liu@apple.com>

        Add ThreadMessageReceiver to IPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=204908

        Reviewed by Brady Eidson.

        ThreadMesageReceiver is similar to WorkQueueMessageReceiver, but it should handle messages (dispatched from IPC 
        thread) on a specific thread, while WorkQueueMessageReceiver may handle messages on different threads.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::addThreadMessageReceiver):
        (IPC::Connection::removeThreadMessageReceiver):
        (IPC::Connection::dispatchThreadMessageReceiverMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::dispatchMessageToThreadReceiver):
        * Platform/IPC/Connection.h:
        (IPC::Connection::ThreadMessageReceiver::dispatchToThread):

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

        MESSAGE_CHECK BackForwardItemIdentifier on incoming IPC from the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=204899

        Reviewed by Ryosuke Niwa.

        MESSAGE_CHECK BackForwardItemIdentifier on incoming IPC from the WebProcess. This is important since we use this identifier
        to look up the WebBackForwardListItem in a HashMap, and looking up a bad ID could corrupt said HashMap.

        * Shared/WebBackForwardListItem.cpp:
        Make sure the WebBackForwardListItem is always constructed and destroyed on the main thread, to avoid corrupting
        the allItems() HashMap.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::backForwardGoToItemShared):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateBackForwardItem):

2019-12-05  Kate Cheney  <katherine_cheney@apple.com>

        [MSVC] WebResourceLoadStatisticsStore.h is reporting warning C4804: '/': unsafe use of type 'bool' in operation
        https://bugs.webkit.org/show_bug.cgi?id=204870

        Reviewed by Darin Adler.

        This patch converts storageAccessGranted to a char since makeString()
        does not explicitly accept bool types.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        (WebKit::ThirdPartyDataForSpecificFirstParty::toString const):

2019-12-05  Philippe Normand  <pnormand@igalia.com>

        [GLib] Display GStreamer version in about:gpu page

        Rubber-stamped by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitProtocolHandler.cpp:
        (WebKit::WebKitProtocolHandler::handleGPU):

2019-12-05  youenn fablet  <youenn@apple.com>

        inspector/page/overrideSetting-MockCaptureDevicesEnabled.html is failing after removal of internals.setMockMediaCaptureDevicesEnabled API
        https://bugs.webkit.org/show_bug.cgi?id=204849

        Reviewed by Eric Carlson.

        Synchronize the center with the preferences when the value might be updated.
        Add API to check which center is used in UIProcess.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageIsMockRealtimeMediaSourceCenterEnabled):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::UserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaPermissionRequestManagerProxy::setMockCaptureDevicesEnabledOverride):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        (WebKit::UserMediaPermissionRequestManagerProxy::setMockCaptureDevicesEnabledOverride): Deleted.

2019-12-04  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove build warnings below since r253025.
        warning: unused variable ‘iter’ [-Wunused-variable]
        warning: unused variable ‘isNewEntry’ [-Wunused-variable]

        No new tests, no new behavioral changes.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::addSessionStorageQuotaManager):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::SessionStorageQuotaManager::ensureOriginStorageQuotaManager):

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

        IPC messages may get processed out of order in some cases
        https://bugs.webkit.org/show_bug.cgi?id=204864

        Reviewed by Ryosuke Niwa.

        IPC messages may get processed out of order in some cases. Connection::SyncMessageState::dispatchMessages()
        puts messages it did not process back at the end of the queue, instead of the beginning. This means that
        messages added to the queue while Connection::SyncMessageState::dispatchMessages() was running will
        incorrectly run *before* the ones dispatchMessages() did not process.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::dispatchMessages):

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

        PageConfiguration::progressTrackerClient should use a smart pointer
        https://bugs.webkit.org/show_bug.cgi?id=204854

        Reviewed by Alex Christensen.

        * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp:
        (WebKit::WebProgressTrackerClient::progressTrackerDestroyed): Deleted.
        * WebProcess/WebCoreSupport/WebProgressTrackerClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):

2019-12-04  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build

        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb: Added.
        * WebKit.xcodeproj/project.pbxproj:

2019-12-04  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed fix for failure to create sandbox extension on macOS after r253011. This should be iOS only.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

2019-12-04  Per Arne Vollan  <pvollan@apple.com>

        [iOS] The UI process should issue mach sandbox extension to "com.apple.AGXCompilerService"
        https://bugs.webkit.org/show_bug.cgi?id=203915

        Reviewed by Brent Fulgham.

        Only a few iPad models need access to "com.apple.AGXCompilerService” in the WebContent process.
        The UI process should issue this mach extension for these iPad models.
 
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::deviceHasAGXCompilerService):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2019-12-04  Kate Cheney  <katherine_cheney@apple.com>

        Expose basic ITP data from the database for future API/SPI use
        https://bugs.webkit.org/show_bug.cgi?id=203432
        <rdar://problem/56085040>

        Reviewed John Wilander.

        Tests: http/tests/resourceLoadStatistics/user-interface-data-no-storage-access-database.html
               http/tests/resourceLoadStatistics/user-interface-data-no-storage-access.html
               http/tests/storageAccess/user-interface-data-with-storage-access-database.html
               http/tests/storageAccess/user-interface-data-with-storage-access.html

        Adds the ability to collect sorted ITP data for displaying in a
        user interface. 

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        Added new queries to the database store to check for storage access in
        the database and aggregate topFrames with the same
        subframe/subresource so easily create the struct for collecting data
        for the UI.

        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        Fixed an incorrect function name in the error message.

        (WebKit::ResourceLoadStatisticsDatabaseStore::joinSubStatisticsForSorting):
        Renamed unclear SQL variable names and added a bind parameter to
        specify whether resource is prevalent or not, which allows
        this function to be used to collect sorted ITP data
        for the UI.

        (WebKit::ResourceLoadStatisticsDatabaseStore::getFirstPartyDataForDomain const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::gatherDataForUserInterface const):

        (WebKit::buildQueryStartAndEnd):
        (WebKit::getMedianOfPrevalentResourcesWithUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getTopPrevelentResourceDaysSinceUI const):
        (WebKit::getMedianOfPrevalentResourceWithoutUserInteraction):
        (WebKit::getNumberOfPrevalentResourcesInTopResources):
        Changed sql query variable names to make them more clear and added a
        new bind parameter to allow for more general use of substatistic
        sorting query.

        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::dumpResourceLoadStatistics const):
        Combined UI data with dumpResourceLoadStatistics() data to keep the testing aspect
        of this patch simpler.

        (WebKit::ResourceLoadStatisticsDatabaseStore::resourceToString const):
        Since mostRecentUserInteractionTime changes with each test run, I
        updated the dumping to report only if it was in the last 24 hours as
        opposed to reporting an actual time.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ensureFirstPartyStatistic):
        (WebKit::getFirstPartyDataForDomain):
        (WebKit::hasBeenThirdParty):
        (WebKit::ResourceLoadStatisticsMemoryStore::gatherDataForUserInterface const):
        (WebKit::ResourceLoadStatisticsMemoryStore::dumpResourceLoadStatistics):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::gatherDataForUserInterface):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        (WebKit::FirstPartyData::toString const):
        (WebKit::FirstPartyData::operator== const):
        (WebKit::ThirdPartyData::toString const):
        (WebKit::ThirdPartyData::operator< const):
        The toString methods allow the structs to be printed for testing
        purposes. The equals methods allow the return vectors to use
        appendIfNotContains.

2019-12-04  Simon Fraser  <simon.fraser@apple.com>

        Minor RemoteLayerTree logging cleanup
        https://bugs.webkit.org/show_bug.cgi?id=204865

        Reviewed by Tim Horton.

        Have the ::description() methods return Strings like everything else does.
        Use LOG_WITH_STREAM() so we don't call description() unless the log channel is on.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::dump const):
        (WebKit::RemoteLayerTreeTransaction::description const):
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::description const):
        (WebKit::RemoteScrollingCoordinatorTransaction::dump const):
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):

2019-12-04  Louie Livon-Bemel  <llivonbemel@apple.com>

        Add exclusion rule for text manipulation SPI to exclude based on element class
        https://bugs.webkit.org/show_bug.cgi?id=204754
        <rdar://problem/57398802>

        Reviewed by Ryosuke Niwa.

        Give clients another option for adding an exclusion for text manipulation; allow them to exclude based on an
        element having a certain class.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]):
            If the rule doesn't have an attribute but does have a class name, treat it as a ClassRule exclusion.
        * UIProcess/API/Cocoa/_WKTextManipulationExclusionRule.h:
            Add an initializer for excluding based on a class name. Also add a getter for the className.
        * UIProcess/API/Cocoa/_WKTextManipulationExclusionRule.mm:
        (-[_WKTextManipulationExclusionRule initExclusion:forClass:]):
        (-[_WKTextManipulationExclusionRule className]):

2019-12-04  Kenneth Russell  <kbr@chromium.org>

        Enable WebGL's ASTC extension all the time
        https://bugs.webkit.org/show_bug.cgi?id=202836
        <rdar://problem/57627592>

        Reviewed by Dean Jackson.

        Remove the run-time flag - no longer necessary.

        * Shared/WebPreferences.yaml:

2019-12-04  youenn fablet  <youenn@apple.com>

        WebProcessPool::terminateServiceWorkerProcess should be renamed terminateServiceWorkers
        https://bugs.webkit.org/show_bug.cgi?id=204792

        Reviewed by Chris Dumez.

        Make use of disableServiceWorkers in terminateServiceWorkers as we might need to handle the case of a service worker in a process containing a page.
        Renaming API accordingly.
        Covered by existing tests.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextTerminateServiceWorkers):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _terminateServiceWorkers]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::updateServiceWorkerUserAgent):
        (WebKit::WebProcessPool::terminateNetworkProcess):
        (WebKit::WebProcessPool::terminateServiceWorkers):
        (WebKit::WebProcessPool::updateProcessAssertions):
        (WebKit::WebProcessPool::isServiceWorkerPageID const):
        * UIProcess/WebProcessPool.h:

2019-12-04  youenn fablet  <youenn@apple.com>

        Move soft update handling to network process
        https://bugs.webkit.org/show_bug.cgi?id=204678

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::swServerForSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::addSoftUpdateLoader):
        (WebKit::NetworkSession::removeSoftUpdateLoader):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        (WebKit::ServiceWorkerFetchTask::didFail):
        (WebKit::ServiceWorkerFetchTask::didNotHandle):
        (WebKit::ServiceWorkerFetchTask::continueFetchTaskWith):
        (WebKit::ServiceWorkerFetchTask::timeoutTimerFired):
        (WebKit::ServiceWorkerFetchTask::softUpdateIfNeeded):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp: Added.
        (WebKit::ServiceWorkerSoftUpdateLoader::start):
        (WebKit::ServiceWorkerSoftUpdateLoader::ServiceWorkerSoftUpdateLoader):
        (WebKit::ServiceWorkerSoftUpdateLoader::~ServiceWorkerSoftUpdateLoader):
        (WebKit::ServiceWorkerSoftUpdateLoader::fail):
        (WebKit::ServiceWorkerSoftUpdateLoader::loadWithCacheEntry):
        (WebKit::ServiceWorkerSoftUpdateLoader::loadFromNetwork):
        (WebKit::ServiceWorkerSoftUpdateLoader::willSendRedirectedRequest):
        (WebKit::ServiceWorkerSoftUpdateLoader::didReceiveResponse):
        (WebKit::ServiceWorkerSoftUpdateLoader::didReceiveBuffer):
        (WebKit::ServiceWorkerSoftUpdateLoader::didFinishLoading):
        (WebKit::ServiceWorkerSoftUpdateLoader::didFailLoading):
        (WebKit::ServiceWorkerSoftUpdateLoader::didComplete):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.h: Added.
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::createFetchTask):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2019-12-04  Tim Horton  <timothy_horton@apple.com>

        Introduce a GPU process
        https://bugs.webkit.org/show_bug.cgi?id=204343

        Reviewed by Simon Fraser.

        Add a GPU process. This process is destined to be used as a proxy between
        WebKit and the underlying graphics mechanisms; in the case of the Cocoa
        ports, it will specifically gate access to IOKit and a few media-related
        daemons.

        In this patch, the process is a UI-process singleton; the WebKit client
        application gets a single GPU process for all rendering, regardless of
        the number of Web Content processes, process pools, or web views.

        For now, it is just a shell of a process; functionality will be added
        in future patches!

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE(GPU_PROCESS).

        * Configurations/GPUService.xcconfig: Added.
        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-OSX.plist: Added.
        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-iOS.plist: Added.
        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUServiceEntryPoint.mm: Added.
        * Shared/AuxiliaryProcess.h:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        * Platform/ExtraPrivateSymbolsForTAPI.h:
        * Shared/mac/AuxiliaryProcessMac.mm:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * Configurations/WebKit.xcconfig:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        (WebKit::shouldLeakBoost):
        Add a new target for the XPC service, and do the paperwork to launch it.

        * GPUProcess/GPUConnectionToWebProcess.cpp: Added.
        * GPUProcess/GPUConnectionToWebProcess.h: Added.
        * GPUProcess/GPUConnectionToWebProcess.messages.in: Added.
        On the GPU process side, the incoming connection from the Web Content process.

        * GPUProcess/GPUProcess.cpp: Added.
        * GPUProcess/GPUProcess.h: Added.
        * GPUProcess/GPUProcess.messages.in: Added.
        * GPUProcess/GPUProcessCreationParameters.cpp: Added.
        * GPUProcess/GPUProcessCreationParameters.h: Added.
        * GPUProcess/cocoa/GPUProcessCocoa.mm: Added.
        * GPUProcess/ios/GPUProcessIOS.mm: Added.
        * GPUProcess/mac/GPUProcessMac.mm: Added.
        Add the shell of the GPU process. Mostly stolen from the Networking process.

        * UIProcess/GPU/GPUProcessProxy.cpp: Added.
        (WebKit::GPUProcessProxy::singleton):
        (WebKit::GPUProcessProxy::GPUProcessProxy):
        (WebKit::GPUProcessProxy::~GPUProcessProxy):
        (WebKit::GPUProcessProxy::getLaunchOptions):
        (WebKit::GPUProcessProxy::connectionWillOpen):
        (WebKit::GPUProcessProxy::processWillShutDown):
        (WebKit::GPUProcessProxy::getGPUProcessConnection):
        (WebKit::GPUProcessProxy::openGPUProcessConnection):
        (WebKit::GPUProcessProxy::gpuProcessCrashed):
        (WebKit::GPUProcessProxy::didReceiveMessage):
        (WebKit::GPUProcessProxy::didReceiveSyncMessage):
        (WebKit::GPUProcessProxy::didClose):
        (WebKit::GPUProcessProxy::didReceiveInvalidMessage):
        (WebKit::GPUProcessProxy::didFinishLaunching):
        (WebKit::GPUProcessProxy::updateProcessAssertion):
        * UIProcess/GPU/GPUProcessProxy.h: Added.
        * UIProcess/GPU/GPUProcessProxy.messages.in: Added.
        On the UI process side, the GPUProcessProxy is the singleton that
        owns the GPU process for the process.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in: Added.
        This sandbox profile is copied from the Web Content process.
        We will cut it down in the future, but this is a sensible starting point,
        since the code that is moving to the GPU process is code that currently
        lives in the Web Content process.
        
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updateProcessAssertion):
        Fix a logging typo I stumbled upon.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getGPUProcessConnection):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getGPUProcessConnection):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        Add a message from Web->UI to retrieve the GPU process connection.
        In the future, we should send this along with the Web Content process
        initialization message, but this mechanism doesn't exist yet.

        * WebProcess/GPU/GPUProcessConnection.cpp: Added.
        (WebKit::GPUProcessConnection::GPUProcessConnection):
        (WebKit::GPUProcessConnection::~GPUProcessConnection):
        (WebKit::GPUProcessConnection::didReceiveMessage):
        (WebKit::GPUProcessConnection::didReceiveSyncMessage):
        (WebKit::GPUProcessConnection::didClose):
        (WebKit::GPUProcessConnection::didReceiveInvalidMessage):
        * WebProcess/GPU/GPUProcessConnection.h: Added.
        (WebKit::GPUProcessConnection::create):
        (WebKit::GPUProcessConnection::connection):
        * WebProcess/GPU/GPUProcessConnection.messages.in: Added.
        * WebProcess/GPU/GPUProcessConnectionInfo.h: Added.
        (WebKit::GPUProcessConnectionInfo::identifier):
        (WebKit::GPUProcessConnectionInfo::releaseIdentifier):
        (WebKit::GPUProcessConnectionInfo::encode const):
        (WebKit::GPUProcessConnectionInfo::decode):
        In the Web Content process, GPUProcessConnection is the process-wide
        connection to the GPU process. All pages in a given Web Content process
        use the same connection to talk to the singleton GPU process.

        * WebProcess/WebProcess.cpp:
        (WebKit::getGPUProcessConnection):
        (WebKit::WebProcess::ensureGPUProcessConnection):
        (WebKit::WebProcess::gpuProcessConnectionClosed):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::existingGPUProcessConnection):
        In the Web Content process, make it possible for clients to retrieve
        the GPU process connection.

2019-12-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: allow inspector to pause provisional page load and restore its state
        https://bugs.webkit.org/show_bug.cgi?id=204170

        Reviewed by Devin Rousso.

        Provisional page loading can be deffered if inspector front-end is connected. This
        allows to configure inspector backend in the provisional page before load request
        is sent. If inspector front-end is not connected provisional loading will conitinue
        exactly as before.

        Tests: http/tests/inspector/target/pause-on-inline-debugger-statement.html
               http/tests/inspector/target/provisional-load-cancels-previous-load.html

        * UIProcess/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::disconnect):
        * UIProcess/WebPageInspectorController.cpp:
        (WebKit::WebPageInspectorController::shouldPauseLoading const):
        (WebKit::WebPageInspectorController::setContinueLoadingCallback):
        * UIProcess/WebPageInspectorController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::continueNavigationInNewProcess):

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

        Add disabled highlight API skeleton
        https://bugs.webkit.org/show_bug.cgi?id=204809

        Reviewed by Ryosuke Niwa.

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

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

        Replace customJavaScriptUserAgentAsSiteSpecificQuirks with customUserAgentAsSiteSpecificQuirks
        https://bugs.webkit.org/show_bug.cgi?id=204824

        Reviewed by Brent Fulgham.

        This patch replaces _WKWebsitePolicies's customJavaScriptUserAgentAsSiteSpecificQuirks with
        customUserAgentAsSiteSpecificQuirks and makes it apply to network requests as well as JS API.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _setCustomUserAgentAsSiteSpecificQuirks:]): Renamed from _setCustomJavaScriptUserAgentAsSiteSpecificQuirks.
        (-[WKWebpagePreferences _customUserAgentAsSiteSpecificQuirks]): Renamed from _customJavaScriptUserAgentAsSiteSpecificQuirks.
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
        (-[_WKWebsitePolicies setCustomUserAgentAsSiteSpecificQuirks:]): Renamed from setCustomJavaScriptUserAgentAsSiteSpecificQuirks.
        (-[_WKWebsitePolicies customUserAgentAsSiteSpecificQuirks]): Renamed from customJavaScriptUserAgentAsSiteSpecificQuirks.

2019-12-03  Andres Gonzalez  <andresg_22@apple.com>

        Focus tracking support in the accessibility isolatedtree.
        https://bugs.webkit.org/show_bug.cgi?id=204535

        Reviewed by Chris Fleizach.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityFocusedObject):

2019-12-03  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Delete non-cookie website data after 7 days of no user interaction
        https://bugs.webkit.org/show_bug.cgi?id=204779
        <rdar://problem/57578989>

        Reviewed by Alex Christensen.

        Trackers are continuing to move cross-site tracking IDs into first-party storage.
        This change ages out script-writable non-cookie website data in alignment with the
        7-day cap on client-side cookies.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllButCookiesFor const):
            Now makes use of the set WebCore::FirstPartyWebsiteDataRemovalMode.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveAllButCookiesFor const):
            Now makes use of the set WebCore::FirstPartyWebsiteDataRemovalMode.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::ResourceLoadStatisticsStore::setFirstPartyWebsiteDataRemovalMode):
        (WebKit::ResourceLoadStatisticsStore::firstPartyWebsiteDataRemovalMode const):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setFirstPartyWebsiteDataRemovalMode):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setFirstPartyWebsiteDataRemovalModeForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkSession::recreateResourceLoadStatisticStore):
        (WebKit::NetworkSession::forwardResourceLoadStatisticsSettings):
            New convenience function to avoid code duplication in
            NetworkSession::setResourceLoadStatisticsEnabled() and 
            NetworkSession::forwardResourceLoadStatisticsSettings().
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Scripts/webkit/messages.py:
            Makes sure the WebCore::FirstPartyWebsiteDataRemovalMode is found in WebCore/NetworkStorageSession.h.
        * Shared/WebPreferences.yaml:
            New experimental feature, off by default.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setFirstPartyWebsiteDataRemovalModeForTesting):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        [iOS] Unable to interact with the view after a back swipe until lifting the finger off the screen
        https://bugs.webkit.org/show_bug.cgi?id=204821

        Reviewed by Tim Horton.

        If you swipe back on iOS and then put your finger on the screen before the view gesture snapshot is taken down,
        your gestures will not be recognized, even after the snapshot is taken down, until after you lift your finger
        off the screen and back on. This makes MobileSafari look more unresponsive than it needs to be.

        To address the issue, disable user interactions for the snapshot view, so that interactions go through to the
        actual view underneath.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):

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

        Use a 3 second timeout for the view gesture snapshot on macOS
        https://bugs.webkit.org/show_bug.cgi?id=204818

        Reviewed by Tim Horton.

        Use a 3 second timeout for the view gesture snapshot on macOS, for consistency with iOS.
        It used to be 5 seconds on macOS.

        * UIProcess/ViewGestureController.cpp:

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

        REGRESSION (r252778): ASSERT(!m_networkLoad); in ~SpeculativeLoad()
        https://bugs.webkit.org/show_bug.cgi?id=204813
        <rdar://problem/57581082>

        Reviewed by Antti Koivisto.

        After r252778, SpeculativeLoadManager::revalidateSubresource() may delay the revalidation until we receive
        the response for the main resource. We can hit the assertion in the SpeculativeLoad destructor if a speculative
        revalidation for the SAME resource gets scheduled while we're waiting for the main resource response. When we
        eventually receive the main resource response, we would call revalidateSubresource() again, which would create
        a SpeculativeLoad and try to add it to m_pendingPreloads. Because m_pendingPreloads would already contain a
        preload for this same resource, the SpeculativeLoad would not get added to the map and it would get destroyed
        right away, before completing (thus hitting the assert). This unnecessary creation of the SpeculativeLoad is
        inefficient and it is thus best to avoid it.

        To address the issue, when we receive the response, we now make sure that m_pendingPreloads does not already
        contain a preload for this resource before calling revalidateSubresource() again, similarly to what was
        already done at the beginning of SpeculativeLoadManager::preloadEntry().

        No new tests, unknown how to reproduce.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateSubresource):

2019-12-03  Eric Carlson  <eric.carlson@apple.com>

        Add a runtime setting for media in the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=204801
        <rdar://problem/57596199>

        Reviewed by Jer Noble.

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

2019-12-03  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed assertion fix for older macOS versions after r253011.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

2019-12-03  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add a runtime flag for Web Animations composite operations
        https://bugs.webkit.org/show_bug.cgi?id=204718

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

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

        UserMediaCaptureManager should have independent capture factories
        https://bugs.webkit.org/show_bug.cgi?id=204786

        Reviewed by Eric Carlson.

        Refactor the code to make UserMediaCaptureManager have 3 different factories.
        This allows having 3 potential active sources which are used on iOS.
        We cannot test right now on iOS as audio capture in UIProcess is not yet ready.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::Source):
        (WebKit::UserMediaCaptureManager::Source::~Source):
        (WebKit::UserMediaCaptureManager::UserMediaCaptureManager):
        (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):
        (WebKit::UserMediaCaptureManager::initialize):
        (WebKit::UserMediaCaptureManager::createCaptureSource):
        (WebKit::UserMediaCaptureManager::AudioFactory::setAudioCapturePageState):
        (WebKit::UserMediaCaptureManager::VideoFactory::setVideoCapturePageState):
        (WebKit::UserMediaCaptureManager::setAudioCapturePageState): Deleted.
        (WebKit::UserMediaCaptureManager::setVideoCapturePageState): Deleted.
        * WebProcess/cocoa/UserMediaCaptureManager.h:
        (WebKit::UserMediaCaptureManager::AudioFactory::AudioFactory):
        (WebKit::UserMediaCaptureManager::VideoFactory::VideoFactory):
        (WebKit::UserMediaCaptureManager::DisplayFactory::DisplayFactory):

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

        PageConfiguration::pluginClient should use a smart pointer
        https://bugs.webkit.org/show_bug.cgi?id=204780

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebPlugInClient.cpp:
        * WebProcess/WebCoreSupport/WebPlugInClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):

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

        PageConfiguration::alternativeTextClient should use a smart pointer
        https://bugs.webkit.org/show_bug.cgi?id=204777

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
        * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp:
        (WebKit::WebAlternativeTextClient::pageDestroyed): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_overriddenMediaType):

2019-12-03  Kate Cheney  <katherine_cheney@apple.com>

        Activate the SQLite database as an on-by-default feature
        https://bugs.webkit.org/show_bug.cgi?id=204774
        <rdar://problem/56117706>

        Reviewed by Brent Fulgham.

        The flag to use the ITP Database backend should be set to true by default.
        * Shared/WebPreferences.yaml:

2019-12-03  youenn fablet  <youenn@apple.com>

        Add support for camera rotation when capturing in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=204750

        Reviewed by Eric Carlson.

        Make UserMediaCaptureManagerProxy have an OrientationNotifier.
        It is updated by each web page of the web process being notified of a device orientation change.
        Whenever a rotation happens, UIProcess sources are now notified to correctly compute the frame rotations.

        Covered by existing tests.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMockCameraOrientation):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManagerProxy::setOrientation):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setOrientationForMediaCapture):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::userMediaCaptureManagerProxy):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setDeviceOrientation):

2019-12-03  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Shorten feature flag name
        https://bugs.webkit.org/show_bug.cgi?id=204788

        Reviewed by Sam Weinig.

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

2019-12-03  youenn fablet  <youenn@apple.com>

        Expose WKWebView API to stop ongoing capture
        https://bugs.webkit.org/show_bug.cgi?id=204787

        Reviewed by Eric Carlson.

        Covered by API test.

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

2019-12-03  youenn fablet  <youenn@apple.com>

        [Cocoa] Run camera capture in UIProcess by default in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=204512

        Reviewed by Eric Carlson.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        Do not send sandbox extensions in case capture happens in UIProcess.
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::~Source):
        (WebKit::UserMediaCaptureManager::createCaptureSource):
        Register/unregister sources as active/unactive sources to the factory.

2019-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: handle elements of type file in send keys command
        https://bugs.webkit.org/show_bug.cgi?id=188514

        Reviewed by Brian Burg.

        Add setFilesForInputFileUpload method to Automation. It's like setFilesToSelectForFileUpload, but it works
        differently, so I'm keeping both to not break safaridriver. The new one simply sends the file list to the web
        process to be set on the input element, instead of saving the file list, wait for the driver to trigger the open
        panel, intercept and complete the open panel request and send a dismiss open panel event to the driver.

        * UIProcess/Automation/Automation.json: Add setFilesForInputFileUpload.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::setFilesForInputFileUpload): Send SetFilesForInputFileUpload message to the web process.
        * UIProcess/Automation/WebAutomationSession.h:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::setFilesForInputFileUpload): Create a FileList with the received paths and
        call HTMLInputElement::setFiles() on the given element.
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in: Add SetFilesForInputFileUpload message.

2019-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: most of the clear tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=180404

        Reviewed by Brian Burg.

        Update the FormElementClear atom to follow the spec.

        * UIProcess/Automation/atoms/FormElementClear.js:
        (isEditable):
        (isResettableElementEmpty):

2019-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [PSON] Tooltips from previous page shown on new page
        https://bugs.webkit.org/show_bug.cgi?id=204735

        Reviewed by Chris Dumez.

        The problem is that WebPage (in the web process) is caching the tooltip text to avoid sending IPC messages when
        the tooltip didn't change. When a new web process is used for the same web view, the tooltip text doesn't really
        change (it's always null) until a new one is set. The setToolTip message is always sent right after the
        MouseDidMoveOverElement, and they both depend on the same hit test result, so we can include the tooltip text as
        part of the WebHitTestResultData struct passed to MouseDidMoveOverElement and remove the SetToolTip
        message. Since the UI process is already caching the tooltip, we can simply notify the page client when it changes.

        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::WebHitTestResultData): Initialize toolTipText.
        (WebKit::WebHitTestResultData::encode const): Encode toolTipText.
        (WebKit::WebHitTestResultData::decode): Decode toolTipText.
        * Shared/WebHitTestResultData.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::mouseDidMoveOverElement): Call setToolTip() after notifying the UI client about the mouse move.
        (WebKit::WebPageProxy::setToolTip): Return early if tooltip didn't change.
        (WebKit::WebPageProxy::resetState): Use setToolTip() to ensure the page client is notified about the change.
        * UIProcess/WebPageProxy.messages.in: Remove SetToolTip message.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mouseDidMoveOverElement): Pass tooltip text to WebHitTestResultData constructor.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2019-12-02  Sihui Liu  <sihui_liu@apple.com>

        Cross-thread version StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=203971
        <rdar://problem/57290349>

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp: Introduce class SessionStorageQuotaManager to manage all 
        StorageQuotaManagers of the same session. 
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::addSessionStorageQuotaManager):
        (WebKit::NetworkProcess::removeSessionStorageQuotaManager):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::createIDBServer):
        (WebKit::NetworkProcess::addIndexedDatabaseSession):
        (WebKit::NetworkProcess::setSessionStorageQuotaManagerIDBRootPath):
        (WebKit::NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting):
        (WebKit::NetworkProcess::resetQuota):
        (WebKit::NetworkProcess::storageQuotaManager):
        (WebKit::NetworkProcess::initializeStorageQuota): Deleted.
        (WebKit::NetworkProcess::clearStorageQuota): Deleted.
        (): Deleted.
        (WebKit::NetworkProcess::initializeQuotaUsers): Deleted.
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::SessionStorageQuotaManager::SessionStorageQuotaManager):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::defaultQuota const):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::ensureOriginStorageQuotaManager):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::existingStorageQuotaManagers):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::cacheRootPath const):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::setIDBRootPath):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::idbRootPath const):
        (WebKit::NetworkProcess::StorageQuotaManagers::defaultQuota const): Deleted.
        (WebKit::NetworkProcess::StorageQuotaManagers::setDefaultQuotas): Deleted.
        (WebKit::NetworkProcess::StorageQuotaManagers::managersPerOrigin): Deleted.
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::getDirectorySize):
        (WebKit::CacheStorage::Engine::diskUsage): static function to get the disk usage of CacheStorage given 
        CacheStorage root directory.
        (WebKit::CacheStorage::Engine::requestSpace):
        (WebKit::CacheStorage::Engine::readCachesFromDisk):
        (WebKit::CacheStorage::Engine::writeSizeFile):
        (WebKit::CacheStorage::Engine::readSizeFile):
        (WebKit::CacheStorage::Engine::initializeQuotaUser): Deleted.
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::put):
        (WebKit::CacheStorage::Cache::remove):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::create):
        (WebKit::CacheStorage::Caches::Caches):
        (WebKit::CacheStorage::Caches::~Caches):
        (WebKit::CacheStorage::Caches::updateSizeFile):
        (WebKit::CacheStorage::Caches::initializeSize):
        (WebKit::CacheStorage::Caches::clear):
        (WebKit::CacheStorage::Caches::requestSpace):
        (WebKit::CacheStorage::Caches::writeRecord):
        (WebKit::CacheStorage::Caches::removeRecord):
        (WebKit::CacheStorage::Caches::whenInitialized): Deleted.
        (WebKit::CacheStorage::Caches::resetSpaceUsed): Deleted.
        * NetworkProcess/cache/CacheStorageEngineCaches.h:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        * Shared/WebsiteDataStoreParameters.h: Add a cacheStorageDirectory parameter so we know the direcotry of 
        CacheStorage when we start using WebsiteDataStore.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreResetQuota):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h: Add a C API for reseting quota in TestRunner.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::resetQuota):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        (WebKit::WebsiteDataStore::resetQuota):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2019-12-02  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Create sandbox extension for "com.apple.tccd"
        https://bugs.webkit.org/show_bug.cgi?id=204367
        <rdar://problem/57330176>

        Reviewed by Eric Carlson.

        When camera or microphone access has been granted by the user, have the UI process create a sandbox extension
        for "com.apple.tccd", and send it to the WebContent process. Also make sure the extension is created only once
        for each WebContent process. Add telemetry to the tccd rule in the sandbox.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::userMediaAccessWasGranted):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-12-02  Louie Livon-Bemel  <llivonbemel@apple.com>

        Add helper methods for description and equality to text manipulation SPI
        https://bugs.webkit.org/show_bug.cgi?id=204758
        <rdar://problem/57438200>

        Reviewed by Wenson Hsieh.

        I originally added some category methods to _WKTextManipulationItem and _WKTextManipulationToken within Safari
        to make working with these classes easier. However it makes more sense to just move these methods into
        the main class. One method is for checking if two instances are equal (including identifiers) and optionally
        checking if the content itself is equal. The other methods are for debug descriptions for lldb, and a
        method to get a description that preserves privacy; when logging the instance, the content of the webpage
        should be redacted.

        Tests: Tests are added as API tests.

        * UIProcess/API/Cocoa/_WKTextManipulationItem.h:
            - Assume everything is non-null unless otherwise specified.
            - Allow the identifier to be nil, but not the array of tokens.
            - Add a method to check the equality to another item, optionally including a check for the content of each
              token being equal.
            - Add a -debugDescription method that includes the content of tokens for use in lldb. This NSObject
              declaration is marked optional, so redeclare it here.
            - No need to add a -description declaration since it exists on NSObject already.
        * UIProcess/API/Cocoa/_WKTextManipulationItem.mm:
        (-[_WKTextManipulationItem isEqual:]):
            The standard NSObject equality check should call our method with equal content.
        (-[_WKTextManipulationItem isEqualToTextManipulationItem:includingContentEquality:]):
            - If the other item is nil, the identifiers aren't equal or the number of tokens are mismatched, these
              items aren't equal.
            - Just to be safe, only iterate the smaller of the token arrays so we don't crash.
            - Check if each token is equal, passing along the `includingContentEquality` parameter.
        (-[_WKTextManipulationItem description]):
            The general description should not include the webpage content.
        (-[_WKTextManipulationItem debugDescription]):
            Include the webpage content, since this is for lldb.
        (-[_WKTextManipulationItem _descriptionPreservingPrivacy:]):
            Include the standard description format, and each token on its own line. If we're including the content
            then use `token.debugDescription`.
        * UIProcess/API/Cocoa/_WKTextManipulationToken.h:
            - Also assume everything is non-null.
            - Identifier and Content can be nil.
            - Declare a -debugDescription method.
            - Declare a method to check equality, with or without the content.
        * UIProcess/API/Cocoa/_WKTextManipulationToken.mm:
        (isEqualOrBothNil):
            Helper that checks equality but considers two nil values to be equal as well.
        (-[_WKTextManipulationToken isEqual:]):
            The standard NSObject equality check should call our method with equal content.
        (-[_WKTextManipulationToken isEqualToTextManipulationToken:includingContentEquality:]):
            Check that the exclusions are equal, the identifiers are equal (considering two nils to be equal), and the
            content if necessary.
        (-[_WKTextManipulationToken description]):
        (-[_WKTextManipulationToken debugDescription]):
        (-[_WKTextManipulationToken _descriptionPreservingPrivacy:]):
            If we're preserving privacy, log the content length rather than the content string itself.

2019-12-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Introduce a gesture recognizer that can be used to defer recognition of other gestures
        https://bugs.webkit.org/show_bug.cgi?id=204748
        <rdar://problem/38670692>

        Reviewed by Tim Horton.

        Introduces WKDeferringGestureRecognizer, which is similar to UIKit's _UIRelationshipGestureRecognizer. In a
        future patch, this will be added to WKContentView to prevent platform gestures (pinching, panning, single/double
        taps, etc.) from recognizing when dispatching a preventable touch event to the page.

        Additionally renames a member variable on WKContentView, in preparation for making touch gesture recognition
        asynchronous. No new tests, since there is no change in behavior yet.

        * SourcesCocoa.txt:

        Add the new file.

        * UIProcess/ios/WKContentViewInteraction.h:

        Add a couple of (currently unused) deferring gesture recognizers. These will be added to WKContentView in a
        future patch. There are two deferring gestures here (one for "immediately resettable" gestures and another for
        gestures for which the reset is "deferred" -- i.e., multi-tap gestures); this prevents a single deferring
        gesture from connecting the entire gesture subgraph under WKWebView through failure dependencies. This would
        result in various usability issues, such as being unable to perform a pan gesture to scroll WKScrollView if a
        tap was recognized within the last 300 ms, since all gestures would need to wait until every double and triple-
        tap gesture under WKWebView has failed.

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

        Rename _canSendTouchEventsAsynchronously to _touchEventsCanPreventNativeGestures in preparation for adding a
        codepath for fully asynchronous touch event dispatch; we also flip the conditional in any places where
        _canSendTouchEventsAsynchronously was previously set or read.

        (-[WKContentView _webTouchEvent:preventsNativeGestures:]):
        (-[WKContentView scrollViewWillStartPanOrPinchGesture]):
        (-[WKContentView gestureRecognizer:shouldIgnoreWebTouchWithEvent:]):
        (-[WKContentView gestureRecognizer:isInterruptingMomentumScrollingWithEvent:]):
        (-[WKContentView deferringGestureRecognizer:shouldDeferGesturesWithEvent:]):
        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):

        Implement WKDeferringGestureRecognizerDelegate.

        (-[WKContentView shouldIgnoreWebTouch]): Deleted.

        Drive-by fix: remove this unnecessary method implementation, and the related FIXME.

        * UIProcess/ios/WKDeferringGestureRecognizer.h: Added.
        * UIProcess/ios/WKDeferringGestureRecognizer.mm: Added.
        (-[WKDeferringGestureRecognizer initWithDeferringGestureDelegate:]):
        (-[WKDeferringGestureRecognizer deferringGestureDelegate]):
        (-[WKDeferringGestureRecognizer touchesBegan:withEvent:]):

        Unless the touch is interrupts momentum scrolling, WKDeferringGestureRecognizer should transition to Possible
        state when starting a touch. Later, -setDefaultPrevented: is invoked, which will either transition the deferring
        gesture recognizer to Failed state (thereby allowing native gestures to begin), or Ended state (preventing other
        native gestures).

        (-[WKDeferringGestureRecognizer touchesCancelled:withEvent:]):
        (-[WKDeferringGestureRecognizer setDefaultPrevented:]):
        (-[WKDeferringGestureRecognizer canBePreventedByGestureRecognizer:]):

        Return NO here to prevent certain platform gestures (e.g. scroll view panning) from causing the deferring
        gesture to Failed state, when these gestures attempt to transition from Possible to Began state.

        (-[WKDeferringGestureRecognizer shouldDeferGestureRecognizer:]):
        * WebKit.xcodeproj/project.pbxproj:

2019-12-02  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        ResponsivenessTimer mistakenly restarts immediately
        https://bugs.webkit.org/show_bug.cgi?id=204659

        Reviewed by Chris Dumez.

        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::timerFired):
        Give startOneShot() a positive number timeout.

2019-12-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][PSON] Crash in NetworkProcessProxy::openNetworkProcessConnection
        https://bugs.webkit.org/show_bug.cgi?id=204703

        Reviewed by Michael Catanzaro.

        Stop sending a message to all web process to prefetch DNS for a hostname. All web processes then send a messaage
        to their network process to prefetch the DNS. Instead, send a message directly to the network process.

        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_prefetch_dns):
        * WebProcess/InjectedBundle/API/glib/WebKitWebExtension.cpp:

2019-12-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Retrieve all following WM_CHAR events at the beginning of processing WM_KEYDOWN event
        https://bugs.webkit.org/show_bug.cgi?id=204694

        Reviewed by Ross Kirsling.

        In Windows ports, WM_KEYDOWN dispatches keydown event, and
        WM_CHAR dispatches keypress event. If a keydown event is canceled
        by calling preventDefault, the following corresponding keypress
        events shouldn't be dispatched.

        WebKit1 implemented it by removing WM_CHAR events if the keydown
        event is consumed. However, WebKit2 can't do so because WebKit2
        processes key events asynchronously. Thus, retrieve all following
        WM_CHAR events, and dispatch them after processing the keydown
        and if it is not consumed.

        In addition to that, retrieving following WM_CHAR events is needed
        to fix Bug 204672 because the events are needed for 'key' property
        of keydown KeyboardEvent for dead key combination.

        Gecko and Chromium also implements 'key' property in the same approach.

        Test: Covered by existing fast/events/inputText-never-fired-on-keydown-cancel.html and fast/events/keydown-keypress-preventDefault.html

        * Shared/NativeWebKeyboardEvent.h: Added m_pendingCharEvents as Vector<MSG>.
        (WebKit::NativeWebKeyboardEvent::pendingCharEvents const):
        * Shared/win/NativeWebKeyboardEventWin.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent):
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::dispatchPendingCharEvents):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onKeyEvent):

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

        Make CompositeOperator and BlendMode encodable
        https://bugs.webkit.org/show_bug.cgi?id=204722

        Reviewed by Eric Carlson.

        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::update):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):

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

        Reimplement some PlatformCALayer methods using GraphicsContext instead of CGContextRef
        https://bugs.webkit.org/show_bug.cgi?id=204698

        Reviewed by Sam Weinig.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        (WebKit::RemoteLayerBackingStore::enumerateRectsBeingDrawn):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::enumerateRectsBeingDrawn):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:

2019-11-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Enable WebAnimationsCSSIntegrationEnabled by default
        https://bugs.webkit.org/show_bug.cgi?id=204650
        <rdar://problem/45562752>

        Reviewed by Dean Jackson.

        * Shared/WebPreferences.yaml:

2019-11-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove ENABLE_KEYBOARD_CODE_ATTRIBUTE and ENABLE_KEYBOARD_KEY_ATTRIBUTE macros
        https://bugs.webkit.org/show_bug.cgi?id=204666

        No behavior change.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::unmodifiedText const):
        (WebKit::WebKeyboardEvent::key const):
        (WebKit::WebKeyboardEvent::code const):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode const):
        (WebKit::WebKeyboardEvent::decode):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::generateSyntheticEditingCommand):

2019-11-27  Philippe Normand  <pnormand@igalia.com>

        [GTK][WebInspector] Use CString to store exported data
        https://bugs.webkit.org/show_bug.cgi?id=204623

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSave): Use a CString for copy-on-write assignment.

2019-11-27  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.27.3 release

        * wpe/NEWS: Add release notes for 2.27.3.

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

        [GTK] WebDriver: moving toplevel windows is not supported under wayland
        https://bugs.webkit.org/show_bug.cgi?id=204614

        Reviewed by Alejandro G. Castro.

        So we can stop trying and simply ignore the requests to move the window.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        (UIClient::windowConfigureEventCallback): Ensure we only move or resize when actually required and reduce the
        time we wait for configure events to 200ms (1 second was too long).

2019-11-26  Antti Koivisto  <antti@apple.com>

        [LFC][Render tree] Add LFC line layout path to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=204613

        Reviewed by Zalan Bujtas.

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

2019-11-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.27.3 release

        * gtk/NEWS: Add release notes for 2.27.3.

2019-11-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(2.27.2): [GTK] Incognito mode is broken under flatpak
        https://bugs.webkit.org/show_bug.cgi?id=203460

        Reviewed by Youenn Fablet.

        The problem is that in ephemeral sessions the base disk cache directory is null, and Storage::open() ends up
        building a cache path with only the version part (/Version n). For some reason g_mkdir_with_parents() doesn't
        return -1 in flatpak when it fails to create the directory due to write permission, like in this case. But the
        network process ends up crashing later trying to open a directory that doesn't exist.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession): Do not create the cache if networkCacheDirectory is null.
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::open): Add an ASSERT to ensure we don't receive a null baseCachePath.

2019-11-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] InternalFunction should be non-destructible
        https://bugs.webkit.org/show_bug.cgi?id=204556

        Reviewed by Mark Lam.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::JSNPMethod::subspaceForImpl):

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

        [macOS] Dragged images are only available as .tiff when dropping onto macCatalyst apps
        https://bugs.webkit.org/show_bug.cgi?id=204598
        <rdar://problem/57093920>

        Reviewed by Tim Horton.

        On macOS, writing dragged images to the pasteboard only as file promises is mostly sufficient for the purposes
        of dropping into Finder, Photos, and other apps. However, when dropping into a macCatalyst app, the contents of
        NSPasteboard will only contain a file URL, which most Catalyst apps aren't able to handle. The only other valid
        image representation that is written to the pasteboard in this case is "public.tiff", which loses fidelity in
        the case of animated GIFs.

        Instead, if the dragged image has a corresponding UTI and corresponding decoded image data, declare the UTI when
        writing promised data to the pasteboard, and later provide data for the UTI, if the drop destination asks, by
        using the promised image's data.

        Test: DragAndDropTests.ProvideImageDataAsTypeIdentifiers

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setPromisedDataForImage):
        (WebKit::WebViewImpl::provideDataForPasteboard):

2019-11-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Update KeyboardEvent as per the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=202183

        Reviewed by Ross Kirsling.

        * Shared/WebEvent.h:
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        * Shared/win/WebEventFactory.cpp:
        (WebKit::windowsKeyNames):
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2019-11-25  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Check EGL image extension by using native gl API in AcceleratedBackingStoreWayland
        https://bugs.webkit.org/show_bug.cgi?id=204446

        Reviewed by Carlos Garcia Campos.

        This change is part of efforts bringing ANGLE backend for WebGL to the gtk port.
        When ANGLE WebGL is enabled, we face a dilemma of choosing either Extensions3DANGLE
        or Extensions3DOpenGL in AcceleratedBackingStoreWayland.cpp. Since they cannot
        coexist, we chose Extensions3DANGLE even if what we really want is Extensions3DOepnGL.
        We address this problem by directly checking egl image extension availability
        via native GL API rather than relying on Extensions3D* classes in the file.

        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::isEGLImageAvailable):
        (WebKit::AcceleratedBackingStoreWayland::checkRequirements):

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

        Crash in WebCore::ServiceWorkerRegistrationKey::hash() const
        https://bugs.webkit.org/show_bug.cgi?id=204497
        <rdar://problem/57348603>

        Reviewed by Alex Christensen.

        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::scheduleJobInServer):
        Add a release assert to be able to further debug the crash.

2019-11-23  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Allow multiple third-party cookie blocking settings
        https://bugs.webkit.org/show_bug.cgi?id=204389
        <rdar://problem/57344054>

        Reviewed by Brent Fulgham.

        This change make the third-party cookie blocking setting go from a boolean to
        the new enum WebCore::ThirdPartyCookieBlockingMode with three different settings.
        Functions and member variables are renamed accordingly.

        The reason for supporting three different modes is that what is now named
        OnlyAccordingToPerDomainPolicy is shipping, AllOnSitesWithoutUserInteraction is
        in beta, and All is behind an experimental flag.

        The change also updates the test API to map the TestRunner call to the enum.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
            Now makes use of a completion handler and updates the cookie blocking state.
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::areAllThirdPartyCookiesBlockedUnder):
            New convenience function to check the cookie blocking status per first-party domain.
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess):
            Restructured the code to make it very clear that the logic is the same as the
            corresponding function in ResourceLoadStatisticsMemoryStore.
            Can no longer be const since it calls areAllThirdPartyCookiesBlockedUnder() which
            in turn calls hasHadUserInteraction() and that function may clear user interaction data.
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUnexpiredRecentUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess const): Deleted.
            See comment above on the non-const version of this function.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::areAllThirdPartyCookiesBlockedUnder):
            New convenience function to check the cookie blocking status per first-party domain.
        (WebKit::ResourceLoadStatisticsMemoryStore::cookieAccess):
            Restructured the code to make it very clear that the logic is the same as the
            corresponding function in ResourceLoadStatisticsDatabaseStore.
            Can no longer be const since it calls areAllThirdPartyCookiesBlockedUnder() which
            in turn calls hasHadUserInteraction() and that function may clear user interaction data.
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::clearUserInteraction):
            Now makes use of a completion handler and updates the cookie blocking state.
        (WebKit::ResourceLoadStatisticsMemoryStore::cookieAccess const): Deleted.
            See comment above on the non-const version of this function.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::ResourceLoadStatisticsStore::setThirdPartyCookieBlockingMode):
        (WebKit::ResourceLoadStatisticsStore::thirdPartyCookieBlockingMode const):
        (WebKit::ResourceLoadStatisticsStore::setIsThirdPartyCookieBlockingEnabled): Deleted.
        (WebKit::ResourceLoadStatisticsStore::isThirdPartyCookieBlockingEnabled const): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setThirdPartyCookieBlockingMode):
        (WebKit::WebResourceLoadStatisticsStore::clearUserInteraction):
            Now forwards the completion handler.
        (WebKit::WebResourceLoadStatisticsStore::setIsThirdPartyCookieBlockingEnabled): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setShouldBlockThirdPartyCookiesForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
            The SetShouldBlockThirdPartyCookiesForTesting message now uses an enum instead of a
            boolean.
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
            Now forwards the enum value instead of a boolean.
        (WebKit::NetworkSession::recreateResourceLoadStatisticStore):
            Now makes sure the cookie blocking setting is forwarded to the recreated store.
        (WebKit::NetworkSession::setThirdPartyCookieBlockingMode):
        (WebKit::NetworkSession::setIsThirdPartyCookieBlockingEnabled): Deleted.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
            Support for the new enum.
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Scripts/webkit/messages.py:
            Tells the IPC code generator where to find WebCore::ThirdPartyCookieBlockingMode.
        * Shared/WebPreferences.yaml:
            Flipped the IsThirdPartyCookieBlockingEnabled flag to on by default.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setShouldBlockThirdPartyCookiesForTesting):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
            Makes use of the enum in the NetworkSessionCreationParameters.
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

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

        Caused test failures and ASan crashes (Requested by ap on
        #webkit).

        Reverted changeset:

        "Cross-thread version StorageQuotaManager"
        https://bugs.webkit.org/show_bug.cgi?id=203971
        https://trac.webkit.org/changeset/252805

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

        Unreviewed, rolling out r252796.

        Turns out my reverting earlier today wasn't so necessary after all.
        This is effectively re-landing r250422.

        Reverted changeset:

        "Revert r250422"
        https://bugs.webkit.org/show_bug.cgi?id=202285
        https://trac.webkit.org/changeset/252796

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

        Unreviewed, rolling out r252798.

        Turns out my reverting earlier today wasn't so necessary after all.
        This is effectively re-landing r250421.

        Reverted changeset:

        "Revert r250421"
        https://bugs.webkit.org/show_bug.cgi?id=202290
        https://trac.webkit.org/changeset/252798

2019-11-22  Kate Cheney  <katherine_cheney@apple.com>

        ITP Database crashes if table schema is not correct
        https://bugs.webkit.org/show_bug.cgi?id=204458
        <rdar://problem/57399084>
        
        Reviewed by Brent Fulgham.

        ITP database was crashing if the table schema wasn't correct. This
        should instead be handled by re-opening a new database with a correct
        schema to allow for future schema updates.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::isCorrectTableSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndDropOldDatabaseIfNecessary):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:

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

        Simplify VisitedLinkStore process registration logic
        https://bugs.webkit.org/show_bug.cgi?id=204472

        Reviewed by Geoffrey Garen.

        Simplify VisitedLinkStore process registration logic:
        1. WebProcessProxy objects no longer delay their registration with the VisitedLinkStore until
           after they are done launching. There is no need to do this because AuxiliaxyProcessProxy::send()
           will correctly queue the IPC message if the process is not done launching when the VisitedLinkStore
           tries to send its IPC.
        2. Switch VisitedLinkStore to using a WeakHashSet to store the WebProcessProxy object pointers. This
           is safer and this also makes it so that the WebProcessProxy no longer need to unregister themselves
           when shutting down. Note that AuxiliaxyProcessProxy::send() properly discards IPC messages to
           a terminated process anyway.

        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::~VisitedLinkStore):
        (WebKit::VisitedLinkStore::addProcess):
        (WebKit::VisitedLinkStore::removeProcess):
        (WebKit::VisitedLinkStore::removeAll):
        (WebKit::VisitedLinkStore::didInvalidateSharedMemory):
        (WebKit::VisitedLinkStore::didUpdateSharedStringHashes):
        * UIProcess/VisitedLinkStore.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::addVisitedLinkStoreUser):
        (WebKit::WebProcessProxy::didFinishLaunching):

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

        [iOS] Copy assertions before iterating over them in _notifyAssertionsOfImminentSuspension
        https://bugs.webkit.org/show_bug.cgi?id=204524
        <rdar://problem/57265830>

        Reviewed by Alexey Proskuryakov.

        Copy assertions before iterating over them in _notifyAssertionsOfImminentSuspension and use WeakPtr
        to make sure the assertions are still alive before calling uiAssertionWillExpireImminently() on
        them. It is common for process assertions to get released when uiAssertionWillExpireImminently()
        gets called, which would remove them from the _assertionsNeedingBackgroundTask vector we were
        iterating on.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager _notifyAssertionsOfImminentSuspension]):

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

        Null check callback in NetworkConnectionToWebProcess::didDeliverMessagePortMessages
        https://bugs.webkit.org/show_bug.cgi?id=204460
        <rdar://problem/57348618>

        Reviewed by Chris Dumez.

        When the network process crashes during a message port connection establishment,
        a web process may have an identifier that becomes stale.  In this case, we should not crash again.
        No test because this only happens during a rare race condition after a network process crash, but the radar shows records of this happening.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didDeliverMessagePortMessages):

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

        Cross-thread version StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=203971
        <rdar://problem/57290349>

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp: Introduce class SessionStorageQuotaManager to manage all 
        StorageQuotaManagers of the same session. 
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::addSessionStorageQuotaManager):
        (WebKit::NetworkProcess::removeSessionStorageQuotaManager):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::createIDBServer):
        (WebKit::NetworkProcess::addIndexedDatabaseSession):
        (WebKit::NetworkProcess::setSessionStorageQuotaManagerIDBRootPath):
        (WebKit::NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting):
        (WebKit::NetworkProcess::resetQuota):
        (WebKit::NetworkProcess::storageQuotaManager):
        (WebKit::NetworkProcess::initializeStorageQuota): Deleted.
        (WebKit::NetworkProcess::clearStorageQuota): Deleted.
        (): Deleted.
        (WebKit::NetworkProcess::initializeQuotaUsers): Deleted.
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::SessionStorageQuotaManager::SessionStorageQuotaManager):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::defaultQuota const):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::ensureOriginStorageQuotaManager):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::existingStorageQuotaManagers):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::cacheRootPath const):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::setIDBRootPath):
        (WebKit::NetworkProcess::SessionStorageQuotaManager::idbRootPath const):
        (WebKit::NetworkProcess::StorageQuotaManagers::defaultQuota const): Deleted.
        (WebKit::NetworkProcess::StorageQuotaManagers::setDefaultQuotas): Deleted.
        (WebKit::NetworkProcess::StorageQuotaManagers::managersPerOrigin): Deleted.
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::getDirectorySize):
        (WebKit::CacheStorage::Engine::diskUsage): static function to get the disk usage of CacheStorage given 
        CacheStorage root directory.
        (WebKit::CacheStorage::Engine::requestSpace):
        (WebKit::CacheStorage::Engine::readCachesFromDisk):
        (WebKit::CacheStorage::Engine::writeSizeFile):
        (WebKit::CacheStorage::Engine::readSizeFile):
        (WebKit::CacheStorage::Engine::initializeQuotaUser): Deleted.
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::put):
        (WebKit::CacheStorage::Cache::remove):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::create):
        (WebKit::CacheStorage::Caches::Caches):
        (WebKit::CacheStorage::Caches::~Caches):
        (WebKit::CacheStorage::Caches::updateSizeFile):
        (WebKit::CacheStorage::Caches::initializeSize):
        (WebKit::CacheStorage::Caches::clear):
        (WebKit::CacheStorage::Caches::requestSpace):
        (WebKit::CacheStorage::Caches::writeRecord):
        (WebKit::CacheStorage::Caches::removeRecord):
        (WebKit::CacheStorage::Caches::whenInitialized): Deleted.
        (WebKit::CacheStorage::Caches::resetSpaceUsed): Deleted.
        * NetworkProcess/cache/CacheStorageEngineCaches.h:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        * Shared/WebsiteDataStoreParameters.h: Add a cacheStorageDirectory parameter so we know the direcotry of 
        CacheStorage when we start using WebsiteDataStore.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreResetQuota):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h: Add a C API for reseting quota in TestRunner.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::resetQuota):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        (WebKit::WebsiteDataStore::resetQuota):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        Revert r250421
        https://bugs.webkit.org/show_bug.cgi?id=202290

        This is needed for rdar://problem/56760896
        I left the soup parts of the original change untouched, which leaves speculative validation on for soup ports.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDiskCacheSpeculativeValidationEnabled):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration diskCacheSpeculativeValidationEnabled]):
        (-[_WKProcessPoolConfiguration setDiskCacheSpeculativeValidationEnabled:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

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

        Revert r250422
        https://bugs.webkit.org/show_bug.cgi?id=202285

        This is needed for rdar://problem/56760896

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setCanHandleHTTPSServerTrustEvaluation):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::canHandleHTTPSServerTrustEvaluation const):
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetCanHandleHTTPSServerTrustEvaluation):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setCanHandleHTTPSServerTrustEvaluation:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::setCanHandleHTTPSServerTrustEvaluation):
        * UIProcess/WebProcessPool.h:

2019-11-22  Conrad Shultz  <conrad_shultz@apple.com>

        Remove -[_WKThumbnailView usesSnapshot/setUsesSnapshot:]
        https://bugs.webkit.org/show_bug.cgi?id=150099

        Reviewed by Tim Horton.

        Remove some unused, no-op SPI. While we're here, remove a couple unneeded explicit
        property syntheses.

        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView setUsesSnapshot:]): Deleted.
        (-[_WKThumbnailView usesSnapshot]): Deleted.

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

        Speculative loading sometimes happens too early and is missing login cookies
        https://bugs.webkit.org/show_bug.cgi?id=204305
        <rdar://problem/57063840>

        Reviewed by Antti Koivisto.

        Speculative loads were issued before receiving the response from the main resource. However,
        the main resource may set important cookies that are thus missing from the speculative requests.

        To address the issue we now delay speculative loads for first-party subresources until we've
        received the response from the main resource. To avoid regressing PLT, we still warm up the
        first-party subresources from disk right away and preconnect to the server.

        No new tests, extended existing test.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveMainResourceResponse):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::didReceiveMainResourceResponse const):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::markMainResourceResponseAsReceived):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::addPostMainResourceResponseTask):
        (WebKit::NetworkCache::SpeculativeLoadManager::shouldRegisterLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::registerMainResourceLoadResponse):
        (WebKit::NetworkCache::SpeculativeLoadManager::preconnectForSubresource):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateSubresource):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::isFirstParty const):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:

2019-11-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] RemoteInspector: use sockets instead of DBus
        https://bugs.webkit.org/show_bug.cgi?id=204503

        Reviewed by Žan Doberšek.

        Use GSockets API instead of DBus.

        * Platform/IPC/Connection.h:
        * SourcesGTK.txt: Remove GSocketMonitor that has been moved to WTF.
        * SourcesWPE.txt: Ditto.
        * UIProcess/glib/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::RemoteInspectorClient):
        (WebKit::RemoteInspectorClient::~RemoteInspectorClient):
        (WebKit::RemoteInspectorClient::setupConnection):
        (WebKit::RemoteInspectorClient::connectionDidClose):
        (WebKit::RemoteInspectorClient::inspect):
        (WebKit::RemoteInspectorClient::sendMessageToBackend):
        (WebKit::RemoteInspectorClient::closeFromFrontend):
        * UIProcess/glib/RemoteInspectorClient.h:

2019-11-21  Jer Noble  <jer.noble@apple.com>

        Experimental support for HDR media query
        https://bugs.webkit.org/show_bug.cgi?id=204422

        Reviewed by Eric Carlson.

        Notify the WebContent process of updated screen properties when the screen's
        color space changes.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKWindowVisibilityObserver startObserving:]):
        (-[WKWindowVisibilityObserver stopObserving:]):
        (-[WKWindowVisibilityObserver _screenDidChangeColorSpace:]):
        (WebKit::WebViewImpl::screenDidChangeColorSpace):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::screenPropertiesDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setScreenProperties):

2019-11-21  Brian Burg  <bburg@apple.com>

        Unreviewed, sort WebKit's project file after changes in r252702 and r252637.

        * WebKit.xcodeproj/project.pbxproj:

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

        Crash in com.apple.WebKit.WebContent at WebKit: WebKit::StorageAreaMap::loadValuesIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=204459
        <rdar://problem/57383446>

        Reviewed by Geoffrey Garen.

        If m_storageMapID can be null if connect() fails.

        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        (WebKit::StorageAreaMap::loadValuesIfNeeded):

2019-11-21  Peng Liu  <peng.liu6@apple.com>

        Ignore the requests to enter/exit video fullscreen/picture-in-picture if the requesting mode is the same as the current mode
        https://bugs.webkit.org/show_bug.cgi?id=204461

        Reviewed by Jer Noble.

        In enterVideoFullscreenForVideoElement() and exitVideoFullscreenForVideoElement(),
        we can ignore the request if the targeting mode is the same as the current one.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::enterVideoFullscreenForVideoElement):
        (WebKit::VideoFullscreenManager::exitVideoFullscreenForVideoElement):

2019-11-20  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Add ANGLE backend to GTK port
        https://bugs.webkit.org/show_bug.cgi?id=199060

        Reviewed by Žan Doberšek.

        * UIProcess/API/glib/WebKitProtocolHandler.cpp: Extention3DANGLE is used instead
          where ANGLE for WebGL is enabled.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp: Append gl extensions for ANGLE.
        (WebKit::AcceleratedBackingStoreWayland::checkRequirements):

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

        [iOS] Make sure WebContent process does not get suspended while it is holding a process assertion for the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=204418

        Reviewed by Jer Noble.

        Make sure WebContent process does not get suspended while it is holding a process assertion for the UIProcess. We
        see this happening in sysdiagnoses, and it means the system ends up killing the WebContent process because it leaked
        a process assertion.

        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::processTaskStateDidChange):
        (WebKit::WebProcess::releaseProcessWasResumedAssertions):

2019-11-19  Brian Burg  <bburg@apple.com>

        [Cocoa] Add _WKRemoteWebInspectorViewController SPI to set diagnostic logging delegate
        https://bugs.webkit.org/show_bug.cgi?id=204371

        Reviewed by Devin Rousso.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/RemoteWebInspectorProxy.h:
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::setDiagnosticLoggingAvailable):
        Hook up the plumbing to forward this state change to the frontend.

        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewControllerPrivate.h: Added.
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (-[_WKRemoteWebInspectorViewController _setDiagnosticLoggingDelegate:]):
        Add new SPI to set the diagnostic logging delegate. This is preferable to directly
        setting the delegate on the inspector WKWebView (via .webView._diagnosticLoggingDelegate),
        because the controller can notify the frontend that diagnostic logging is now available.

        * WebKit.xcodeproj/project.pbxproj: Add new header file and make it private.

        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::setDiagnosticLoggingAvailable):
        Cache this value and use it for InspectorFrontendClient::diagnosticLoggingAvailable().

        * WebProcess/WebPage/RemoteWebInspectorUI.messages.in:
        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::setDiagnosticLoggingAvailable):
        Duplicate what is done for the local case.

2019-11-20  Jer Noble  <jer.noble@apple.com>

        HTML5 audio .ended event not fired when app in background or phone screen is off
        https://bugs.webkit.org/show_bug.cgi?id=173332
        <rdar://problem/32757402>

        Reviewed by Eric Carlson.

        When a WebPage goes from audible to inaudible, allow a short grace period before removing
        the activity token, to give the page a chance to (e.g.) move to the next item in a playlist
        before the process is suspended when in the background.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::updateThrottleState):
        (WebKit::WebPageProxy::clearAudibleActivity):
        * UIProcess/WebPageProxy.h:

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

        Unreviewed, fix webkitpy failures after r252655.

        * Scripts/webkit/LegacyMessageReceiver-expected.cpp:
        (WebKit::WebPage::didReceiveWebPageMessage):
        (WebKit::WebPage::didReceiveSyncWebPageMessage):
        * Scripts/webkit/MessageReceiver-expected.cpp:
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):
        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp:
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):

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

        Unreviewed mac catalyst build fix after r252655.

        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.messages.in:

2019-11-19  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed non-unified build fixes.

        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/FindController.h:

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

        Protect MessageReceivers when possible while they are processing incoming IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=204377

        Reviewed by Brady Eidson.

        Protect MessageReceiver while they are processing incoming IPC messages for
        extra safety. It is a common mistake to call client delegates as a result of an IPC, and
        failing to protect |this| while doing so. Client code can destroy |this| and we end up
        crashing.

        For MessageReceivers that are not RefCounted, they can use the "NotRefCounted" attribute
        in their messages.in file to opt out.

        * NetworkProcess/Cookies/WebCookieManager.messages.in:
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.messages.in:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
        * NetworkProcess/NetworkContentRuleListManager.messages.in:
        * NetworkProcess/NetworkSocketChannel.messages.in:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in:
        * NetworkProcess/webrtc/NetworkRTCMonitor.messages.in:
        * NetworkProcess/webrtc/NetworkRTCSocket.messages.in:
        * PluginProcess/PluginControllerProxy.messages.in:
        * PluginProcess/PluginProcess.messages.in:
        * Scripts/webkit/messages.py:
        * Shared/API/Cocoa/RemoteObjectRegistry.messages.in:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * Shared/Authentication/AuthenticationManager.messages.in:
        * Shared/AuxiliaryProcess.messages.in:
        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.messages.in:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.messages.in:
        * UIProcess/ViewGestureController.messages.in:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.messages.in:
        * UIProcess/WebFullScreenManagerProxy.messages.in:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/ios/SmartMagnificationController.messages.in:
        * WebProcess/ApplePay/WebPaymentCoordinator.messages.in:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
        * WebProcess/Geolocation/WebGeolocationManager.messages.in:
        * WebProcess/Network/webrtc/WebMDNSRegister.messages.in:
        * WebProcess/Network/webrtc/WebRTCMonitor.messages.in:
        * WebProcess/Network/webrtc/WebRTCResolver.messages.in:
        * WebProcess/Network/webrtc/WebRTCSocket.messages.in:
        * WebProcess/Notifications/WebNotificationManager.messages.in:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/ViewGestureGeometryCollector.messages.in:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/UserMediaCaptureManager.messages.in:

2019-11-19  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix sysctl-read sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=204358
        <rdar://problem/57298313>

        Reviewed by Brent Fulgham.

        The WebContent sandbox should allow sysctl-read of "kern.hostname", "kern.osrelease", and "kern.version".

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

2019-11-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Count third-party script loads under top frame
        https://bugs.webkit.org/show_bug.cgi?id=204262
        <rdar://problem/57244945>

        Reviewed by Alex Christensen.

        Third-party scripts running in the first-party context are a significant privacy
        and security risk. This change captures the number of such script loads which will
        allow ITP to take action.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createUniqueIndices):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getSubStatisticStatement):
            Addition of the new category TopFrameLoadedThirdPartyScripts.
        (WebKit::ResourceLoadStatisticsDatabaseStore::resourceToString):
            Removed the lastSeen output since it may differ between test runs.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
            Bumped statisticsModelVersion to 17.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode):
            Encoding and decoding of the new category topFrameLoadedThirdPartyScripts.
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        (WebKit::WebResourceLoadObserver::logSubresourceLoading):
            Now takes an additional enum parameter FetchDestinationIsScriptLike which
            is used to detect third-party script-like loads (script, worker, or
            service worker) from third-parties. If one is detected, it is stored
            in the new topFrameLoadedThirdPartyScripts category.
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.h:

2019-11-19  Brian Burg  <bburg@apple.com>

        [Cocoa] Add _WKInspector SPI to set diagnostic logging delegate for a local Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=204323

        Reviewed by Devin Rousso.

        Testing this end-to-end isn't quite possible yet because WebInspectorUI does not
        yet send any dummy diagnostic events that we can use for testing purposes.

        * WebKit.xcodeproj/project.pbxproj:

        * UIProcess/API/Cocoa/_WKInspectorInternal.h: Fix include.
        * UIProcess/API/Cocoa/_WKInspectorPrivate.h: Added.
        * UIProcess/API/Cocoa/_WKInspector.mm: Fix include.
        (-[_WKInspector _setDiagnosticLoggingDelegate:]):
        Allow clients to set the diagnosticLoggingDelegate directly on _WKInspector.
        The implementation forwards this setter to the Inspector's WKWebView and notifies
        the frontend that diagnostic logging availability did change.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::setDiagnosticLoggingAvailable):
        Plumbing.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::setDiagnosticLoggingAvailable):
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:
        More plumbing.

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

        Make sendWithAsyncReply() safe to call from any thread
        https://bugs.webkit.org/show_bug.cgi?id=204355

        Reviewed by Alex Christensen.

        Make sendWithAsyncReply() safe to call from any thread, similarly to the regular send().
        Also start using it in WebProcess::processTaskStateDidChange() now that it is safe.

        * Platform/IPC/Connection.cpp:
        (IPC::asyncReplyHandlerMapLock):
        (IPC::asyncReplyHandlerMap):
        (IPC::nextAsyncReplyHandlerID):
        (IPC::addAsyncReplyHandler):
        (IPC::clearAsyncReplyHandlers):
        (IPC::CompletionHandler<void):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::processWasResumed):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::hasServiceWorkerPageProxy): Deleted.
        (WebKit::WebProcessProxy::setAssertionStateForTesting): Deleted.
        (WebKit::WebProcessProxy::WeakOrStrongPtr::WeakOrStrongPtr): Deleted.
        (WebKit::WebProcessProxy::WeakOrStrongPtr::setIsWeak): Deleted.
        (WebKit::WebProcessProxy::WeakOrStrongPtr::get const): Deleted.
        (WebKit::WebProcessProxy::WeakOrStrongPtr::operator-> const): Deleted.
        (WebKit::WebProcessProxy::WeakOrStrongPtr::operator* const): Deleted.
        (WebKit::WebProcessProxy::WeakOrStrongPtr::operator bool const): Deleted.
        (WebKit::WebProcessProxy::WeakOrStrongPtr::updateStrongReference): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::processTaskStateDidChange):
        (WebKit::WebProcess::parentProcessDidHandleProcessWasResumed): Deleted.

2019-11-19  Megan Gardner  <megan_gardner@apple.com>

        <rdar://problem/57323799>

        Unreviwed build fix for older bots.

        * Platform/spi/ios/UIKitSPI.h:

2019-11-19  Brian Burg  <bburg@apple.com>

        [Cocoa] Add WKUIDelegate SPI to inform clients when a _WKInspector attaches to a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=204300
        <rdar://problem/57136993>

        Reviewed by Devin Rousso.

        Add a new UI delegate method to notify clients when local Web Inspector is about to be loaded.
        This can be triggered by -[_WKInspector show] in the Cocoa API, or via the WebCore-controlled 
        Inspect context menu item.

        The client can then configure Web Inspector using delegates or by setting _WKInspector properties.

        Covered by new API test WebKit.DidNotifyWhenInspectorAttached.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didAttachInspector):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didAttachInspector):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::openLocalInspectorFrontend):

2019-11-18  John Wilander  <wilander@apple.com>

        Check if ITP is on before applying third-party cookie blocking
        https://bugs.webkit.org/show_bug.cgi?id=204322
        <rdar://problem/57120772>

        Reviewed by Chris Dumez and Alexey Proskuryakov.

        This change makes sure WebCore::NetworkStorageSession knows
        whether ITP is on or off and checks that first thing in
        WebCore::NetworkStorageSession::shouldBlockCookies().

        This check was never needed before since if ITP was off,
        there would be no classified domains and thus the function
        would always return false. However,
        https://trac.webkit.org/changeset/251353/webkit introduced
        full third-party cookie blocking for websites without user
        interaction and that rule is checked before checking domain
        classification. The effect was unconditional third-party
        cookie blocking if ITP is off. This changes fixes that bug.

        Note that this patch already landed as branch-specific in
        https://trac.webkit.org/changeset/252549/webkit

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
            Now tells WebCore::NetworkStorageSession the status of
            ITP.

2019-11-18  David Kilzer  <ddkilzer@apple.com>

        IPC::Decoder should use nullptr as invalid value
        <https://webkit.org/b/203880>
        <rdar://problem/53159906>

        Reviewed by Brent Fulgham.

        Covered by existing tests.

        * Platform/IPC/Decoder.cpp:
        (IPC::alignedBufferIsLargeEnoughToContain): Add bufferStart
        parameter to add beginning bounds check now that m_bufferPos
        uses nullptr for an invalid value.
        (IPC::Decoder::alignBufferPosition): Update to pass m_buffer to
        IPC::alignedBufferIsLargeEnoughToContain().
        (IPC::Decoder::bufferIsLargeEnoughToContain const): Ditto.
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::isInvalid const): Add beginning bounds check now
        that m_bufferPos uses nullptr for an invalid value.
        (IPC::Decoder::markInvalid): Make nullptr the invalid value for
        m_bufferPos.

2019-11-18  Andres Gonzalez  <andresg_22@apple.com>

        Run AccessibilityController::rootElement on secondary thread to simulate HIServices during LayoutTests.
        https://bugs.webkit.org/show_bug.cgi?id=204226

        Reviewed by Chris Fleizach.

        Added WKAccessibilityCanUseSecondaryAXThread to support
        WTR::AccessibilityController spawning of a secondary thread to simulate
        execution of isolated tree code.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityCanUseSecondaryAXThread):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

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

        Promote main thread assertions related to sendWithAsyncReply() to be release assertions
        https://bugs.webkit.org/show_bug.cgi?id=204298

        Reviewed by Wenson Hsieh.

        Promote main thread assertions related to sendWithAsyncReply() to be release assertions, to help identify
        threading bugs such as <rdar://problem/57231170>.

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

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

        Fix assertion in layout test after r252492.
        https://bugs.webkit.org/show_bug.cgi?id=204199

        There is still a case in a test where there is no frame identifier, so keep the status quo.
        This is a partial revert of r252492.
        This fixes layout test http/tests/navigation/window-open-redirect-and-remove-opener.html

        * Shared/FrameInfoData.cpp:
        (WebKit::FrameInfoData::decode):
        * Shared/FrameInfoData.h:
        * UIProcess/API/APIFrameInfo.cpp:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::createNewPage):

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

        Use SecTrustEvaluateWithError instead of SecTrustEvaluate where available
        https://bugs.webkit.org/show_bug.cgi?id=204159

        Reviewed by Darin Adler.

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

2019-11-18  Darin Adler  <darin@apple.com>

        WKWebView.mediaType is nullable, not null_resettable
        https://bugs.webkit.org/show_bug.cgi?id=204297

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.h: Use nullable for mediaType since this
        property returns a null value when the media type is not being overridden.

2019-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Automation: scrollIntoView should do nothing if element is visible
        https://bugs.webkit.org/show_bug.cgi?id=204194

        Reviewed by Carlos Alberto Lopez Perez.

        "To scroll into view an element perform the following steps only if the element is not already in view"
        https://w3c.github.io/webdriver/#dfn-scrolls-into-view

        Fixes: imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[9]
               imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[8]
               imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[7]
               imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[6]
               imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[5]
               imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[4]
               imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[3]
               imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[2]
               imported/w3c/webdriver/tests/element_click/scroll_into_view.py::test_partially_visible_does_not_scroll[1]

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout): Use scrollIntoViewIfNotVisible instead of
        scrollIntoViewIfNeeded.

2019-11-17  Alexey Proskuryakov  <ap@apple.com>

        Better build fix attempt after r252434. 

        We do need this variant, it was a mistake to claim that it's "old".

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        (WebKit::decidePolicyForGeolocationRequestFromOrigin):

2019-11-17  Alexey Proskuryakov  <ap@apple.com>

        Build fix attempt after r252434.

        This variant of decidePolicyForGeolocationRequestFromOrigin doesn't exist in UIKit.
        Removing dead code, but someone needs to take a look at what the original intent here was.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        (WebKit::decidePolicyForGeolocationRequestFromOrigin):

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

        REGRESSION (r243606): Interacting with date and time pickers hangs the UI process on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=204280
        <rdar://problem/49718359>

        Reviewed by Chris Dumez.

        After r243606, interacting with date and time inputs on watchOS hangs the UI process indefinitely while
        attempting to create an input peripheral (WKFormInputControl) for the date or time picker. This is because, in
        the process of setting up a new WKDateTimePicker, we call into +[UIKeyboard defaultSizeForInterfaceOrientation:]
        which hangs when attempting to fetch the current UIKit keyboard layout type.

        To address this, we simply avoid setting _inputPeripheral on watchOS, as we did prior to r243606. Covered by the
        existing layout test fast/forms/watchos/time-picker-value-change.html, which currently times out.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (createInputPeripheralWithView):

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

        [iOS] [UIWKDocumentContext] Add the ability to request all marked text rects
        https://bugs.webkit.org/show_bug.cgi?id=204278
        <rdar://problem/56527803>

        Reviewed by Tim Horton.

        Add support for a new UIWKDocumentRequest option to request character rects for each character in the marked
        text range. Unless UIWKDocumentRequestRects is additionally specified (in which case we'll return rects for
        every single character in the editable root anyways), this option will ensure that all characters in the
        composition range (which should match -[UIWKDocumentContext markedTextRange]) will have known character rects
        that can be retrieved using -[UIWKDocumentContext enumerateLayoutRects:] (or one of the other helper methods
        that utilize -enumerateLayoutRects:).

        Test: WebKit.DocumentEditingContextWithMarkedText

        * Platform/spi/ios/UIKitSPI.h:

        Add a staging declaration for the new option.

        * Shared/DocumentEditingContext.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toWebDocumentRequestOptions):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDocumentEditingContext):

        Refactor logic that uses CharacterIterator to find rects for each character range into a lambda function, and
        use this lambda function to handle UIWKDocumentRequestRects and the new UIWKDocumentRequestMarkedTextRects. The
        marked text range is relative to the start of the context before the selection.

2019-11-15  Eric Carlson  <eric.carlson@apple.com>

        Don't use AVCapture on watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=204254
        <rdar://problem/45508044>

        Reviewed by Youenn Fablet.

        * Configurations/FeatureDefines.xcconfig:

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

        [Apple] Enable variation fonts on all Apple platforms
        https://bugs.webkit.org/show_bug.cgi?id=198100

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

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

        Add more release logging for network load restarts
        https://bugs.webkit.org/show_bug.cgi?id=204234

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::restartNetworkLoad):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::serviceWorkerDidNotHandle):

2019-11-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix sysctl-read sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=204238
        <rdar://problem/57198954>

        Reviewed by Brent Fulgham.

        There is missing a rule for reading a specific sysctl property in the WebContent process on iOS.

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

2019-11-15  Benjamin Nham  <nham@apple.com>

        Add SPI to clear web process cache
        https://bugs.webkit.org/show_bug.cgi?id=204210

        Reviewed by Chris Dumez.

        This adds an SPI to clear cached web processes. The intended use case is to add a lukewarm mode to
        Mac PLT5 in which web pages load in a new WebProcess and load resources from the disk cache.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _clearWebProcessCache]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        (-[WKProcessPool _clearWebProcessCache]):

2019-11-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix sandbox violation in the WebContent process related to WebRTC audio captures
        https://bugs.webkit.org/show_bug.cgi?id=204240
        <rdar://problem/57170333>

        Reviewed by Brent Fulgham.

        The WebContent process needs access to read a new audio related preference domain.

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

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

        Reduce structure copies when creating an API::FrameInfo
        https://bugs.webkit.org/show_bug.cgi?id=204199

        Reviewed by Brady Eidson.

        Use WTFMove and references where possible.  This is cleanup needed for a future patch.

        * Shared/FrameInfoData.cpp:
        (WebKit::FrameInfoData::decode):
        * Shared/FrameInfoData.h:
        * UIProcess/API/APIFrameInfo.cpp:
        (API::FrameInfo::create):
        (API::FrameInfo::FrameInfo):
        (API::FrameInfo::~FrameInfo): Deleted.
        (API::FrameInfo::clearPage): Deleted.
        * UIProcess/API/APIFrameInfo.h:
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didFailProvisionalLoadInSubframeWithError):
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::runJavaScriptAlert):
        (API::UIClient::runJavaScriptConfirm):
        (API::UIClient::runJavaScriptPrompt):
        (API::UIClient::runBeforeUnloadConfirmPanel):
        (API::UIClient::runOpenPanel):
        (API::UIClient::runWebAuthenticationPanel):
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCreateFrameInfo):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        (WKPageSetPageNavigationClient):
        * UIProcess/API/Cocoa/WKFrameInfo.mm:
        (-[WKFrameInfo webView]):
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didFailProvisionalLoadInSubframeWithError):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):
        (WebKit::UIDelegate::UIClient::decidePolicyForGeolocationPermissionRequest):
        (WebKit::UIDelegate::UIClient::runBeforeUnloadConfirmPanel):
        (WebKit::UIDelegate::UIClient::runOpenPanel):
        (WebKit::UIDelegate::UIClient::runWebAuthenticationPanel):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/UserContent/WebScriptMessageHandler.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::runPanel):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::runOpenPanel):
        * UIProcess/WebPageProxy.h:

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

        Regression(r244361) iOS: Layout test http/tests/quicklook/rtf-document-domain-is-empty-string.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=204205
        <rdar://problem/51864314>

        Reviewed by Alex Christensen.

        In this test, NSHTMLWriter ends up creating a WebArchive providing file:///index.html as URL. The page's script
        then calls document.open(), which triggers a DidExplicitOpenForFrame() IPC to the UIProcess with this URL.
        This trips our MESSAGE_CHECK_URL() check in the UIProcess when this path is not within the WebContent process'
        sandbox, and we kill the WebContent process. To address the issue, this patch replaces the MESSAGE_CHECK_URL()
        with an if check and an early return so that we ignore the IPC if the URL does not make sense, without actually
        terminating the WebContent process.

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

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

        Update libwebrtc to M78
        https://bugs.webkit.org/show_bug.cgi?id=203897

        Reviewed by Eric Carlson.

        Update include paths.
        Update according API change to client TCP socket creation and network monitor.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.mm:
        * NetworkProcess/webrtc/NetworkRTCSocket.h:
        * Shared/RTCPacketOptions.h:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::RTCSocketFactory::CreateClientTcpSocket):
        * WebProcess/Network/webrtc/LibWebRTCResolver.h:
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        * WebProcess/Network/webrtc/WebRTCMonitor.h:

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

        Make NetworkResourceLoader::didReceiveResponse more straightforward after r244700
        https://bugs.webkit.org/show_bug.cgi?id=204134

        Reviewed by Youenn Fablet.

        If m_isKeptAlive is true, we do not want to receive any HTTP body.
        Rather than storing the CompletionHandler and relying on the destructor to call it, just call it.

        No change in behavior.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):

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

        [iOS] Crash under WebProcess::processTaskStateDidChange(WebKit::ProcessTaskStateObserver::TaskState)
        https://bugs.webkit.org/show_bug.cgi?id=204177

        Reviewed by Jer Noble.

        Delay creating the ProcessTaskStateObserver until the WebProcess's connection to its parent had been
        initialized. This is necessary because ProcessTaskStateObserver may call WebProcess::processTaskStateDidChange()
        on a background thread, which will deference the IPC connection.

        * WebProcess/WebProcess.cpp:
        (WebKit::m_webSQLiteDatabaseTracker):
        (WebKit::WebProcess::~WebProcess):
        (WebKit::WebProcess::initializeConnection):
        (WebKit::m_taskStateObserver): Deleted.
        * WebProcess/WebProcess.h:

2019-11-14  Brady Eidson  <beidson@apple.com>

        Summary: WKWebView is missing an equivalent to WebKit 1's API to set the media style.
        <rdar://problem/49862107> and https://bugs.webkit.org/show_bug.cgi?id=203974

        Reviewed by Alex Christensen.

        Covered by new API test.

        This is basically:
        - Expose a read/write property on WKWebView.
        - Pipe the new media type to the WebProcess.
        - Force a style recalc.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setMediaType:]):
        (-[WKWebView mediaType]):
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setOverriddenMediaType):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::overriddenMediaType const):
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::overrideMediaType const):
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setOverriddenMediaType):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::overriddenMediaType const):
        * WebProcess/WebPage/WebPage.messages.in:

2019-11-14  Brady Eidson  <beidson@apple.com>

        pageZoom/setPageZoom: should not be in a Mac-only part of WKWebView.mm
        https://bugs.webkit.org/show_bug.cgi?id=204128

        Reviewed by Alex Christensen.

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

2019-11-13  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION: WKWebView navigation fails when navigating from about:blank
        https://bugs.webkit.org/show_bug.cgi?id=203852
        <rdar://problem/56973112>

        Reviewed by Brent Fulgham.

        Previously, WebPageProxy::loadFile would unconditionally create a sandbox extension for the resource directory URL. Currently,
        this method is calling WebPageProxy::maybeInitializeSandboxExtension to create a sandbox extension if needed. The sandbox
        extension for the resource URL is not created if the WebContent process already has assumed access to the resource URL, which
        is the case when loading the same file for the second time. The sandbox extension still needs to be issued in this case, since
        the WebContent process is revoking its extension when the load is done. This patch restore the original behaviour by adding a
        flag to WebPageProxy::maybeInitializeSandboxExtension to indicate whether the method should check if the process already has
        assumed access.

        API test: WKWebView.LoadRelativeFileURL

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shouldSendPendingMessage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequestWaitingForProcessLaunch):
        (WebKit::WebPage::loadRequestWaitingForPID): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        [Mac] Fix build
        https://bugs.webkit.org/show_bug.cgi?id=204136

        Reviewed by Alex Christensen.

        Remove deprecation warnings.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::replacedNSWorkspace_launchApplicationAtURL_options_configuration_error):
        (WebKit::initializeCocoaOverrides):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView changeFont:]):
        (-[WKWebView changeColor:]):
        (-[WKWebView view:stringForToolTip:point:userData:]):
        (-[WKWebView pasteboardChangedOwner:]):
        (-[WKWebView pasteboard:provideDataForType:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView changeFont:]):
        (-[WKView view:stringForToolTip:point:userData:]):
        (-[WKView pasteboardChangedOwner:]):
        (-[WKView pasteboard:provideDataForType:]):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::launchApplicationAtURL):
        (WebKit::PluginProcessProxy::openFile):
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (-[WKDataListSuggestionView setBackgroundStyle:]):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        (WebKit::WebPageProxy::openPDFFromTemporaryFolderWithNativeApplication):

2019-11-13  Megan Gardner  <megan_gardner@apple.com>

        Cleanup old UIKit Staging
        https://bugs.webkit.org/show_bug.cgi?id=204130

        Reviewed by Wenson Hsieh.

        Not new tests - linking only.

        * Platform/spi/ios/UIKitSPI.h:

        Removing old staging code that should be unnecessary now. 

2019-11-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Cannot open camera from websites
        https://bugs.webkit.org/show_bug.cgi?id=204168
        <rdar://problem/57138788>

        Reviewed by Jer Noble.

        The sandbox is blocking a required service.

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

2019-11-13  Benjamin Nham  <nham@apple.com>

        VeryHigh priority loads are actually loading at VeryLow priority
        https://bugs.webkit.org/show_bug.cgi?id=203423
        <rdar://problem/56621789>

        Reviewed by Antti Koivisto.

        There are two issues with the way we translate ResourceLoadPriority to
        CFURLRequestPriority:

        1. We call _CFNetworkHTTPConnectionCacheSetLimit and set 1 too few
        priority levels. This means VeryHigh priority loads are actually out
        of bounds, which causes CFNetwork to set the priority level back to 0
        in HTTPConnectionCacheEntry::_prepareNewRequest. After this patch we'll
        call _CFNetworkHTTPConnectionCacheSetLimit with the correct number of
        levels.

        2. _CFNetworkHTTPConnectionCacheSetLimit doesn't work for NSURLSession
        right now (<rdar://problem/56621205>), so we have to map to the default
        number of CFURLRequestPriority levels, which is 4. Right now we have 5
        ResourceLoadPriority levels, so there will be some aliasing involved.
        After this patch VeryLow gets a priority of -1 and Low gets a priority
        of 0, but due to the aforementioned clamping behavior both VeryLow and
        Low will effectively both have a CFURLRequestPriority of 0.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::initializeNetworkSettings):

2019-11-13  Youenn Fablet  <youenn@apple.com>

        Remove timer to stop service worker process
        https://bugs.webkit.org/show_bug.cgi?id=204118

        Reviewed by Alex Christensen.

        Removal of a timer that is never get activated.
        No change of behavior.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        * UIProcess/WebProcessPool.h:

2019-11-13  Youenn Fablet  <youenn@apple.com>

        Take service worker assertions based on client processes assertion states
        https://bugs.webkit.org/show_bug.cgi?id=204119

        Reviewed by Chris Dumez.

        Compute in network process which processes contain clients for service workers of a given process.
        WebSWServerConnection implements it and sends update to UIProcess/WebProcessProxy.
        WebProcessProxy keeps for each service worker process a set of client web processes.
        WebProcessProxy now computes the service worker process assertion based on this set.

        Add some private APIs to set process assertions/get service worker process assertion states.
        Covered by new API test.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::registerServiceWorkerClient):
        (WebKit::WebSWServerConnection::unregisterServiceWorkerClient):
        (WebKit::WebSWServerConnection::contextConnectionCreated):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::webProcessIdentifier const):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setAssertionStateForTesting:]):
        (-[WKWebView _hasServiceWorkerBackgroundActivityForTesting]):
        (-[WKWebView _hasServiceWorkerForegroundActivityForTesting]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::registerWebProcessToServiceWorkerProcess):
        (WebKit::NetworkProcessProxy::unregisterWebProcessToServiceWorkerProcess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::updateProcessAssertions):
        (WebKit::WebProcessPool::hasServiceWorkerForegroundActivityForTesting const):
        (WebKit::WebProcessPool::hasServiceWorkerBackgroundActivityForTesting const):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateServiceWorkerProcessAssertion):
        (WebKit::WebProcessProxy::registerWebProcessToServiceWorkerProcess):
        (WebKit::WebProcessProxy::unregisterWebProcessToServiceWorkerProcess):
        (WebKit::WebProcessProxy::hasServiceWorkerForegroundActivityForTesting const):
        (WebKit::WebProcessProxy::hasServiceWorkerBackgroundActivityForTesting const):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::setAssertionStateForTesting):

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

        AXObjectCache::rootObject should generate the isolated tree.
        https://bugs.webkit.org/show_bug.cgi?id=204131

        Reviewed by Chris Fleizach.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]):
        (-[WKAccessibilityWebPageObjectBase clientSupportsIsolatedTree]): Became a member of AXObjectCache.
        (-[WKAccessibilityWebPageObjectBase isolatedTreeRootObject]): Deleted.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2019-11-13  Youenn Fablet  <youenn@apple.com>

        [ iOS ]: Layout Test http/tests/IndexedDB/storage-limit-1.https.html is a Flaky Failure
        https://bugs.webkit.org/show_bug.cgi?id=203275
        <rdar://problem/56516249>

        Reviewed by Alex Christensen.

        Fix flakiness by clearing the storage of each cache when the cache is being cleared.
        This ensures that the storage salt gets recreated if needed.

        To further improve repeatability, make sure that initialize based tasks happen after clear tasks are complete.
        For that purpose, add a clear task counter and append initialize callbacks to a Vector if counter is not zero.
        Increment counter at clear task creation and decrement counter at completion time.
        If counter is back to 0, we can safely process the pending clear tasks.

        Covered by unflaked test.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::~Engine):
        (WebKit::CacheStorage::Engine::initialize):
        (WebKit::CacheStorage::CompletionHandler<void):
        (WebKit::CacheStorage::Engine::clearAllCaches):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::clearMemoryRepresentation):

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

        Rollout(r251358) Causes load hangs
        https://bugs.webkit.org/show_bug.cgi?id=204158
        <rdar://problem/57120002>

        Unreviewed, revert r251358 because it causes load hangs.

        * Platform/spi/Cocoa/SecItemSPI.h: Removed.
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::decode):
        * Shared/mac/SecItemRequestData.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-11-13  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, fix build for ServiceWorkers disabled

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::enableServiceWorkers):

2019-11-13  Rob Buis  <rbuis@igalia.com>

        Support stale-while-revalidate cache strategy
        https://bugs.webkit.org/show_bug.cgi?id=201461

        Reviewed by Youenn Fablet.

        Add a new UseDecision value AsyncRevalidate for async revalidation. This is used
        when the retrieved cache entry is a stale-while-revalidate response [1].
        In case of AsyncRevalidate, a check is made to see if there is a
        current async revalidation ongoing for the entry, if not one is
        started. Regardless, the stale entry is returned, until either the
        async revalidation ends successfully or at the moment when the
        response expires for real.

        [1] https://fetch.spec.whatwg.org/#concept-stale-while-revalidate-response

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::isStaleWhileRevalidateEnabled const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cache/AsyncRevalidation.cpp: Added.
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::AsyncRevalidation::staleWhileRevalidateEnding):
        (WebKit::NetworkCache::AsyncRevalidation::AsyncRevalidation):
        * NetworkProcess/cache/AsyncRevalidation.h: Added.
        (WebKit::NetworkCache::AsyncRevalidation::load const):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::responseNeedsRevalidation):
        (WebKit::NetworkCache::makeUseDecision):
        (WebKit::NetworkCache::makeStoreDecision):
        (WebKit::NetworkCache::Cache::startAsyncRevalidationIfNeeded):
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::responseHasExpired): Deleted.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::dumpHTTPHeadersDiff):
        (WebKit::NetworkCache::requestsHeadersMatch):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::dumpHTTPHeadersDiff): Deleted.
        (WebKit::NetworkCache::requestsHeadersMatch): Deleted.
        * Sources.txt:
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationGetStaleWhileRevalidateEnabled):
        (WKWebsiteDataStoreConfigurationSetStaleWhileRevalidateEnabled):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::staleWhileRevalidateEnabled const):
        (WebKit::WebsiteDataStoreConfiguration::setStaleWhileRevalidateEnabled):
        * WebKit.xcodeproj/project.pbxproj:

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

        Convert CSSPrimitiveValue::UnitType to an enum class, and cleanup
        https://bugs.webkit.org/show_bug.cgi?id=204101

        Reviewed by Antti Koivisto.

        Move CSSPrimitiveValue::UnitType to a standalone enum class CSSUnitType, and
        CSSPrimitiveVallue::UnitCategory to CSSUnitCategory; these are going to more extensive
        use in calc() and in the CSS OM.

        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        (WebKit::PDFPluginAnnotation::updateGeometry):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::updateGeometry):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::updateGeometry):

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

        Add size file for CacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=204027
        <rdar://problem/57100861>

        Reviewed by Youenn Fablet.

        Keep the CacheStorage size in a separate file so that we can get that value without waiting for Engine to 
        initialize and read caches from disk.

        No behavior change as the file is not in use now.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::writeSizeFile):
        (WebKit::CacheStorage::Engine::readSizeFile):
        (WebKit::CacheStorage::Engine::clearAllCachesFromDisk):
        (WebKit::CacheStorage::Engine::deleteDirectoryRecursivelyOnBackgroundThread):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::cachesSizeFilename):
        (WebKit::CacheStorage::Caches::updateSizeFile):
        (WebKit::CacheStorage::Caches::initializeSize):
        (WebKit::CacheStorage::Caches::writeRecord):
        (WebKit::CacheStorage::Caches::removeRecord):
        (WebKit::CacheStorage::Caches::resetSpaceUsed):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:

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

        [iOS] WKWebView does not respect system spellchecking preference
        https://bugs.webkit.org/show_bug.cgi?id=204100
        <rdar://problem/56653808>

        Reviewed by Tim Horton.

        Implements a platform hook on iOS (-setContinuousSpellCheckingEnabled:) to allow UIKit to inform us when the
        system spellchecking preference changes, and adds logic to propagate these changes to the web process. See below
        for more details.

        Test: editing/spelling/toggle-spellchecking.html

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

        Add testing SPI to enable or disable continuous spellchecking, for both iOS and macOS.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setContinuousSpellCheckingEnabled):
        * UIProcess/TextChecker.h:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView setContinuousSpellCheckingEnabled:]):

        Implement this method to handle changes to the system spellchecking preference. This hook is also used by legacy
        WebKit on iOS to turn spellchecking on or off. If the value of the preference changed, we additionally notify
        the web process. In the future, we should consider refactoring TextCheckerState to be per-web view and per-page,
        since Cocoa platform APIs would allow for different WKWebViews to have different spell checking preferences.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        * UIProcess/wpe/TextCheckerWPE.cpp:
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):

        Adjusted setContinuousSpellCheckingEnabled to return whether or not the continuous spellchecking state changed.

2019-11-12  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r252351.

        casued 50+ crashes on Mac and iOS wk2 debug

        Reverted changeset:

        "Add size file for CacheStorage"
        https://bugs.webkit.org/show_bug.cgi?id=204027
        https://trac.webkit.org/changeset/252351

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

        Revert remainder of r251676
        https://bugs.webkit.org/show_bug.cgi?id=203066
        <rdar://problem/57115922>

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::globalCTDataConnectionServiceType):
        (WebKit::NetworkSessionCocoa::setCTDataConnectionServiceType):
        (WebKit::NetworkSessionCocoa::dataConnectionServiceType const):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration CTDataConnectionServiceType]):
        (-[_WKProcessPoolConfiguration setCTDataConnectionServiceType:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::paymentCoordinatorCTDataConnectionServiceType):

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

        Rename _textSelectionAssistant to _textInteractionAssistant to reflect the only class it can now represent
        https://bugs.webkit.org/show_bug.cgi?id=204103

        Reviewed by Wenson Hsieh.

        No new tests - rename only.

        Now that UIWKSelectionAssistant is no longer, the _textSelectionAssistant can only be a
        UIWKTextInteractionAssistant. There is enough confusion around all the selection and 
        interaction assistants, renaming this should alleviate some of that confusion.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didExitStableState]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView becomeFirstResponderForWebView]):
        (-[WKContentView endEditingAndUpdateFocusAppearanceWithReason:]):
        (-[WKContentView _scrollingNodeScrollingWillBegin]):
        (-[WKContentView _scrollingNodeScrollingDidEnd]):
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _uiTextSelectionRects]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView setUpTextSelectionAssistant]):
        (-[WKContentView _willStartScrollingOrZooming]):
        (-[WKContentView _didEndScrollingOrZooming]):
        (-[WKContentView _lookupForWebView:]):
        (-[WKContentView _shareForWebView:]):
        (-[WKContentView _addShortcutForWebView:]):
        (-[WKContentView _promptForReplaceForWebView:]):
        (-[WKContentView _transliterateChineseForWebView:]):
        (-[WKContentView tintColorDidChange]):
        (-[WKContentView _didHideMenu:]):
        (-[WKContentView selectForWebView:]):
        (-[WKContentView selectAllForWebView:]):
        (-[WKContentView _showTextStyleOptionsForWebView:]):
        (-[WKContentView _showDictionary:]):
        (-[WKContentView interactionAssistant]):
        (-[WKContentView _showKeyboard]):
        (-[WKContentView _hideKeyboard]):
        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView _startSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _stopSuppressingSelectionAssistantForReason:]):
        (-[WKContentView _restoreCalloutBarIfNeeded]):
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):

2019-11-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Support Pointer Events
        https://bugs.webkit.org/show_bug.cgi?id=202789

        Reviewed by Carlos Garcia Campos.

        Covered by existing tests.

        * UIProcess/PageClient.h: Add a ifdef for platform COCOA on two
        function declarations that depend on the UIGestureRecognizer ObjC type.
        This is not needed for GTK/WPE code.

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

        Revert part of r251676
        https://bugs.webkit.org/show_bug.cgi?id=203066
        <rdar://problem/57008444>

        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::suppressesConnectionTerminationOnSystemChange const):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration suppressesConnectionTerminationOnSystemChange]):
        (-[_WKProcessPoolConfiguration setSuppressesConnectionTerminationOnSystemChange:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2019-11-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Enable CSS Painting API
        https://bugs.webkit.org/show_bug.cgi?id=190710

        Reviewed by Don Olmstead.

        Enable the runtime feature by default on GTK/WPE when building with
        experimental features enabled.

        Covered by existing tests.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

2019-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver: implement new window command
        https://bugs.webkit.org/show_bug.cgi?id=203994

        Reviewed by Carlos Alberto Lopez Perez.

        Add new API to support new window command. The WebKitAutomationSession::create-web-view signal can now receive a
        detail that can be "window" or "tab". Applications can use that to decide whether to add the new webview to a
        new window or tab. WebKitWebView has a new construct only property automation-presentation-type, which is an
        enum that can be either window or tab value. Appplications should use the new property when creating the web
        view for automation to indicate whether the web view was added to a new window or tab.

        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        (webkit_automation_session_class_init):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewSetProperty):
        (webkitWebViewGetProperty):
        (webkit_web_view_class_init):
        (webkit_web_view_get_automation_presentation_type):
        * UIProcess/API/gtk/WebKitAutomationSession.h:
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2019-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r250707): [GTK] UIClient::setWindowFrame only works the first time
        https://bugs.webkit.org/show_bug.cgi?id=204068

        Reviewed by Adrian Perez de Castro.

        This is because we are connecting to configure-event of parent window, but not returning FALSE from the callback
        to propagate the event.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        (UIClient::windowConfigureEventCallback): Make it boolean and return FALSE.

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

        Add SPI to access a WebsiteDataStore without instantiating it, and its configuration
        https://bugs.webkit.org/show_bug.cgi?id=204089

        Reviewed by Tim Horton.

        Calling WKWebViewConfiguration.websiteDataStore instantiates the default data store.
        We need a way to query if it has been set but not instantiate anything if it hasn't.
        We also need a way to access the configuration used to create a WKWebsiteDataStore like we do with WKWebView.
        These have been requested to fix <rdar://problem/57091216> and I think they're a good idea in general.

        Covered by API tests.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _websiteDataStoreIfExists]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setDelegate:]):
        (-[WKWebsiteDataStore set_delegate:]):
        (-[WKWebsiteDataStore _configuration]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        (WebKit::WebsiteDataStoreConfiguration::copy): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:

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

        Add size file for CacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=204027

        Reviewed by Youenn Fablet.

        Keep the CacheStorage size in a separate file so that we can get that value without waiting for Engine to 
        initialize and read caches from disk.

        No behavior change as the file is not in use now.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::writeSizeFile):
        (WebKit::CacheStorage::Engine::readSizeFile):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::cachesSizeFilename):
        (WebKit::CacheStorage::Caches::updateSizeFile):
        (WebKit::CacheStorage::Caches::initializeSize):
        (WebKit::CacheStorage::Caches::writeRecord):
        (WebKit::CacheStorage::Caches::removeRecord):
        (WebKit::CacheStorage::Caches::resetSpaceUsed):
        * NetworkProcess/cache/CacheStorageEngineCaches.h:

2019-11-11  Youenn Fablet  <youenn@apple.com>

        Fail cross-origin redirection loads in case of CORS with redirection URLs having credentials
        https://bugs.webkit.org/show_bug.cgi?id=204036

        Reviewed by Alex Christensen.

        Implement https://fetch.spec.whatwg.org/#http-redirect-fetch steps 7 and 8.
        Covered by updated tests.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection):

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

        [iOS] Unable to view .pages files
        https://bugs.webkit.org/show_bug.cgi?id=204076
        <rdar://problem/57079557>

        Reviewed by Brent Fulgham.

        This is caused by a syscall being blocked by the sandbox. The syscall was previously unused in the
        WebContent process.
       
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

        WebDriver: implement proxy support
        https://bugs.webkit.org/show_bug.cgi?id=180408

        Reviewed by Carlos Alberto Lopez Perez.

        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        (parseProxyCapabilities): Parse the proxy settings from capabilities.
        (webkitAutomationSessionCreate): Set the proxy settings received from capabilities.

2019-11-10  David Kilzer  <ddkilzer@apple.com>

        StorageManagerSet.m_storageAreas should use weak pointers to StorageArea
        <https://webkit.org/b/204048>
        <rdar://problem/55342744>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/WebStorage/StorageArea.h:
        (class WebKit::StorageArea):
        - Inherit from CanMakeWeakPtr<StorageArea>.
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::removeConnection):
        (WebKit::StorageManagerSet::waitUntilSyncingLocalStorageFinished):
        (WebKit::StorageManagerSet::connectToLocalStorageArea):
        (WebKit::StorageManagerSet::connectToTransientLocalStorageArea):
        (WebKit::StorageManagerSet::connectToSessionStorageArea):
        (WebKit::StorageManagerSet::disconnectFromStorageArea):
        (WebKit::StorageManagerSet::getValues): Initialize `quotaError`
        stack value since it is not guaranteed to be set.
        (WebKit::StorageManagerSet::setItem):
        (WebKit::StorageManagerSet::removeItem):
        (WebKit::StorageManagerSet::clear):
        - Use makeWeakPtr() to add StorageArea pointers to
          m_storageAreas.
        - Use `const auto&` to store WeakPtr<StorageArea> values from
          m_storageAreas.
        - Add nullptr checks before using WeakPtr<StorageArea> values.
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        (WebKit::StorageManagerSet::m_storageAreas):
        - Use WeakPtr<StorageArea>.

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

        Clicky Orbing support.apple.com categories shows a PNG instead of the web page preview, tapping loads image asset only instead of web page
        https://bugs.webkit.org/show_bug.cgi?id=204037
        <rdar://55614939>

        Reviewed by Simon Fraser.

        When Safari adopted the ContextMenu API they began providing a PreviewViewController that
        showed the image rather than the link, for the case of <a><img></a>.

        This could be fixed in Safari, but I noticed that we actually tell the delegate that the
        type of the activated element is an image, which is why they treat it as such. It's not
        clear that because the image also has a link attached, a client should defer to the link.

        Instead, I think it makes more sense to identify this as a link, because that is the more
        important information in this API.

        While here I also changed the logic to make sure we call the API if both the API and SPI
        are available.

        New ContextMenus and WKRequestActivatedElementInfo API tests.

        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm: Identify as a link if you have a link.
        (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:userInfo:]):
        * UIProcess/ios/WKContentViewInteraction.mm: Look for the API before the SPI.
        (-[WKContentView continueContextMenuInteraction:]):

2019-11-08  Brady Eidson  <beidson@apple.com>

        WKWebView Find-in-page API.
        <rdar://problem/46971112> and https://bugs.webkit.org/show_bug.cgi?id=203872

        Reviewed by Tim Horton.

        Covered by API tests.

        - Promote _findString:
        - Add a completion handler for it.

        * SourcesCocoa.txt:
        
        * UIProcess/API/Cocoa/WKFindConfiguration.h: Added.
        * UIProcess/API/Cocoa/WKFindConfiguration.mm: Added.
        (-[WKFindConfiguration init]):
        (-[WKFindConfiguration copyWithZone:]):

        * UIProcess/API/Cocoa/WKFindResult.h: Added.
        * UIProcess/API/Cocoa/WKFindResult.mm: Added.
        (-[WKFindResult init]):
        (-[WKFindResult _initWithMatchFound:]):
        (-[WKFindResult copyWithZone:]):
        * UIProcess/API/Cocoa/WKFindResultInternal.h: Added.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (toFindOptions):
        (-[WKWebView findString:withConfiguration:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.h:
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findString):
        (WebKit::WebPageProxy::findStringCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        * WebProcess/WebPage/FindController.h:

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

2019-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Add quirk needed to support legacy Google NFC Titan security keys
        https://bugs.webkit.org/show_bug.cgi?id=204024
        <rdar://problem/56962320>

        Reviewed by Brent Fulgham.

        Some legacy U2F keys such as Google T1 Titan don't understand the FIDO applet command. Instead,
        they are configured to only have the FIDO applet. Therefore, when the above command fails, we
        use U2F_VERSION command to double check if the connected tag can actually speak U2F, indicating
        we are interacting with one of these legacy keys.

        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::fido::compareVersion):
        (WebKit::fido::trySelectFidoApplet):
        (WebKit::NfcConnection::transact const):
        (WebKit::NfcConnection::didDetectTags):

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

        Unreviewed, rolling out r252260.

        Breaks half of API tests

        Reverted changeset:

        "Make DownloadID an ObjectIdentifier"
        https://bugs.webkit.org/show_bug.cgi?id=203962
        https://trac.webkit.org/changeset/252260

2019-11-08  Antti Koivisto  <antti@apple.com>

        Use separate cache directory for development WebKit on Mac
        https://bugs.webkit.org/show_bug.cgi?id=204015

        Reviewed by Youenn Fablet.

        Replace the NetworkCache::lastStableVersion scheme with a completely separate directory.
        This way potential bugs in development WebKit can't end up affecting system WebKit cache.
        This also removes the need to keep lastStableVersion updated.

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

        Add '/Development' to cache path if this is not system WebKit.

        (WebKit::NetworkCache::Storage::open):
        (WebKit::NetworkCache::Storage::deleteOldVersions):

        No need to avoid deleting lastStableVersion anymore.

        * NetworkProcess/cache/NetworkCacheStorage.h:

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

        [macOS] [iOS] Add logging and telemetry to mach lookup rules
        https://bugs.webkit.org/show_bug.cgi?id=203999

        Reviewed by Brent Fulgham.

        Add logging and telemetry to help determine if mach lookups to a set of services can be denied in the WebContent process.

        No new tests, since this only adds logging and telemetry.

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

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

        Make DownloadID an ObjectIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=203962

        Reviewed by Youenn Fablet.

        Also deprecate the unused WKDownloadGetID because this identifier is internal.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        (WebKit::Download::messageSenderDestinationID const):
        * NetworkProcess/Downloads/DownloadID.h:
        (WebKit::DownloadID::DownloadID): Deleted.
        (WebKit::DownloadID::operator== const): Deleted.
        (WebKit::DownloadID::operator!= const): Deleted.
        (WebKit::DownloadID::downloadID const): Deleted.
        (IPC::ArgumentCoder<WebKit::DownloadID>::encode): Deleted.
        (IPC::ArgumentCoder<WebKit::DownloadID>::decode): Deleted.
        (WTF::DownloadIDHash::hash): Deleted.
        (WTF::DownloadIDHash::equal): Deleted.
        (WTF::HashTraits<WebKit::DownloadID>::emptyValue): Deleted.
        (WTF::HashTraits<WebKit::DownloadID>::constructDeletedValue): Deleted.
        (WTF::HashTraits<WebKit::DownloadID>::isDeletedValue): Deleted.
        * NetworkProcess/Downloads/DownloadMonitor.cpp:
        (WebKit::DownloadMonitor::applicationWillEnterForeground):
        (WebKit::DownloadMonitor::applicationDidEnterBackground):
        (WebKit::DownloadMonitor::timerFired):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::messageSenderDestinationID const):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::setPendingDownloadID):
        (WebKit::NetworkDataTask::isDownload const):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::pendingDownloadCanceled):
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::convertToDownload):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (WebKit::NetworkSessionCocoa::continueDidReceiveChallenge):
        * Scripts/webkit/messages.py:
        * Shared/Authentication/AuthenticationManager.h:
        * UIProcess/API/C/WKDownload.cpp:
        (WKDownloadGetID):
        * UIProcess/API/C/WKDownload.h:
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::DownloadProxy):
        (WebKit::generateDownloadID): Deleted.
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):
        (WebKit::DownloadProxyMap::downloadFinished):
        (WebKit::DownloadProxyMap::invalidate):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.h:

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

        Fix flaky tests in http/tests/cache/disk-cache
        https://bugs.webkit.org/show_bug.cgi?id=203822

        Reviewed by Youenn Fablet.

        Right now tests that set the cache model do so using a race condition.  I think this will fix the flakyness we've observed.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setCacheModelSynchronouslyForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetCacheModelSynchronouslyForTesting):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setCacheModelSynchronouslyForTesting):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setCacheModelSynchronouslyForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        Revert some changes accidentally committed with r252257
        https://bugs.webkit.org/show_bug.cgi?id=202178

        * UIProcess/API/C/WKContextPrivate.h:

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

        Move schemes for SchemeRegistry from WebProcessPool to LegacyGlobalSettings
        https://bugs.webkit.org/show_bug.cgi?id=202178

        Reviewed by Youenn Fablet.

        The current users of the SPI to set these only have one WebProcessPool, so they intend these settings to be global.
        Moving them to LegacyGlobalSettings allows me to make a NetworkProcessProxy without a WebProcessPool and not regress existing functionality.
        I move only the four sets of schemes needed to launch a NetworkProcess to remove the dependency the NetworkProcess has on the WebProcessPool.

        * UIProcess/LegacyGlobalSettings.h:
        (WebKit::LegacyGlobalSettings::schemesToRegisterAsSecure):
        (WebKit::LegacyGlobalSettings::registerURLSchemeAsSecure):
        (WebKit::LegacyGlobalSettings::schemesToRegisterAsBypassingContentSecurityPolicy):
        (WebKit::LegacyGlobalSettings::registerURLSchemeAsBypassingContentSecurityPolicy):
        (WebKit::LegacyGlobalSettings::schemesToRegisterAsLocal):
        (WebKit::LegacyGlobalSettings::registerURLSchemeAsLocal):
        (WebKit::LegacyGlobalSettings::schemesToRegisterAsNoAccess):
        (WebKit::LegacyGlobalSettings::registerURLSchemeAsNoAccess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsSecure):
        (WebKit::WebProcessPool::registerURLSchemeAsBypassingContentSecurityPolicy):
        (WebKit::WebProcessPool::registerURLSchemeAsLocal):
        (WebKit::WebProcessPool::registerURLSchemeAsNoAccess):
        * UIProcess/WebProcessPool.h:

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

        Add WebKit Legacy SPI to retrieve editable elements in rect
        https://bugs.webkit.org/show_bug.cgi?id=204006
        <rdar://problem/57024093>

        Reviewed by Wenson Hsieh.

        Write WebPage::textInputContextsInRect() in terms of Page::editableElementsInRect().
        Also make use of Element::clientRect() instead of elementRectInRootViewCoordinates(),
        which duplicates what the former does.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::textInputContextsInRect): Write in terms of Page::editableElementsInRect().
        (WebKit::WebPage::contextForElement const): Use Element::clientRect() which does what
        elementRectInRootViewCoordinates() does.
        (WebKit::elementRectInRootViewCoordinates): Deleted.
        (WebKit::isEditableTextInputElement): Deleted.

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

        [WebAuthn] Return NotAllowedError immediately for UI cancellations
        https://bugs.webkit.org/show_bug.cgi?id=203937
        <rdar://problem/56962420>

        Reviewed by Brent Fulgham.

        NotAllowedError representing UI cancellations should be returned to sites
        immediately such that sites could show appropriate error page immediately.

        Covered by existing tests.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::cancelRequest):
        (WebKit::AuthenticatorManager::clearState):
        (WebKit::AuthenticatorManager::resetState): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorManager.h:

2019-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add pointer lock permission request API
        https://bugs.webkit.org/show_bug.cgi?id=203896

        Reviewed by Adrian Perez de Castro.

        Add a WebKitPointerLockPermissionRequest class to handle pointer lock permissions.

        * PlatformGTK.cmake:
        * SourcesGTK.txt:
        * UIProcess/API/glib/WebKitPointerLockPermissionRequest.cpp: Added.
        (webkitPointerLockPermissionRequestAllow):
        (webkitPointerLockPermissionRequestDeny):
        (webkit_permission_request_interface_init):
        (webkitPointerLockPermissionRequestDispose):
        (webkit_pointer_lock_permission_request_class_init):
        (webkitPointerLockPermissionRequestCreate):
        (webkitPointerLockPermissionRequestDidLosePointerLock):
        * UIProcess/API/glib/WebKitPointerLockPermissionRequestPrivate.h: Added.
        * UIProcess/API/glib/WebKitUIClient.cpp:
        (UIClient::~UIClient):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewPermissionRequest):
        (webkitWebViewDenyPointerLockRequest):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitPointerLockPermissionRequest.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:

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

        Remove an unused icon resource
        https://bugs.webkit.org/show_bug.cgi?id=203983

        Reviewed by Wenson Hsieh.

        * Resources/mac/mediaIcon.pdf: Removed.
        * WebKit.xcodeproj/project.pbxproj:
        This file has not been used in years.

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

        [iOS] Add logging and telemetry to more mach lookup rules
        https://bugs.webkit.org/show_bug.cgi?id=203978

        Reviewed by Brent Fulgham.

        Add logging and telemetry to help determine if mach lookup of these services can be denied in the WebContent process.

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

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

        Re-enable NSURLSession isolation after r252116
        https://bugs.webkit.org/show_bug.cgi?id=203934
        <rdar://problem/56921584>

        Reviewed by Chris Dumez.

        r252116 was a rollout of r248640, which introduced cases where data tasks from different NSURLSessions
        which can have the same task identifiers were put into the same maps.  This key collision caused data from the wrong
        tasks to be sent to NetworkResourceLoader, causing rare and strange loading bugs.  In order to prevent insertion into
        wrong maps again, I made a new abstraction, SessionWrapper, which wraps a NSURLSession, its delegate, and all maps
        that are scoped to that NSURLSession.  Along the way I found a few other places where we had made similar mistakes.

        Covered by an API test which would've failed before r252116 because it exercises the key collision condition,
        and by tests which were skipped in r252116 and I now unskipped.

        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate initWithSessionWrapper:withCredentials:]):
        (-[WKNetworkSessionDelegate sessionInvalidated]):
        (-[WKNetworkSessionDelegate existingTask:]):
        (-[WKNetworkSessionDelegate sessionCocoa]):
        (-[WKNetworkSessionDelegate URLSession:didBecomeInvalidWithError:]):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:willCacheResponse:completionHandler:]):
        (processServerTrustEvaluation):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        (-[WKNetworkSessionDelegate existingWebSocketTask:]):
        (WebKit::SessionWrapper::initialize):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::NetworkSessionCocoa::initializeEphemeralStatelessSession):
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
        (WebKit::NetworkSessionCocoa::isolatedSession):
        (WebKit::NetworkSessionCocoa::invalidateAndCancel):
        (WebKit::NetworkSessionCocoa::continueDidReceiveChallenge):
        (WebKit::NetworkSessionCocoa::createWebSocketTask):
        (WebKit::NetworkSessionCocoa::addWebSocketTask):
        (WebKit::NetworkSessionCocoa::removeWebSocketTask):
        (-[WKNetworkSessionDelegate initWithNetworkSession:withCredentials:]): Deleted.
        (WebKit::NetworkSessionCocoa::initializeEphemeralStatelessCookielessSession): Deleted.
        (WebKit::NetworkSessionCocoa::session): Deleted.
        (WebKit::NetworkSessionCocoa::dataTaskForIdentifier): Deleted.
        (WebKit::NetworkSessionCocoa::downloadTaskWithResumeData): Deleted.
        (WebKit::NetworkSessionCocoa::addDownloadID): Deleted.
        (WebKit::NetworkSessionCocoa::downloadID): Deleted.
        (WebKit::NetworkSessionCocoa::takeDownloadID): Deleted.
        (WebKit::NetworkSessionCocoa::webSocketDataTaskForIdentifier): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _logUserInteraction:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

2019-11-07  Peng Liu  <peng.liu6@apple.com>

        ASSERTION FAILED: m_clientCounts.contains(contextId) in WebKit::VideoFullscreenManagerProxy::removeClientForContext(uint64_t)
        https://bugs.webkit.org/show_bug.cgi?id=203918

        Reviewed by Jer Noble.

        Postpone the transition to exit fullscreen of a video element
        before the previous transition of fullscreen mode change is completed.

        Fix a flakey layout test (media/video-autoplay.html). No new test is needed.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::exitVideoFullscreenForVideoElement):

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

        WebDriver: correctly handle errors when focusing element before sending key events
        https://bugs.webkit.org/show_bug.cgi?id=203945

        Reviewed by Carlos Alberto Lopez Perez.

        Handle ElementNotInteractable JavaScript exception to generate the appropriate Automation error.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):

2019-11-06  Eric Liang  <ericliang@apple.com>

        AX: WKWebView does not shift Accessibility Focus for Catalyst (203798)
        https://bugs.webkit.org/show_bug.cgi?id=203798

        Reviewed by Chris Fleizach.

        Added the code to register/unregister remote UI Process identifier on the host app.
        This is used so that the host app can appear as the sender for notifications sent from its web processes. Unfortunately this has to be done in WebKit: in accessibility bundles the swizzled code is not called because of bundle loading time.
        Added AppKit softlink for Mac catalyst.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/ios/AppKitSoftLink.h: Added.
        * UIProcess/ios/AppKitSoftLink.mm: Added.
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (-[WKSwipeTransitionController gestureRecognizerForInteractiveTransition:WithTarget:action:]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _updateRemoteAccessibilityRegistration:]):
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        (-[WKContentView _processDidExit]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/cocoa/WebProcessCocoa.mm:

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

        Update availability annotations to match the macOS 10.15 and iOS 13.0 GM SDKs
        https://bugs.webkit.org/show_bug.cgi?id=202243
        <rdar://problem/55720747>

        Reviewed by Brent Fulgham.

        Changed WK_MAC_TBA and WK_IOS_TBA to 10.15 and 13.0, respectively, in
        all declarations that appear in the GM SDKs.

        * Configurations/WebKit.xcconfig:
        * Shared/API/Cocoa/WKMain.h:
        * UIProcess/API/Cocoa/NSAttributedString.h:
        * UIProcess/API/Cocoa/WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKErrorPrivate.h:
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKNavigationResponsePrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKPreviewActionItem.h:
        * UIProcess/API/Cocoa/WKPreviewActionItemIdentifiers.h:
        * UIProcess/API/Cocoa/WKPreviewElementInfo.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKSnapshotConfiguration.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        * UIProcess/API/Cocoa/_WKContentRuleListAction.h:
        * UIProcess/API/Cocoa/_WKCustomHeaderFields.h:
        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKInspectorWindow.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKTextInputContext.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreDelegate.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/_WKTouchEventGenerator.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

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

        REGRESSION: [ iOS ] ( r251015 ) Layout Test fast/text/whitespace/pre-wrap-overflow-selection.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=203366
        <rdar://problem/56580680>

        Reviewed by Simon Fraser.

        WKBundlePageForceRepaint may fail to do synchronous layer flush if there is a pending layer flush in-flight and waiting
        for completion message from UI process. Layer flush also flushes pending editor state so that doesn't get done either.
        This may cause randomness in test results.

        In this case the randomness is the switch between simple and complex line layout, triggered by editor state flush. The results
        between line layout paths are observably identical but produce slightly different render tree dumps.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageFlushPendingEditorStateUpdate):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

        Add a function for forcing editor state flush, called from the test runner dump() function.

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

        Unreviewed, fix watchOS build after r252011.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::startBackgroundActivityForFullscreenInput):

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

        WEBCORE_TESTSUPPORT_EXPORT should be used only for WebCoreTestSupport, not for WebCore
        https://bugs.webkit.org/show_bug.cgi?id=203876

        Reviewed by Ross Kirsling.

        * config.h: Removed WEBCORE_TESTSUPPORT_EXPORT definition because it shouldn't be used in WebKit.

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

        Unreviewed, rolling out r251907.

        Causes white flashing in some cases <rdar://problem/56957850>

        Reverted changeset:

        "Take down the gesture snapshot early when the back/forward
        cache is not leveraged"
        https://bugs.webkit.org/show_bug.cgi?id=203713
        https://trac.webkit.org/changeset/251907

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

        Make sure we never end up with NetworkDataTaskCocoa TaskIdentifier conflicts
        https://bugs.webkit.org/show_bug.cgi?id=203902

        Reviewed by Antti Koivisto.

        Consolidate the all the code related to data task registration / lookup / unregistration
        in NetworkSessionCocoa and add a utility method (dataTaskMap()) to decide which data
        task map to use. This makes it less error-prone and unlikely that someone would update
        part of the code and fail to update the rest accordingly.

        I also converted the debug assertions into release ones so that we crash in case of
        id confusion instead of having a very bad and hard to diagnose bug like Bug 201822.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::dataTaskForIdentifier):
        (WebKit::NetworkSessionCocoa::registerDataTask):
        (WebKit::NetworkSessionCocoa::unregisterDataTask):

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

        [GTK] Implement support for Pointer Lock API
        https://bugs.webkit.org/show_bug.cgi?id=202956

        Reviewed by Carlos Alberto Lopez Perez.

        Add platform specific implementation of Pointer Lock for the GTK port.

        * PlatformGTK.cmake: Generate code for pointer-constraints and relative-pointer Wayland protocols.
        * Shared/NativeWebMouseEvent.h: Add optional mouse movement delta.
        * Shared/gtk/NativeWebMouseEventGtk.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent): Pass movement delta to WebEventFactory::createWebMouseEvent().
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent): Initialize deltaX and deltaY for motion events using the received delta.
        * Shared/gtk/WebEventFactory.h: Add optional mouse movement delta.
        * SourcesGTK.txt: Add new files to compilation.
        * UIProcess/API/glib/WebKitUIClient.cpp: Add implementation for requestPointerLock and didLosePointerLock.
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewRequestPointerLock): Call webkitWebViewBaseRequestPointerLock().
        (webkitWebViewDidLosePointerLock): Call webkitWebViewBaseDidLosePointerLock().
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDispose): Unlock the pointer and release the PointerLockManager.
        (webkitWebViewBaseHandleMouseEvent): Initialize the mouse movement delta for motion events and save the current event.
        (webkitWebViewBaseMotionNotifyEvent): Let PointerLockManager handle motion events while pointer is locked.
        (webkitWebViewBaseRequestPointerLock): Create a PointerLockManager and request it to lock the pointer.
        (webkitWebViewBaseDidLosePointerLock): Request PointerLockManager to unlock the pointer.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/PointerLockManager.cpp: Added.
        (WebKit::PointerLockManager::create):
        (WebKit::PointerLockManager::PointerLockManager):
        (WebKit::PointerLockManager::~PointerLockManager):
        (WebKit::PointerLockManager::lock):
        (WebKit::PointerLockManager::unlock):
        (WebKit::PointerLockManager::handleMotion):
        * UIProcess/gtk/PointerLockManager.h: Added.
        (WebKit::PointerLockManager::didReceiveMotionEvent):
        * UIProcess/gtk/PointerLockManagerWayland.cpp: Added.
        (WebKit::PointerLockManagerWayland::PointerLockManagerWayland):
        (WebKit::PointerLockManagerWayland::~PointerLockManagerWayland):
        (WebKit::PointerLockManagerWayland::lock):
        (WebKit::PointerLockManagerWayland::unlock):
        * UIProcess/gtk/PointerLockManagerWayland.h: Added.
        * UIProcess/gtk/PointerLockManagerX11.cpp: Added.
        (WebKit::PointerLockManagerX11::PointerLockManagerX11):
        (WebKit::PointerLockManagerX11::didReceiveMotionEvent):
        * UIProcess/gtk/PointerLockManagerX11.h: Added.

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

        [iOS] Scroll position does not get restored when doing a history navigation while the reader view is shown
        https://bugs.webkit.org/show_bug.cgi?id=203871
        <rdar://problem/56564603>

        Reviewed by Tim Horton.

        Previously, attempts to restore the scroll position on the web view while it is being dynamically resized
        would get ignored. Instead, we now delay restoring the scroll position until after the view is resized.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]):
        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):

2019-11-05  Kate Cheney  <katherine_cheney@apple.com>

        Layout test website-data-removal-for-site-navigated-to-with-link-decoration.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=203706
        <rdar://problem/56801615>

        Reviewed by Chris Dumez. 

        No new tests, this change is tested by the existing resourceLoadStatistics
        tests.

        This test started flaking when a new memory store was being created
        between tests to maintain consistency. The call to grandfatherExistingWebsiteData
        from populateMemoryStoreFromDisk in the persistent storage was
        async, causing a race condition that led to occasional failures.
        Adding a completion handler and changing the callsite of
        populateMemoryStoreFromDisk should fix this problem.

        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::populateMemoryStoreFromDisk):
        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::populateMemoryStoreFromDisk):

2019-11-05  John Wilander  <wilander@apple.com>

        Temporarily turn off NSURLSession isolation
        https://bugs.webkit.org/show_bug.cgi?id=201822

        Reviewed by Chris Dumez.

        Existing tests skipped.

        Re-enabling it is tracked in rdar://problem/56921584.

        * NetworkProcess/cache/NetworkCacheStorage.h:
            Bumps the version to force a clean cache.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
            Skips setting needsIsolatedSession.

2019-11-05  Per Arne Vollan  <pvollan@apple.com>

        Eliminate mach lookup to cfprefsd on process startup
        https://bugs.webkit.org/show_bug.cgi?id=202866

        Reviewed by Geoffrey Garen.

        Currently, the WebContent and Networking process is calling CFBundleGetValueForInfoDictionaryKey on startup
        to get the entry point function name into the WebKit bundle. This causes a mach lookup to cfprefsd which
        should be avoided. Instead, we can send the service name as part of the bootstrap message when the UI process
        is starting the process, and have the new process read this value from the message on startup to determine
        the name of the entry point. This is possibly also an improvement in launch time, since we avoid reading a
        value from Info.plist.

        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkService/Info-OSX.plist:
        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkService/Info-iOS.plist:
        * PluginProcess/EntryPoint/Cocoa/XPCService/PluginService.64.Info.plist:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-OSX.plist:
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-iOS.plist:

2019-11-05  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Add logging and telemetry to mach services believed to be unused
        https://bugs.webkit.org/show_bug.cgi?id=203831

        Reviewed by Geoffrey Garen.

        The sandbox rules for mach services believed to be unused should have logging and telemetry added to confirm
        whether the assumption is correct.

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

2019-11-05  Tuomas Karkkainen  <tuomas.webkit@apple.com>

        move CrashReporterClientSPI.h and parts of WKCrashReporter to WTF so it can be used in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=203803

        Reviewed by Saam Barati.

        No new tests added because functionality is not changing, code is only
        moved from WebKit to WTF.

        * Platform/cocoa/WKCrashReporter.mm:
        (WebKit::setCrashReportApplicationSpecificInformation):
        (WebKit::setCrashLogMessage): Deleted.
        * WebKit.xcodeproj/project.pbxproj:

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

        Native text substitutions interfere with HTML <datalist> options resulting in crash
        https://bugs.webkit.org/show_bug.cgi?id=203116
        <rdar://problem/49875932>

        Reviewed by Tim Horton.

        On macOS, an NSTableView inside a separate window is used to render suggestions when showing a datalist. The
        crash happens when this table view is reloaded while clicking a datalist suggestion; that is, if -[NSTableView
        reloadData] is invoked after the user sends a platform MouseDown event on the table view cell but before the
        MouseUp is received, the selected row of the table view will be -1 when the action, `-selectedRow:`, is invoked.

        In this particular case, the table view reload is triggered as a result of hiding the autocorrection bubble on
        macOS, thereby committing the alternative text suggestion and changing the value of the text field via an
        editing command.

        To avoid crashing, we simply make `-selectedRow:` robust in the case where the index is invalid.

        Test: fast/forms/datalist/datalist-click-crash.html

        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (-[WKDataListSuggestionsController selectedRow:]):

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

        REGRESSION (r250754): web page using IDBIndex doesn't load occasionally
        https://bugs.webkit.org/show_bug.cgi?id=203431

        Reviewed by Brady Eidson.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::didFireVersionChangeEvent):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2019-11-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for !ENABLE(MEDIA_STREAM) builds
        https://bugs.webkit.org/show_bug.cgi?id=203362
        <rdar://problem/56648232>

        * UIProcess/UserMediaPermissionRequestProxy.h: Enclosed isUserGesturePriviledged with #if ENABLE(MEDIA_STREAM).

2019-11-05  youenn fablet  <youenn@apple.com>

        mp4 video element broken with service worker
        https://bugs.webkit.org/show_bug.cgi?id=184447
        <rdar://problem/39313155>

        Reviewed by Chris Dumez.

        Make a response as range-requested as per https://fetch.spec.whatwg.org/#http-network-or-cache-fetch step 15.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::validateResponse):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):

2019-11-05  youenn fablet  <youenn@apple.com>

        Enforce user gesture for getUserMedia in case a previous getUserMedia call was denied
        https://bugs.webkit.org/show_bug.cgi?id=203362

        Reviewed by Eric Carlson.

        In case the request has user gesture priviledge, do not look at denied request history.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::getRequestAction):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::isUserGesturePriviledged const):

2019-11-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Guard against unexpected -[_WKWebAuthenticationPanel cancel]
        https://bugs.webkit.org/show_bug.cgi?id=203830
        <rdar://problem/56797134>

        Reviewed by Brent Fulgham .

        -[_WKWebAuthenticationPanel cancel] was only expected to be called on behalf of an
        explicit user cancel from the UI. However, clients may call it in different other
        unexpected scenarios as well. We should guard against that.

        To do so, two counter ways are implemented:
        1) AuthenticatorManager::cancelRequest is changed to invoke the pending request if there
        is no GlobalFrameID. This case can only be reached via calling -[_WKWebAuthenticationPanel cancel]
        before AuthenticatorManager::cancelRequest.
        2) WebAuthenticationPanelClient::updatePanel and WebAuthenticationPanelClient::dismissPanel
        will call delegate methods in the next run loop to prevent -[_WKWebAuthenticationPanel cancel]
        being called in the delegates.

        Covered by new API tests.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::cancelRequest):
        (WebKit::AuthenticatorManager::createService const):
        (WebKit::AuthenticatorManager::invokePendingCompletionHandler):
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.mm:
        (WebKit::WebAuthenticationPanelClient::updatePanel const):
        (WebKit::WebAuthenticationPanelClient::dismissPanel const):

2019-11-04  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for non-unified build.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * Shared/ServiceWorkerInitializationData.cpp:
        * UIProcess/API/APIAttachment.cpp:
        * WebProcess/Storage/WebServiceWorkerProvider.h:
        Add missing includes.

2019-11-04  Per Arne Vollan  <pvollan@apple.com>

        Fix crash caused by syscall sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=203826
        <rdar://problem/56332491>

        Reviewed by Brent Fulgham.

        A new syscall needs to be allowed in the WebContent process' sandbox.

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

2019-11-04  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Flush the shared ResourceLoadObserver when the webpage is closed by JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=203623
        <rdar://problem/56756427>

        Reviewed by Alex Christensen.

        This patch adds flushing of pending statistics when a window is closed by JavaScript,
        when a webpage is removed from the web process, and when the web process prepares to
        suspend.

        New API test added.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
            Now calls logTestingEvent() so that the test infrastructure can wait for updates.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _seedResourceLoadStatisticsForTestingWithFirstParty:thirdParty:shouldScheduleNotification:completionHandler:]):
            Test infrastructure to seed every web process' WebCore::ResourceLoadObserver with test data.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _clearResourceLoadStatistics:]):
        (-[WKWebsiteDataStore _isRegisteredAsSubresourceUnderFirstParty:thirdParty:completionHandler:]):
            Test infrastructure.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::seedResourceLoadStatisticsForTesting):
            Test infrastructure.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder):
            Made sure the completion handler is called even if there is no network process.
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
            Now tells all web processes to turn ITP on or off.
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        (WebKit::WebResourceLoadObserver::~WebResourceLoadObserver):
        (WebKit::WebResourceLoadObserver::logSubresourceLoadingForTesting):
            Test infrastructure to seed the observer with test data.
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
            Now checks whether a shared observer already exists before setting one.
        (WebKit::WebProcess::removeWebPage):
        (WebKit::WebProcess::prepareToSuspend):
            These two functions now call WebProcess::flushResourceLoadStatistics().
        (WebKit::WebProcess::setResourceLoadStatisticsEnabled):
            This function now sets the process' shared WebCore::ResourceLoadObserver if none exists.
        (WebKit::WebProcess::flushResourceLoadStatistics):
            This function tells the shared WebCore::ResourceLoadObserver to send any pending
            statistics to the central ITP store.
        (WebKit::WebProcess::seedResourceLoadStatisticsForTesting):
            Test infrastructure to seed the shared observer with test data.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

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

        [iOS][WK2] Simplify process assertion handling for the network process and service worker processes
        https://bugs.webkit.org/show_bug.cgi?id=203633

        Reviewed by Alex Christensen.

        Simplify process assertion handling for the network process and service worker processes.
        In particular, the following changes were made:
        1. Put the NetworkProcessProxy in charge of keeping the network process runnable instead
           of relying on the WebProcessPool to do it.
        2. Put the WebProcessProxy in charge of keeping the web process runnable due to service
           worker activity, instead of relying on the WebProcessPool to do it.
        3. Introduce a new Variant data type which can store a foreground activity, a background
           activity or no activity. This avoid having 2 separate and mutually-exclusive data
           members for foreground and background activities.
        4. The new code is a bit more correct because it makes sure the the activity we're holding
           is valid, instead of simply checking that it has an activity. This means that if the
           process assertion was previously invalidated, we will now properly take a new activity,
           which will re-take a process assertion.

        This patch also reduces the #ifdefing for IOS_FAMILY, since ProcessThrottler and
        ProcessAssertion exist on all platforms.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updateProcessAssertion):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::isValidBackgroundActivity):
        (WebKit::ProcessThrottler::isValidForegroundActivity):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_backgroundWebProcessCounter):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::networkProcessCrashed):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::terminateNetworkProcess):
        (WebKit::WebProcessPool::updateProcessAssertions):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didSetAssertionState):
        (WebKit::WebProcessProxy::updateServiceWorkerProcessAssertion):
        (WebKit::WebProcessProxy::enableServiceWorkers):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::isStandaloneServiceWorkerProcess const):

2019-11-03  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] CtapAuthenticator::tryDowngrade should distinguish requestData().options
        https://bugs.webkit.org/show_bug.cgi?id=203771
        <rdar://problem/56832618>

        Reviewed by Brent Fulgham.

        CtapAuthenticator::tryDowngrade assumes the request is a getAssertion request. This is true
        for most cases but not for Google's registration. For Google's registration, a quirk is
        implemented to use U2F commands for registration if GoogleLegacyAppIdSupportExtension asks
        us to do so.

        No tests given there is no way to simulate google.com in our test infrastructures.

        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::tryDowngrade):

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

        WKWebView can get stuck blank (Web Content process thinks the app is backgrounded)
        https://bugs.webkit.org/show_bug.cgi?id=203774
        <rdar://problem/53399054>

        Reviewed by Chris Dumez.

        With careful timing, if a WKWebView swaps out its content view in the
        background, the incoming view can fail to inform the Web Content process
        when the app comes to the foreground, leaving the layer tree frozen.

        This occurs because the last-sent state is stored per-WKApplicationStateTrackingView,
        and the content view is the WKApplicationStateTrackingView, so it is possible
        for e.g. a WKPDFView to be in the hierarchy, keeping the correct state,
        with an initialized-but-never-parented WKContentView hanging off the WKWebView.

        If it is never parented, WKContentView will think that the current application
        state is foreground (_lastObservedStateWasBackground is initialized to NO).

        If you go into the background with a WKPDFView as the current content view,
        it will inform the Web Content process that the application has backgrounded.

        If, still in the background, WKWebView swaps from the WKPDFView to
        the WKContentView, and then comes into the foreground, when we get the
        notification that the app came to the foreground, we will not forward it
        to the Web Content process, because WKContentView's _lastObservedStateWasBackground
        remains NO.

        To fix this, move _lastObservedStateWasBackground to WebPageProxy, so that
        it always tracks the most recently sent state, regardless of which content view
        is active.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::lastObservedStateWasBackground const):
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView willMoveToWindow:]):
        (-[WKApplicationStateTrackingView didMoveToWindow]):
        (-[WKApplicationStateTrackingView _applicationDidEnterBackground]):
        (-[WKApplicationStateTrackingView _applicationWillEnterForeground]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground):
        (WebKit::WebPageProxy::applicationWillEnterForeground):

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

        Web Inspector: Add diagnostic logging for frontend feature usage
        https://bugs.webkit.org/show_bug.cgi?id=203579
        <rdar://problem/56717410>

        Reviewed by Brian Burg.

        This patch enables diagnostic logging for the Web Inspector web process
        and adds the necessary `InspectorFrontendClient` plumbing to `WebInspectorUI`.

        Original patch by Matt Baker <mattbaker@apple.com>.

        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::supportsDiagnosticLogging): Added.
        (WebKit::WebInspectorUI::logDagnosticEvent): Added.
        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::supportsDiagnosticLogging): Added.
        (WebKit::RemoteWebInspectorUI::logDiagnosticEvent): Added.

        * UIProcess/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController configuration]):
        Default to enabling diagnostic logging for the Web Inspector frontend window.

        * Configurations/FeatureDefines.xcconfig:
        Add `ENABLE_INSPECTOR_TELEMETRY`, which is only enabled for macOS.

2019-11-01  Brady Eidson  <beidson@apple.com>

        Promote "_getWebArchive" to API.
        <rdar://problem/17317547> and https://bugs.webkit.org/show_bug.cgi?id=203767

        Reviewed by Andy Estes.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView createWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]):

2019-11-01  Brady Eidson  <beidson@apple.com>

        Rejigger WKWebArchive headers.
        https://bugs.webkit.org/show_bug.cgi?id=203648

        Reviewed by Andy Estes.

        * Shared/API/c/mac/WKWebArchiveRef.cpp: Renamed from Source/WebKit/Shared/API/c/mac/WKWebArchive.cpp.
        (WKWebArchiveGetTypeID):
        (WKWebArchiveCreate):
        (WKWebArchiveCreateWithData):
        (WKWebArchiveCreateFromRange):
        (WKWebArchiveCopyMainResource):
        (WKWebArchiveCopySubresources):
        (WKWebArchiveCopySubframeArchives):
        (WKWebArchiveCopyData):
        * Shared/API/c/mac/WKWebArchiveRef.h: Copied from Source/WebKit/Shared/API/c/mac/WKWebArchive.h.
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebArchive.h: Renamed from Source/WebKit/Shared/API/c/mac/WKWebArchive.h.
        * WebKit.xcodeproj/project.pbxproj:

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

        Add experimental TextTrackCue API
        https://bugs.webkit.org/show_bug.cgi?id=203649
        <rdar://problem/55675172>

        Reviewed by Jer Noble.

        * Shared/WebPreferences.yaml:

2019-11-01  Brian Burg  <bburg@apple.com>

        REGRESSION(r248696): Element Click on Mac is adding an extra page topContentInsets to y-coordinate
        https://bugs.webkit.org/show_bug.cgi?id=203765
        <rdar://problem/56014369>

        Reviewed by Devin Rousso.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        The topContentInsets is accounted for by rootViewToWindow(), so don't add it in manually.

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

        Investigate if mach lookup access to *.apple-extension-service, *.viewservice, and com.apple.uikit.viewservice.* can be denied
        https://bugs.webkit.org/show_bug.cgi?id=203626

        Reviewed by Alexey Proskuryakov.

        Modify the allow rule for these services to include the telemetry option.

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

2019-11-01  Peng Liu  <peng.liu6@apple.com>

        Turn on the Picture-in-Picture API feature by default
        https://bugs.webkit.org/show_bug.cgi?id=203725

        Reviewed by Jer Noble.

        * Shared/WebPreferences.yaml:

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

        Take down the gesture snapshot early when the back/forward cache is not leveraged
        https://bugs.webkit.org/show_bug.cgi?id=203713
        <rdar://problem/56803910>

        Reviewed by Tim Horton.

        Take down the gesture snapshot as soon as the gesture is done when the back/forward cache
        is not leveraged. Otherwise, the snapshot may stay up for a long time (while we load, parse
        and restore scroll position) and it would look to the user as if the view was unresponsive.
        Showing the page slowly loading in such cases is less confusing as the user knows what's
        going on and is even able to interact with the partially loaded page.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::hasCachedWebPage const):
        * Shared/WebBackForwardListItem.h:
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/ViewGestureController.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::makeSnapshotBlank):
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::makeSnapshotBlank):

2019-10-31  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix mach lookup sandbox violations in the Mail app
        https://bugs.webkit.org/show_bug.cgi?id=203697

        Reviewed by Alexey Proskuryakov.

        Allow mach lookup to the services "com.apple.logd.events" and "com.apple.distributed_notifications@1v3",
        which are seen when running the Mail application. Also allow "com.apple.aggregated", which was previously
        allowed, and is showing up in reports.

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

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

        Turn on IOSurface support in the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=203026
        <rdar://problem/56320993>

        Reviewed by Simon Fraser.

        * Configurations/WebKit.xcconfig:
        Always link IOSurface now that we always have it.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        Turn on Accelerated Drawing and Accelerated Drawing for Canvas by default.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        Don't use RGB10 if we don't have it.

        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        Don't use render server snapshotting in hidden windows, because it
        (correctly, but unhelpfully) cannot capture contents in that case.

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

        REGRESSION (r251215): Mail failed to build
        https://bugs.webkit.org/show_bug.cgi?id=203700
        <rdar://problem/56787012>

        Reviewed by Antoine Quint.

        Revert the private modulemap. It didn't include enough things
        and caused some internal builds to fail.

        We'll put it back with everything included sometime soon.

        * Configurations/WebKit.xcconfig:
        * Modules/OSX.modulemap: Renamed from Source/WebKit/Modules/macOS.modulemap.
        * Modules/iOS.private.modulemap: Removed.
        * Modules/macOS.private.modulemap: Removed.
        * Shared/API/Cocoa/WebKitPrivate.h:

2019-10-31  Alex Christensen  <achristensen@apple.com>

        Enable more features in Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=203699

        Rubber-stamped by Tim Horton.

        * PlatformMac.cmake:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::createCaptureSource):

2019-10-31  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r251861.

        Caused 50+ Layout Test Crashes

        Reverted changeset:

        "Use SecurityOriginData in NetworkProcess where possible
        without other changes"
        https://bugs.webkit.org/show_bug.cgi?id=203615
        https://trac.webkit.org/changeset/251861

2019-10-31  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251854.

        Broke iOS build

        Reverted changeset:

        "Rejigger WKWebArchive headers."
        https://bugs.webkit.org/show_bug.cgi?id=203648
        https://trac.webkit.org/changeset/251854

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

        Remove unneeded HAVE_TIMINGDATAOPTIONS
        https://bugs.webkit.org/show_bug.cgi?id=202990

        Reviewed by Brady Eidson.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

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

        Use SecurityOriginData in NetworkProcess where possible without other changes
        https://bugs.webkit.org/show_bug.cgi?id=203615

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldInterruptLoadForXFrameOptions):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):

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

        Expose more WKPreferences SPI
        https://bugs.webkit.org/show_bug.cgi?id=203631
        <rdar://problem/56717160>

        Reviewed by Brady Eidson.

        I added a unit test for the one that can be easily tested.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setWebAudioEnabled:]):
        (-[WKPreferences _webAudioEnabled]):
        (-[WKPreferences _setAcceleratedCompositingEnabled:]):
        (-[WKPreferences _acceleratedCompositingEnabled]):
        (-[WKPreferences _setRequestAnimationFrameEnabled:]):
        (-[WKPreferences _requestAnimationFrameEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

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

        CMake build should make WebKit framework able to be used by Safari
        https://bugs.webkit.org/show_bug.cgi?id=203685

        Rubber-stamped by Tim Horton.

        * PlatformMac.cmake:

2019-10-31  Brady Eidson  <beidson@apple.com>

        Rejigger WKWebArchive headers.
        https://bugs.webkit.org/show_bug.cgi?id=203648

        Reviewed by Andy Estes.

        * Shared/API/c/mac/WKWebArchiveRef.cpp: Renamed from Source/WebKit/Shared/API/c/mac/WKWebArchive.cpp.
        (WKWebArchiveGetTypeID):
        (WKWebArchiveCreate):
        (WKWebArchiveCreateWithData):
        (WKWebArchiveCreateFromRange):
        (WKWebArchiveCopyMainResource):
        (WKWebArchiveCopySubresources):
        (WKWebArchiveCopySubframeArchives):
        (WKWebArchiveCopyData):
        * Shared/API/c/mac/WKWebArchiveRef.h: Copied from Source/WebKit/Shared/API/c/mac/WKWebArchive.h.
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebArchive.h: Renamed from Source/WebKit/Shared/API/c/mac/WKWebArchive.h.
        * WebKit.xcodeproj/project.pbxproj:

2019-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add telemetry to test a potential cause of crashes under -[WKContentView _interpretKeyEvent:isCharEvent:]
        https://bugs.webkit.org/show_bug.cgi?id=203630
        <rdar://problem/56769229>

        Reviewed by Simon Fraser.

        This iOS-specific crash occurs under `-_interpretKeyEvent:isCharEvent:`, when we first try to access WebEvent's
        properties with `event.keyboardFlags`. This suggests that between storing the WebEvent in WebPageProxy's
        m_keyEventQueue, and later receiving an InterpretKeyEvent sync IPC message in the UI process, something ends up
        overreleasing (or otherwise writing over or corrupting) the WebEvent.

        However, from code inspection, nothing appears to overrelease the WebEvent; an alternate possibility is that the
        API is somehow being invoked from a background thread, which would explain why the WebEvent may sometimes get
        destroyed too early.

        To try and detect this scenario (and avoid keeping any strong references to WebEvent at all), add an
        `os_log_fault` in case the API is being called on a background thread, and bail immediately.

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

2019-10-31  Miguel Gomez  <magomez@igalia.com>

        [CoordGraphics] Avoid painting backing stores for zero-opacity layers
        https://bugs.webkit.org/show_bug.cgi?id=184143

        Reviewed by Žan Doberšek.

        Do not check whether a backingStore is required by a layer inside CoordinatedGraphicsScene. This
        decision is made by the appropriate CoordinatedGraphicsLayer and propagated to the scene by
        sending a valid or null Nicosia::BackingStore instance through the state.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::updateBackingStore):
        (WebKit::layerShouldHaveBackingStore): Deleted.

2019-10-30  Peng Liu  <peng.liu6@apple.com>

        [Picture-in-Picture Web API] Enable the support for iOS
        https://bugs.webkit.org/show_bug.cgi?id=202618

        Reviewed by Jer Noble.

        Enable the Picture-in-Picture API support for iOS (iPad only).

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/cocoa/VideoFullscreenManager.mm:

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

        Prevent Mac CMake build from bit rotting
        https://bugs.webkit.org/show_bug.cgi?id=203647

        Rubber-stamped by Tim Horton.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::m_messagePortChannelRegistry):
        * PlatformMac.cmake:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel delegate]):
        (-[_WKWebAuthenticationPanel setDelegate:]):
        * UIProcess/WebProcessProxy.cpp:

2019-10-30  Per Arne Vollan  <pvollan@apple.com>

        It should be possible to create a mach sandbox extension for the WebContent process before the audit token is known
        https://bugs.webkit.org/show_bug.cgi?id=203618

        Reviewed by Brent Fulgham.

        Currently, we are only able to create a mach sandbox extension for the WebContent process if we know its
        audit token. It should be possible to create a mach extension without the audit token, since this is
        needed when we want to create extensions before the PID or audit token is known. These extensions are
        typically sent in the WebProcess creation parameters.
        
        No new tests, this is not a behavior change, but a patch in preparation for future patches.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::SandboxExtension::createHandleForMachLookup):
        (WebKit::SandboxExtension::createHandleForMachLookupByAuditToken): Deleted.
        * Shared/SandboxExtension.h:
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):

2019-10-30  Per Arne Vollan  <pvollan@apple.com>

        Fix some sysctl read violations in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=203632

        Reviewed by Brent Fulgham.

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

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

        REGRESSION(r251568) If we didn't start a Service Worker, don't try talking to it
        https://bugs.webkit.org/show_bug.cgi?id=203639
        <rdar://problem/56762071>

        Reviewed by Chris Dumez.

        Similar to the fix that introduced this regression, if the UI process does
        not have the entitlement to start a service worker, we should not try
        to load with one.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad): If the
        parent process doesn't have a service worker, use the regular load path.

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

        Turn Resize Observer on by default
        https://bugs.webkit.org/show_bug.cgi?id=203644
        rdar://problem/56026799

        Reviewed by Tim Horton.

        Change the defaultValue of Resize Observer to true.

        * Shared/WebPreferences.yaml:

2019-10-30  Per Arne Vollan  <pvollan@apple.com>

        Lookup to mach services with the WebKit extension should list the allowed services
        https://bugs.webkit.org/show_bug.cgi?id=203619

        Reviewed by Alexey Proskuryakov.

        To tighten the mach lookup rule which allows lookup to services with the "com.apple.webkit.extension.mach"
        extension, all allowed services should be listed. Currently, we are only creating mach lookup extensions to
        "com.apple.iphone.axserver-systemwide", but more will come in the future.

        No new tests. Testing this requires UI interaction on the device to enable Accessibility.

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

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

        WKContentRuleLists should block requests from service workers
        https://bugs.webkit.org/show_bug.cgi?id=201980
        <rdar://problem/55516735>

        Reviewed by Chris Dumez.

        Test: http/tests/contentextensions/service-worker.https.html

        Also covered by an API test.

        * Shared/ServiceWorkerInitializationData.cpp: Added.
        (WebKit::ServiceWorkerInitializationData::encode const):
        (WebKit::ServiceWorkerInitializationData::decode):
        * Shared/ServiceWorkerInitializationData.h: Added.
        * Sources.txt:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::contentRuleListData):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createForServiceWorkers):
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        (WebKit::contentRuleListsFromIdentifier):
        (WebKit::WebProcessProxy::enableServiceWorkers):
        * UIProcess/WebProcessProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::m_userAgent):
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-10-30  Andres Gonzalez  <andresg_22@apple.com>

        Create base class common to AccessibilityObject and AXIsolatedTreeNode.
        https://bugs.webkit.org/show_bug.cgi?id=203408

        Reviewed by Chris Fleizach.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityRootObject):
        (WKAccessibilityFocusedObject):

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

        Unreviewed, fix reversed assertion landed in r251778.

        * UIProcess/ProcessThrottler.h:
        (WebKit::ProcessThrottler::Activity::invalidate):

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

        Unreviewed, fix WatchOS build after r251778.

        * UIProcess/WebProcessProxy.h:

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

        WKFrameIsDisplayingMarkupDocument() should return true after a window.open/document.write
        https://bugs.webkit.org/show_bug.cgi?id=203587
        <rdar://problem/56717726>

        Reviewed by Alex Christensen.

        When doing a document.open(), we were propagating the document's URL to the UIProcess but not its
        MIME type. WKFrameIsDisplayingMarkupDocument() was relying on this MIME type.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didExplicitOpen):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didExplicitOpenForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidExplicitOpen):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

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

        REGRESSION (r238252): HTTP POST is losing application/x-www-form-urlencoded body if there's a redirect to different host
        https://bugs.webkit.org/show_bug.cgi?id=201950
        <rdar://problem/55577782>

        Reviewed by Alex Christensen.

        The resource request body was getting lost on cross-site redirects. This was caused by the fact that a cross-site
        redirect would cause a process-swap and the request to start again from a new process. This would work fine if
        the request does not have a body. However, we have an optimization in place which avoids encoding the request body
        whenever it is sent over IPC. Because the WebResourceLoader::WillSendRequest IPC would not encode the request body,
        any decision to process swap as a result of this IPC (i.e. redirect) would cause the new request in the new process
        to be missing its body. To address the issue, we now make sure to pass the request body in the WillSendRequest IPC
        and reconsile the request with its body on the recipient side.

        Test: http/tests/misc/form-submit-file-cross-site-redirect.html

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2019-10-30  Jer Noble  <jer.noble@apple.com>

        Enable Remote Playback API by default
        https://bugs.webkit.org/show_bug.cgi?id=203595

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

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

        [iOS] [WK2] Improve process assertion-related logging to help identify causes of leaked assertions
        https://bugs.webkit.org/show_bug.cgi?id=203438

        Reviewed by Antti Koivisto.

        Improve process assertion-related logging to help identify causes of leaked assertions. Previously,
        whenever our code needed to prevent suspension of a child process due to some kind of activity, it
        would simply grab a "token" from the child process' ProcessThrottler. This, in-turn, would cause
        the ProcessThrottler to take the right kind of ProcessAssertion or release it when nobody holds
        any tokens any more.

        We frequently have issues where the UIProcess keeps its assertions around for too long after getting
        backgrounding. This causes the assertions to get invalidated and the UIProcess will usually suspend
        (albeit with a delay, which is bad for power). Sometimes though, we get killed because our invalidation
        handler does not get a chance to release the assertion in time.

        Finding out why we're keeping around assertions is currently very difficult because we cannot easily
        see in the logs who is still holding ProcessThrottler tokens. To make such debugging easier, clients
        now notify the ProcessThrottler when they start some activity and provide a user-readable description
        of the activity. The client then gets a ForegroundActivity or BackgroundActivity object instead of
        simply a token. As a result, we are now able to log when a given activity that prevents suspension
        begins and ends, with a user-friendly string. Also, when the assertion gets invalidated, it will
        invalidate all these pending activities and we'll see in the logs the name of the activities that
        were still going on upon invalidation.

        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        (WebKit::RemoteObjectRegistry::backgroundActivity):
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::sendInvocation):
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::takeActivityToken):
        (WebKit::DownloadClient::releaseActivityTokenIfNecessary):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationState):
        (WebKit::NavigationState::releaseNetworkActivity):
        (WebKit::NavigationState::didChangeIsLoading):
        (WebKit::NavigationState::didSwapWebProcesses):
        * UIProcess/Cocoa/UIRemoteObjectRegistry.cpp:
        (WebKit::UIRemoteObjectRegistry::backgroundActivity):
        * UIProcess/Cocoa/UIRemoteObjectRegistry.h:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::processWasResumed):
        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::CallbackBase):
        (WebKit::GenericCallback::create):
        (WebKit::GenericCallback::GenericCallback):
        (WebKit::CallbackMap::put):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles):
        (WebKit::NetworkProcessProxy::syncAllCookies):
        (WebKit::NetworkProcessProxy::didSyncAllCookies):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::ProcessThrottler):
        (WebKit::ProcessThrottler::~ProcessThrottler):
        (WebKit::ProcessThrottler::addActivity):
        (WebKit::ProcessThrottler::removeActivity):
        (WebKit::ProcessThrottler::invalidateAllActivities):
        (WebKit::ProcessThrottler::expectedAssertionState):
        (WebKit::ProcessThrottler::setAssertionState):
        (WebKit::ProcessThrottler::uiAssertionWillExpireImminently):
        * UIProcess/ProcessThrottler.h:
        (WebKit::ProcessThrottler::Activity::Activity):
        (WebKit::ProcessThrottler::Activity::~Activity):
        (WebKit::ProcessThrottler::Activity::isValid const):
        (WebKit::ProcessThrottler::Activity::invalidate):
        (WebKit::ProcessThrottler::shouldBeRunnable const):
        (WebKit::ProcessThrottler::foregroundActivity):
        (WebKit::ProcessThrottler::backgroundActivity):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebBackForwardCacheEntry.cpp:
        (WebKit::WebBackForwardCacheEntry::~WebBackForwardCacheEntry):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookie):
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManagerProxy::setCookies):
        (WebKit::WebCookieManagerProxy::getAllCookies):
        (WebKit::WebCookieManagerProxy::getCookies):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::updateThrottleState):
        (WebKit::WebPageProxy::waitForDidUpdateActivityState):
        (WebKit::WebPageProxy::setInitialFocus):
        (WebKit::WebPageProxy::validateCommand):
        (WebKit::WebPageProxy::executeEditCommand):
        (WebKit::WebPageProxy::requestFontAttributesAtSelectionStart):
        (WebKit::WebPageProxy::replaceMatches):
        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld):
        (WebKit::WebPageProxy::runJavaScriptInFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getBytecodeProfile):
        (WebKit::WebPageProxy::getSamplingProfilerOutput):
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::drawToPDF):
        (WebKit::WebPageProxy::getMarkedRangeAsync):
        (WebKit::WebPageProxy::getSelectedRangeAsync):
        (WebKit::WebPageProxy::characterIndexForPointAsync):
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync):
        (WebKit::WebPageProxy::takeSnapshot):
        (WebKit::WebPageProxy::installActivityStateChangeCompletionHandler):
        (WebKit::WebPageProxy::getLoadDecisionForIcon):
        (WebKit::WebPageProxy::insertAttachment):
        (WebKit::WebPageProxy::updateAttachmentAttributes):
        (WebKit::WebPageProxy::getApplicationManifest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::updateProcessAssertions):
        (WebKit::WebProcessPool::reinstateNetworkProcessAssertionState):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles):
        (WebKit::WebProcessProxy::startBackgroundActivityForFullscreenInput):
        (WebKit::WebProcessProxy::endBackgroundActivityForFullscreenInput):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView presentViewControllerForCurrentFocusedElement]):
        (-[WKContentView dismissAllInputViewControllers:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestFocusedElementInformation):
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::updateSelectionWithTouches):
        (WebKit::WebPageProxy::applyAutocorrection):
        (WebKit::WebPageProxy::selectTextWithGranularityAtPoint):
        (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::selectPositionAtPoint):
        (WebKit::WebPageProxy::beginSelectionInDirection):
        (WebKit::WebPageProxy::updateSelectionWithExtentPoint):
        (WebKit::WebPageProxy::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPageProxy::requestDictationContext):
        (WebKit::WebPageProxy::getSelectionContext):
        (WebKit::WebPageProxy::selectWithTwoTouches):
        (WebKit::WebPageProxy::applicationDidEnterBackground):
        (WebKit::WebPageProxy::requestRectsForGranularityWithSelectionOffset):
        (WebKit::WebPageProxy::requestRectsAtSelectionOffsetWithText):
        (WebKit::WebPageProxy::moveSelectionByOffset):
        (WebKit::WebPageProxy::focusNextFocusedElement):
        (WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF):

2019-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(2.27.2): [GTK] Overview item remove button broken
        https://bugs.webkit.org/show_bug.cgi?id=203461

        Reviewed by Adrian Perez de Castro.

        This is a regression of the switch to new custom protocols implementation. Epiphany is passing NULL as content
        type of ephy-resource requests, in which case we should try to guess the mime type, but we are not doing it.

        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestReadCallback): Use MIMETypeRegistry to guess the mime type when content type is nullptr,
        like NetworkDataTask does.

2019-10-29  Andy Estes  <aestes@apple.com>

        [Quick Look] Clean up LegacyPreviewLoaderClients
        https://bugs.webkit.org/show_bug.cgi?id=203472

        Reviewed by Brady Eidson.

        Replaced QuickLookDocumentData with ShareableResource.

        Removed messages WebPageProxy::DidRequestPasswordForQuickLookDocumentInMainFrame and
        WebPage::DidReceivePasswordForQuickLookDocument, replacing them with async message
        WebPageProxy::RequestPasswordForQuickLookDocumentInMainFrame.

        * Shared/ios/QuickLookDocumentData.cpp: Removed.
        * Shared/ios/QuickLookDocumentData.h: Removed.
        * SourcesCocoa.txt:
        * UIProcess/API/APILoaderClient.h:
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didFinishLoadForQuickLookDocumentInMainFrame):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didFinishLoadForQuickLookDocumentInMainFrame):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::requestPasswordForQuickLookDocumentInMainFrame):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        (WebKit::ProvisionalPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame): Deleted.
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didFinishLoadForQuickLookDocumentInMainFrame):
        (WebKit::WebPageProxy::requestPasswordForQuickLookDocumentInMainFrame):
        (WebKit::WebPageProxy::requestPasswordForQuickLookDocumentInMainFrameShared):
        (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame): Deleted.
        (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrameShared): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp:
        (WebKit::WebPreviewLoaderClient::WebPreviewLoaderClient):
        (WebKit::WebPreviewLoaderClient::didReceiveBuffer):
        (WebKit::WebPreviewLoaderClient::didFinishLoading):
        (WebKit::WebPreviewLoaderClient::didFail):
        (WebKit::WebPreviewLoaderClient::didRequestPassword):
        (WebKit::passwordCallbacks): Deleted.
        (WebKit::WebPreviewLoaderClient::~WebPreviewLoaderClient): Deleted.
        (WebKit::WebPreviewLoaderClient::didReceiveDataArray): Deleted.
        (WebKit::WebPreviewLoaderClient::didReceivePassword): Deleted.
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didStartLoadForQuickLookDocumentInMainFrame):
        (WebKit::WebPage::didFinishLoadForQuickLookDocumentInMainFrame):
        (WebKit::WebPage::requestPasswordForQuickLookDocumentInMainFrame):
        (WebKit::WebPage::didReceivePasswordForQuickLookDocument): Deleted.

2019-10-29  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Add more information to _WKWebAuthenticationPanel
        https://bugs.webkit.org/show_bug.cgi?id=202561
        <rdar://problem/55973910>

        Reviewed by Youenn Fablet and Brent Fulgham.

        This change adds transports and type to _WKWebAuthenticationPanel such that
        clients can know what transport the current ceremony demands and the type of
        the current ceremony. These extra information allow clients to give users
        more specific instructions to interact with authenticators.

        To pass transports to client, the way how them is collected is changed significantly:
        1) The timing is moved to runPanel before the client delegate call.
        2) NfcService::isAvailable is added for AuthenticatorManager to determine if NFC
        is available in the current device.
        3) AuthenticatorManager::filterTransports is added to filter transports requested
        by RP to ones that are available. This process is handled by each service naturally
        before.
        4) AuthenticatorManager::startRequest is now being splitted into AuthenticatorManager::handleRequest,
        AuthenticatorManager::runPanel and AuthenticatorManager::getTransports.

        To pass type to _WKWebAuthenticationPanel, ClientDataType is moved from
        WebCore::AuthenticatorCoordinator to WebCore::WebAuthenticationConstants in
        order to be reused to indicate the ceremony type.

        * UIProcess/API/APIWebAuthenticationPanel.cpp:
        (API::WebAuthenticationPanel::create):
        (API::WebAuthenticationPanel::WebAuthenticationPanel):
        * UIProcess/API/APIWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel relyingPartyID]):
        (wkWebAuthenticationTransport):
        (-[_WKWebAuthenticationPanel transports]):
        (wkWebAuthenticationType):
        (-[_WKWebAuthenticationPanel type]):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::collectTransports):
        (WebKit::WebCore::getClientDataType):
        (WebKit::AuthenticatorManager::handleRequest):
        (WebKit::AuthenticatorManager::filterTransports const):
        (WebKit::AuthenticatorManager::startDiscovery):
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        (WebKit::AuthenticatorManager::runPanel):
        (WebKit::AuthenticatorManager::getTransports const):
        (WebKit::AuthenticatorManager::respondReceivedInternal): Deleted.
        (WebKit::AuthenticatorManager::startRequest): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        (WebKit::AuthenticatorManager::respondReceivedInternal):
        * UIProcess/WebAuthentication/Cocoa/NfcService.h:
        * UIProcess/WebAuthentication/Cocoa/NfcService.mm:
        (WebKit::NfcService::isAvailable):
        (WebKit::NfcService::platformStartDiscovery):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::filterTransports const):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.h:

2019-10-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r251693): [iOS] Unable to change selection in a focused element if the element's bounds change
        https://bugs.webkit.org/show_bug.cgi?id=203582

        Reviewed by Tim Horton.

        The refactoring in r251693 broke the ability to change selection in an editable area by tapping in iOS Safari,
        in the case where the editable element's bounds change after focus. This is because the aforementioned change
        now compares position informations' element context against the focused element information's element context to
        check whether or not the position information request was inside the focused element. However, if the bounds of
        the focused element change in between the position information request and when the element is initially
        focused, the `operator==` comparison will fail, causing us to prevent text selection.

        To fix this, only check whether or not the two element contexts refer to the same element in the DOM by
        comparing page, document and element identifiers, but not the element's bounding rect.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:nodeHasBuiltInClickHandling:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

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

        Implement the Remote Playback API.
        https://bugs.webkit.org/show_bug.cgi?id=162971

        Reviewed by Youenn Fablet.

        Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed()
        notification on to Page.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetRemotePlaybackEnabled):
        (WKPreferencesSetRemotePlaybackEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::playbackTargetPickerWasDismissed):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetPickerWasDismissed):

2019-10-29  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION: WebContent getting killed due to syscall filter violation
        https://bugs.webkit.org/show_bug.cgi?id=203575

        Reviewed by Alexey Proskuryakov.

        The sandbox profile on macOS needs to open up for a syscall.

        No new tests, covered by existing tests.

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

2019-10-29  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Clean up sandbox to group similar rules together 
        https://bugs.webkit.org/show_bug.cgi?id=203525
        <rdar://problem/56686416>

        Reviewed by Per Arne Vollan.

        Clean up the sandbox rules by grouping rules by feature areas to make future editing easier.
        This change should have no impact on behavior.

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

2019-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION (r251413): Nightly build crashes on launch due to -[WKPreferences _setShouldAllowDesignSystemUIFonts:]: unrecognized selector
        https://bugs.webkit.org/show_bug.cgi?id=203549

        Reviewed by Simon Fraser.

        r251413 deleted an SPI that new Safari stopped calling. However,
        old Safari continues to call it. The solution is just to add stub
        implementations so old Safari doesn't fail to link at runtime.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _shouldAllowDesignSystemUIFonts]):
        (-[WKPreferences _setShouldAllowDesignSystemUIFonts:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2019-10-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add enterkeyhint support
        https://bugs.webkit.org/show_bug.cgi?id=189546
        <rdar://problem/51021148>

        Reviewed by Tim Horton.

        This patch adds support for the enterkeyhint HTML attribute on iOS.

        Tests:  EnterKeyHintTests.EnterKeyHintInContentEditableElement
                EnterKeyHintTests.EnterKeyHintInTextInput
                EnterKeyHintTests.EnterKeyHintInTextArea

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

        Add a new flag to FocusedElementInformation to indicate the EnterKeyHint type that should be used when bringing
        up an input view for the focused element.

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

        Map the given EnterKeyHint type to a UIReturnKeyType. If an unsupported (i.e. "previous") or default
        EnterKeyHint value is used, then we fall back to existing behavior which deduces the default enterkeyhint value
        from the input type if the focused element is inside an actionable form; otherwise, we avoid setting any value
        for the `returnKeyType`, defaulting to `UIReturnKeyDefault`.

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

2019-10-29  Kate Cheney  <katherine_cheney@apple.com>

        Layout Test http/tests/resourceLoadStatistics/website-data-removal-for-site-navigated-to-with-link-decoration-database.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=203542#add_comment
        <rdar://problem/56689764>

        Reviewed by John Wilander.

        This test was a flaky failure due to its calling
        scheduleStatisticsProcessingRequestIfNecessary() after logging a cross
        site load with link decoration. This call is currently unecessary
        because this function is not yet used to classify resources, and is
        causing the test to execute a callback before it is ready.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:

2019-10-29  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251639.

        Caused flakey API failures for GetDisplayMediaTest.Constraints

        Reverted changeset:

        "Enforce user gesture for getUserMedia in case a previous
        getUserMedia call was denied"
        https://bugs.webkit.org/show_bug.cgi?id=203362
        https://trac.webkit.org/changeset/251639

2019-10-29  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251646.

        Caused flakey API failures for GetDisplayMediaTest.Constraints

        Reverted changeset:

        "Unreviewed build fix for !ENABLE(MEDIA_STREAM) builds"
        https://bugs.webkit.org/show_bug.cgi?id=203362
        https://trac.webkit.org/changeset/251646

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

        Unreviewed, rolling out r251594.

        Caused an API test failure

        Reverted changeset:

        "mp4 video element broken with service worker"
        https://bugs.webkit.org/show_bug.cgi?id=184447
        https://trac.webkit.org/changeset/251594        

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

        Notification permissions are not remembered for origins without port
        https://bugs.webkit.org/show_bug.cgi?id=203537
        <rdar://problem/55281080>

        Reviewed by Brady Eidson.

        When WKSecurityOriginCreate() gets called with a port that is invalid, then pass
        WTF::nullopt to construct the security origin instead of the invalid port.

        The issue is that the port for security origins is optional internally. However,
        our API (WKSecurityOriginGetPort() & WKSecurityOrigin.port) will return 0 when
        there is no port. As a result, clients such as Safari sometimes pass 0 as port to construct
        a new WKSecurityOriginRef().

        This was causing issues with regards to notifications because Safari would construct
        origins whose string representation looks like "https://www.apple.com:0" and it would
        not match the "https://www.apple.com" we expect internally.

        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginCreate):

2019-10-29  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.27.2 release

        * wpe/NEWS: Add release notes for 2.27.2.

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

        Replace InteractionInformationAtPosition.nodeAtPositionIsFocusedElement with an element context
        https://bugs.webkit.org/show_bug.cgi?id=203498

        Reviewed by Tim Horton.

        Refactors InteractionInformationAtPosition, such that it doesn't need a special flag to indicate whether there
        is a focused element at the position. This is a followup to webkit.org/b/203264; no new tests, as there should
        be no change in behavior.

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

        Add an elementContext to FocusedElementInformation to represent the focused element; then, instead of checking
        whether there is a focused element underneath the request position, simply check that the position information's
        element context matches the FocusedElementInformation's element context.

        Additionally, rename elementRect in FocusedElementInformation to interactionRect, to draw a distinction between
        this rect and the new ElementContext's boundingRect.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Remove the nodeAtPositionIsFocusedElement flag.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:nodeHasBuiltInClickHandling:]):
        (-[WKContentView _zoomToRevealFocusedElement]):
        (-[WKContentView _selectionClipRect]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

        In various places that consult nodeAtPositionIsFocusedElement, instead check that the position information's
        hit-tested element context is the same as the focused element, via FocusedElementInformation.

        (-[WKContentView _didCommitLoadForMainFrame]):

        Nuke the cached position information data upon navigation; without this tweak, we will fail when running several
        iOS layout tests back-to-back, that tap in exactly the same location.

        (rectToRevealWhenZoomingToFocusedElement):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
        (-[WKContentView _elementDidBlur]):
        (-[WKContentView rectForFocusedFormControlView:]):
        (-[WKContentView _didChangeFocusedElementRect:toRect:]): Deleted.

        Remove code to invalidate cached position information when changing the focused element rect.

        * UIProcess/ios/forms/WKFormPopover.mm:
        (-[WKRotatingPopover presentPopoverAnimated:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::positionInformation):
        (WebKit::WebPage::getFocusedElementInformation):

2019-10-28  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fix various non-unified build issues introduced since r251436
        https://bugs.webkit.org/show_bug.cgi?id=203492

        Reviewed by Alex Christensen and Mark Lam.

        * UIProcess/InspectorTargetProxy.h: Add forward declaration of ProvisionalPageProxy.
        * UIProcess/Plugins/PluginProcessProxy.cpp: Add missin inclusion of
        WebProcessProxyMessages.h
        * UIProcess/ProcessThrottler.cpp: Add missing inclusion of wtf/CompletionHandler.h
        * UIProcess/ProvisionalPageProxy.h: Add missing inclusion of WebCore/FrameIdentifier.h
        * UIProcess/WebPageInspectorController.h: Add missing inclusion of WebCore/PageIdentifier.h
        * WebProcess/WebPage/WebPageInspectorTargetController.cpp: Add missing inclusion of
        WebPageInspectorTargetFrontendChannel.h

2019-10-28  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=203505

        Reviewed by Brent Fulgham.

        Running layout tests shows that allowing mach lookup is needed for a set of services which was previously denied.
        This patch add rules for allowing these services again. The service 'com.apple.logd.events' is still denied, since
        it has not been observed to be in use.

        No new tests, covered by existing tests.

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

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

        Unreviewed, rolling out r251675.

        Broke some builds

        Reverted changeset:

        "Remove unused WKWebsiteDataStore setter SPI"
        https://bugs.webkit.org/show_bug.cgi?id=203114
        https://trac.webkit.org/changeset/251675

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

        Add bindings support for the enterkeyhint HTML attribute
        https://bugs.webkit.org/show_bug.cgi?id=203440

        Reviewed by Ryosuke Niwa.

        Add a new runtime switch for the enterkeyhint attribute, and enable it by default on macOS and iOS.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

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

        Remove unused _WKProcessPoolConfiguration SPI
        https://bugs.webkit.org/show_bug.cgi?id=203066

        Reviewed by Youenn Fablet.

        After rdar://problem/56260478 this is not used, so away it goes!

        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::suppressesConnectionTerminationOnSystemChange const): Deleted.
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::globalCTDataConnectionServiceType): Deleted.
        (WebKit::NetworkSessionCocoa::ctDataConnectionServiceType const): Deleted.
        (WebKit::NetworkSessionCocoa::setCTDataConnectionServiceType): Deleted.
        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm:
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorCTDataConnectionServiceType):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration suppressesConnectionTerminationOnSystemChange]): Deleted.
        (-[_WKProcessPoolConfiguration setSuppressesConnectionTerminationOnSystemChange:]): Deleted.
        (-[_WKProcessPoolConfiguration CTDataConnectionServiceType]): Deleted.
        (-[_WKProcessPoolConfiguration setCTDataConnectionServiceType:]): Deleted.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::paymentCoordinatorCTDataConnectionServiceType):

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

        Remove unused WKWebsiteDataStore setter SPI
        https://bugs.webkit.org/show_bug.cgi?id=203114

        Reviewed by Anders Carlsson.

        They have been replaced by _WKWebsiteDataStoreConfiguration SPI which was adopted in rdar://problem/56349165

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setBoundInterfaceIdentifier:]): Deleted.
        (-[WKWebsiteDataStore _boundInterfaceIdentifier]): Deleted.
        (-[WKWebsiteDataStore _setAllowsCellularAccess:]): Deleted.
        (-[WKWebsiteDataStore _allowsCellularAccess]): Deleted.
        (-[WKWebsiteDataStore _setProxyConfiguration:]): Deleted.
        (-[WKWebsiteDataStore _proxyConfiguration]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::setBoundInterfaceIdentifier): Deleted.
        (WebKit::WebsiteDataStore::setAllowsCellularAccess): Deleted.
        (WebKit::WebsiteDataStore::setProxyConfiguration): Deleted.

2019-10-28  Brady Eidson  <beidson@apple.com>

        Expose _printOperationWithPrintInfo: SPI as API
        <rdar://problem/36557179> and https://bugs.webkit.org/show_bug.cgi?id=203496

        Reviewed by Andy Estes.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView printOperationWithPrintInfo:]):
        (-[WKWebView _printOperationWithPrintInfo:]):

2019-10-28  Kate Cheney  <katherine_cheney@apple.com>

        Layout Test http/tests/resourceLoadStatistics/website-data-removal-for-site-navigated-to-with-link-decoration.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=203491
        <rdar://problem/56674176>

        Reviewed by Chris Dumez.

        No new tests, this change is tested by the existing resourceLoadStatistics
        tests.

        This test started flaking when a new memory store was being created
        between tests to maintain consistency. The call to grandfatherExistingWebsiteData
        from populateMemoryStoreFromDisk in the persistent storage was
        async, causing a race condition that led to occasional failures.
        Adding a completion handler and changing the callsite of
        populateMemoryStoreFromDisk should fix this problem.

        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::ResourceLoadStatisticsPersistentStorage):
        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        The persistent store in the databaseEnabled case was never being used
        and is unnecessary.

        (WebKit::WebResourceLoadStatisticsStore::populateMemoryStoreFromDisk):
        Since persistent storage only exists when using the memory store,
        populateMemoryStoreFromDisk should check if
        m_persistentStorage has been initialized.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setUseITPDatabase):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkSession::recreateResourceLoadStatisticStore):
        * NetworkProcess/NetworkSession.h:

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

        [iOS] 3 editing/pasteboard/smart-paste-paragraph-* tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=203264
        <rdar://problem/56512107>

        Reviewed by Tim Horton.

        Fixes several flaky layout tests that exercise a corner case in our logic for caching position information
        responses in the UI process. When focusing an element via a tap, we send a position information request for the
        tap location in -_webTouchEventsRecognized:. After the web process computes the information and hands it back to
        the UI process, we cache this in WKContentView's _positionInformation.

        However, at the time of computing the request, the tapped element has not been focused yet, so the value of the
        position information's nodeAtPositionIsFocusedElement flag is false. After the tap is recognized, we'll then
        focus the element, such that if a subsequent position information request were to arrive at the same location,
        it would have a nodeAtPositionIsFocusedElement flag set to true.

        In this state, if the user taps _exactly_ at the same location again, UIKit (through text interaction gestures)
        will ask us for information at the same point; we will end up using the cached information, for which
        nodeAtPositionIsFocusedElement is false, causing us to incorrectly prevent the text interaction. In this
        particular case, we fail to select text via a double tap gesture.

        To address this, we invalidate the cached position information in the UI process whenever the focused element
        rect changes (e.g. when the focused element changes); the only exception to this is when the previously cached
        position information was not over the focused element, and the new focused element rect is empty, in which case
        the value of nodeAtPositionIsFocusedElement is guaranteed to have not changed.

        While this may potentially leads to an additional synchronous position information request when tapping at the
        same location after focusing an element, this is very difficult to achieve in practice, since the tap location
        would need to be _exactly_ at the same location.

        No new test, since this is exercised by existing flaky layout tests.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
        (-[WKContentView _elementDidBlur]):

        Also, add a FIXME about how we clear out surprisingly little of _focusedElementInformation when blurring the
        focused element.

        (-[WKContentView _didChangeFocusedElementRect:toRect:]):

2019-10-28  John Wilander  <wilander@apple.com>

        Storage Access API: Make the API work with the experimental 3rd-party cookie blocking
        https://bugs.webkit.org/show_bug.cgi?id=203428
        <rdar://problem/56626949>

        Reviewed by Alex Christensen.

        Tests: http/tests/storageAccess/deny-due-to-no-interaction-under-general-third-party-cookie-blocking.html
               http/tests/storageAccess/grant-with-prompt-under-general-third-party-cookie-blocking.html
               http/tests/storageAccess/has-storage-access-under-general-third-party-cookie-blocking-with-cookie.html
               http/tests/storageAccess/has-storage-access-under-general-third-party-cookie-blocking-without-cookie.html

        This patch adds Storage Access API support for the experimental 3rd-party cookie blocking that
        landed in <https://trac.webkit.org/changeset/251467>.

        There are three policies at play because it can be changed with the experimental setting:
        1. The underlying cookie policy.
        2. Shipping ITP.
        3. The off by default, experimental 3rd-party cookie blocking.

        To support them all, a CookieAccess enum was added to encode how the API should respond.
        The enum has these values:
        CannotRequest - This third-party cannot request storage access based on the current policy.
        BasedOnCookiePolicy – This third-party should be treated according to the underlying cookie policy.
        OnlyIfGranted – This third-party can and must get access through the Storage Access API.

        Here's the truth table I used to work through the logic for both
        document.hasStorageAccess() and document.requestStorageAccess():

        Access  | Is        | User        | Has    | 3rd-party    |        |
        granted | prevalent | interaction | cookie | cookie block | RESULT |
        -------------------------------------------------------------------
        |       |           |             |        |              | false  |
        -------------------------------------------------------------------
        |       |           |             |        | true         | false  |
        -------------------------------------------------------------------
        |       |           |             | true   |              | true   |
        -------------------------------------------------------------------
        |       |           |             | true   | true         | false  |
        -------------------------------------------------------------------
        |       |           | true        |        |              | false  |
        -------------------------------------------------------------------
        |       |           | true        |        | true         | false  |
        -------------------------------------------------------------------
        |       |           | true        | true   |              | true   |
        -------------------------------------------------------------------
        |       |           | true        | true   | true         | false  |
        -------------------------------------------------------------------
        |       | true      | !care       | !care  | !care        | false  |
        -------------------------------------------------------------------
        | true  | !care     | !care       | !care  | !care        | true   |
        -------------------------------------------------------------------

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener):
            Extra checks removed since there's no harm in granting access
            to a third-party that already has access by way of the underlying
            cookie policy. Also, this is a temporary compatibility fix.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::cookieAccess const):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
            Extra checks removed since there's no harm in granting access
            to a third-party that already has access by way of the underlying
            cookie policy. Also, this is a temporary compatibility fix.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::ResourceLoadStatisticsStore::setIsThirdPartyCookieBlockingEnabled):
        (WebKit::ResourceLoadStatisticsStore::isThirdPartyCookieBlockingEnabled const):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setIsThirdPartyCookieBlockingEnabled):
            This is now the single path to control this setting in both ITP
            and the network storage session. See comment below.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setShouldBlockThirdPartyCookiesForTesting):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkSession::setIsThirdPartyCookieBlockingEnabled):
            Restructured these so that they are initiated like the rest of the
            parameters and only have a single path for changes so that a
            reset to consistent state resets all the state.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

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

        Remove unused NetworkProcessCreationParameters.urlSchemesRegisteredAsCanDisplayOnlyIfCanRequest
        https://bugs.webkit.org/show_bug.cgi?id=203393

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::registerURLSchemeAsCanDisplayOnlyIfCanRequest const): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsCanDisplayOnlyIfCanRequest):

2019-10-28  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Enable CSS typed OM
        https://bugs.webkit.org/show_bug.cgi?id=192875

        Reviewed by Carlos Garcia Campos.

        Enable the runtime feature by default on GTK/WPE when building with
        experimental features enabled.

        Covered by existing tests.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

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

        [GTK] Simplify the Input Method implementation
        https://bugs.webkit.org/show_bug.cgi?id=203149

        Reviewed by Adrian Perez de Castro.

        * Shared/NativeWebKeyboardEvent.h: Stop using WebCore::CompositionResults.
        (WebKit::NativeWebKeyboardEvent::text const):
        (WebKit::NativeWebKeyboardEvent::handledByInputMethod const):
        (WebKit::NativeWebKeyboardEvent::fakedForComposition const):
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp: Ditto.
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent): Ditto.
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithKeyEvent): Updated to use the new name.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp: Stop using WebCore::CompositionResults.
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseKeyReleaseEvent):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Remove unused function.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setComposition): Use EditingRange instead of two integers and remove replacement range
        that is unused.
        (WebKit::WebPageProxy::confirmComposition): Remove unused selection range parameters.
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::handleKeyboardEvent):
        (WebKit::InputMethodFilter::handleKeyboardEventWithCompositionResults):
        (WebKit::InputMethodFilter::confirmComposition):
        (WebKit::InputMethodFilter::updatePreedit):
        (WebKit::InputMethodFilter::confirmCurrentComposition):
        (WebKit::InputMethodFilter::sendCompositionAndPreeditWithFakeKeyEvents):
        (WebKit::InputMethodFilter::logHandleKeyboardEventForTesting):
        (WebKit::InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting):
        * UIProcess/gtk/InputMethodFilter.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::targetFrameForEditing): Receive a reference instead of a pointer.
        (WebKit::WebPage::confirmComposition): Remove the unused code to handle the selection range.
        (WebKit::WebPage::setComposition): Remove the unused code to handle the replacement range.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-10-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for !ENABLE(MEDIA_STREAM) builds
        https://bugs.webkit.org/show_bug.cgi?id=203362
        <rdar://problem/56648232>

        * UIProcess/UserMediaPermissionRequestProxy.h: Enclosed isUserGesturePriviledged with #if ENABLE(MEDIA_STREAM).

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

        [WebAuthn] Warn users when multiple NFC tags present
        https://bugs.webkit.org/show_bug.cgi?id=200932
        <rdar://problem/54890736>

        Reviewed by Brent Fulgham.

        This patch utilizes -[_WKWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:] to
        inform clients about multiple physical tags are presenting such that clients can instruct users
        to select only one of them physically. Given a physical tag could have multiple different
        interfaces, which NearField will treat them into different NFTags, the tagID is then used to
        identify if there are actually multiple physical tags.

        This patch also adds the ability to restart polling of a partiuclar NFReaderSession to NfcConnection
        and the ability to restart the whole session to NfcService. The former is used to recover from errors
        in the discovery stages, and the latter is used to recover from errors returned from authenticators
        in the request stages. For the latter, given NfcConnection is not awared of the syntax of FIDO2/U2F
        protocol, and CtapAuthenticator/U2fAuthenticator are not awared the transport of the underneath driver.
        A generic restartDiscovery process is added to each service and it is up to the actual service to
        implement the actual process such that AuthenticatorManager can arbitrarily call it after exceptions
        are returned to restart the whole NFC session. To achieve restartDiscovery, NfcConnection is made
        RefCounted as well such that both the NfcService and the CtapNfcDriver could hold it at the same time.
        CtapNfcDriver uses the connection to complete requests as before while NfcService has the new capability
        to use it to stop the current session when restartDiscovery kicks off.

        * Platform/spi/Cocoa/NearFieldSPI.h:
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::serviceStatusUpdated):
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::restartDiscovery):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp:
        (WebKit::AuthenticatorTransportService::startDiscovery):
        (WebKit::AuthenticatorTransportService::restartDiscovery):
        * UIProcess/WebAuthentication/AuthenticatorTransportService.h:
        (WebKit::AuthenticatorTransportService::restartDiscoveryInternal):
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.h:
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::NfcConnection::create):
        (WebKit::NfcConnection::NfcConnection):
        (WebKit::NfcConnection::~NfcConnection):
        (WebKit::NfcConnection::stop const):
        (WebKit::NfcConnection::didDetectTags):
        (WebKit::NfcConnection::restartPolling):
        (WebKit::NfcConnection::startPolling):
        (WebKit::NfcConnection::didDetectTags const): Deleted.
        * UIProcess/WebAuthentication/Cocoa/NfcService.h:
        * UIProcess/WebAuthentication/Cocoa/NfcService.mm:
        (WebKit::NfcService::NfcService):
        (WebKit::NfcService::didConnectTag):
        (WebKit::NfcService::didDetectMultipleTags const):
        (WebKit::NfcService::setConnection):
        (WebKit::NfcService::restartDiscoveryInternal):
        (WebKit::NfcService::platformStartDiscovery):
        (WebKit::NfcService::setDriver): Deleted.
        * UIProcess/WebAuthentication/Mock/MockNfcService.h:
        * UIProcess/WebAuthentication/Mock/MockNfcService.mm:
        (-[WKMockNFTag tagID]):
        (-[WKMockNFTag initWithNFTag:]):
        (-[WKMockNFTag dealloc]):
        (-[WKMockNFTag initWithType:]):
        (-[WKMockNFTag initWithType:tagID:]):
        (WebKit::MockNfcService::receiveStopPolling):
        (WebKit::MockNfcService::receiveStartPolling):
        (WebKit::MockNfcService::platformStartDiscovery):
        (WebKit::MockNfcService::detectTags):
        (WebKit::MockNfcService::detectTags const): Deleted.
        * UIProcess/WebAuthentication/fido/CtapNfcDriver.cpp:
        (WebKit::CtapNfcDriver::CtapNfcDriver):
        * UIProcess/WebAuthentication/fido/CtapNfcDriver.h:
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:

2019-10-26  youenn fablet  <youenn@apple.com>

        Enforce user gesture for getUserMedia in case a previous getUserMedia call was denied
        https://bugs.webkit.org/show_bug.cgi?id=203362

        Reviewed by Eric Carlson.

        In case the request has user gesture priviledge, do not look at denied request history.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::getRequestAction):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::isUserGesturePriviledged const):

2019-10-26  Chris Lord  <clord@igalia.com>

        Put OffscreenCanvas behind a build flag
        https://bugs.webkit.org/show_bug.cgi?id=203146

        Reviewed by Ryosuke Niwa.

        Split the ImageBitmapOffscreenCanvas setting into two separate
        settings so OffscreenCanvas can be disabled at build time.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::WebInspectorUI):

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

        REGRESSION(r251599): Crash in MobileSafari tests (ASSERTION FAILED: m_pendingRequestToSuspendID)
        https://bugs.webkit.org/show_bug.cgi?id=203437
        <rdar://problem/56633399>

        Reviewed by Geoffrey Garen.

        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertionIfNeeded):
        Start the timer before sending the PrepareToSuspend IPC. The reason is that if the process has been
        terminated, the completion handler may run synchronously and cancel the request to suspend / stop
        the timer. Therefore, re-starting the timer after would be a mistake.

2019-10-25  David Kilzer  <ddkilzer@apple.com>

        Unused arguments in MESSAGE_CHECK_CONTEXTID() macros
        <https://webkit.org/b/203389>
        <rdar://problem/55935374>

        Reviewed by Alex Christensen.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (#define MESSAGE_CHECK_CONTEXTID):
        - Rename macro argument from `contextID` to `identifier`
          and change `contextId`to `identifier` in the body of
          the macro so that the argument is always used.
        (WebKit::PlaybackSessionManagerProxy::setUpPlaybackControlsManagerWithID):
        (WebKit::PlaybackSessionManagerProxy::currentTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::bufferedTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::seekableRangesVectorChanged):
        (WebKit::PlaybackSessionManagerProxy::canPlayFastReverseChanged):
        (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionManagerProxy::externalPlaybackPropertiesChanged):
        (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabledChanged):
        (WebKit::PlaybackSessionManagerProxy::mutedChanged):
        (WebKit::PlaybackSessionManagerProxy::volumeChanged):
        (WebKit::PlaybackSessionManagerProxy::durationChanged):
        (WebKit::PlaybackSessionManagerProxy::playbackStartedTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::rateChanged):
        (WebKit::PlaybackSessionManagerProxy::pictureInPictureSupportedChanged):
        (WebKit::PlaybackSessionManagerProxy::pictureInPictureActiveChanged):
        (WebKit::PlaybackSessionManagerProxy::handleControlledElementIDResponse const):
        - Change `contextID` to `contextId` to match local variable name
          now that MESSAGE_CHECK_CONTEXTID() doesn't paper over this
          typo for us.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (#define MESSAGE_CHECK_CONTEXTID):
        - Rename macro argument from `contextID` to `identifier`
          and change `contextId`to `identifier` in the body of
          the macro so that the argument is always used.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (#define MESSAGE_CHECK_CONTEXTID):
        - Rename macro argument and variable in the body of the
          macro from `id` to `identifier` for consistency.

2019-10-25  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix sandbox violations seen while running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=203419

        Reviewed by Brent Fulgham.

        Deny mach lookup to 'com.apple.logd' and 'com.apple.logd.events' and suppress logs, since these are
        believed to be unneeded in the WebContent process. Allow sysctl write to 'vm.footprint_suspend'.
        Deny mach lookup to 'com.apple.system.notification_center' and suppress logs, since allowing this
        is not believed to be needed in the WebContent process.

        No new tests, covered by existing tests.

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

2019-10-25  Matt Lewis  <jlewis3@apple.com>

        Rolling out r251579,r251162,r251512,r251500, and r251498 for build failures
        and test failures

        Unreviewed rollout.

        * Platform/spi/Cocoa/NearFieldSPI.h:
        * UIProcess/API/APIWebAuthenticationPanel.cpp:
        (API::WebAuthenticationPanel::create):
        (API::WebAuthenticationPanel::WebAuthenticationPanel):
        * UIProcess/API/APIWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel relyingPartyID]):
        (wkWebAuthenticationTransport): Deleted.
        (-[_WKWebAuthenticationPanel transports]): Deleted.
        (wkWebAuthenticationType): Deleted.
        (-[_WKWebAuthenticationPanel type]): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::collectTransports):
        (WebKit::AuthenticatorManager::handleRequest):
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::respondReceivedInternal):
        (WebKit::AuthenticatorManager::startDiscovery):
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        (WebKit::AuthenticatorManager::runPanel):
        (WebKit::AuthenticatorManager::startRequest):
        (WebKit::AuthenticatorManager::invokePendingCompletionHandler):
        (WebKit::WebCore::getClientDataType): Deleted.
        (WebKit::AuthenticatorManager::serviceStatusUpdated): Deleted.
        (WebKit::AuthenticatorManager::filterTransports const): Deleted.
        (WebKit::AuthenticatorManager::getTransports const): Deleted.
        (WebKit::AuthenticatorManager::restartDiscovery): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        (WebKit::AuthenticatorManager::respondReceivedInternal): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp:
        (WebKit::AuthenticatorTransportService::startDiscovery):
        (WebKit::AuthenticatorTransportService::restartDiscovery): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorTransportService.h:
        (WebKit::AuthenticatorTransportService::restartDiscoveryInternal): Deleted.
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.h:
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::NfcConnection::NfcConnection):
        (WebKit::NfcConnection::~NfcConnection):
        (WebKit::NfcConnection::didDetectTags const):
        (WebKit::NfcConnection::create): Deleted.
        (WebKit::NfcConnection::stop const): Deleted.
        (WebKit::NfcConnection::didDetectTags): Deleted.
        (WebKit::NfcConnection::restartPolling): Deleted.
        (WebKit::NfcConnection::startPolling): Deleted.
        * UIProcess/WebAuthentication/Cocoa/NfcService.h:
        * UIProcess/WebAuthentication/Cocoa/NfcService.mm:
        (WebKit::NfcService::NfcService):
        (WebKit::NfcService::didConnectTag):
        (WebKit::NfcService::setDriver):
        (WebKit::NfcService::platformStartDiscovery):
        (WebKit::NfcService::isAvailable): Deleted.
        (WebKit::NfcService::didDetectMultipleTags const): Deleted.
        (WebKit::NfcService::setConnection): Deleted.
        (WebKit::NfcService::restartDiscoveryInternal): Deleted.
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::filterTransports const): Deleted.
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.h:
        * UIProcess/WebAuthentication/Mock/MockNfcService.h:
        * UIProcess/WebAuthentication/Mock/MockNfcService.mm:
        (-[WKMockNFTag initWithNFTag:]):
        (-[WKMockNFTag dealloc]):
        (-[WKMockNFTag initWithType:]):
        (WebKit::MockNfcService::platformStartDiscovery):
        (WebKit::MockNfcService::detectTags const):
        (-[WKMockNFTag tagID]): Deleted.
        (-[WKMockNFTag initWithType:tagID:]): Deleted.
        (WebKit::MockNfcService::receiveStopPolling): Deleted.
        (WebKit::MockNfcService::receiveStartPolling): Deleted.
        * UIProcess/WebAuthentication/fido/CtapNfcDriver.cpp:
        (WebKit::CtapNfcDriver::CtapNfcDriver):
        * UIProcess/WebAuthentication/fido/CtapNfcDriver.h:
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:

2019-10-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 13] fast/forms/ios/accessory-bar-navigation.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=203294
        <rdar://problem/54520848>

        Reviewed by Tim Horton.

        Add an SPI declaration (as well as an internal-SKD-only header import) for UIKeyboardPreferencesController.
        See Tools/ChangeLog for more details.

        * Platform/spi/ios/UIKitSPI.h:

2019-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Add exclusion rules to text manipulation SPI
        https://bugs.webkit.org/show_bug.cgi?id=203398
        <rdar://problem/56567256>

        Reviewed by Wenson Hsieh.

        Added SPI to specify the configuration for the text manipulation (see r251574), in particular, the set of rules
        governing which content should be excluded or included in text manipulations.

        Test: TextManipulation.StartTextManipulationExitEarlyWithoutDelegate

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]): Takes _WKTextManipulationConfiguration
        as an argument. Also fixed a bug that we weren't calling the completion handler when the delegate was not set.
        (-[WKWebView _completeTextManipulation:completion:]):
        (-[WKWebView _startTextManipulationsWithCompletionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKTextManipulationConfiguration.h: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationConfiguration.mm: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationExclusionRule.h: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationExclusionRule.mm: Added.
        (-[_WKTextManipulationExclusionRule initExclusion:forElement:]): Added.
        (-[_WKTextManipulationExclusionRule initExclusion:forAttribute:value:]): Added.
        (-[_WKTextManipulationExclusionRule elementName]): Added.
        (-[_WKTextManipulationExclusionRule attributeName]): Added.
        (-[_WKTextManipulationExclusionRule attributeValue]): Added.
        * UIProcess/API/Cocoa/_WKTextManipulationToken.h: Added excluded boolean property.
        * UIProcess/API/Cocoa/_WKTextManipulationToken.mm: Removed the superflous import of RetainPtr.h
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::startTextManipulations):
        (WebKit::WebPageProxy::completeTextManipulation):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::startTextManipulations):
        (WebKit::WebPage::completeTextManipulation):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        [iOS][WK2] Use sendWithAsyncReply() to simplify the prepareToSuspend logic
        https://bugs.webkit.org/show_bug.cgi?id=203422

        Reviewed by Alex Christensen.

        Use sendWithAsyncReply() to simplify the prepareToSuspend logic and make it easier to
        understand.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::processWillSuspendImminentlyForTestingSync):
        (WebKit::NetworkProcess::prepareToSuspend):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processWillSuspendImminentlyForTesting]):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
        (WebKit::NetworkProcessProxy::processReadyToSuspend): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::processReadyToSuspend):
        (WebKit::ProcessThrottler::sendPrepareToSuspendIPC):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ProcessThrottlerClient.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendPrepareToSuspend):
        (WebKit::WebProcessProxy::processReadyToSuspend): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::prepareToSuspend):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-10-25  youenn fablet  <youenn@apple.com>

        WebProcess should unregister its interest for a SWServerRegistration when all its corresponding ServiceWorkerRegistrations are destroyed
        https://bugs.webkit.org/show_bug.cgi?id=203410

        Reviewed by Chris Dumez.

        A SWServerRegistration is keeping a list of web processes that should be notified of change to its state.
        Previously, WebProcesses were registering their interest to a SWServerRegistration on construction of a ServiceWorkerRegistration,
        and unregistering their interest on destruction of a ServiceWorkerRegistration.

        This does not work in case two ServiceWorkerRegistrations are created for the same SWServerRegistration in the same WebProcess.
        In that case, when one of the two ServiceWorkerRegistration is destroyed, the WebProcess will no longer be notified of changes to the SWServerRegistration,
        thus breaking the second ServiceWorkerRegistration behavior.

        We introduce a map at WebProcess level to keep track of the number of ServiceWorkerRegistration created for a given SWServerRegistration.

        Covered by re-enabled tests.

        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::addServiceWorkerRegistrationInServer):
        (WebKit::WebSWClientConnection::removeServiceWorkerRegistrationInServer):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addServiceWorkerRegistration):
        (WebKit::WebProcess::removeServiceWorkerRegistration):
        * WebProcess/WebProcess.h:

2019-10-25  youenn fablet  <youenn@apple.com>

        mp4 video element broken with service worker
        https://bugs.webkit.org/show_bug.cgi?id=184447
        <rdar://problem/39313155>

        Reviewed by Chris Dumez.

        Make a response as range-requested as per https://fetch.spec.whatwg.org/#http-network-or-cache-fetch step 15.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::validateResponse):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):

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

        [iOS] Regression(r251067) WebProcesses with service workers no longer keep their network process alive
        https://bugs.webkit.org/show_bug.cgi?id=203388
        <rdar://problem/56600074>

        Reviewed by Geoffrey Garen.

        Historically, WebProcessProxy::didSetAssertionState() used to return early for service worker processes
        because we did not want service worker processes to prevent the network process from suspending. The
        WebProcesses using the service worker process would prevent the network process from suspending when
        they are visible, so it would work fine.

        However, after r251067, there is no longer a concept of service worker process per se. Service workers
        will now sometimes run in regular WebProcesses where we have pages. In such cases, didSetAssertionState()
        would still return early and fail to keep its network process alive, even when the page(s) in this process
        are visible on screen.

        To address the issue, we now only return early if the process has a service worker but no page.
        This should restore pre-existing behavior.

        Note that this was causing hangs such as <rdar://problem/56245136> because the WebProcess would be
        stuck on sync IPC to a suspended network process.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didSetAssertionState):

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

        Standardize "PageID=" vs "pageID =" in release logging
        https://bugs.webkit.org/show_bug.cgi?id=203002

        Reviewed by Geoffrey Garen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _cancelAnimatedResize]):
        (-[WKWebView _didCompleteAnimatedResize]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::processDidTerminate):
        (WebKit::ProvisionalPageProxy::cancel):
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        (WebKit::ProvisionalPageProxy::didCreateMainFrame):
        (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::tryLoadingUsingURLSchemeHandler):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::serviceWorkerDidNotHandle):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didBlockAuthenticationChallenge):
        (WebKit::WebResourceLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):

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

        Simplify ProcessThrottler implementation
        https://bugs.webkit.org/show_bug.cgi?id=203370

        Reviewed by Alex Christensen.

        Simplify ProcessThrottler implementation by:
        - Getting rid of CancelPrepareToSuspend IPC. Instead a regular ProcessDidResume IPC is sent to
          the child process.
        - Getting rid of the ProcessWillSuspendImminently IPC and send a regular ProcessDidResume IPC
          with a 'isSuspensionImminent' flag instead.
        - Whether the suspension is imminent or not, the child process now always responds with
          a ProcessReadyToSuspend IPC. This simplifies our logic as the idea is that treating imminent
          and non-imminent suspension should share as much of the same logic as possible.
        - All PrepareToSuspend IPCs now have an associated identifier and the child process sends back
          this identifier when responding with a ProcessReadyToSuspend IPC. This allows the
          ProcessThrottler to easily ignore outdated requests to suspend, without requiring the
          m_suspendMessageCount data member we had.

        This patch also adds more logging to ProcessThrottler and the suspension logic in the child
        processes. All ProcessThrottler logging now also shows the child process's PID for clarity.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::processWillSuspendImminentlyForTestingSync):
        (WebKit::NetworkProcess::prepareToSuspend):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processWillSuspendImminentlyForTesting]):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
        (WebKit::NetworkProcessProxy::processReadyToSuspend):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::generatePrepareToSuspendRequestID):
        (WebKit::ProcessThrottler::ProcessThrottler):
        (WebKit::m_backgroundCounter):
        (WebKit::ProcessThrottler::expectedAssertionState):
        (WebKit::ProcessThrottler::updateAssertionStateNow):
        (WebKit::ProcessThrottler::setAssertionState):
        (WebKit::ProcessThrottler::updateAssertionIfNeeded):
        (WebKit::ProcessThrottler::didConnectToProcess):
        (WebKit::ProcessThrottler::prepareToSuspendTimeoutTimerFired):
        (WebKit::ProcessThrottler::processReadyToSuspend):
        (WebKit::ProcessThrottler::clearPendingRequestToSuspend):
        (WebKit::ProcessThrottler::sendPrepareToSuspendIPC):
        (WebKit::ProcessThrottler::uiAssertionWillExpireImminently):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ProcessThrottlerClient.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendPrepareToSuspend):
        (WebKit::WebProcessProxy::processReadyToSuspend):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::prepareToSuspend):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-10-23  Ryosuke Niwa  <rniwa@webkit.org>

        Add a mechanism to find and manipulate text by paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=203286

        Reviewed by Wenson Hsieh.

        This patch introduces a new SPI to find paragraphs of text and let client replace the content of each paragraph.
        For now, this SPI is limited to find & replace contents of main frame's document.

        WKWebView's _startTextManipulationsWithCompletionHandler sends StartTextManipulations message to WebContent process
        to find all paragraphs in the main frame. WebContent process will send back DidFindTextManipulationItem message
        for each paragraph, which in turn calls back _WKTextManipulationDelegate's _webView: didFindTextManipulationItem:.

        Upon receiving this delegate callback, the client can invoke WKWebView's _completeTextManipulation to replace
        the content. It will send CompleteTextManipulation to WebContent process, which will invoke completeManipulation
        on main frame's document's TextManipulationController.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _textManipulationDelegate]): Aded.
        (-[WKWebView _setTextManipulationDelegate:]): Aded.
        (-[WKWebView _startTextManipulationsWithCompletionHandler:]):
        (-[WKWebView _completeTextManipulation:completion:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKTextManipulationDelegate.h: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationItem.h: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationItem.mm: Added.
        (-[_WKTextManipulationItem initWithIdentifier:tokens:]):
        (-[_WKTextManipulationItem identifier]):
        (-[_WKTextManipulationItem tokens]):
        * UIProcess/API/Cocoa/_WKTextManipulationToken.h: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationToken.mm: Added.
        (-[_WKTextManipulationToken init]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::startTextManipulations):
        (WebKit::WebPageProxy::didFindTextManipulationItem):
        (WebKit::WebPageProxy::completeTextManipulation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::startTextManipulations):
        (WebKit::WebPage::completeTextManipulation):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-10-24  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r251558.

        This broke internal builds

        Reverted changeset:

        "Add a mechanism to find and manipulate text by paragraphs"
        https://bugs.webkit.org/show_bug.cgi?id=203286
        https://trac.webkit.org/changeset/251558

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

        REGRESSION(r251409) Service worker connection should not be established without service worker entitlement
        https://bugs.webkit.org/show_bug.cgi?id=203385
        <rdar://problem/37790257>

        Reviewed by Chris Dumez.

        r251409 introduced a new call to establishSWServerConnection that should have an entitlement check.
        This was caught by a unit test in CI that is not easy to reproduce in WebKit's test.  See the radar.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):

2019-10-24  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Mismatch in com.apple.coremedia.audiodeviceclock declarations
        https://bugs.webkit.org/show_bug.cgi?id=203367
        <rdar://problem/56581166>

        Reviewed by Per Arne Vollan.

        The 'common.sb' sandbox allows access to "com.apple.coremedia.audiodeviceclock.xpc", but
        the WebContent sandbox blocked access to "com.apple.coremedia.audiodeviceclock". This means
        we aren't blocking that endpoint.

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

2019-10-24  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Mismatch in com.apple.MediaPlayer.RemotePlayerService declarations
        https://bugs.webkit.org/show_bug.cgi?id=203368
        <rdar://problem/56581152>

        Reviewed by Per Arne Vollan.

        The 'common.sb' sandbox allows access to the xpc-service-name "com.apple.MediaPlayer.RemotePlayerService",
        but we block access to the global-name "com.apple.MediaPlayer.RemoteService". We aren't blocking
        the right thing.

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

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

        Expose pageZoom as API.
        https://bugs.webkit.org/show_bug.cgi?id=203381

        Reviewed by Andy Estes.

        No new tests (No behavior change, identical to SPI)

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setPageZoom:]):
        (-[WKWebView pageZoom]):
        (-[WKWebView _pageZoomFactor]):
        (-[WKWebView _setPageZoomFactor:]):

2019-10-23  Ryosuke Niwa  <rniwa@webkit.org>

        Add a mechanism to find and manipulate text by paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=203286

        Reviewed by Wenson Hsieh.

        This patch introduces a new SPI to find paragraphs of text and let client replace the content of each paragraph.
        For now, this SPI is limited to find & replace contents of main frame's document.

        WKWebView's _startTextManipulationsWithCompletionHandler sends StartTextManipulations message to WebContent process
        to find all paragraphs in the main frame. WebContent process will send back DidFindTextManipulationItem message
        for each paragraph, which in turn calls back _WKTextManipulationDelegate's _webView: didFindTextManipulationItem:.

        Upon receiving this delegate callback, the client can invoke WKWebView's _completeTextManipulation to replace
        the content. It will send CompleteTextManipulation to WebContent process, which will invoke completeManipulation
        on main frame's document's TextManipulationController.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _textManipulationDelegate]): Aded.
        (-[WKWebView _setTextManipulationDelegate:]): Aded.
        (-[WKWebView _startTextManipulationsWithCompletionHandler:]):
        (-[WKWebView _completeTextManipulation:completion:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKTextManipulationDelegate.h: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationItem.h: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationItem.mm: Added.
        (-[_WKTextManipulationItem initWithIdentifier:tokens:]):
        (-[_WKTextManipulationItem identifier]):
        (-[_WKTextManipulationItem tokens]):
        * UIProcess/API/Cocoa/_WKTextManipulationToken.h: Added.
        * UIProcess/API/Cocoa/_WKTextManipulationToken.mm: Added.
        (-[_WKTextManipulationToken init]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::startTextManipulations):
        (WebKit::WebPageProxy::didFindTextManipulationItem):
        (WebKit::WebPageProxy::completeTextManipulation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::startTextManipulations):
        (WebKit::WebPage::completeTextManipulation):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-10-24  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed fix after r251511.

        Some syctl names were omitted from the initial checkin.

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

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

        Formalize PDF snapshot API.
        https://bugs.webkit.org/show_bug.cgi?id=203374

        Reviewed by Tim Horton.

        Covered by API tests and MiniBrowser usage.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKPDFConfiguration.h: Added.
        * UIProcess/API/Cocoa/WKPDFConfiguration.mm: Added.
        (-[WKPDFConfiguration init]):
        (-[WKPDFConfiguration copyWithZone:]):

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView createPDFWithConfiguration:completionHandler:]):
        (-[WKWebView _takePDFSnapshotWithConfiguration:completionHandler:]):

        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.h: Unified build strikes again.

        * WebKit.xcodeproj/project.pbxproj:

2019-10-24  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove 'deny' rules that do not have a corresponding 'allow' rule
        https://bugs.webkit.org/show_bug.cgi?id=203352

        Reviewed by Per Arne Vollan.

        Now that we no longer import 'common.sb', and have removed entries that allowed
        services that we block, we can remove the 'deny' command. This is safe because
        everything is denied by default.

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

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

        Pass CORS-enabled schemes through WebProcess instead of having them NetworkProcess-global
        https://bugs.webkit.org/show_bug.cgi?id=202891

        Reviewed by Youenn Fablet.

        No change in behavior.  Now the LegacySchemeRegistry is not used as much in the NetworkProcess, a step towards no use at all.
        This functionality is currently only available through the glib API webkit_security_manager_register_uri_scheme_as_cors_enabled
        but it has been requested in bug 201180 and bug 199064.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::registerURLSchemesAsCORSEnabled):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::schemeRegistry):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::doesNotNeedCORSCheck const):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::registerURLSchemeAsCORSEnabled const): Deleted.
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        * NetworkProcess/NetworkSchemeRegistry.cpp: Added.
        (WebKit::NetworkSchemeRegistry::registerURLSchemeAsCORSEnabled):
        (WebKit::NetworkSchemeRegistry::shouldTreatURLSchemeAsCORSEnabled):
        * NetworkProcess/NetworkSchemeRegistry.h: Added.
        (WebKit::NetworkSchemeRegistry::create):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        Use nullptr, indicating that the PingLoad constructor that is used in ad click attribution should not check the custom scheme registry.
        This is Ok because ad click attribution is only used for HTTP family schemes.
        (WebKit::m_blobFiles):
        * NetworkProcess/PingLoad.h:
        * Sources.txt:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsCORSEnabled):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::registerURLSchemeAsCORSEnabled):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::registerURLSchemeAsCORSEnabled const): Deleted.
        * WebProcess/WebProcess.h:

2019-10-24  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Enable runtime setting with experimental features for Server Timing API
        https://bugs.webkit.org/show_bug.cgi?id=203295

        Reviewed by Carlos Garcia Campos.

        Enable the runtime ServerTiming by default when GTK or WPE is built
        with experimental features enabled.

        No new tests, no change in behaviour for WTR.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:

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

        WebBackForwardCache::removeEntriesMatching() may re-enter and crash
        https://bugs.webkit.org/show_bug.cgi?id=203341
        <rdar://problem/56553939>

        Reviewed by Geoffrey Garen.

        When WebBackForwardCache::removeEntriesMatching() was clearing the WebBackForwardListItem's
        WebBackForwardCacheEntry, it could destroyed a SuspendedPageProxy which could shutdown a
        WebProcess. Upon shutting down, we would try to remove WebBackForwardCache entries associated
        with a given process, re-enter removeEntriesMatching() and crash.

        To address the issue, I made WebBackForwardCache::removeEntriesMatching() safe to re-enter.
        We now clear the WebBackForwardListItems' WebBackForwardCacheEntries only after we're done
        updating m_itemsWithCachedPage.

        * UIProcess/WebBackForwardCache.cpp:
        (WebKit::WebBackForwardCache::removeEntriesMatching):

2019-10-23  Megan Gardner  <megan_gardner@apple.com>

        Rename force-press-related functions to refer to context menus, and fix a former force-press test
        https://bugs.webkit.org/show_bug.cgi?id=202663
        <rdar://problem/52699530>

        Reviewed by Dean Jackson.

        Add plumbing for contextMenu tests to function again, and rename all 
        relevant fuctions to more correctly reflect that this does not specifically
        require a force press to activate any longer.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didShowContextMenu]):
        (-[WKWebView _didDismissContextMenu]):
        (-[WKWebView _didShowForcePressPreview]): Deleted.
        (-[WKWebView _didDismissForcePressPreview]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _contextMenuInteraction:configurationForMenuAtLocation:completion:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        (-[WKContentView _previewItemController:didDismissPreview:committing:]):
        (-[WKContentView _previewItemControllerDidCancelPreview:]):

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

        macCatalyst: Should dispatch contextmenu event on right click
        https://bugs.webkit.org/show_bug.cgi?id=203316
        <rdar://problem/54617376>

        Reviewed by Wenson Hsieh.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::isContextClick):
        (WebKit::handleContextMenuEvent):
        (WebKit::WebPage::contextMenuForKeyEvent):
        (WebKit::handleMouseEvent):
        * WebProcess/WebPage/WebPage.h:

2019-10-23  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Stop including 'common.sb' 
        https://bugs.webkit.org/show_bug.cgi?id=203318

        Reviewed by Per Arne Vollan.

        Replace the 'import' of common.sb with the equivalent statements. This is the
        first step in a task to remove uneeded sandbox rules.

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

2019-10-23  Kate Cheney  <katherine_cheney@apple.com>

        Implement dumpResourceLoadStatistics in SQLite ITP Database
        https://bugs.webkit.org/show_bug.cgi?id=203224
        <rdar://problem/56482165>

        Reviewed by John Wilander. 

        This patch implements dumpResourceLoadStatistics() in the ITP database
        store. This function required a boolean flag isScheduledForWebsiteDataRemoval that
        now must be stored in the database, resulting in a small schema change.

        Because of the schema change, this patch also compares any existing 
        database file against the new schema, and deletes the existing file if the schema is 
        not current. 

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        The logic for topFrameLinkDecorationsFromQuery was the opposite
        of all other "xyzFrom" queries. When merging data from the memory 
        store, the load statistic being inserted holds a list of topFrames 
        which it has been redirected to from. I think it makes more sense
        to also organize the table this way.

        (WebKit::ObservedDomainsTableSchemaV1):
        (WebKit::ObservedDomainsTableSchemaV1Alternate):
        For support on both iOS and MacOS, there are two CREATE TABLE queries
        to compare to, depending on whether the query result contains quotes
        around the table name.

        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openITPDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndDropOldDatabaseIfNecessary):
        The code to check for the current schema was adapted from SQLiteIDBBackingStore.cpp

        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertObservedDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureAndMakeDomainList):
        The previous naming of the list parameter in this function was
        confusing because it is used by many different relationships not just
        subframes under top frames.

        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        topFrameLinkDecorationsFrom were never inserted into the database.

        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        (WebKit::ResourceLoadStatisticsDatabaseStore::merge):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistic):
        Since the statement to get all data for a given domain is now used in
        multiple places, I stored the query as a constexpr auto.

        (WebKit::ResourceLoadStatisticsDatabaseStore::logCrossSiteLoadWithLinkDecoration):
        Matched the memory store functionality, which calls the boolean
        "gotLinkDecorationFromPrevalentResource." I thought isScheduledForWebsiteDataRemoval 
        would be more clear of a name, because this flag gets cleared even when
        prevalent top frame link decorations for this domain still exist in the table.

        (WebKit::ResourceLoadStatisticsDatabaseStore::dumpResourceLoadStatistics):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setIsScheduledForWebsiteDataRemoval):
        (WebKit::ResourceLoadStatisticsDatabaseStore::prevalentDomains): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::domains):
        To match memory store functionality, the check for website data to
        delete should check all domains, not just prevalent ones.

        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUnexpiredRecentUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllWebsiteDataFor):
        This now needs to check if the resource is prevalent, because it is
        no longer guaranteed.

        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllButCookiesFor):
        (WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToRemoveWebsiteDataFor):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getDomainStringFromDomainID):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getSubStatisticStatement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::appendSubStatisticList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::resourceToString):
        This functionality matches the toString function in
        ResourceLoadStatistics.cpp.

        (WebKit::CompletionHandler<void):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:

2019-10-23  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: notify inspector when provisional page is created, committed and destroyed
        https://bugs.webkit.org/show_bug.cgi?id=202704

        Reviewed by Devin Rousso.

        Target.targetCreated event is now generated for provisional pages as well as for regular
        ones. This is the first step toward reattaching inspector earlier during PSON. In the future
        if debugging is in progress the provisional target (page) will be paused until a signal from
        inspector frontend. This will enable the frontend configure all agents before navigation starts.

        * Sources.txt:
        * UIProcess/API/APIWebAuthenticationPanel.cpp:
        (API::WebAuthenticationPanel::WebAuthenticationPanel): Added explicit namespace specifier
        to the constructor's argument as otherwise compilation fails due to conflict between API::String
        and WTF::String.

        * UIProcess/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::create):
        (WebKit::InspectorTargetProxy::connect):
        (WebKit::InspectorTargetProxy::disconnect):
        (WebKit::InspectorTargetProxy::sendMessageToTargetBackend):
        (WebKit::InspectorTargetProxy::didCommitProvisionalTarget):
        (WebKit::InspectorTargetProxy::isProvisional const):
        (WebKit::InspectorTargetProxy::previousTargetID const):
        * UIProcess/InspectorTargetProxy.h: Target proxy can start as a provisional target (with a pointer to
        ProvisionalPageProxy) and later either be committed or destroyed.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::didReceiveMessage): Forward inspector messages to parent page's WebPageInspectorController.
        Since each WebPage has a unique identifier the target ids will be globally unique and there is no risk of collisions.

        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::page const):
        * UIProcess/WebPageInspectorController.cpp:
        (WebKit::getTargetID):
        (WebKit::WebPageInspectorController::WebPageInspectorController):
        (WebKit::WebPageInspectorController::clearTargets):
        (WebKit::WebPageInspectorController::createInspectorTarget):
        (WebKit::WebPageInspectorController::destroyInspectorTarget):
        (WebKit::WebPageInspectorController::didCreateProvisionalPage):
        (WebKit::WebPageInspectorController::didDestroyProvisionalPage):
        (WebKit::WebPageInspectorController::didCommitProvisionalPage):
        (WebKit::WebPageInspectorController::addTarget):
        * UIProcess/WebPageInspectorController.h:
        * UIProcess/WebPageInspectorTargetAgent.cpp: Removed. Merged this agent into InspectorTargetAgent.
        * UIProcess/WebPageInspectorTargetAgent.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::commitProvisionalPage):
        * UIProcess/WebPageProxy.h: Moved the target management logic into WebPageInspectorController.
        WebPageProxy/ProvisionalPageProxy are expected to notifiy it about key lifecycle events and also
        forward to it messages from inspector in the inspected WebProcess. How it translates to Target
        events is inspector's business.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPageInspectorTarget.cpp:
        (WebKit::WebPageInspectorTarget::identifier const):
        (WebKit::WebPageInspectorTarget::connect):
        (WebKit::WebPageInspectorTarget::disconnect):
        (WebKit::WebPageInspectorTarget::toTargetID):
        * WebProcess/WebPage/WebPageInspectorTarget.h: Made the target own frontend channel instance as it's the
        only place where the page specific channel is used.

        * WebProcess/WebPage/WebPageInspectorTargetController.cpp:
        (WebKit::WebPageInspectorTargetController::removeTarget):
        (WebKit::WebPageInspectorTargetController::connectInspector):
        (WebKit::WebPageInspectorTargetController::disconnectInspector):
        * WebProcess/WebPage/WebPageInspectorTargetController.h:
        * WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.cpp:
        (WebKit::WebPageInspectorTargetFrontendChannel::WebPageInspectorTargetFrontendChannel):
        (WebKit::WebPageInspectorTargetFrontendChannel::sendMessageToFrontend):
        * WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.h: The channel's lifetime is managed by owning
        target. No need to reference count it.

2019-10-22  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Supply FrameInfo in -[WKUIDelegatePrivate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=202563
        <rdar://problem/55973968>

        Reviewed by Brent Fulgham.

        This patch makes WKFrameInfo available to clients via the above SPI. To do so,
        SecuirtyOrigin of the caller document is passed from WebContent Process.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::runWebAuthenticationPanel):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::runWebAuthenticationPanel):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::runPanel):
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        (WebKit::WebAuthenticatorCoordinatorProxy::handleRequest):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.messages.in:
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        (WebKit::WebAuthenticatorCoordinator::makeCredential):
        (WebKit::WebAuthenticatorCoordinator::getAssertion):
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.h:

2019-10-23  Andy Estes  <aestes@apple.com>

        [Quick Look] Rename PreviewLoader{,Client} to LegacyPreviewLoader{,Client}
        https://bugs.webkit.org/show_bug.cgi?id=203306

        Reviewed by Tim Horton.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::createPreviewLoaderClient):
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h:

2019-10-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for non-unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=203055
        <rdar://problem/56504295>

        * WebProcess/Storage/WebServiceWorkerProvider.cpp: Added #include <WebCore/RuntimeEnabledFeatures.h>.

2019-10-22  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Block all third-party cookies
        https://bugs.webkit.org/show_bug.cgi?id=203266
        <rdar://problem/56512858>

        Reviewed by Alex Christensen.

        This change updates the experimental change in
        <https://trac.webkit.org/changeset/251213> to block all
        third-party cookies, regardless of user interaction with
        the first-party website.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setShouldBlockThirdPartyCookiesForTesting):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Shared/WebPreferences.yaml:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

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

        Make it possible to not include IPC Messages headers in other headers
        https://bugs.webkit.org/show_bug.cgi?id=203074

        * Scripts/webkit/messages_unittest.py:
        (GeneratedFileContentsTest.assertHeaderEqual):
        (GeneratedFileContentsTest.assertImplementationEqual):
        (UnsupportedPrecompilerDirectiveTest.test_error_at_else):
        (UnsupportedPrecompilerDirectiveTest.test_error_at_elif):
        Fix the message generator unit tests.

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

        Re-enable legacy TLS by default, keep runtime switch
        https://bugs.webkit.org/show_bug.cgi?id=203253

        Reviewed by Geoffrey Garen.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

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

        Revert r243010 on pre-Catalina macOS
        https://bugs.webkit.org/show_bug.cgi?id=203265
        <rdar://problem/55570995>

        Reviewed by Per Arne Vollan.

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

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

        Update xcfilelists

        * DerivedSources-output.xcfilelist:

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

        Make it possible to not include IPC Messages headers in other headers
        https://bugs.webkit.org/show_bug.cgi?id=203074

        Reviewed by Geoffrey Garen.

        Make the Messages generator generate a new -MessagesReplies.h file, which
        only includes headers for and definitions of DelayedReply/AsyncReply types,
        which need to be mentioned as arguments to message hander methods, and
        thus must be available in various headers throughout the project.

        In order to do this, we have to de-nest them from the primary message
        class, but we then 'using' them back into place inside the message class
        so that most of the code doesn't need to change.

        This helps to wildly decrease the header load of WebPage.h and WebPageProxy.h,
        especially, because the number of headers needed for types in their replies
        is much smaller than the number needed for all message receivers.

        Also, only invoke the Messages generator once per source file, and
        only parse the source file once, generating all three output files
        in one invocation.

        And then clean up all the missing indirect includes that we lost by doing this.

        All-in-all this is worth roughly 8% on the WebKit2 Build Time Benchmark.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:
        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/WebProcessConnection.h:
        * Scripts/Makefile:
        * Scripts/generate-message-receiver.py:
        (main):
        * Scripts/generate-messages-header.py: Removed.
        * Scripts/webkit/LegacyMessageReceiver-expected.cpp:
        * Scripts/webkit/LegacyMessages-expected.h:
        * Scripts/webkit/LegacyMessagesReplies-expected.h: Added.
        * Scripts/webkit/MessageReceiver-expected.cpp:
        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp:
        * Scripts/webkit/Messages-expected.h:
        * Scripts/webkit/MessagesReplies-expected.h: Added.
        * Scripts/webkit/MessagesRepliesSuperclassReplies-expected.h: Added.
        * Scripts/webkit/MessagesSuperclass-expected.h:
        * Scripts/webkit/messages.py:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/cocoa/VideoFullscreenManager.h:
        * WebProcess/cocoa/VideoFullscreenManager.mm:

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

        Simplify "Unexpectedly Resumed" assertion handling
        https://bugs.webkit.org/show_bug.cgi?id=203254

        Reviewed by Geoffrey Garen.

        When the WebContent process gets resumed from suspension, it now unconditionally takes a
        process assertion on behalf on the UIProcess and sends a ProcessDidResume IPC to the
        UIProcess. The UIProcess then sends a DidHandleProcessWasResumed IPC back after handing
        the ProcessDidResume IPC allowing the WebContent process to release its assertion on
        behalf on the UIProcess.

        The previous code was racy because it relied on the m_processIsSuspended flag, which was
        queried and set from different threads. Also, the 'unexpectedly resumed' naming was
        confusing since we'd often take this assertion whenever the WebProcess got resumed,
        wether unexpected or not, simply because the processTaskStateDidChange IPC won the race
        with the ProcessDidResume IPC from the UIProcess.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::processWasResumed):
        (WebKit::WebProcessProxy::processWasUnexpectedlyUnsuspended): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::processDidResume):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::processTaskStateDidChange):
        (WebKit::WebProcess::didHandleProcessWasResumed):

2019-10-22  youenn fablet  <youenn@apple.com>

        Remove mayHaveServiceWorkerRegisteredForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=203055

        Reviewed by Alex Christensen.

        This optimization was used for ensuring we would not create a storage process when no service worker registration is stored on disk.
        Now that we do not have a storage process and we are doing registration matching direclty in network process, we can safely remove that optimization.
        We also move the throttle state handling in WK2 layer. This allows us to not create a network process connection to update throttle state until
        there is a network process connection. This allows continuing passing an API test checking network process connections after crashes.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::updateServiceWorkerUserAgent):
        * UIProcess/WebProcessPool.h:
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::serviceWorkerConnection):
        (WebKit::WebServiceWorkerProvider::updateThrottleState):
        * WebProcess/Storage/WebServiceWorkerProvider.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):
        (WebKit::WebPage::updateThrottleState):

2019-10-22  Yury Semikhatsky  <yurys@chromium.org>

        [GTK] Web Inspector: add an option for disabling minification and concatenation of inspector UI in release build
        https://bugs.webkit.org/show_bug.cgi?id=203201

        Reviewed by Carlos Garcia Campos.

        Allow passing COMBINE_INSPECTOR_RESOURCES and COMBINE_TEST_RESOURCES as cmake arguments. This
        enables to avoid minification of Web Inspector scripts in release binaries which is very
        convenient during inspector UI development.

        * InspectorGResources.cmake:

2019-10-22  Adrian Perez de Castro  <aperez@igalia.com>

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

        Reviewed by Youenn Fablet.

        * Shared/UserData.cpp: Add missing inclusion of WebCoreArgumentCoders.h
        * UIProcess/Automation/SimulatedInputDispatcher.cpp: Add missing inclusion of wtf/Variant.h
        * UIProcess/ProvisionalPageProxy.h: Add missing inclusion of WebCore/ResourceRequest.h
        * UIProcess/WebTextChecker.cpp: Add missing inclusion of WebPageProxy.h
        * WebProcess/Databases/WebDatabaseProvider.cpp: Add missing inclusion of WebIDBConnectionToServer.h

2019-10-22  youenn fablet  <youenn@apple.com>

        WebSWServerToContextConnection should not assert when failing loads at destruction time
        https://bugs.webkit.org/show_bug.cgi?id=203243

        Reviewed by Alex Christensen.

        On WebSWServerToContextConnection destruction, we move the fetch task map and fail the tasks.
        At destruction of the tasks, which happens synchronously, they will try to unregister themselves
        and the assertion that the task is in the map will fail.
        To fix that, add a specific contextClosed method that will clear the task connection weak pointer.

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::contextClosed):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::~WebSWServerToContextConnection):

2019-10-22  youenn fablet  <youenn@apple.com>

        ServiceWorkerFetchTask can use the NetworkConnectionToWebProcess sessionID
        https://bugs.webkit.org/show_bug.cgi?id=202208

        Reviewed by Alex Christensen.

        No need to store the sessionID in ServiceWorkerFetchTask since we can get it from its loader.

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::createFetchTask):

2019-10-22  youenn fablet  <youenn@apple.com>

        Remove the ability to fallback to custom scheme handlers after a service worker did not handle the load
        https://bugs.webkit.org/show_bug.cgi?id=203239

        Reviewed by Alex Christensen.

        We remove the ability for service workers to intercept custom scheme handlers.
        We can then remove the ability for loads that are not handled by service workers to go through custom scheme handlers.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::serviceWorkerDidNotHandle):

2019-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.27.2 release

        * gtk/NEWS: Add release notes for 2.27.2.

2019-10-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Thread JSGlobalObject* instead of ExecState*
        https://bugs.webkit.org/show_bug.cgi?id=202392

        Reviewed by Geoffrey Garen.

        * WebProcess/InjectedBundle/API/glib/WebKitFrame.cpp:
        (webkit_frame_get_js_value_for_dom_object_in_script_world):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::reportException):
        (WebKit::InjectedBundle::createWebDataFromUint8Array):
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::callMethod):
        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::callNPJSObject):
        (WebKit::constructWithConstructor):
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::deletePropertyByIndex):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):
        (WebKit::JSNPObject::throwInvalidAccessError):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::identifierFromIdentifierRep):
        (WebKit::NPJSObject::hasMethod):
        (WebKit::NPJSObject::invoke):
        (WebKit::NPJSObject::invokeDefault):
        (WebKit::NPJSObject::hasProperty):
        (WebKit::NPJSObject::getProperty):
        (WebKit::NPJSObject::setProperty):
        (WebKit::NPJSObject::removeProperty):
        (WebKit::NPJSObject::enumerate):
        (WebKit::NPJSObject::construct):
        * WebProcess/Plugins/Netscape/NPJSObject.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertNPVariantToJSValue):
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        (WebKit::NPRuntimeObjectMap::evaluate):
        (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):
        (WebKit::NPRuntimeObjectMap::globalExec const): Deleted.
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsContext):
        (WebKit::WebFrame::jsContextForWorld):
        (WebKit::WebFrame::frameForContext):
        (WebKit::WebFrame::jsWrapperForWorld):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):
        (WebKit::WebPage::runJavaScript):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):

2019-10-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Enable service workers by default
        https://bugs.webkit.org/show_bug.cgi?id=200815

        Reviewed by Carlos Garcia Campos.

        Flip the run-time switch to be enabled by default and not only
        when building with experimental features enabled.

        * Shared/WebPreferencesDefaultValues.h:

2019-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] C++ comments used in C header files
        https://bugs.webkit.org/show_bug.cgi?id=203191

        Reviewed by Žan Doberšek.

        * UIProcess/API/gtk/WebKitAutocleanups.h:
        * UIProcess/API/gtk/WebKitDefines.h:
        * UIProcess/API/gtk/WebKitForwardDeclarations.h:
        * UIProcess/API/gtk/WebKitWebViewBase.h:
        * UIProcess/API/wpe/WebKitAutocleanups.h:
        * UIProcess/API/wpe/WebKitDefines.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebEditor.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtensionAutocleanups.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitWebEditor.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitWebExtensionAutocleanups.h:

2019-10-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        imported/w3c/web-platform-tests/clipboard-apis/async-navigator-clipboard-basics.https.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=203181

        Reviewed by Ryosuke Niwa.

        Add a changeCount argument to informationForItemAtIndex and allPasteboardItemInfo, and also make then return
        optional values; also, adjust changeCount to be an `int64_t` in a few places. See WebCore ChangeLog for more
        details.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::pasteboardCopy):
        (WebKit::WebPasteboardProxy::getPasteboardChangeCount):
        (WebKit::WebPasteboardProxy::addPasteboardTypes):
        (WebKit::WebPasteboardProxy::setPasteboardTypes):
        (WebKit::WebPasteboardProxy::setPasteboardURL):
        (WebKit::WebPasteboardProxy::setPasteboardColor):
        (WebKit::WebPasteboardProxy::setPasteboardStringForType):
        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::writeCustomData):
        (WebKit::WebPasteboardProxy::allPasteboardItemInfo):
        (WebKit::WebPasteboardProxy::informationForItemAtIndex):
        * UIProcess/WebPasteboardProxy.cpp:
        (WebKit::WebPasteboardProxy::allPasteboardItemInfo):
        (WebKit::WebPasteboardProxy::informationForItemAtIndex):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::changeCount):
        (WebKit::WebPlatformStrategies::addTypes):
        (WebKit::WebPlatformStrategies::setTypes):
        (WebKit::WebPlatformStrategies::setBufferForType):
        (WebKit::WebPlatformStrategies::setURL):
        (WebKit::WebPlatformStrategies::setColor):
        (WebKit::WebPlatformStrategies::setStringForType):
        (WebKit::WebPlatformStrategies::writeCustomData):
        (WebKit::WebPlatformStrategies::allPasteboardItemInfo):
        (WebKit::WebPlatformStrategies::informationForItemAtIndex):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

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

        Add some PencilKit extension points
        https://bugs.webkit.org/show_bug.cgi?id=202962
        <rdar://problem/56269759>

        Reviewed by Andy Estes.

        This is the WebKit part corresponding to <rdar://problem/56261392>.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]): Call extension point.
        (-[WKContentView cleanupInteraction]): Ditto.

2019-10-21  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r251381.

        This broke an internal build.

        Reverted changeset:

        "Add some PencilKit extension points"
        https://bugs.webkit.org/show_bug.cgi?id=202962
        https://trac.webkit.org/changeset/251381

2019-10-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Move ui-serif, ui-monospaced, and ui-rounded out from behind SPI
        https://bugs.webkit.org/show_bug.cgi?id=203129

        Reviewed by Tim Horton.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _shouldAllowDesignSystemUIFonts]): Deleted.
        (-[WKPreferences _setShouldAllowDesignSystemUIFonts:]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2019-10-21  youenn fablet  <youenn@apple.com>

        Move service worker registration matching for navigation loads to network process
        https://bugs.webkit.org/show_bug.cgi?id=203144

        Reviewed by Chris Dumez.

        Create a WebSWServerConnection whenever receiving a load request in NetworkProcess.
        This connection is used to check for service worker registration in case of navigation loads.
        Similarly, we create a WebSWClientConnection whenever WebProcess needs it, including when receiving WebSWClientConnection messages from NetworkProcess.
        This for instance happens when service worker registration import is complete to fill the shared registration origin store.

        Delay loads until SWServer has finished importing its registrations.
        This is needed since we might otherwise not intercept loads that could be intercepted.
        Waiting for importing registrations was previously ensured by WebProcess getting a matching registration in DocumentLoader.

        NetworkResourceLoader is now checking for service worker interception in case of redirections for navigations.
        This is needed as redirections could end up using a new registration.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        (WebKit::NetworkConnectionToWebProcess::swConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::startWithServiceWorker):
        (WebKit::NetworkResourceLoader::serviceWorkerDidNotHandle):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::start):
        (WebKit::ServiceWorkerFetchTask::startFetch):
        (WebKit::ServiceWorkerFetchTask::continueFetchTaskWith):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        (WebKit::ServiceWorkerFetchTask::takeRequest):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::controlClient):
        (WebKit::WebSWServerConnection::createFetchTask):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        (WebKit::WebSWClientConnection::registrationReady):
        (WebKit::WebSWClientConnection::documentIsControlled):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWClientConnection.messages.in:

2019-10-21  Sihui Liu  <sihui_liu@apple.com>

        Remove IDBBackingStoreTemporaryFileHandler
        https://bugs.webkit.org/show_bug.cgi?id=203128

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createIDBServer):
        (WebKit::NetworkProcess::accessToTemporaryFileComplete): Deleted.
        * NetworkProcess/NetworkProcess.h:

2019-10-21  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Update cookie blocking in NetworkStorageSession after first user interaction
        https://bugs.webkit.org/show_bug.cgi?id=203195
        <rdar://problem/56464567>

        Reviewed by Alex Christensen and Chris Dumez.

        This change makes sure that the state of cookie blocking in
        WebCore:: NetworkStorageSession is immediately updated if the logged
        user interaction was new for this domain. It adds a completion
        handler to WebResourceLoadStatisticsStore::logUserInteraction() so
        that the call properly waits for everything to be updated.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::CompletionHandler<void):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::logUserInteraction):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logUserInteraction):

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

        Dispatch AR event on the originating anchor element
        https://bugs.webkit.org/show_bug.cgi?id=203198
        <rdar://55743929>

        Reviewed by Simon Fraser.

        Use the ElementContext on SystemPreviewInfo.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _triggerSystemPreviewActionOnElement:frame:page:]):
        (-[WKWebView _triggerSystemPreviewActionOnFrame:page:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        * UIProcess/SystemPreviewController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::systemPreviewActionTriggered):

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

        Move ElementContext from WebKit to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=203210
        <rdar://problem/56475682>

        Reviewed by Simon Fraser.

        * Scripts/webkit/messages.py:
        * Shared/DocumentEditingContext.h:
        * Shared/DocumentEditingContext.mm:
        (IPC::ArgumentCoder<WebKit::DocumentEditingContextRequest>::decode):
        * Shared/ElementContext.cpp: Removed.
        * Shared/ElementContext.h: Removed.
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCSSOMViewScrollingAPIEnabled):
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::decode):
        * Shared/ios/InteractionInformationAtPosition.h:
        * Sources.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]):
        * UIProcess/API/Cocoa/_WKTextInputContext.mm:
        (-[_WKTextInputContext _initWithTextInputContext:]):
        (-[_WKTextInputContext _textInputContext]):
        * UIProcess/API/Cocoa/_WKTextInputContextInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::textInputContextsInRect):
        (WebKit::WebPageProxy::focusTextInputContext):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::textInputContextsInRect):
        (WebKit::WebPage::focusTextInputContext):
        (WebKit::WebPage::elementForContext const):
        (WebKit::WebPage::contextForElement const):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::startInteractionWithElementContextOrPosition):

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

        ServiceWorker tests should use TCPServer instead of WKURLSchemeHandler
        https://bugs.webkit.org/show_bug.cgi?id=203141

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::swServerForSession):
        (WebKit::NetworkProcess::addServiceWorkerSession):
        * NetworkProcess/NetworkProcess.h:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        * Shared/WebsiteDataStoreParameters.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:]): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::serviceWorkerRegisteredSchemes const): Deleted.
        (WebKit::WebsiteDataStoreConfiguration::registerServiceWorkerScheme): Deleted.

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

        macCatalyst: Swipe navigation gestures do not work
        https://bugs.webkit.org/show_bug.cgi?id=203205
        <rdar://problem/54617473>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (-[WKSwipeTransitionController gestureRecognizerForInteractiveTransition:WithTarget:action:]):
        Use a different gesture recognizer for swipe in macCatalyst that behaves
        more like the macOS implementation, based on scrolling instead of the
        gesture coming from a screen edge.

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

        Add some PencilKit extension points
        https://bugs.webkit.org/show_bug.cgi?id=202962
        <rdar://problem/56269759>

        Reviewed by Andy Estes.

        This is the WebKit part corresponding to <rdar://problem/56261392>.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]): Call extension point.
        (-[WKContentView cleanupInteraction]): Ditto.

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

        Add more release logging for "Unexpectedly resumed" assertion
        https://bugs.webkit.org/show_bug.cgi?id=203196

        Reviewed by Geoffrey Garen.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::processDidResume):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::processTaskStateDidChange):

2019-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Objects category in emoji picker is empty
        https://bugs.webkit.org/show_bug.cgi?id=203189

        Reviewed by Adrian Perez de Castro.

        There's a typo in the first emopi name of objects section.

        * UIProcess/API/gtk/WebKitEmojiChooser.cpp:
        (webkitEmojiChooserSetupEmojiSections): uted speaker -> muted speaker

2019-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] IconDatabase is not thread safe yet
        https://bugs.webkit.org/show_bug.cgi?id=202980

        Reviewed by Adrian Perez de Castro.

        Current implementation is safer, but we still need to protect members used by both threads.

        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::populatePageURLToIconURLMap):
        (WebKit::IconDatabase::clearLoadedIconsTimerFired):
        (WebKit::IconDatabase::checkIconURLAndSetPageURLIfNeeded):
        (WebKit::IconDatabase::loadIconForPageURL):
        (WebKit::IconDatabase::iconURLForPageURL):
        (WebKit::IconDatabase::setIconForPageURL):
        (WebKit::IconDatabase::clear):
        * UIProcess/API/glib/IconDatabase.h:

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

        Clean up some includes to improve WebKit2 build speed
        https://bugs.webkit.org/show_bug.cgi?id=203071

        Reviewed by Wenson Hsieh.

        This is worth about 6% on WebKit2, and unlocks another 8% improvement
        down the line (but which is less mechanical).

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkSocketChannel.h:
        * NetworkProcess/WebStorage/StorageArea.h:
        * NetworkProcess/WebStorage/StorageManager.cpp:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        * Platform/IPC/Connection.h:
        * Shared/API/APIURL.h:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/Cocoa/_WKInspector.mm:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
        * UIProcess/TextCheckerCompletion.cpp:
        * UIProcess/TextCheckerCompletion.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addNetworkProcess):
        (WebKit::WebUserContentControllerProxy::removeNetworkProcess):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::addNetworkProcess): Deleted.
        (WebKit::WebUserContentControllerProxy::removeNetworkProcess): Deleted.
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/Plugin.cpp:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/WebProcess.cpp:

2019-10-20  Brent Fulgham  <bfulgham@apple.com>

        Improve serialization logic
        https://bugs.webkit.org/show_bug.cgi?id=203039
        <rdar://problem/55631691>

        Reviewed by Alex Christensen.

        Check that the SecItemRequestData only contains relevant types for
        CFNetwork uses. 

        * Platform/spi/Cocoa/SecItemSPI.h: Added.
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::arrayContainsInvalidType): Added.
        (WebKit::dictionaryContainsInvalidType): Added.
        (WebKit::validTypeIDs): Added.
        (WebKit::isValidType): Added.
        (WebKit::SecItemRequestData::decode): Check types during decode.
        * Shared/mac/SecItemRequestData.h:
        * WebKit.xcodeproj/project.pbxproj:

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

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

        Reviewed by Carlos Garcia Campos.

        * UIProcess/WebProcessProxy.cpp: Add missing inclusion of the WebBackForwardCache.h header.

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

        macCatalyst: Cursor should send mouse events, not touch events
        https://bugs.webkit.org/show_bug.cgi?id=203175
        <rdar://problem/56321134>

        Reviewed by Simon Fraser.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/NativeWebMouseEvent.h:
        * Shared/ios/NativeWebMouseEventIOS.mm:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        Add a NativeWebMouseEvent constructor that doesn't actually wrap a native event,
        for creating totally-synthetic events.

        * UIProcess/ios/WKMouseGestureRecognizer.h: Added.
        * UIProcess/ios/WKMouseGestureRecognizer.mm: Added.
        (webEventModifiersForUIKeyModifierFlags):
        (-[WKMouseGestureRecognizer initWithTarget:action:]):
        (-[WKMouseGestureRecognizer setView:]):
        (-[WKMouseGestureRecognizer lastMouseEvent]):
        (-[WKMouseGestureRecognizer lastMouseLocation]):
        (-[WKMouseGestureRecognizer mouseTouch]):
        (-[WKMouseGestureRecognizer _wantsHoverEvents]):
        (-[WKMouseGestureRecognizer reset]):
        (-[WKMouseGestureRecognizer _shouldReceiveTouch:forEvent:recognizerView:]):
        (-[WKMouseGestureRecognizer _shouldReceivePress:]):
        (-[WKMouseGestureRecognizer createMouseEventWithType:]):
        (-[WKMouseGestureRecognizer touchesBegan:withEvent:]):
        (-[WKMouseGestureRecognizer touchesMoved:withEvent:]):
        (-[WKMouseGestureRecognizer touchesEnded:withEvent:]):
        (-[WKMouseGestureRecognizer touchesCancelled:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverEntered:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverMoved:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverExited:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverCancelled:withEvent:]):
        (-[WKMouseGestureRecognizer locationInView:]):
        (-[WKMouseGestureRecognizer canPreventGestureRecognizer:]):
        (-[WKMouseGestureRecognizer canBePreventedByGestureRecognizer:]):
        Instead of just using UIHoverGestureRecognizer, introduce a new gesture
        recognizer that does what it did, but also supports cases where the button
        is pressed (so, mousedown and mouseup instead of just mousemove),
        and synthesizes mouse events for all state transitions. These events
        should look roughly identical to what a non-macCatalyst app would get
        in AppKit's mouseUp/mouseDown/mouseMoved NSResponder methods.

        * SourcesCocoa.txt:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldReceiveTouch:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _showShareSheet:inRect:completionHandler:]):
        (-[WKContentView _mouseGestureRecognizerChanged:]):
        (webEventFlagsForUIKeyModifierFlags): Deleted.
        (-[WKContentView _hoverGestureRecognizerChanged:]): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        Make use of WKMouseGestureRecognizer to plumb the synthesized events directly
        to the macOS-style "handleMouseEvent" codepath, instead of going through
        the touch events path (and then subsequently generating synthetic clicks).
        Also, ensure that other gesture recognizers ignore the mouse "touch" entirely
        by returning NO in shouldReceiveTouch.

2019-10-18  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Warn users when no credentials are found
        https://bugs.webkit.org/show_bug.cgi?id=203147
        <rdar://problem/55931123>

        Reviewed by Brent Fulgham.

        This patch returns _WKWebAuthenticationPanelUpdateNoCredentialsFound to client via
        -[_WKWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:] when either
        CtapAuthenticator receives kCtap2ErrNoCredentials or U2fAuthenticator exhausts the
        allow list.

        This patch also enhances CtapAuthenticator::tryDowngrade to check if the CTAP command
        can be converted to U2F commands to ensure kCtap2ErrNoCredentials is returned if it
        is the case. Otherwise, after downgrading, U2fAuthenticator will return NotSupportedError
        given it can't convert the commands.

        * UIProcess/API/APIUIClient.h:
        * UIProcess/API/APIWebAuthenticationPanelClient.h:
        (API::WebAuthenticationPanelClient::updatePanel const):
        * UIProcess/WebAuthentication/Authenticator.h:
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::authenticatorStatusUpdated):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h:
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.mm:
        (WebKit::WebAuthenticationPanelClient::WebAuthenticationPanelClient):
        (WebKit::wkWebAuthenticationPanelUpdate):
        (WebKit::WebAuthenticationPanelClient::updatePanel const):
        * UIProcess/WebAuthentication/WebAuthenticationFlags.h: Renamed from Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationPanelFlags.h.
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::tryDowngrade):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::issueSignCommand):
        * WebKit.xcodeproj/project.pbxproj:

2019-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Refactor Pasteboard::read() to take an optional item index
        https://bugs.webkit.org/show_bug.cgi?id=203161

        Reviewed by Tim Horton.

        * Shared/mac/PasteboardTypes.mm:
        (WebKit::PasteboardTypes::forEditing):
        (WebKit::PasteboardTypes::forSelection):

        Support "com.apple.webarchive" alongside the private "Apple Web Archive pasteboard type".

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setPromisedDataForImage):

2019-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] REGRESSION(r251269): fast/events/ios/rotation/do-not-shrink-to-fit-content-after-rotation.html and fast/events/ios/rotation/layout-viewport-during-safari-type-rotation.html fail
        https://bugs.webkit.org/show_bug.cgi?id=203162
        <rdar://problem/56418459>

        Reviewed by Simon Fraser.

        Synchronously update the rendering before the orientation change and other viewport size updates.

        Otherwise, resize event will be dispatched in the middle of orientation animation,
        and would result in non-determistic results.

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

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

        [iOS] "Unexpectedly Resumed" process assertion may cause us to get terminated
        https://bugs.webkit.org/show_bug.cgi?id=203046
        <rdar://problem/56179592>

        Reviewed by Geoffrey Garen.

        This patch implements the following to avoid getting terminated:
        1. Schedule the task to release the assertion on a background thread instead of
           the main thread so that we end up releasing the task even if the main thread
           is somehow hung.
        2. Add an invalidation handler to the process assertion which releases the assertion
           upon expiration.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::processWasUnexpectedlyUnsuspended):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::processDidResume):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::processTaskStateDidChange):

2019-10-18  Jer Noble  <jer.noble@apple.com>

        Add experimental HDR MediaCapabilities support.
        https://bugs.webkit.org/show_bug.cgi?id=203113

        Reviewed by Eric Carlson.

        Add experimental hdrMediaCapabilitiesEnabled preference.

        * Shared/WebPreferences.yaml:

2019-10-18  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement AuthenticatorCancel
        https://bugs.webkit.org/show_bug.cgi?id=191523
        <rdar://problem/55920204>

        Reviewed by Brent Fulgham.

        This patch implement two ways to cancel a pending WebAuthn ceremony:
        1) Via navigation activities. Activities include i) main frame navigation, ii) main frame reload,
        iii) main frame destruction, iv) sub frame navigation, and v) sub frame destruction. All the above
        activities will cancel any pending WebAuthn ceremony that is associated with the frame. To prove
        the association, a GlobalFrameIdentifier is bridged into WebAuthenticationRequestData. Navigation
        cancel is done in WebPageProxy::didStartProvisionalLoadForFrameShared, and destruction cancel is done
        in WebProcessProxy::didDestroyFrame and WebPageProxy::resetState.
        2) Via UI. This path is simply bridged -[_WKWebAuthenticationPanel cancel] into AuthenticatorManager.
        Noted, this patch follows the spec to wait until time out to notify RPs.
        References: i) Step 20 of https://www.w3.org/TR/webauthn/#createCredential, ii) Step 18 of
        https://www.w3.org/TR/webauthn/#getAssertion

        As for what the cancel actually does, it:
        1) stops any HID/NFC scanning;
        2) sends CTAPHID_CANCEL to any HID authenticators that have been added. Reference:
        https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html#usb-hid-cancel
        Sending CTAPHID_CANCEL, however, is not trivial. An abstract class FidoAuthenticator is crafted to
        do this labor for both CtapAuthenticator and U2fAuthenticator during the time of destructions.
        Noted: The CtapHidDriver is the only CtapDriver implements the cancel method. Since the message
        is sent during state reset, lifecycle of the HidConenction and HidService which manage the underlying
        IOHIDDeviceRef is very hard to hold. This is required for the regular async sender. Therefore,
        HidConnection::sendSync is crafted to send the message synchronously to get rid of the tediousness
        of managing those lifecycles.

        P.S. Vector::grow doesn't initialize POD types. Therefore, this patch also appends it with memset
        for FidoHidPacket.

        P.S.S. This patch also simplifies AuthenticatorCoordinatorClient by: i) moving code from AuthenticatorCoordinatorClient
        to WebAuthenticatorCoordinatorClient, and ii) using sendWithAsyncReply. The latter allows us to
        get rid of the complex mechanism of ensuring the right reply is returned.

        * DerivedSources.make:
        * Sources.txt:
        * UIProcess/API/APIWebAuthenticationPanel.cpp:
        (API::WebAuthenticationPanel::create):
        (API::WebAuthenticationPanel::WebAuthenticationPanel):
        (API::WebAuthenticationPanel::cancel const):
        * UIProcess/API/APIWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel cancel]):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::cancelRequest):
        (WebKit::AuthenticatorManager::clearState):
        (WebKit::AuthenticatorManager::runPanel):
        (WebKit::AuthenticatorManager::resetState):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/Cocoa/HidConnection.h:
        (WebKit::HidConnection::isInitialized const):
        (WebKit::HidConnection::setIsInitialized):
        * UIProcess/WebAuthentication/Cocoa/HidConnection.mm:
        (WebKit::HidConnection::~HidConnection):
        (WebKit::HidConnection::initialize):
        (WebKit::HidConnection::terminate):
        (WebKit::HidConnection::sendSync):
        (WebKit::HidConnection::send):
        (WebKit::HidConnection::registerDataReceivedCallback):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::initialize):
        (WebKit::MockHidConnection::terminate):
        (WebKit::MockHidConnection::sendSync):
        (WebKit::MockHidConnection::send):
        (WebKit::MockHidConnection::feedReports):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.h:
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        (WebKit::WebAuthenticatorCoordinatorProxy::handleRequest):
        (WebKit::WebAuthenticatorCoordinatorProxy::isUserVerifyingPlatformAuthenticatorAvailable):
        (WebKit::WebAuthenticatorCoordinatorProxy::requestReply): Deleted.
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.messages.in:
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::CtapAuthenticator):
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::getAssertion):
        (WebKit::CtapAuthenticator::tryDowngrade):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.h:
        * UIProcess/WebAuthentication/fido/CtapDriver.h:
        (WebKit::CtapDriver::cancel):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp:
        (WebKit::CtapHidDriver::Worker::write):
        (WebKit::CtapHidDriver::Worker::read):
        (WebKit::CtapHidDriver::Worker::returnMessage):
        (WebKit::CtapHidDriver::Worker::reset):
        (WebKit::CtapHidDriver::Worker::cancel):
        (WebKit::CtapHidDriver::continueAfterChannelAllocated):
        (WebKit::CtapHidDriver::continueAfterResponseReceived):
        (WebKit::CtapHidDriver::returnResponse):
        (WebKit::CtapHidDriver::reset):
        (WebKit::CtapHidDriver::cancel):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.h:
        * UIProcess/WebAuthentication/fido/FidoAuthenticator.cpp: Copied from Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp.
        (WebKit::FidoAuthenticator::FidoAuthenticator):
        (WebKit::FidoAuthenticator::~FidoAuthenticator):
        (WebKit::FidoAuthenticator::driver const):
        (WebKit::FidoAuthenticator::releaseDriver):
        * UIProcess/WebAuthentication/fido/FidoAuthenticator.h: Copied from Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp.
        * UIProcess/WebAuthentication/fido/FidoService.cpp:
        (WebKit::FidoService::continueAfterGetInfo):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::U2fAuthenticator):
        (WebKit::U2fAuthenticator::issueCommand):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didDestroyFrame):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        (WebKit::WebAuthenticatorCoordinator::WebAuthenticatorCoordinator):
        (WebKit::WebAuthenticatorCoordinator::makeCredential):
        (WebKit::WebAuthenticatorCoordinator::getAssertion):
        (WebKit::WebAuthenticatorCoordinator::isUserVerifyingPlatformAuthenticatorAvailable):
        (WebKit::WebAuthenticatorCoordinator::~WebAuthenticatorCoordinator): Deleted.
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.h:
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.messages.in: Removed.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::fromCoreFrame):
        * WebProcess/WebPage/WebFrame.h:

2019-10-18  Zan Dobersek  <zdobersek@igalia.com>

        Avoid crashes on GCC-compiled binaries by avoiding a use-after-move
        that's the result of differring call conventions.

        Rubber-stamped by Carlos Garcia Campos.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch): Copy the SW identifier from
        the ServiceWorkerFetchTask before it's moved into the lambda.

2019-10-17  Mark Lam  <mark.lam@apple.com>

        Use constexpr in more places and remove some unnecessary external linkage.
        https://bugs.webkit.org/show_bug.cgi?id=203115

        Reviewed by Yusuke Suzuki.

        * UIProcess/API/APIContentRuleListStore.h:
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:

2019-10-17  Antoine Quint  <graouts@apple.com>

        [Web Animations] Enable the Web Animations JavaScript API by default
        https://bugs.webkit.org/show_bug.cgi?id=203075

        Reviewed by Antti Koivisto.

        * Shared/WebPreferences.yaml:

2019-10-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] File and Directory Entries API is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=202796

        Reviewed by Adrian Perez de Castro.

        Enable by default the DirectoryUpload runtime setting that is
        used to enable the APIs of the File and Directory Entries API.

        Enable also the DataTransferItemsEnabled runtime setting that
        exposes the DataTransferItem API. This makes the manual tests
        available at https://w3c-test.org/entries-api mostly pass on
        platform GTK (those tests need also the DataTransferItem API
        to enable the drag-and-drop).

        The bug <https://webkit.org/b/98940> for DataTransferItem API
        remains open because the layout test editing/pasteboard/data-transfer-items.html
        is still not passing completely. However other manual tests for
        DataTransferItem pass after enabling it.

        * Shared/WebPreferencesDefaultValues.h:

2019-10-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: rework frontend agent construction to allow commands/events to be controlled by the related target's type
        https://bugs.webkit.org/show_bug.cgi?id=200384
        <rdar://problem/53850352>

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebPage/RemoteWebInspectorUI.h:
        (WebKit::WebInspectorUI::backendCommandsURL const): Added.
        (WebKit::WebInspectorUI::debuggableType const): Added.
        (WebKit::WebInspectorUI::backendCommandsURL): Deleted.
        (WebKit::WebInspectorUI::debuggableType): Deleted.
        * WebProcess/WebPage/WebInspectorUI.h:
        (WebKit::WebInspectorUI::backendCommandsURL const): Added.
        (WebKit::WebInspectorUI::debuggableType const): Added.
        * UIProcess/WebPageDebuggable.h:
        (WebKit::WebPageDebuggable::type const):
        * UIProcess/glib/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::RemoteInspectorClient):
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (debuggableTypeString):
        Split the `Web` debuggable type into `Page` (WebCore::Page) and `WebPage` (WebKit::WebPageProxy).

2019-10-16  Emilio Cobos Álvarez  <emilio@crisal.io>

        Pass network cache directory in WebsiteDataStore::parameters() for non-Cocoa platforms.
        https://bugs.webkit.org/show_bug.cgi?id=203043

        This was causing various errors in the network process that were
        visible in debug builds.

        Reviewed by Alex Christensen.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):

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

        Rename PageCache to BackForwardCache
        https://bugs.webkit.org/show_bug.cgi?id=203048

        Reviewed by Alex Christensen.

        Rename PageCache to BackForwardCache for clarity and consistency with the UIProcess's WebBackForwardCache.

        * Shared/CacheModel.cpp:
        (WebKit::calculateMemoryCacheSizes):
        * Shared/CacheModel.h:
        * Shared/WebPreferences.yaml:
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::willGoToBackForwardListItem):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPageCacheEnabled):
        (WKPreferencesGetPageCacheEnabled):
        (WKPreferencesSetPageCacheSupportsPlugins):
        (WKPreferencesGetPageCacheSupportsPlugins):
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setUsesPageCache:]):
        (-[WKPreferences _usesPageCache]):
        (-[WKPreferences _setPageCacheSupportsPlugins:]):
        (-[WKPreferences _pageCacheSupportsPlugins]):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration pageCacheEnabled]):
        (-[_WKProcessPoolConfiguration setPageCacheEnabled:]):
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_get_enable_page_cache):
        (webkit_settings_set_enable_page_cache):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::willGoToBackForwardListItem):
        (WebKit::NavigationState::NavigationClient::didStartProvisionalNavigation):
        (WebKit::NavigationState::NavigationClient::didReceiveServerRedirectForProvisionalNavigation):
        (WebKit::NavigationState::NavigationClient::didFailProvisionalNavigationWithError):
        (WebKit::NavigationState::NavigationClient::didCommitNavigation):
        (WebKit::NavigationState::NavigationClient::didFinishDocumentLoad):
        (WebKit::NavigationState::NavigationClient::didFinishNavigation):
        (WebKit::NavigationState::NavigationClient::didFailNavigationWithError):
        (WebKit::NavigationState::NavigationClient::didSameDocumentNavigation):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::shouldUseBackForwardCache const):
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::updateBackForwardCacheCapacity):
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
        (WKBundleBackForwardListItemIsInBackForwardCache):
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.h:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toBackForwardListItemState):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::WebFrameLoaderClient):
        (WebKit::WebFrameLoaderClient::shouldGoToHistoryItem const):
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebKit::WebFrameLoaderClient::didRestoreFromBackForwardCache):
        (WebKit::WebFrameLoaderClient::createPlugin):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::forceLayoutOnRestoreFromBackForwardCache):
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspendForProcessSwap):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setCacheModel):
        (WebKit::WebProcess::deleteWebsiteData):
        (WebKit::WebProcess::setBackForwardCacheCapacity):
        (WebKit::WebProcess::clearCachedPage):
        * WebProcess/WebProcess.h:

2019-10-16  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Remove ubiquity client rule from sandbox
        https://bugs.webkit.org/show_bug.cgi?id=201347

        Reviewed by Brent Fulgham.

        This rule is most likely not needed, since we have already blocked all of its associated mach services,
        and no issues have been reported.

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

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

        iOS: inputmode=none is not respected with a hardware keyboard attached
        https://bugs.webkit.org/show_bug.cgi?id=203061

        Reviewed by Daniel Bates.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shouldShowAutomaticKeyboardUI]):
        We can resolve this FIXME, as the underlying bug was fixed in <rdar://problem/52706523>.
        This now means that we will respect inputmode=none even when a hardware
        keyboard is attached, significantly improving the experience on sites that use it
        by avoiding an intermittent input bar.

2019-10-16  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Remove send-signal from mach-lookup rule
        https://bugs.webkit.org/show_bug.cgi?id=201203

        Reviewed by Brent Fulgham.

        The send-signal can be removed, since crashes have not been reported from this rule.

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

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

        Add Swift modulemap for WebKit Private APIs
        https://bugs.webkit.org/show_bug.cgi?id=203059

        Reviewed by Tim Horton.

        Provide a Swift modulemap for WebKit_Private, and
        ensure WKPreferencesPrivate.h is exposed.

        Renamed OSX.modulemap to macOS.modulemap while here.

        * Configurations/WebKit.xcconfig:
        * Modules/iOS.private.modulemap: Added.
        * Modules/macOS.modulemap: Renamed from Source/WebKit/Modules/OSX.modulemap.
        * Modules/macOS.private.modulemap: Added.
        * Shared/API/Cocoa/WebKitPrivate.h: Include WKPreferencesPrivate.h.

2019-10-16  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Block all third-party cookies on websites without prior user interaction
        https://bugs.webkit.org/show_bug.cgi?id=203017
        <rdar://problem/56262708>

        Reviewed by Alex Christensen.

        This enhancement is off by default and controlled by an internal feature flag.

        The functional change is in WebCore::NetworkStorageSession::shouldBlockCookies() which is
        called from:
        - NetworkDataTaskCocoa::NetworkDataTaskCocoa()
        - NetworkDataTaskCocoa::willPerformHTTPRedirection

        shouldBlockCookies() now checks if the first-party website has received user interaction
        and if not, blocks all third-party cookies, regardless of the status of those third-party
        domains (prevalent or not).

        The changes to ResourceLoadStatisticsDatabaseStore and ResourceLoadStatisticsMemoryStore
        are about communicating which domains have received user interaction (prevalent or not)
        to the network storage session so that it can enforce the new restriction.

        The C API change and piping through the WebsiteDataStore is test infrastructure.

        Bundled cleanup task: Remove the two month old feature flag for NSURLSession switching.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::CompletionHandler<void):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::clear):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        (WebKit::RegistrableDomainsToBlockCookiesFor::isolatedCopy const):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setShouldBlockThirdPartyCookiesForTesting):
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::setResourceLoadStatisticsLogTestingEvent):
        (WebKit::NetworkSession::shouldIsolateSessionsForPrevalentTopFrames const): Deleted.
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setShouldBlockThirdPartyCookiesForTesting):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2019-10-16  Kate Cheney  <katherine_cheney@apple.com>

        WKWebsiteDataStoreStatisticsResetToConsistentState() should call store.setUseITPDatabase(false)
        https://bugs.webkit.org/show_bug.cgi?id=203020
        <rdar://problem/56314484>

        Reviewed by Chris Dumez.

        The resourceLoadStatisticsStore should be reset between tests to use
        a memory store, and any test that needs to use the database store
        can use the setUseITPDatabase function.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setUseITPDatabase):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetUseITPDatabase):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setUseITPDatabase):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setUseITPDatabase):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        [WK2] Handle back/forward cache entry expiration in the UIProcess instead of the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=203034
        <rdar://problem/56332453>

        Reviewed by Antti Koivisto.

        Handle back/forward cache entry expiration in the UIProcess instead of the WebProcess,
        now that back/forward cache management is done in the UIProcess.

        * UIProcess/WebBackForwardCacheEntry.cpp:
        (WebKit::WebBackForwardCacheEntry::WebBackForwardCacheEntry):
        (WebKit::WebBackForwardCacheEntry::takeSuspendedPage):
        (WebKit::WebBackForwardCacheEntry::expirationTimerFired):
        * UIProcess/WebBackForwardCacheEntry.h:
        Add a Timer to WebBackForwardCacheEntry to make the entry expire after 30 minutes, which is what used
        to happen on WebContent process side. One difference in behavior is that when the entry expires we
        now remove it from the cache right away to free-up memory, instead of simply refusing to use it later
        on.

        * WebProcess/WebPage/WebPage.cpp:
        Disable back forward cache expiration in the WebContent process when using modern
        WebKit.

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

        [iOS] Stop terminating the prewarmed process on application suspension
        https://bugs.webkit.org/show_bug.cgi?id=203033

        Reviewed by Alex Christensen.

        Stop terminating the prewarmed process on application suspension. Having no prewarmed process when the
        application resumes means the next cross-site load will be significantly slower. If the system needs
        memory, this process can be jetsammed.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::applicationIsAboutToSuspend):

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

        Drop unused WKPageSetResourceCachingDisabled() SPI
        https://bugs.webkit.org/show_bug.cgi?id=203035

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetResourceCachingDisabled): Deleted.
        (WKPageSetResourceCachingDisabled): Deleted.
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setResourceCachingDisabled): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isResourceCachingDisabled const): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setResourceCachingDisabled): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-10-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal macOS 10.13 and 10.14 builds after r251171

        * Platform/spi/mac/ApplicationServicesSPI.h: Guard SPI declarations that use AXClientType with HAVE(AX_CLIENT_TYPE).

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add user messages API
        https://bugs.webkit.org/show_bug.cgi?id=202847

        Reviewed by Adrian Perez de Castro.

        We have never exposed an API to send/receive messages to/from Web extensions, to allow applications use their own
        IPC. Now, with PSON enabled, it's a lot more difficult to implement the custom IPC on the application side,
        because applications need to keep track of all the web processes launched, and the changes of web process in the
        web view to send the messages to the right extension. That's already done internally by WebKit, so it would be
        easier to provide a simple API so that apps don't need to worry about the web process being used. This patch adds
        WebKitUserMessage, a simple message API consisting on a message name, parameters and file descriptors. Messages
        can be sent from a WebKitWebContext to all the WebKitWebExtensions, or from a WebKitWebExtension to its
        WebKitWebContext, or from a WebKitWebView to its WebKitWebPage (and vice versa).

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * Shared/API/glib/WebKitUserMessage.cpp: Added.
        (webkitUserMessageDispose):
        (webkitUserMessageGetProperty):
        (webkitUserMessageSetProperty):
        (webkit_user_message_class_init):
        (webkitUserMessageCreate):
        (webkitUserMessageGetMessage):
        (webkit_user_message_new):
        (webkit_user_message_new_with_fd_list):
        (webkit_user_message_get_name):
        (webkit_user_message_get_parameters):
        (webkit_user_message_get_fd_list):
        (webkit_user_message_send_reply):
        * Shared/API/glib/WebKitUserMessagePrivate.h: Added.
        * Shared/glib/ArgumentCodersGLib.cpp: Added.
        (IPC::encode):
        (IPC::decode):
        * Shared/glib/ArgumentCodersGLib.h: Added.
        * Shared/glib/UserMessage.cpp: Added.
        (WebKit::UserMessage::encode const):
        (WebKit::UserMessage::decode):
        * Shared/glib/UserMessage.h: Added.
        (WebKit::UserMessage::UserMessage):
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_class_init):
        (webkit_web_context_send_message_to_all_extensions):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        (webkitWebViewDidReceiveUserMessage):
        (webkit_web_view_send_message_to_page):
        (webkit_web_view_send_message_to_page_finish):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitUserMessage.h: Added.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:
        * UIProcess/API/wpe/APIViewClient.h:
        (API::ViewClient::didReceiveUserMessage):
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::sendMessageToWebView):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::didReceiveUserMessage):
        * UIProcess/API/wpe/WPEView.h:
        * UIProcess/API/wpe/WebKitUserMessage.h: Added.
        * UIProcess/API/wpe/WebKitWebContext.h:
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/API/wpe/docs/wpe-docs.sgml:
        * UIProcess/API/wpe/webkit.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/glib/WebProcessProxyGLib.cpp:
        (WebKit::WebProcessProxy::sendMessageToWebContextWithReply):
        (WebKit::WebProcessProxy::sendMessageToWebContext):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::sendMessageToWebViewWithReply):
        (WebKit::WebPageProxy::sendMessageToWebView):
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::sendMessageToWebViewWithReply):
        (WebKit::WebPageProxy::sendMessageToWebView):
        * WebProcess/InjectedBundle/API/glib/WebKitExtensionManager.h:
        (WebKit::WebKitExtensionManager::extension const):
        * WebProcess/InjectedBundle/API/glib/WebKitWebExtension.cpp:
        (webkitWebExtensionDidReceiveUserMessage):
        (webkit_web_extension_send_message_to_context):
        (webkit_web_extension_send_message_to_context_finish):
        * WebProcess/InjectedBundle/API/glib/WebKitWebExtensionPrivate.h:
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (webkit_web_page_class_init):
        (webkitWebPageDidReceiveUserMessage):
        (webkit_web_page_send_message_to_view):
        (webkit_web_page_send_message_to_view_finish):
        * WebProcess/InjectedBundle/API/glib/WebKitWebPagePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.h:
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitWebExtension.h:
        * WebProcess/InjectedBundle/API/wpe/WebKitWebPage.h:
        * WebProcess/InjectedBundle/API/wpe/docs/wpe-webextensions-1.0-sections.txt:
        * WebProcess/InjectedBundle/API/wpe/webkit-web-extension.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/glib/WebPageGLib.cpp: Added.
        (WebKit::WebPage::sendMessageToWebExtensionWithReply):
        (WebKit::WebPage::sendMessageToWebExtension):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::sendMessageToWebExtension):

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

        Fix the internal macOS build after r251171
        https://bugs.webkit.org/show_bug.cgi?id=203022

        Reviewed by Dan Bernstein.

        Attempts to include <HIServices/AccessibilityPriv.h> in WebKit result in:

        ```
        fatal error: 'HIServices/AccessibilityPriv.h' file not found
        ```

        At least on macOS 10.15, it appears that HIServices.framework exists within the ApplicationServices framework.
        To fix this build error, we can instead turn AccessibilityPrivSPI.h into an SPI header for ApplicationServices,
        ApplicationServicesSPI.h, and use it in several places where we currently directly import <ApplicationServices/
        ApplicationServicesPriv.h>.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:

        Bring some more constants that were defined in the !USE(APPLE_INTERNAL_SDK) case into the ApplicationServices
        SPI header.

        * Platform/spi/mac/ApplicationServicesSPI.h: Renamed from Source/WebKit/Platform/spi/mac/AccessibilityPrivSPI.h.
        * Shared/mac/AuxiliaryProcessMac.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:

2019-10-15  Kate Cheney  <katherine_cheney@apple.com>

        REGRESSION (~244100) [Mac WK2 Debug] Layout Test http/tests/resourceLoadStatistics/prune-statistics.html is a flaky failure (197285)
        https://bugs.webkit.org/show_bug.cgi?id=197285
        <rdar://problem/50208370>

        Reviewed by Chris Dumez.

        This patch fixes a flaky failure which was being caused by other
        resourceLoadStatistics tests scheduling processing checks which
        were called during execution of prune-statistics.html.
        Now, any pending processing checks are cancelled between tests.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):

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

        [iOS] Maintain the last Back/Forward cache entry when the application gets suspended
        https://bugs.webkit.org/show_bug.cgi?id=203014

        Reviewed by Geoffrey Garen.

        Previously, we would clear all back/forward cache entries when the application is about to
        be suspended. This means that we would lose fast-back when coming back to the application.
        To be memory-friendly but maintain the fast-back when coming back to the application, we now
        maintain the last back/forward cache entry when the application gets suspended.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::applicationIsAboutToSuspend):
        (WebKit::WebProcessPool::notifyProcessPoolsApplicationIsAboutToSuspend):
        * UIProcess/WebBackForwardCache.cpp:
        (WebKit::WebBackForwardCache::pruneToSize):
        * UIProcess/WebBackForwardCache.h:
        * UIProcess/WebProcessPool.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager init]):
        (-[WKProcessAssertionBackgroundTaskManager _releaseBackgroundTask]):

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        A WebProcess no longer clears its PageCache on suspension on iOS. We let the UIProcess's
        back/forward cache control when PageCache entries should get destroyed. The back/forward
        cache will properly wake up a suspended process to clear one of its PageCache entries if
        needed.

2019-10-15  Andres Gonzalez  <andresg_22@apple.com>

        AX: Make AXIsolatedTree compile again
        https://bugs.webkit.org/show_bug.cgi?id=202702
        <rdar://problem/56084968>

        Reviewed by Joanmarie Diggs.

        Re-submitting r251045 with a fix for internal builds.

        * Platform/spi/mac/AccessibilityPrivSPI.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase isolatedTreeRootObject]):

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

        Webview's drawing area may stay frozen on cross-site back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=203004

        Reviewed by Tim Horton.

        Whenever the UIScene becomes foreground / background, the WebPageProxy notifies its currently associated
        WebPage in the committed WebProcess so that it can freeze / unfreeze its layer tree with the
        BackgroundApplication reason. The issue is that if a WebPage gets suspended on cross-site navigation
        (because the UIScene is in the background when the load commits), then the suspended WebPage kept its
        a BackgroundApplication freeze. When the UIScene becomes foreground, the WebPage only notifies its
        committed page so the suspended page keeps its BackgroundApplication freeze still. If the user now
        navigates back, it will restore the suspended WebPage and the view will stay frozen.

        To address the issue, we now have the WebPage drop its BackgroundApplication freeze reason, whenever
        it transitions from committed to suspended.

        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView didMoveToWindow]):
        Fix logging, [self isBackground] needs to be called *after* _applicationStateTracker has been
        initialized, or it will return YES unconditionally.

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

2019-10-15  Peng Liu  <peng.liu6@apple.com>

        [Picture-in-Picture Web API] Implement HTMLVideoElement.requestPictureInPicture() / Document.exitPictureInPicture()
        https://bugs.webkit.org/show_bug.cgi?id=201024

        Reviewed by Eric Carlson.

        Add configurations for Picture-in-Picture API and add a preference option for it.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:

2019-10-15  youenn fablet  <youenn@apple.com>

        Move headers to keep from a HTTPHeaderNameSet to an OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=202977

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:

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

        [WebAuthn] Rename -[WKUIDelegatePrivate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:] to -[WKUIDelegatePrivate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=202564
        <rdar://problem/55974027>

        Reviewed by Brent Fulgham.

        Rename the SPI to a proper SPI style.

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

2019-10-15  youenn fablet  <youenn@apple.com>

        Scheduling a service worker job in server should wait for finishing the registration import
        https://bugs.webkit.org/show_bug.cgi?id=202975

        Reviewed by Chris Dumez.

        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::scheduleJobInServer):
        We should not schedule a job until the registrations are fully imported.
        Covered by ServiceWorkerBasic API test flakily hitting debug asserts.

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

        Unreviewed, rolling out r251138.

        Broke API tests

        Reverted changeset:

        "Pass CORS-enabled schemes through WebProcess instead of
        having them NetworkProcess-global"
        https://bugs.webkit.org/show_bug.cgi?id=202891
        https://trac.webkit.org/changeset/251138

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

        Stop using inheritance for WebBackForwardCacheEntry
        https://bugs.webkit.org/show_bug.cgi?id=202989

        Reviewed by Alex Christensen.

        Stop using inheritance for WebBackForwardCacheEntry. This simplifies the code a bit.

        * Sources.txt:
        * UIProcess/WebBackForwardCache.cpp:
        (WebKit::WebBackForwardCache::addEntry):
        (): Deleted.
        * UIProcess/WebBackForwardCacheEntry.cpp: Copied from Source/WebKit/UIProcess/WebBackForwardCacheEntry.h.
        (WebKit::WebBackForwardCacheEntry::WebBackForwardCacheEntry):
        (WebKit::WebBackForwardCacheEntry::~WebBackForwardCacheEntry):
        (WebKit::WebBackForwardCacheEntry::takeSuspendedPage):
        (WebKit::WebBackForwardCacheEntry::process const):
        * UIProcess/WebBackForwardCacheEntry.h:
        (WebKit::WebBackForwardCacheEntry::suspendedPage const):
        (WebKit::WebBackForwardCacheEntry::processIdentifier const):
        (WebKit::WebBackForwardCacheEntry::WebBackForwardCacheEntry): Deleted.
        * WebKit.xcodeproj/project.pbxproj:

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

        Pass CORS-enabled schemes through WebProcess instead of having them NetworkProcess-global
        https://bugs.webkit.org/show_bug.cgi?id=202891

        Reviewed by Youenn Fablet.

        No change in behavior.  Now the LegacySchemeRegistry is not used as much in the NetworkProcess, a step towards no use at all.
        This functionality is currently only available through the glib API webkit_security_manager_register_uri_scheme_as_cors_enabled
        but it has been requested in bug 201180 and bug 199064.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::registerURLSchemesAsCORSEnabled):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::schemeRegistry):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::doesNotNeedCORSCheck const):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::registerURLSchemeAsCORSEnabled const): Deleted.
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        * NetworkProcess/NetworkSchemeRegistry.cpp: Added.
        (WebKit::NetworkSchemeRegistry::registerURLSchemeAsCORSEnabled):
        (WebKit::NetworkSchemeRegistry::shouldTreatURLSchemeAsCORSEnabled):
        * NetworkProcess/NetworkSchemeRegistry.h: Added.
        (WebKit::NetworkSchemeRegistry::create):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        Use nullptr, indicating that the PingLoad constructor that is used in ad click attribution should not check the custom scheme registry.
        This is Ok because ad click attribution is only used for HTTP family schemes.
        (WebKit::m_blobFiles):
        * NetworkProcess/PingLoad.h:
        * Sources.txt:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsCORSEnabled):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::registerURLSchemeAsCORSEnabled):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::registerURLSchemeAsCORSEnabled const): Deleted.
        * WebProcess/WebProcess.h:

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix several GTK tests in /WebKit2Gtk/TestUIClient crashing since r241988

        Show a warning message and return nullptr from WebKitWebView::create if the new web view is not related to the
        given one. Also make it clear in the documentation that the new web view should be related to the given one.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        (webkitWebViewCreateNewPage):

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK test /webkit/Authentication/authentication-storage after r249962

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewHandleAuthenticationChallenge): Do not use webkit_settings_get_enable_private_browsing().

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK test /webkit/WebKitSettings/webkit-settings after r249962.

        Legacy private browsing was removed in r249962, so webkit_settings_set_enable_private_browsing() is now no-op.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Only call webkit_settings_set_enable_private_browsing() when trying to enable it.
        (webkit_settings_set_enable_private_browsing): Show a warning to let users know that it does nothing now.

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] WebKitWebContext should identify web views by their WebPageProxy identifier
        https://bugs.webkit.org/show_bug.cgi?id=202924

        Reviewed by Adrian Perez de Castro.

        Instead of the WebPage identifier, since it maps WebPageProxy to WebKitWebView.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextCreatePageForWebView):
        (webkitWebContextWebViewDestroyed):
        (webkitWebContextGetWebViewForPage):

2019-10-15  youenn fablet  <youenn@apple.com>

        Handle service worker loads through NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=202309

        Unreviewed.
        Fix !ENABLE(SERVICE_WORKER) builds.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        (WebKit::NetworkResourceLoader::serviceWorkerDidNotHandle):

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

        Handle service worker loads through NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=202309

        Reviewed by Alex Christensen.

        Remove ServiceWorkerFetchClient.
        Instead we use the normal NetworkResourceLoader/WebResourceLoader communication channel.
        We pass additional parameters, in particular service worker mode and registration identifier.

        Based on that information, network process will decide whether to load from service worker or network.
        The first advantage is that in case of service worker not handling the load, going to the network is faster.
        This will also allow us to do the registration matching in network process when receiving a navigation request.

        ServiceWorkerFetchTask is now beefed up to do the link between service worker and NetworkResourceLoader/WebResourceLoader.
        To support the same console logging, we add a new message called DidFailServiceWorkerLoad.

        To support API tests, we continue to go to the service worker before trying to go to URL scheme handlers.
        This adds some burden as we need to go to network process/service worker process and, in case load is not handled
        by service worker, we go back to the web process to do the load through URL scheme handlers.
        For that purpose we use ServiceWorkersMode::Only.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        (WebKit::NetworkResourceLoader::startWithServiceWorker):
        (WebKit::NetworkResourceLoader::serviceWorkerDidNotHandle):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::~ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::sendToServiceWorker):
        (WebKit::ServiceWorkerFetchTask::sendToClient):
        (WebKit::ServiceWorkerFetchTask::start):
        (WebKit::ServiceWorkerFetchTask::startFetch):
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveData):
        (WebKit::ServiceWorkerFetchTask::didReceiveFormData):
        (WebKit::ServiceWorkerFetchTask::didFinish):
        (WebKit::ServiceWorkerFetchTask::didFail):
        (WebKit::ServiceWorkerFetchTask::didNotHandle):
        (WebKit::ServiceWorkerFetchTask::cancelFromClient):
        (WebKit::ServiceWorkerFetchTask::continueDidReceiveFetchResponse):
        (WebKit::ServiceWorkerFetchTask::continueFetchTaskWith):
        (WebKit::ServiceWorkerFetchTask::timeoutTimerFired):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        (WebKit::ServiceWorkerFetchTask::fetchIdentifier const):
        (WebKit::ServiceWorkerFetchTask::serviceWorkerIdentifier const):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::cancelFetch):
        (WebKit::WebSWServerConnection::createFetchTask):
        (WebKit::WebSWServerConnection::startFetch):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::startFetch):
        (WebKit::WebSWServerToContextConnection::continueDidReceiveFetchResponse):
        (WebKit::WebSWServerToContextConnection::didReceiveFetchTaskMessage):
        (WebKit::WebSWServerToContextConnection::registerFetch):
        (WebKit::WebSWServerToContextConnection::unregisterFetch):
        (WebKit::WebSWServerToContextConnection::fetchTaskTimedOut):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        (WebKit::WebSWServerToContextConnection::ipcConnection const):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didFailServiceWorkerLoad):
        (WebKit::WebResourceLoader::serviceWorkerDidNotHandle):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        * WebProcess/Storage/ServiceWorkerClientFetch.cpp: Removed.
        * WebProcess/Storage/ServiceWorkerClientFetch.h: Removed.
        * WebProcess/Storage/ServiceWorkerClientFetch.messages.in: Removed.
        * WebProcess/Storage/WebSWClientConnection.cpp:
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        * WebProcess/Storage/WebServiceWorkerProvider.h:

2019-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] White pages in AC mode: Cannot get default EGL display: EGL_BAD_PARAMETER
        https://bugs.webkit.org/show_bug.cgi?id=202362

        Reviewed by Carlos Alberto Lopez Perez.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::updatePreferences): Disable accelerated compositing mode when we failed
        to reate the shared display for compositing.
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Destroy the wpe display when initialization fails.

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

        [WK2] Have WebBackForwardCache class coordinate page caching in all WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=202929
        <rdar://problem/56250421>

        Reviewed by Alex Christensen.

        Have WebBackForwardCache class coordinate page caching in all WebProcesses. To achieve this, the
        following changes were made:
        1. Whenever HistoryItem::m_cachedPage changes in WebCore, we notify the client that the HistoryItem
           has changed. I added a "hasCachedPage" boolean to the item info being passed the the UIProcess
           that is set based on whether or not HistoryItem::m_cachedPage is null.
        2. The WebBackForwardCache now contains WebBackForwardCacheEntry objects instead of SuspendedPage
           objects. A WebBackForwardCacheEntry may have a SuspendedPage or not. As a result, we can now
           add the the back/forward cache CachedPage entries from the WebContent process, which do not have
           a SuspendedPageProxy in the UIProcess.
        3. Now that WebBackForwardCache is aware of all CachedPages, it can properly enforce a cache capacity
           across call processes. Whenever a WebBackForwardCacheEntry is pruned from the cache and this entry
           does not have a SuspendedPageProxy, we send an IPC to the WebContent process to remove this
           cached page from the PageCache in WebCore.

        Previously, as soon as we would cache a page in the WebContent process, we would send an IPC to the
        UIProcess so that it would clear the PageCache in any previous WebContent process. This was a stop-gap
        measure to avoid blowing up memory in a multi-process model by keeping a PageCache around in all
        WebContent process. This would make sure only one process could have a PageCache at any point in time.
        This logic is now dropped since the WebBackForwardCache can keep track of all cached pages across all
        processes and enforce a cross-process limit on the number of cached pages. This means we can now have
        PageCache entries across several WebContent processes, as long as we do not exceed the maximum number
        of cached pages.

        * Platform/Logging.h:
        Add new BackForwardCache logging channel.

        * Shared/SessionState.cpp:
        (WebKit::BackForwardListItemState::encode const):
        (WebKit::BackForwardListItemState::decode):
        * Shared/SessionState.h:
        Add new bit to BackForwardListItemState to indicate whether a HistoryItem has an associated
        CachedPage or not.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::~WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::wasRemovedFromBackForwardList):
        (WebKit::WebBackForwardListItem::removeFromBackForwardCache):
        (WebKit::WebBackForwardListItem::setBackForwardCacheEntry):
        (WebKit::WebBackForwardListItem::suspendedPage const):
        (WebKit::WebBackForwardListItem::loggingString):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::backForwardCacheEntry const):
        WebBackForwardListItem now own a WebBackForwardCacheEntry instead of simply a
        SuspendedPage. The WebBackForwardCacheEntry may have a SuspendedPage or not.
        Now, whenever a HistoryItem has a CachedPage in WebCore, its corresponding
        WebBackForwardListItem in the UIProcess has an associated WebBackForwardCacheEntry
        whether we have a SuspendedPageProxy for it in the UIProcess or not.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Pass the PageCache capacity to the WebContent process on creation, so that it matches the
        capacity of the WebBackForwardCache in the UIProcess.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::messageNamesToIgnoreWhileSuspended):
        (WebKit::SuspendedPageProxy::suspensionTimedOut):
        * UIProcess/SuspendedPageProxy.h:
        Stop storing the WebBackForwardListItem on the SuspendedPageProxy. This avoids having to
        keep this pointer up to date. We do not really need it as we can now ask the WebBackForwardCache
        to clear an entry by giving it a SuspendedPageProxy to match. Given how many entries we have at
        most in the cache (2), iterating over them to find the one with a given suspended page is cheap.

        * UIProcess/WebBackForwardCache.cpp:
        (WebKit::WebBackForwardCache::WebBackForwardCache):
        (WebKit::WebBackForwardCache::~WebBackForwardCache):

        (WebKit::WebBackForwardCache::setCapacity):
        Send an IPC of each WebProcess whenever the capacity of the WebBackForwardCache changes, in order
        to update the capacity of the PageCache in those processes.

        (WebKit::WebBackForwardCache::addEntry):
        (WebKit::WebBackForwardCache::removeEntry):
        (WebKit::WebBackForwardCache::takeSuspendedPage):
        (WebKit::WebBackForwardCache::removeEntriesForProcess):
        (WebKit::WebBackForwardCache::removeEntriesForSession):
        (WebKit::WebBackForwardCache::removeEntriesMatching):
        (WebKit::WebBackForwardCache::clear):

        * UIProcess/WebBackForwardCache.h:
        Use a Vector instead of a ListHashSet to store the entries. Given that we have at most 2 entries, using
        a Vector will likely be more efficient and definitely use less memory.

        * UIProcess/WebBackForwardCacheEntry.h: Added.
        (WebKit::WebBackForwardCacheEntry::backForwardCache const):
        (WebKit::WebBackForwardCacheEntry::WebBackForwardCacheEntry):
        Add new WebBackForwardCacheEntry abstraction to match the concept of WebCore::CachedPage in the UIProcess.
        A WebBackForwardCacheEntry may have a SuspendedPageProxy associated with it in the UIProcess or not.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Drop didSaveToPageCache as it is no longer necessary.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        * UIProcess/WebProcessPool.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateBackForwardItem):
        Whenever we get a BackForwardItem from the WebContent process, we now check it now has
        an associated CachedPage or not. If it does, we make sure we add a corresponding
        entry in the WebBackForwardCache so that the UIProcess knows about it. If it no longer
        has a CachedPage and we don't have a SuspendedPageProxy for this item in the UIProcess,
        then we remove the corresponding entry from the back/forward cache. Note that we don't
        drop SuspendedPageProxy objects in the UIProcess simply because their corresponding
        CachedPage in the WebProcess is gone, to maintain previous behavior. This is an
        optimization that is useful on iOS, where we do not have a WebProcessCache, since we
        can reuse processes from SuspendedPageProxies on navigation.

        * UIProcess/WebProcessProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toBackForwardListItemState):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setBackForwardCacheCapacity):
        (WebKit::WebProcess::clearCachedPage):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Refactor custom pasteboard writing codepaths to handle multiple items
        https://bugs.webkit.org/show_bug.cgi?id=202916

        Reviewed by Tim Horton.

        Change more function and method signatures from `const PasteboardCustomData&` to
        `const Vector<PasteboardCustomData>&`.

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

2019-10-14  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION(251087): Several API tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=202961

        Reviewed by Brent Fulgham.

        WebPageProxy::maybeInitializeSandboxExtensionHandle returns early if the WebContent process is currently launching,
        since the audit token is needed to create the sandbox extension. The audit token will not be available until the
        process has finished launching. In the same way, the method should return early if the WebContent process has
        terminated.

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

2019-10-14  Matt Mokary  <mmokary@apple.com>

        FindController::findString always updates foundStringMatchIndex even if match is the same as before
        https://bugs.webkit.org/show_bug.cgi?id=201775
        <rdar://problem/55352425>

        Reviewed by Tim Horton.

        Allow an update to a find string without changing current match index, as is often the desired behavior when
        modifying a query rather than moving forward or backward through a match set.

        * Shared/WebFindOptions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (toFindOptions):
        * UIProcess/API/Cocoa/_WKFindOptions.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        Do not change match index if NoIndexChange bit is set. Otherwise, no change in behavior.

2019-10-14  David Quesada  <david_quesada@apple.com>

        Remove WebCore::IOSApplication::isWebApp()
        https://bugs.webkit.org/show_bug.cgi?id=181259

        Reviewed by Alex Christensen.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::defaultApplicationCacheDirectory):
            Remove the wording "this is not supported as of right now", as it seems to be supported
            since r247686, which added SPI on _WKWebsiteDataStoreConfiguration to set the application
            cache directory.

2019-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Support writing multiple PasteboardCustomData with SharedBuffers to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=202851

        Reviewed by Darin Adler.

        See WebCore ChangeLog for more details.

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

        Add helpers to encode and decode PasteboardCustomData::Entry.

        (IPC::ArgumentCoder<PasteboardCustomData>::encode):
        (IPC::ArgumentCoder<PasteboardCustomData>::decode):
        * Shared/WebCoreArgumentCoders.h:

        Add support for encoding and decoding PasteboardCustomData by encoding and decoding each of its items (see
        above).

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::requestDOMPasteAccess):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (allPasteboardItemOriginsMatchOrigin):
        (-[WKContentView _didHandleAdditionalDragItemsRequest:]):

        Tweak several methods to use the new methods on PasteboardCustomData instead of accessing the member variables
        directly.

        (-[WKContentView cleanUpDragSourceSessionState]):
        (-[WKContentView _prepareToDragPromisedAttachment:]):
        (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationLists:stagedDragSource:]):
        (-[WKContentView dragInteraction:itemsForBeginningSession:]):
        (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]): Deleted.

        Adjust these methods to handle multiple staged item providers (for now, it remains that iOS drag and drop
        codepaths will still only write a single item to the pasteboard).

2019-10-14  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Sandbox extensions should be created with audit tokens, not PIDs
        https://bugs.webkit.org/show_bug.cgi?id=201828

        Reviewed by Brent Fulgham.

        Stop issuing mach/read sandbox extensions by PID in the UI process, and use audit tokens instead.
        The audit tokens for the WebContent processes are retrieved from the IPC connection to the process.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::create):
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::SandboxExtensionImpl::SandboxExtensionImpl):
        (WebKit::SandboxExtension::createHandleForMachLookupByAuditToken):
        (WebKit::SandboxExtension::createHandleForReadByAuditToken):
        (WebKit::SandboxExtension::createHandleForMachLookupByPid): Deleted.
        (WebKit::SandboxExtension::createHandleForReadByPid): Deleted.
        * Shared/SandboxExtension.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shouldSendPendingMessage):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):

2019-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] REGRESSION (r245672): Contenteditable with optical sizing freezes Safari
        https://bugs.webkit.org/show_bug.cgi?id=202262

        Reviewed by Tim Horton.

        r250640 didn't go far enough. We need to apply the same fix everywhere [NSFontDescriptor fontDescriptorWithFontAttributes:] is called.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::decodeFontInternal):
        * Shared/Cocoa/CoreTextHelpers.h: Added.
        * Shared/Cocoa/CoreTextHelpers.mm: Added.
        (fontDescriptorWithFontAttributes):
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateFontManagerIfNeeded):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * WebKit.xcodeproj/project.pbxproj:

2019-10-14  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251045.

        Broke internal builds

        Reverted changeset:

        "AX: Make AXIsolatedTree compile again"
        https://bugs.webkit.org/show_bug.cgi?id=202702
        https://trac.webkit.org/changeset/251045

2019-10-14  youenn fablet  <youenn@apple.com>

        Reuse existing web processes for running service workers
        https://bugs.webkit.org/show_bug.cgi?id=202195

        Unreviewed.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disableServiceWorkers):
        (WebKit::WebProcessProxy::enableServiceWorkers):
        Fix case where ENABLE_SERVICE_WORKER is not defined.

2019-10-14  Philippe Normand  <pnormand@igalia.com>

        [GTK][WebInspector] Support for saving data
        https://bugs.webkit.org/show_bug.cgi?id=202894

        Reviewed by Carlos Garcia Campos.

        Implement the WebInspectorProxy::platformSave() method. This
        allows users to save the inspector performance measurements, for
        instance.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSave):
        * WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp:
        (WebKit::WebInspectorUI::canSave):

2019-10-14  youenn fablet  <youenn@apple.com>

        Reuse existing web processes for running service workers
        https://bugs.webkit.org/show_bug.cgi?id=202195

        Reviewed by Chris Dumez.

        When network process asks for a service worker context connection,
        we now iterate through existing web processes and reuse one if both session
        and registrable domain match.
        We then ask the web process to create a context connection to the network process.

        When network process no longer needs the connection, it instructs the UIProcess
        that will update its state so that the web process is no longer considered as running
        service workers.
        UIProcess then instructs the web process to stop its service workers and its connection.

        Later on, the same web process may be reused for running service workers in which case
        a new connection will replace the stopped connection.

        Similarly, on network process crash, all web process running service workers are updated
        so that they are no longer considered as running service workers.

        Add a boolean state to WebProcessPool to control whether creating a separate service worker process.

        We no longer terminate the web process when stopping service workers or when network process crash.
        We use the enableTermination/disableTermination at context connection start/stop time.
        We consider that the context connection is similar to running a page in the process and creating/removing a page
        calls disableTermination/enableTermination.

        NetworkProcess is handling the management of service worker processes by checking for clients.
        In case there is no client, the process is terminated.
        This removes the need for the WebProcessPool service worker process timer.
        This patch removes this timer.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        (WebKit::NetworkConnectionToWebProcess::closeSWContextConnection):
        (WebKit::NetworkConnectionToWebProcess::serverToContextConnectionNoLongerNeeded):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::~WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::messageSenderConnection const):
        (WebKit::WebSWServerToContextConnection::connectionIsNoLongerNeeded):
        (WebKit::WebSWServerToContextConnection::startFetch):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetUseSeparateServiceWorkerProcess):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setUseSeparateServiceWorkerProcess:]):
        (-[WKProcessPool _webPageContentProcessCount]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::workerContextConnectionNoLongerNeeded):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessCrashed):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::removeFromServiceWorkerProcesses):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::terminateNetworkProcess):
        (WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createForServiceWorkers):
        (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess):
        (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):
        (WebKit::WebProcessProxy::disableServiceWorkers):
        (WebKit::WebProcessProxy::enableServiceWorkers):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::isMatchingRegistrableDomain const):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::m_userAgent):
        (WebKit::WebSWContextManagerConnection::terminateWorker):
        (WebKit::WebSWContextManagerConnection::syncTerminateWorker):
        (WebKit::WebSWContextManagerConnection::close):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::registerServiceWorkerClients):

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

        Back/Forward cache does not work after doing a favorite navigation
        https://bugs.webkit.org/show_bug.cgi?id=202762
        <rdar://problem/56126911>

        Reviewed by Antti Koivisto.

        When a process-swap was forced by the client, we would always close the page in the previous
        process after navigating. This would prevent leveraging the back/forward cache when navigating
        back after such a process-swap. The reason we were doing this is that other pages may have
        opener link to this page and closing the page was an easy way to break this opener link.

        To address the issue, we no longer close the previous page when a process-swap is forced by the
        client. Instead, we make sure to disconnect the frames' openees from their opener then the opener
        enters the page cache.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspendForProcessSwap):

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

        Clearing Website data for a given session should not shut down cached processes for other sessions
        https://bugs.webkit.org/show_bug.cgi?id=202865
        <rdar://problem/56202912>

        Reviewed by Antti Koivisto.

        When clearing Website data for a given data store, we now only clear cached processes
        (either if BackForwardCache or WebProcessCache) if they are associated with this
        particular data store. It is very wasteful otherwise.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        ProvisionalPageProxy & SuspendedPageProxy's destructors no longer call
        WebProcessProxy::maybeShutdown() asynchronously. We now call maybeShutdown()
        synchronously in WebProcessProxy::decrementSuspendedPageCount() and
        WebProcessProxy::removeProvisionalPageProxy() instead. This makes things a
        lot more predictable.

        * UIProcess/WebBackForwardCache.cpp:
        (WebKit::WebBackForwardCache::removeEntriesForSession):
        Add new removeEntriesForSession() method to clear only back / forward cache
        entries associated with a particular session.

        (WebKit::WebBackForwardCache::clear):
        Stop taking a parameter indicating if we allow the processes to enter the
        process cache. Now that we call maybeShutdown() synchronously when destroying
        a SuspendedPageProxy, we can simply allow the processes to enter the process
        cache unconditionally. If the caller does not want this processes in the page
        cache, they can clear the process cache afterwards.

        * UIProcess/WebBackForwardCache.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        Now that destroying a SuspendedPageProxy or a ProvisionalPageProxy may shutdown
        their process synchronously, add a scope here to prevent shutdown of the process
        for the duration of this scope, since we're about to use it for a navigation and
        we don't want it to get shutdown, even if there is no longer anything using it.

        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        Add new assertion and rename parameter for consistency.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::handleMemoryPressureWarning):

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addProvisionalPageProxy):
        Add new assertion.

        (WebKit::WebProcessProxy::removeProvisionalPageProxy):
        Call maybeShutDown() if this was the last provisional page.

        (WebKit::WebProcessProxy::maybeShutDown):
        Drop parameter indicating if we want to allow the process to enter the process
        cache and allow caching unconditionally.

        (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess):
        Prevent termination if there is a ScopePreventingShutdown.

        (WebKit::WebProcessProxy::decrementSuspendedPageCount):
        Call maybeShutDown() if this was the last suspended page.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::ScopePreventingShutdown::ScopePreventingShutdown):
        (WebKit::WebProcessProxy::ScopePreventingShutdown::~ScopePreventingShutdown):
        (WebKit::WebProcessProxy::makeScopePreventingShutdown):
        Add new facility to prevent shutdown of a process for the duration of the scope.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        When removing website data, only clear cached processes if they are associated with
        the current data store.

2019-10-12  Chris Fleizach  <cfleizach@apple.com>

        AX: Make AXIsolatedTree compile again
        https://bugs.webkit.org/show_bug.cgi?id=202702
        <rdar://problem/56084968>

        Reviewed by Joanmarie Diggs.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase isolatedTreeRootObject]):

2019-10-11  Rob Buis  <rbuis@igalia.com>

        Cleanup RuntimeEnabledFeatures includes
        https://bugs.webkit.org/show_bug.cgi?id=202857

        Reviewed by Eric Carlson.

        These classes must have had made use of runtime flags before
        but are not using them anymore.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
        * UIProcess/WebProcessPool.cpp:

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

        Move SuspendedPage logic from WebProcessPool to new WebBackForwardCache class
        https://bugs.webkit.org/show_bug.cgi?id=202660

        Reviewed by Antti Koivisto.

        Move SuspendedPage logic from WebProcessPool to new WebBackForwardCache class. This is
        a first step towards implementing back / forward cache handling in the UIProcess.

        The following changes were made:
        1. SuspendedPageProxy objects are now normally owned by their associated WebBackForwardListItem
           (Similarly to CachedPage objects being owned by their HistoryItem in WebCore) instead of the
           WebProcessPool.
        2. A new WebBackForwardCache class is introduced to cap the number of cached pages and clear
           them (similary to the PageCache in WebCore).

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::~WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::wasRemovedFromBackForwardList):
        (WebKit::WebBackForwardListItem::setSuspendedPage):
        (WebKit::WebBackForwardListItem::takeSuspendedPage):
        (WebKit::WebBackForwardListItem::suspendedPage const):
        * Shared/WebBackForwardListItem.h:
        * Sources.txt:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _maximumSuspendedPageCount]):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp:
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::findReusableSuspendedPageProcess):
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::setBackForwardListItem):
        (WebKit::SuspendedPageProxy::clearBackForwardListItem):
        (WebKit::SuspendedPageProxy::backForwardCache const):
        (WebKit::SuspendedPageProxy::suspensionTimedOut):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebAuthentication/Mock/MockHidConnection.h:
        * UIProcess/WebAuthentication/Mock/MockHidService.h:
        * UIProcess/WebBackForwardCache.cpp: Added.
        (WebKit::WebBackForwardCache::removeOldestEntry):
        (WebKit::WebBackForwardCache::setCapacity):
        (WebKit::WebBackForwardCache::addEntry):
        (WebKit::WebBackForwardCache::removeEntry):
        (WebKit::WebBackForwardCache::takeEntry):
        (WebKit::WebBackForwardCache::removeEntriesForProcess):
        (WebKit::WebBackForwardCache::removeEntriesForPage):
        (WebKit::WebBackForwardCache::removeEntriesMatching):
        (WebKit::WebBackForwardCache::clear):
        * UIProcess/WebBackForwardCache.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Mock/MockHidService.h.
        (WebKit::WebBackForwardCache::capacity const):
        (WebKit::WebBackForwardCache::size const):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::didRemoveItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::backForwardCache const):
        (WebKit::WebPageProxy::shouldUseBackForwardCache const):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::process const):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_webProcessCache):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::handleMemoryPressureWarning):
        (WebKit::WebProcessPool::updateBackForwardCacheCapacity):
        (WebKit::WebProcessPool::setCacheModel):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::setMockWebAuthenticationConfiguration):
        * WebKit.xcodeproj/project.pbxproj:

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

        Only use CFNetwork SPI for metrics where needed
        https://bugs.webkit.org/show_bug.cgi?id=202825

        Reviewed by Joseph Pecoraro.

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

2019-10-11  Kate Cheney  <katherine_cheney@apple.com>

        Get StorageAccess API features working on SQLite database implementation (195422)
        https://bugs.webkit.org/show_bug.cgi?id=195422
        <rdar://problem/54213519>

        Reviewed by Brent Fulgham.

        This patch migrates the http/tests/storageAccess/ Layout tests to
        use the ITP database and uncovered 3 bugs in the process.

        1. It was previously blocking cookies to a third party domain which
        was not marked as prevalent. Now it ensures that the user is prompted
        using the storage acess API regarding that third party domain.

        2. It was not requesting storage access if cookies had previously been
        blocked. Now it will only return early from
        ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener
        if cookie access is allowed, and request storage access otherwise.

        3. hasUserGrantedStorageAccessThroughPrompt was returning true even
        if the result was not previously granted storage access.

        All of these fixes match behavior in
        ResourceLoadStatisticsMemoryStore.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasUserGrantedStorageAccessThroughPrompt):

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

        REGRESSION: fast/events/touch/ios/long-press-on-image.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=202845

        Reviewed by Antoine Quint.

        Update _contentsOfUserInterfaceItem so that it returns more information
        on a context menu.

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

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

        Use sendWithAsyncReply for cookie getting/clearing functions
        https://bugs.webkit.org/show_bug.cgi?id=202841

        Reviewed by Carlos Garcia Campos.

        No change in behavior.  This just simplifies the message sending a bit.

        * NetworkProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::deleteCookie):
        (WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManager::getAllCookies):
        (WebKit::WebCookieManager::getCookies):
        (WebKit::WebCookieManager::setCookie):
        (WebKit::WebCookieManager::setCookies):
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
        * NetworkProcess/Cookies/WebCookieManager.h:
        * NetworkProcess/Cookies/WebCookieManager.messages.in:
        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::cookies):
        (API::HTTPCookieStore::setCookies):
        (API::HTTPCookieStore::deleteCookie):
        (API::HTTPCookieStore::setHTTPCookieAcceptPolicy):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setCookieAcceptPolicy:]):
        * UIProcess/API/glib/WebKitCookieManager.cpp:
        (webkit_cookie_manager_set_accept_policy):
        (webkit_cookie_manager_get_accept_policy):
        (webkit_cookie_manager_add_cookie):
        (webkit_cookie_manager_get_cookies):
        (webkit_cookie_manager_delete_cookie):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::addSingleCookie):
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::sendWithAsyncReply):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::processPoolDestroyed):
        (WebKit::WebCookieManagerProxy::processDidClose):
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookie):
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManagerProxy::setCookies):
        (WebKit::WebCookieManagerProxy::getAllCookies):
        (WebKit::WebCookieManagerProxy::getCookies):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::didGetHostnamesWithCookies): Deleted.
        (WebKit::WebCookieManagerProxy::didSetCookies): Deleted.
        (WebKit::WebCookieManagerProxy::didGetCookies): Deleted.
        (WebKit::WebCookieManagerProxy::didDeleteCookies): Deleted.
        (WebKit::WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy): Deleted.
        (WebKit::WebCookieManagerProxy::didSetHTTPCookieAcceptPolicy): Deleted.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.messages.in:

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

        Remove unused WebProcessPool::requestNetworkingStatistics
        https://bugs.webkit.org/show_bug.cgi?id=202818

        Reviewed by Chris Dumez.

        Its only use was removed in rdar://problem/56160996

        * NetworkProcess/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::isDownloading const):
        (WebKit::DownloadManager::activeDownloadCount const): Deleted.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getNetworkProcessStatistics): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/Authentication/AuthenticationManager.h:
        (WebKit::AuthenticationManager::outstandingAuthenticationChallengeCount const): Deleted.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getStatistics):
        (WebKit::WebProcessPool::requestNetworkingStatistics): Deleted.
        * UIProcess/WebProcessPool.h:

2019-10-10  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Move remote communication handling from RemoteInspectorServer to RemoteInspector.
        https://bugs.webkit.org/show_bug.cgi?id=202763

        Reviewed by Ross Kirsling.

        Remove deleted method invocations.

        * UIProcess/win/WebProcessPoolWin.cpp:
        (WebKit::initializeRemoteInspectorServer):
        (WebKit::WebProcessPool::platformInitialize):

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

        Do not timeout a load intercepted by service worker that receives a response
        https://bugs.webkit.org/show_bug.cgi?id=202787

        Reviewed by Chris Dumez.

        Stop making ServiceWorkerFetchTask ref counted since it is not needed and
        can potentially make ServiceWorkerFetchTask oulive its WebSWServerToContextConnection member.

        Stop the ServiceWorkerFetchTask timeout timer whenever receiving a response so that the load will not timeout in that case.
        This ensures that a load that is starting in a service worker will not be failing.
        Instead the load will go to network process.

        Removed m_didReachTerminalState which is not needed as WebSWServerToContextConnection unregisters the ServiceWorkerFetchTask
        as an IPC listener for all terminating messages.

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveData):
        (WebKit::ServiceWorkerFetchTask::didReceiveFormData):
        (WebKit::ServiceWorkerFetchTask::didFinish):
        (WebKit::ServiceWorkerFetchTask::didFail):
        (WebKit::ServiceWorkerFetchTask::didNotHandle):
        (WebKit::ServiceWorkerFetchTask::timeoutTimerFired):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::startFetch):
        (WebKit::WebSWServerToContextConnection::fetchTaskTimedOut):
        Use a Vector instead of a HasSet for performance reasons.
        Update according fetch map using unique_ptr instead of Ref<>.
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:

2019-10-10  Rob Buis  <rbuis@igalia.com>

        SpeculativeLoad should use CompletionHandler
        https://bugs.webkit.org/show_bug.cgi?id=202795

        Reviewed by Chris Dumez.

        SpeculativeLoad should use CompletionHandler, as remarked in
        Bug 201641 review.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:

2019-10-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support programmatic paste requests on macOS
        https://bugs.webkit.org/show_bug.cgi?id=202773
        <rdar://problem/48957166>

        Reviewed by Tim Horton.

        Adds support for programmatic paste requests on macOS, as well as some testing SPI in WKWebView to allow
        WebKitTestRunner to grab the NSMenu used for the DOM paste request. This patch adopts the same strategy taken to
        allow programmatic paste on iOS, by allowing programmatic pastes coming from the page to show platform UI which
        the user must then interact with in order to proceed with the paste. See below for more details.

        * Shared/WebPreferencesDefaultValues.h:

        Make this available on both iOS and macOS (iOS family is omitted for now, since callout bar UI is not generally
        present on non-iOS iOS-family platforms such as Apple Watch).

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

        This selector is called when the user taps the Paste option in the presented NSMenu.

        (-[WKWebView _activeMenu]):

        Returns the currently active NSMenu. Only for testing purposes.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _web_grantDOMPasteAccess]):

        Same exercise as above, only for WKView instead of WKWebView.

        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::domPasteMenu const):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKDOMPasteMenuDelegate initWithWebViewImpl:]):
        (-[WKDOMPasteMenuDelegate menuDidClose:]):
        (-[WKDOMPasteMenuDelegate numberOfItemsInMenu:]):
        (-[WKDOMPasteMenuDelegate confinementRectForMenu:onScreen:]):

        Adds a new object, whose purpose is to be a delegate for the NSMenu that is presented when requesting DOM paste
        access. This object is used instead of WKWebView, since API clients may end up making the WKWebView the delegate
        for a different menu, in which case some implementations (either theirs or ours) of NSMenuDelegate methods would
        not be called. Avoiding this would require the client to be aware that WKWebView conforms to NSMenuDelegate,
        which is only declared privately.

        (WebKit::WebViewImpl::handleProcessSwapOrExit):

        On process swap or exit, automatically bail out of any pending DOM paste request by denying it.

        (WebKit::WebViewImpl::requestDOMPasteAccess):
        (WebKit::WebViewImpl::handleDOMPasteRequestWithResult):

        Handle the DOM paste request by showing an NSMenu near the mouse cursor with a single option to paste.

        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::requestDOMPasteAccess):

2019-10-10  youenn fablet  <youenn@apple.com>

        Remove unified plan runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=202721

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsConstructed): Remove ability to disable unified plan.

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

        Remove a "The " in "The The HTTP headers of the response"
        https://bugs.webkit.org/show_bug.cgi?id=194851

        Reviewed by Carlos Garcia Campos.

        * Shared/API/glib/WebKitURIResponse.cpp:
        (webkit_uri_response_class_init): Fix typo in description of the WebKitURIResponse::http-headers property.

2019-10-10  youenn fablet  <youenn@apple.com>

        [Mac] Allow SYS___pthread_markcancel call
        https://bugs.webkit.org/show_bug.cgi?id=202723

        Reviewed by Alex Christensen.

        Allow this pthread call as libwebrtc uses it on the Mac as well.

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

2019-10-09  youenn fablet  <youenn@apple.com>

        A service worker process should not be created when enqueuing a service worker job
        https://bugs.webkit.org/show_bug.cgi?id=202578
        <rdar://problem/55979690>

        Reviewed by Chris Dumez.

        Remove the calls to create service worker context connection.
        They are now done at SWServer level when trying to either run a service worker or install one.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):
        (WebKit::WebSWServerConnection::scheduleJobInServer):

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

        [Clipboard API] Refactor Pasteboard item reading functions to work on both iOS and macOS
        https://bugs.webkit.org/show_bug.cgi?id=202647

        Reviewed by Tim Horton.

        Refactor iOS-specific pasteboard functions to be platform-agnostic. See WebCore ChangeLog for more details.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::allPasteboardItemInfo):
        (WebKit::WebPasteboardProxy::informationForItemAtIndex):
        (WebKit::WebPasteboardProxy::getPasteboardItemsCount):
        (WebKit::WebPasteboardProxy::readStringFromPasteboard):
        (WebKit::WebPasteboardProxy::readURLFromPasteboard):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        (WebKit::WebPasteboardProxy::writeURLToPasteboard):
        (WebKit::WebPasteboardProxy::writeWebContentToPasteboard):
        (WebKit::WebPasteboardProxy::writeImageToPasteboard):
        (WebKit::WebPasteboardProxy::writeStringToPasteboard):
        * UIProcess/WebPasteboardProxy.cpp:
        (WebKit::WebPasteboardProxy::allPasteboardItemInfo):
        (WebKit::WebPasteboardProxy::informationForItemAtIndex):
        (WebKit::WebPasteboardProxy::getPasteboardItemsCount):
        (WebKit::WebPasteboardProxy::readStringFromPasteboard):
        (WebKit::WebPasteboardProxy::readURLFromPasteboard):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/wpe/WebPasteboardProxyWPE.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::informationForItemAtIndex):
        (WebKit::WebPlatformStrategies::readBufferFromPasteboard):
        (WebKit::WebPlatformStrategies::readURLFromPasteboard):
        (WebKit::WebPlatformStrategies::readStringFromPasteboard):
        (WebKit::WebPlatformStrategies::writeToPasteboard):
        (WebKit::WebPlatformStrategies::updateSupportedTypeIdentifiers):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2019-10-09  John Wilander  <wilander@apple.com>

        IsLoggedIn: Add as experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=202707
        <rdar://problem/56095064>

        Reviewed by Brent Fulgham and Chris Dumez.

        IsLoggedIn was proposed to the WebAppSec WG at TPAC 2019.
        So far there is only an explainer posted to the mailing list:
        https://lists.w3.org/Archives/Public/public-webappsec/2019Sep/0004.html

        * Shared/WebPreferences.yaml:

2019-10-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Move the mock testing entrance to Internals
        https://bugs.webkit.org/show_bug.cgi?id=202560
        <rdar://problem/55973793>

        Reviewed by Chris Dumez.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration): Deleted.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp:
        (WebKit::AuthenticatorTransportService::createMock):
        * UIProcess/WebAuthentication/AuthenticatorTransportService.h:
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::MockAuthenticatorManager):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.h:
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::send):
        (WebKit::MockHidConnection::registerDataReceivedCallbackInternal):
        (WebKit::MockHidConnection::parseRequest):
        (WebKit::MockHidConnection::feedReports):
        (WebKit::MockHidConnection::shouldContinueFeedReports):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.h:
        * UIProcess/WebAuthentication/Mock/MockHidService.cpp:
        (WebKit::MockHidService::MockHidService):
        * UIProcess/WebAuthentication/Mock/MockHidService.h:
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.h:
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        (WebKit::MockLocalConnection::MockLocalConnection):
        * UIProcess/WebAuthentication/Mock/MockLocalService.h:
        * UIProcess/WebAuthentication/Mock/MockLocalService.mm:
        (WebKit::MockLocalService::MockLocalService):
        * UIProcess/WebAuthentication/Mock/MockNfcService.h:
        * UIProcess/WebAuthentication/Mock/MockNfcService.mm:
        (WebKit::MockNfcService::MockNfcService):
        (WebKit::MockNfcService::platformStartDiscovery):
        (WebKit::MockNfcService::detectTags const):
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMockWebAuthenticationConfiguration):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setMockWebAuthenticationConfiguration):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

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

        Rename WheelEventTestTrigger and improve naming in related code
        https://bugs.webkit.org/show_bug.cgi?id=202772

        Reviewed by Tim Horton.

        Change the "test trigger" terminology to "monitor wheel events"; after all, tests
        call monitorWheelEvents() and callAfterScrollingCompletes(), and this is not triggering
        a test.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageClearWheelEventTestMonitor):
        (WKPageClearWheelEventTestTrigger): Deleted.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::clearWheelEventTestMonitor):
        (WebKit::WebPageProxy::clearWheelEventTestTrigger): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageStartMonitoringScrollOperations):
        (WKBundlePageRegisterScrollOperationCompletionCallback):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::createScrollbar):
        * WebProcess/WebPage/EventDispatcher.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::clearWheelEventTestMonitor):
        (WebKit::WebPage::clearWheelEventTestTrigger): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-10-09  Andy Estes  <aestes@apple.com>

        [Cocoa] IPC::decode should gracefully handle a nil allowed class
        https://bugs.webkit.org/show_bug.cgi?id=202753

        Reviewed by Geoffrey Garen.

        If IPC::decode is called with a nil allowed class, an NSInvalidArgumentException will be
        thrown when trying to create an NSArray literal with a nil value. Depending on who calls
        IPC::decode, this exception might or might not be caught, leading to dropped messages or
        crashes.

        One case of this happening is tracked by rdar://problem/55839467. In this case, the nil
        allowed class was due to a build misconfiguration, and the exception caused the UI process
        to not respond to a synchronous IPC message, hanging the WebContent process.

        rdar://problem/55839467 was resolved by fixing the build misconfiguration, but this patch
        improves IPC::decode so that a nil allowed class results in a message decoding failure
        rather than a maybe-caught NSException.

        * Shared/Cocoa/ArgumentCodersCocoa.h:
        (IPC::decode):

2019-10-09  youenn fablet  <youenn@apple.com>

        Remove testRunner.setWebRTCUnifiedPlanEnabled
        https://bugs.webkit.org/show_bug.cgi?id=202700

        Reviewed by Eric Carlson.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2019-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r250597): [GTK][WPE] 2.27.1 shows HTML content as text/plain in custom protocols when passing a charset in content type
        https://bugs.webkit.org/show_bug.cgi?id=202633

        Reviewed by Žan Doberšek.

        This is a regression of the switch to use the new custom protocols implementation. Before r250597, we extracted
        the mime type and charset from content type in the network process, but we are now sending the response directly
        from the UI process, so we need to do that when building our response. Rename the mime_type parameter as
        content_type to avoid confusion, since it's documented as the content type.

        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestReadCallback):
        (webkit_uri_scheme_request_finish):
        * UIProcess/API/gtk/WebKitURISchemeRequest.h:
        * UIProcess/API/wpe/WebKitURISchemeRequest.h:

2019-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] about:gpu should also show the client EGL extensions
        https://bugs.webkit.org/show_bug.cgi?id=202690

        Reviewed by Carlos Alberto Lopez Perez.

        We are showing the extensions supported by the display.

        * UIProcess/API/glib/WebKitProtocolHandler.cpp:
        (WebKit::WebKitProtocolHandler::handleGPU):

2019-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        CustomProtocols: convert log messages in WebURLSchemeTaskProxy to RELEASE_LOG
        https://bugs.webkit.org/show_bug.cgi?id=202686

        Reviewed by Alex Christensen.

        Instead of using WTFLogAlways, since those messages are confusing on stdout.

        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::didPerformRedirection):
        (WebKit::WebURLSchemeTaskProxy::didReceiveResponse):
        (WebKit::WebURLSchemeTaskProxy::didReceiveData):

2019-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] WebKitSecurityManager should consider webkit:// to be a local URI scheme
        https://bugs.webkit.org/show_bug.cgi?id=202638

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitProtocolHandler.cpp:
        (WebKit::WebKitProtocolHandler::WebKitProtocolHandler):

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

        [CSS Shadow Parts] Enable by default
        https://bugs.webkit.org/show_bug.cgi?id=202644

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferences.yaml:

        Flip the switch.

2019-10-08  Andy Estes  <aestes@apple.com>

        [iOS] Add a fast path that avoids hit testing during context menu interactions on elements
        https://bugs.webkit.org/show_bug.cgi?id=202510
        <rdar://problem/55939313>

        Reviewed by Tim Horton.

        When computing position information for an element, we can store sufficient context
        information in InteractionInformationAtPosition such that the same element could be
        retrieved again without hit testing. The existing TextInputContext can already store an
        element's page identifier, document identifier, and element identifier, which is sufficient
        context for such a task.

        This patch renames TextInputContext to ElementContext and uses it when populating new
        InteractionInformationAtPosition structs in elementPositionInformation(). When a context
        menu interaction occurs, WebPage::startInteractionWithElementContextOrPosition() uses this
        context to look up the interaction element by its identifier triplet, falling back to hit
        testing if this lookup fails.

        * Scripts/webkit/messages.py:
        * Shared/DocumentEditingContext.h:
        * Shared/DocumentEditingContext.mm:
        (IPC::ArgumentCoder<WebKit::DocumentEditingContextRequest>::decode):
        * Shared/ElementContext.cpp: Renamed from Source/WebKit/Shared/TextInputContext.cpp.
        (IPC::ArgumentCoder<WebKit::ElementContext>::encode):
        (IPC::ArgumentCoder<WebKit::ElementContext>::decode):
        * Shared/ElementContext.h: Renamed from Source/WebKit/Shared/TextInputContext.h.
        (WebKit::operator==):
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * Sources.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]):
        * UIProcess/API/Cocoa/_WKTextInputContext.mm:
        (-[_WKTextInputContext _initWithTextInputContext:]):
        (-[_WKTextInputContext _textInputContext]):
        * UIProcess/API/Cocoa/_WKTextInputContextInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::textInputContextsInRect):
        (WebKit::WebPageProxy::focusTextInputContext):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistant:willStartInteractionWithElement:]):
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView continueContextMenuInteractionWithDataDetectors:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startInteractionWithPositionInformation):
        (WebKit::WebPageProxy::startInteractionWithElementAtPosition): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::textInputContextsInRect):
        (WebKit::WebPage::focusTextInputContext):
        (WebKit::WebPage::elementForContext const):
        (WebKit::WebPage::contextForElement const):
        (WebKit::WebPage::elementForTextInputContext): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::elementPositionInformation):
        (WebKit::WebPage::startInteractionWithElementContextOrPosition):
        (WebKit::WebPage::requestDocumentEditingContext):
        (WebKit::WebPage::startInteractionWithElementAtPosition): Deleted.

2019-10-08  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.27.1 release

        * wpe/NEWS: Add release notes for 2.27.1

2019-10-08  Kate Cheney  <katherine_cheney@apple.com>

        Implement Telemetry and Dumping Routines for SQLite backend (195088)
        https://bugs.webkit.org/show_bug.cgi?id=195088
        <rdar://problem/54213407>

        Reviewed by John Wilander.

        Implemented database telemetry calculating for ITP. Mimicked
        ResourceLoadStatisticsMemoryStore telemetry logging behavior using
        SQLite Queries as opposed to vector sorting/manipulation. Once fully
        integrated, this will simplify analysis of ITP data by transitioning
        ITP data storage from a plist to a SQLite database.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        Added SQL queries to be initialized in the constructor. These queries
        are needed to mimic the telemetry calculations done in
        ResourceLoadStatisticsMemoryStore.
        
        (WebKit::resetStatement):
        To reduce code duplication, this function holds common code to reset
        a SQL query.

        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        Added SQL queries needed for telemetry calculations to be prepared.
        
        (WebKit::joinSubStatisticsForSorting):
        This function returns the query string for sorting resources that is
        shared by many queries.

        (WebKit::ResourceLoadStatisticsDatabaseStore::getMedianOfPrevalentResourcesWithUserInteraction const):
        Implemented a function to take the median days since user interaction
        from all prevalent resources in the database with user interaction
        (sorted by max count of subframes, subresources and unique redirects under
        the top frame domain).

        (WebKit::ResourceLoadStatisticsDatabaseStore::getNumberOfPrevalentResources const):
        Executes a SQL query to get the number of prevalent resources to log as
        telemetry.

        (WebKit::ResourceLoadStatisticsDatabaseStore::getNumberOfPrevalentResourcesWithUI const):
        Executes a SQL query to get the number of prevalent resources with user
        interaction to log as telemetry.

        (WebKit::ResourceLoadStatisticsDatabaseStore::getTopPrevelentResourceDaysSinceUI const):
        Prepares and executes a SQL query to get the days since user
        interaction from the top prevalent resource to be recorded as
        telemetry data.

        (WebKit::ResourceLoadStatisticsDatabaseStore::getMedianStatisticOfPrevalentResourceWithoutUserInteraction const):
        Implemented a function which takes a statistic and returns the value
        of that statistic for the median prevalent resource without user
        interaction to be recorded as telemetry data.

        (WebKit::ResourceLoadStatisticsDatabaseStore::getNumberOfPrevalentResourcesInTopResources const):
        Returns the count of prevalent resources in the top x resources
        sorted by sum of substatistics again to be logged as telemetry.

        (WebKit::ResourceLoadStatisticsDatabaseStore::calculateTelemetryData const):
        Function which executes all functions which populate the struct with
        telemetry data. This struct will then be passed to
        WebResourceLoadStatisticsTelemetry to be logged.

        (WebKit::ResourceLoadStatisticsDatabaseStore::calculateAndSubmitTelemetry const):
        Initializes the telemetry struct and calls the function to populate
        it, then passes it to the WebResourceLoadStatisticsTelemetry object
        to be recorded.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        Describe PrevalentResourceDatabaseTelemetry Struct to be passed and
        logged as telemetry data.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp:
        (WebKit::databaseSubmitTopLists):
        Logging telemetry data by looping through 2D array of statistics for
        the top 1, 3, 10, 50, and 100 prevalent resources sorted by the sum
        of substatistics under the top frame domain. This matches the logging
        already done in ResourceLoadStatisticsMemoryStore.

        (WebKit::WebResourceLoadStatisticsTelemetry::submitTelemetry):
        Submits data to the webPageProxy logs and plists.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.h:
        Added new submitTopList function to accomodate database telemetry
        logging.
        
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::notifyPageStatisticsTelemetryFinished):
        * NetworkProcess/NetworkSession.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::notifyResourceLoadStatisticsTelemetryFinished):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        Updated the current testing for telemetry which only tested 3
        statistics. With this patch it now tests 10 statistics.

2019-10-08  Adrian Perez de Castro  <aperez@igalia.com>

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

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp: Add missing inclusion of the
        Logging.h header.

2019-10-08  Brady Eidson  <beidson@apple.com>

        Service Worker Fetch events should time out.
        https://bugs.webkit.org/show_bug.cgi?id=202188

        Reviewed by Alex Christensen.

        When we start a fetch task in the server, we also start a timeout on that fetch task.
        
        "Time out" means the fetch task must continue to make progress at the given frequency (once every 60 seconds by default)

        If any given fetch task times out in a service worker instance, that instance loses the right to handle fetches.
        
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setServiceWorkerFetchTimeoutForTesting):
        (WebKit::NetworkProcess::resetServiceWorkerFetchTimeoutForTesting):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::serviceWorkerFetchTimeout const):
        * NetworkProcess/NetworkProcess.messages.in:

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse): 
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse): 
        (WebKit::ServiceWorkerFetchTask::didReceiveData): 
        (WebKit::ServiceWorkerFetchTask::didReceiveFormData): 
        (WebKit::ServiceWorkerFetchTask::didFinish): 
        (WebKit::ServiceWorkerFetchTask::didFail): 
        (WebKit::ServiceWorkerFetchTask::didNotHandle): 
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        (WebKit::ServiceWorkerFetchTask::create):
        (WebKit::ServiceWorkerFetchTask::serviceWorkerIdentifier const):
        (WebKit::ServiceWorkerFetchTask::wasHandled const):
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask): Deleted.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::startFetch):
        (WebKit::WebSWServerToContextConnection::fetchTaskTimedOut):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetServiceWorkerFetchTimeoutForTesting):
        (WKContextResetServiceWorkerFetchTimeoutForTesting):
        * UIProcess/API/C/WKContext.h:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setServiceWorkerTimeoutForTesting):
        (WebKit::WebProcessPool::resetServiceWorkerTimeoutForTesting):
        * UIProcess/WebProcessPool.h:

2019-10-08  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed. Restabilize non-unified build.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:

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

        Sort Internal and Experimental features by human readable name
        https://bugs.webkit.org/show_bug.cgi?id=202667

        Reviewed by Zalan Bujtas.

        Sort the statically generated vectors of internal and
        experimental features by their human readable name, rather than
        the feature key, so that looking at them in the Settings app
        doesn't make people who like alphabetical order angry.

        * Scripts/GeneratePreferences.rb: Add an extra sort call to the list generation.

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

        [Clipboard API] Introduce bindings for the async Clipboard API
        https://bugs.webkit.org/show_bug.cgi?id=202622
        <rdar://problem/56038126>

        Reviewed by Ryosuke Niwa.

        Adds a new experimental feature flag. See WebCore ChangeLog for more details.

        * Shared/WebPreferences.yaml:

2019-10-08  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Navigation gesture improvements
        https://bugs.webkit.org/show_bug.cgi?id=202645

        Reviewed by Carlos Garcia Campos.

        Measure velocity threshold in pixels per second rather than distance (range [0-1])
        per second. The value is the same as it was on touchpads, since a fixed distance is
        used, but is now consistent on touchscreens, regardless of the webview width.

        Add a threshold for cancelling gesture when the page is more than halfway
        through, so that it's symmetric with the first half.

        Align the moving page to pixel grid on hidpi devices correctly. Just
        rounding the position doesn't work correctly, since the cairo context is
        pre-scaled. Multiplying by scale factor, rounding and then dividing by
        scale factor fixes this.

        * UIProcess/ViewGestureController.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::SwipeProgressTracker::reset):
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
        (WebKit::ViewGestureController::SwipeProgressTracker::shouldCancel):
        (WebKit::ViewGestureController::draw):

2019-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Remove unused WebKitSoupRequestGeneric after r250597

        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.h:

2019-10-08  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Build fails with ENABLE_WEBDRIVER=OFF
        https://bugs.webkit.org/show_bug.cgi?id=202658

        Reviewed by Carlos Garcia Campos.

        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp: Add missing
        ENABLE(WEBDRIVER_MOUSE_INTERACTIONS) and ENABLE(WEBDRIVER_KEYBOARD_INTERACTIONS)
        preprocessor guards.
        * UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp: Ditto.

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

        Add IDL for requestIdleCallback
        https://bugs.webkit.org/show_bug.cgi?id=202653

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferences.yaml:

2019-10-07  Kate Cheney  <katherine_cheney@apple.com>

        Domain relationships in the ITP Database should be inserted in a single query and ignore repeat insert attempts. (202604)
        https://bugs.webkit.org/show_bug.cgi?id=202604
        <rdar://problem/55995831>

        Reviewed by Chris Dumez. 
        
        This patch addresses two clean-ups for the ITP SQLite Database Store.
        First, by using INSERT OR IGNORE as opposed to INSERT, it eliminates
        the need to check if a relationship already exists in the database
        before inserting it. Second, instead of looping through domain lists
        and inserting each relationship as a separate query, this patch now
        converts lists to a string which SQLite can use to insert multiple
        rows into a database using a single query.

        Some Exists queries could not be deleted because they were being
        used for testing.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        Removed old insert queries and replaced them with queries able to
        insert string-lists of domains in a single query. Also reorganized
        the queries by functionality to make them easier to find and edit.

        (WebKit::ResourceLoadStatisticsDatabaseStore::createUniqueIndices):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createSchema):
        In order to properly take advantage of the INSERT OR IGNORE
        functionality, unique indices must be established so the SQLite table
        is aware of what patterns to look for when ignoring a new insert.

        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureAndmakeDomainList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        Looping through the domain list is no longer needed with the new query
        changes. Additionally, ensuring a domain is in the Observed Domains
        table of the database must be done before utilizing any inserting of 
        relationships because the relationship queries rely on fetching the
        topFrame domainID from the ObservedDomains table.

        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logCrossSiteLoadWithLinkDecoration):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubframeUnderTopFrameDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUnderTopFrameDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setTopFrameUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setTopFrameUniqueRedirectFrom):
        With the ensure check being done once in the ensureAndmakeDomainList
        function, these functions no longer have to make that check before
        inserting.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::mergeStatisticForTesting):
        (WebKit::WebResourceLoadStatisticsStore::isRelationshipOnlyInDatabaseOnce):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        Changes in WeResourceLoadStatisticsStore were for testing only. This
        patch updated the merge statistic testing to also test this change by
        having a topFrameDomain list with more than one domain.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::mergeStatisticForTesting):
        (WebKit::NetworkProcess::isRelationshipOnlyInDatabaseOnce):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsMergeStatistic):
        (WKWebsiteDataStoreIsStatisticsOnlyInDatabaseOnce):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::mergeStatisticForTesting):
        (WebKit::NetworkProcessProxy::isRelationshipOnlyInDatabaseOnce):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::mergeStatisticForTesting):
        (WebKit::WebsiteDataStore::isRelationshipOnlyInDatabaseOnce):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Added a new function for testing that there are no repeat inserts
        into the database. Updated mergeStatistics to test the list-insert
        functionality.

2019-10-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Change signature of HostFunction to (JSGlobalObject*, CallFrame*)
        https://bugs.webkit.org/show_bug.cgi?id=202569

        Reviewed by Saam Barati.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::callMethod):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::callNPJSObject):
        (WebKit::constructWithConstructor):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:

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

        Switch to WKShareSheet for WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=202338

        Reviewed by Tim Horton.

        Switch to WKShareSheet from the share sheet in UIWKSelectionAssistant, since this is the only instance
        of UIWKSelectionAssistant any more. This will keep all our share sheet code together, and allow
        us to eliminate this class that will be completely unused with this change.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView dealloc]):
        (-[WKPDFView actionSheetAssistant:shareElementWithURL:rect:]):
        (-[WKPDFView shareSheetDidDismiss:]):

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

        [macOS] Layering violation in AuxiliaryProcessProxy::didFinishLaunching
        https://bugs.webkit.org/show_bug.cgi?id=201617

        Reviewed by Brent Fulgham.

        The commit <https://trac.webkit.org/changeset/249649> introduced a layering violation in AuxiliaryProcessProxy::didFinishLaunching
        where we inspect the pending message queue looking for a local file load message which needs the PID to create a sandbox extension
        for the WebContent process. The layering violation can be fixed by creating a virtual method in AuxiliaryProcessProxy and override
        the method in the WebProcessProxy to do the work needed to replace the message with a load request message containing a sandbox
        extension created using the PID of the WebContent process. No new tests have been created, since this is covered by existing tests.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::shouldSendPendingMessage):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shouldSendPendingMessage):
        * UIProcess/WebProcessProxy.h:

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

        Provide options for DTTZ to happen in more situations
        https://bugs.webkit.org/show_bug.cgi?id=202634
        <rdar://problem/55732762>

        Reviewed by Antoine Quint.

        Add two options that can be enabled to trigger double tap zooming 
        in more places.

        Firstly, an option to keep listening for a double-tap-to-zoom if the
        first tap found a click handler on the body or document element. The
        tap will still be dispatched. This is probably the most common case
        for disabling a DTTZ.

        Secondly, an option to always keep listening for a double-tap-to-zoom,
        even if there was a clickable (non-root) element under the first tap.

        * Shared/WebPreferences.yaml: Add ZoomOnDoubleTapWhenRoot and AlwaysZoomOnDoubleTap.
        * UIProcess/PageClient.h: The message from the WebProcess now tells the UIProcess if
        the tapped element was a root-level (document or body).
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleSmartMagnificationInformationForPotentialTap):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _endPotentialTapAndEnableDoubleTapGesturesIfNecessary]):
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:nodeIsRootLevel:]):
        Handle the two new options.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleSmartMagnificationInformationForPotentialTap):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::potentialTapAtPosition): Check if the tap was on a root-level element.

2019-10-07  Matt Mokary  <mmokary@apple.com>

        foundStringMatchIndex in FindController::findString gets reset on page scroll
        https://bugs.webkit.org/show_bug.cgi?id=201773
        <rdar://problem/55351892>

        Reviewed by Tim Horton.

        Decouple hiding of the find indicator from resetting match index, and only reset match index when there is not
        an active match.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::hideFindUI):
        (WebKit::FindController::hideFindIndicator):
        (WebKit::FindController::resetMatchIndex):
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::hideFindIndicator):
        (WebKit::FindController::resetMatchIndex):

2019-10-07  youenn fablet  <youenn@apple.com>

        WebPageProxy::updatePlayingMediaDidChange should protect from a null m_userMediaPermissionRequestManager
        https://bugs.webkit.org/show_bug.cgi?id=202628
        <rdar://problem/55935091>

        Reviewed by Eric Carlson.

        On process swap on navigation or process crash, m_userMediaPermissionRequestManager is made null.
        At the same time, the media state is set back to not playing.
        Future calls of updatePlayingMediaDidChange should not have any capture state change until getUserMedia/getDisplayMedia
        is called, which would create m_userMediaPermissionRequestManager.
        But this assumption is not always true given that the media state is computed as process-wide in MediaStreamTrack::captureState on iOS.
        The above behavior is fixed as part of https://bugs.webkit.org/show_bug.cgi?id=202627.
        Since the call to updatePlayingMediaDidChange is triggered straight from IPC, it should not be trusted and a null check should be added.

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

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

        Use a better name than allowFastClicksEverywhere
        https://bugs.webkit.org/show_bug.cgi?id=202607
        <rdar://problem/55997133>

        Reviewed by Tim Horton.

        This preference name is quite confusing. Change it to
        PreferFasterClickOverDoubleTap.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::preferFasterClickOverDoubleTap const):
        (WebKit::WebPageProxy::allowsFastClicksEverywhere const): Deleted.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):

2019-10-04  Ross Kirsling  <ross.kirsling@sony.com>

        Socket-based RWI should base64-encode backend commands on client, not server
        https://bugs.webkit.org/show_bug.cgi?id=202605

        Reviewed by Don Olmstead.

        * UIProcess/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::setBackendCommands):

2019-10-04  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix after r250729

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanelInternal.h:

2019-10-04  Keith Rollin  <krollin@apple.com>

        Fix determination of the top-level resource
        https://bugs.webkit.org/show_bug.cgi?id=202491
        <rdar://problem/50780648>

        Reviewed by Youenn Fablet.

        When loading the resources associated with a page, the Networking
        process needs to know the main resource for the main frame. It uses
        this information to keep track of page loads and the resources that
        are loaded in those pages. By keeping track of this information,
        WebKit can track and report difficult (slow or incomplete) resource
        loads and their impact on the overall page.

        The initial determination of the top resource only looked at whether
        the resource was the "main" resource of a frame or not. However, this
        determination was insufficient, and would confuse the tracking
        mechanism when sub-frames also had main frames. Therefore, augment the
        test by also looking to see if the hosting frame is the main frame.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::startTrackingResourceLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):

2019-10-04  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed WinCairo build fix for r250717.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:
        (WebKit::LayerTreeHost::invalidate): Deleted.

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

        Stop sending list of display-isolated schemes to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=202557

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::registerURLSchemeAsDisplayIsolated const): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsDisplayIsolated):

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

        Rename SchemeRegistry to LegacySchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=202586

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::doesNotNeedCORSCheck const):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::registerURLSchemeAsSecure const):
        (WebKit::NetworkProcess::registerURLSchemeAsBypassingContentSecurityPolicy const):
        (WebKit::NetworkProcess::registerURLSchemeAsLocal const):
        (WebKit::NetworkProcess::registerURLSchemeAsNoAccess const):
        (WebKit::NetworkProcess::registerURLSchemeAsDisplayIsolated const):
        (WebKit::NetworkProcess::registerURLSchemeAsCORSEnabled const):
        (WebKit::NetworkProcess::registerURLSchemeAsCanDisplayOnlyIfCanRequest const):
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::registerURLSchemeServiceWorkersCanHandle const):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (+[WKWebView handlesURLScheme:]):
        * UIProcess/API/glib/WebKitSecurityManager.cpp:
        (registerSecurityPolicyForURIScheme):
        (checkSecurityPolicyForURIScheme):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::webVisiblePluginInfo):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::handleFetch):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canHandleRequest):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::registerURLSchemeAsEmptyDocument):
        (WebKit::WebProcess::registerURLSchemeAsSecure const):
        (WebKit::WebProcess::registerURLSchemeAsBypassingContentSecurityPolicy const):
        (WebKit::WebProcess::setDomainRelaxationForbiddenForURLScheme const):
        (WebKit::WebProcess::registerURLSchemeAsLocal const):
        (WebKit::WebProcess::registerURLSchemeAsNoAccess const):
        (WebKit::WebProcess::registerURLSchemeAsDisplayIsolated const):
        (WebKit::WebProcess::registerURLSchemeAsCORSEnabled const):
        (WebKit::WebProcess::registerURLSchemeAsAlwaysRevalidated const):
        (WebKit::WebProcess::registerURLSchemeAsCachePartitioned const):
        (WebKit::WebProcess::registerURLSchemeAsCanDisplayOnlyIfCanRequest const):
        * WebProcess/WebStorage/StorageAreaImpl.cpp:

2019-10-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement _WKWebAuthenticationPanel SPI
        https://bugs.webkit.org/show_bug.cgi?id=202559
        <rdar://problem/55932094>

        Reviewed by Brent Fulgham.

        This patch implements _WKWebAuthenticationPanel SPI. Here is the structure:
        1) API::WebAuthenticationPanel is the APIObject of _WKWebAuthenticationPanel. It is owned by AuthenticatorManager.
        The lifetime of _WKWebAuthenticationPanel on the other hand is managed by clients. This binding is the surface
        where clients could interact with WebKit's WebAuthentication implementation.
        2) API::WebAuthenticationPanelClient is a base class representing _WKWebAuthenticationPanelDelegate. Its subclass
        WebKit::WebAuthenticationPanelClient implements bridges to _WKWebAuthenticationPanelDelegate methods. It is owned by
        API::WebAuthenticationPanel. A weak pointer of WebKit::WebAuthenticationPanelClient is kept in _WKWebAuthenticationPanel
        to get the _WKWebAuthenticationPanelDelegate set by clients or nil otherwise. This binding is the surface where WebKit
        interacts with clients.
        3) WebAuthenticationPanelFlags is the mirror of enums within _WKWebAuthenticationPanel.

        Implementation wise, this patch implements:
        1) -[WKUIDelegatePrivate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:], this is bridged from
        the regular UIDelegate route. Noted, WKFrameInfo is nil for now, a follow up on Bug 202563 will take care of it. This
        will be called from AuthenticatorManager::runPanel() which gates the start of discovery on the callback. For clients
        that don't implement the delegate, the callback will always be called with _WKWebAuthenticationPanelResultUnavailable
        to allow WebKit run on non-UI mode. A specific C API hack is added to always return _WKWebAuthenticationPanelResultPresented
        in WebKitTestRunner for layout tests.
        2) -[_WKWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:] will be implemented in Bug 200932.
        3) -[_WKWebAuthenticationPanelDelegate panel:dismissWebAuthenticationPanelWithResult:], this is bridged from
        API::WebAuthenticationPanel/API::WebAuthenticationPanelClient. This will be called whenever AuthenticatorManager::m_pendingCompletionHandler
        is invoked. Depending on the respond, _WKWebAuthenticationResult will be returned accordingly. To facilitate that,
        invokePendingCompletionHandler is crafted to bundle those two operations.
        4) -[_WKWebAuthenticationPanel cancel] will be implemented in Bug 191523.

        Besides the above, this patch also silents the NFC action sheet.

        * Platform/spi/Cocoa/NearFieldSPI.h:
        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::runWebAuthenticationPanel):
        * UIProcess/API/APIWebAuthenticationPanel.cpp: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm.
        (API::WebAuthenticationPanel::create):
        (API::WebAuthenticationPanel::WebAuthenticationPanel):
        (API::WebAuthenticationPanel::setClient):
        * UIProcess/API/APIWebAuthenticationPanel.h: Copied from Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h.
        * UIProcess/API/APIWebAuthenticationPanelClient.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelInternal.h.
        (API::WebAuthenticationPanelClient::dismissPanel const):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel dealloc]):
        (-[_WKWebAuthenticationPanel relyingPartyID]):
        (-[_WKWebAuthenticationPanel delegate]):
        (-[_WKWebAuthenticationPanel setDelegate:]):
        (-[_WKWebAuthenticationPanel _apiObject]):
        (-[_WKWebAuthenticationPanel _initWithRelayingPartyID:]): Deleted.
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanelInternal.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::webAuthenticationPanelResult):
        (WebKit::UIDelegate::UIClient::runWebAuthenticationPanel):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::isFeatureEnabled):
        (WebKit::WebCore::getRpId):
        (WebKit::AuthenticatorManager::handleRequest):
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::startDiscovery):
        (WebKit::AuthenticatorManager::initTimeOutTimer):
        (WebKit::AuthenticatorManager::timeOutTimerFired):
        (WebKit::AuthenticatorManager::runPanel):
        (WebKit::AuthenticatorManager::startRequest):
        (WebKit::AuthenticatorManager::invokePendingCompletionHandler):
        (WebKit::AuthenticatorManagerInternal::collectTransports): Deleted.
        (WebKit::AuthenticatorManagerInternal::processGoogleLegacyAppIdSupportExtension): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        (WebKit::AuthenticatorManager::pendingCompletionHandler): Deleted.
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::NfcConnection::NfcConnection):
        * UIProcess/WebAuthentication/Cocoa/NfcService.mm:
        (WebKit::NfcService::platformStartDiscovery):
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h: Copied from Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h.
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.mm: Copied from Source/WebKit/UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp.
        (WebKit::WebAuthenticationPanelClient::WebAuthenticationPanelClient):
        (WebKit::wkWebAuthenticationResult):
        (WebKit::WebAuthenticationPanelClient::dismissPanel const):
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp:
        (WebKit::MockAuthenticatorManager::respondReceivedInternal):
        * UIProcess/WebAuthentication/WebAuthenticationPanelFlags.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelInternal.h.
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        * WebKit.xcodeproj/project.pbxproj:

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

        Move WKProcessPool._registerURLSchemeServiceWorkersCanHandle to _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202553

        Reviewed by Youenn Fablet.

        It was only used for testing, and all the tests that use it still pass with the new SPI.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::swServerForSession):
        (WebKit::NetworkProcess::addServiceWorkerSession):
        * NetworkProcess/NetworkProcess.h:
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::registerURLSchemeServiceWorkersCanHandle const): Deleted.
        * Shared/AuxiliaryProcess.h:
        * Shared/AuxiliaryProcess.messages.in:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        * Shared/WebsiteDataStoreParameters.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _registerURLSchemeServiceWorkersCanHandle:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::registerURLSchemeServiceWorkersCanHandle): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::serviceWorkerRegisteredSchemes const):
        (WebKit::WebsiteDataStoreConfiguration::registerServiceWorkerScheme):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2019-10-04  youenn fablet  <youenn@apple.com>

        Allow to suspend RTCPeerConnection when not connected
        https://bugs.webkit.org/show_bug.cgi?id=202403

        Reviewed by Chris Dumez.

        Implement suspend/resume of sockets by doing the following:
        - For UDP sockets, we simulate as if being sent data is queued when being suspended.
        the webrtc backend will then stop sending packets until the queue is emptied.
        At resume time, we do as if the queue is emptied and packets sent (even though packets are not sent).
        For incoming traffic, we ignore it when being suspended.
        - For TCP sockets, we close them at suspend time. We then notify at resume time that an error happeneded
        for these sockets to the webrtc backend. We cannot simulate packet dropping like in the UDP case.

        To manage resume/suspend, each socket now has a isSuspended state and a socket group.
        The socket group is per peer connection.
        A peer connection will notify the factory that it is suspended/resumed.
        The factory will iterate through all sockets and will suspend/resume each socket of the socket group.

        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::RTCSocketFactory::RTCSocketFactory):
        (WebKit::RTCSocketFactory::CreateUdpSocket):
        (WebKit::RTCSocketFactory::CreateServerTcpSocket):
        (WebKit::RTCSocketFactory::CreateClientTcpSocket):
        (WebKit::RTCSocketFactory::CreateAsyncResolver):
        (WebKit::RTCSocketFactory::suspend):
        (WebKit::RTCSocketFactory::resume):
        (WebKit::LibWebRTCProvider::createSocketFactory):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::LibWebRTCSocket):
        (WebKit::LibWebRTCSocket::~LibWebRTCSocket):
        (WebKit::LibWebRTCSocket::signalReadPacket):
        (WebKit::LibWebRTCSocket::signalSentPacket):
        (WebKit::LibWebRTCSocket::SendTo):
        (WebKit::LibWebRTCSocket::Close):
        (WebKit::LibWebRTCSocket::SetOption):
        (WebKit::LibWebRTCSocket::resume):
        (WebKit::LibWebRTCSocket::suspend):
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createServerTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createUdpSocket):
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createNewConnectionSocket):
        (WebKit::LibWebRTCSocketFactory::addSocket):
        (WebKit::LibWebRTCSocketFactory::removeSocket):
        (WebKit::LibWebRTCSocketFactory::forSocketInGroup):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:

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

        Simplify sandbox enabling macros
        https://bugs.webkit.org/show_bug.cgi?id=202536

        Reviewed by Brent Fulgham.

        ENABLE_WEB_PROCESS_SANDBOX was always on for Cocoa platforms and only used in WebProcessCocoa.mm, so it did nothing.
        ENABLE_MANUAL_SANDBOXING was on for sdk=macosx* which I made more explicit in the code by using PLATFORM(MAC) || PLATFORM(MAACCATALYST)
        ENABLE_MANUAL_NETWORK_SANDBOXING was always off and hiding dead code we do not intend to use because iOS sandboxes are always on and never manual.

        * Configurations/FeatureDefines.xcconfig:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::initializeSandbox):
        * Shared/ios/AuxiliaryProcessIOS.mm:
        (WebKit::AuxiliaryProcess::initializeSandbox):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox):

2019-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.27.1 release

        * gtk/NEWS: Add release notes for 2.27.1.

2019-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash in WebChromeClient::createDisplayRefreshMonitor
        https://bugs.webkit.org/show_bug.cgi?id=202551

        Reviewed by Žan Doberšek.

        The crash happens when the drawing area is destroyed due to a page close. The layer tree host is invalidated
        causing a layer flush that ends up trying to create a display refresh monitor, which requires the drawing
        area. We need to null-check the drawing area in WebChromeClient::createDisplayRefreshMonitor() but we should
        also ensure that layer flush is not performed after layer tree host is destroyed.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createDisplayRefreshMonitor const): Null-check drawing area before using it.
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::CompositingCoordinator): Receive a WebPage instead of a WebCore::Page and
        create the root layer here.
        (WebKit::CompositingCoordinator::~CompositingCoordinator): Do not purge backing stores again, invalidate should
        always be called right before the object is destroyed.
        (WebKit::CompositingCoordinator::flushPendingLayerChanges): Get WebCore::Page from WebPage.
        (WebKit::CompositingCoordinator::timestamp const): Ditto.
        (WebKit::CompositingCoordinator::syncDisplayState): Ditto.
        (WebKit::CompositingCoordinator::notifyFlushRequired): Do not continue if m_rootLayer is nullptr.
        (WebKit::CompositingCoordinator::deviceScaleFactor const): Get WebCore::Page from WebPage.
        (WebKit::CompositingCoordinator::pageScaleFactor const): Ditto.
        (WebKit::CompositingCoordinator::createGraphicsLayer): Call attachLayer() instead of duplicating the code.
        (WebKit::CompositingCoordinator::setVisibleContentsRect): Get WebCore::Page from WebPage.
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::discardPreviousLayerTreeHost): Do not call LayerTreeHost::invalidate()
        that has been removed.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::LayerTreeHost): Construct the coordinator after the sceneIntegration.
        (WebKit::LayerTreeHost::~LayerTreeHost): Invalidate everything here now. We don't really need invalidate()
        method since LayerTreeHost is not refcounted and we always called invalidate right before deleting the object.
        (WebKit::LayerTreeHost::layerFlushTimerFired): This can't happen on invalid state anymore.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:

2019-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] REGRESSION(r250673): connection to network process is broken after r250673
        https://bugs.webkit.org/show_bug.cgi?id=202575

        Reviewed by Carlos Alberto Lopez Perez.

        The file descriptor is now closed when the IPC::Attachment is destroyed in NetworkProcessConnectionInfo
        destructor. In case of unix domain sockets we need to transfer the ownership of the fd to
        NetworkProcessConnection, but NetworkProcessConnectionInfo is ow keeping the ownership.

        * WebProcess/Network/NetworkProcessConnectionInfo.h:
        (WebKit::NetworkProcessConnectionInfo::releaseIdentifier): Use IPC::Attachment::releaseFileDescriptor() in case
        of unix domain sockets.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureNetworkProcessConnection): Use NetworkProcessConnectionInfo::releaseIdentifier() when
        passing the identifier to NetworkProcessConnection.

2019-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK distcheck

        * webkitglib-symbols.map: Remove symbols that are no longer in lib.

2019-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebAutomation: make setWindowRect synchronous
        https://bugs.webkit.org/show_bug.cgi?id=202530

        Reviewed by Carlos Alberto Lopez Perez.

        Move/resize window is asynchronous in GTK, but automation expects it to be synchronous so that get window rect
        after setting it always returns the value set. Use a nested run loop to wait for the configure events after the
        move/resize.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        (UIClient::windowConfigureEventCallback):
        (UIClient::setWindowFrameTimerFired):

2019-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Address review comments after r250646.

        I forgot to include the documentation improvements suggested.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_class_init):

2019-10-03  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] Remote inspector client target list is racy
        https://bugs.webkit.org/show_bug.cgi?id=202169

        Reviewed by Ross Kirsling.

        Original patch by Basuke Suzuki.

        Use LoaderClient to defer javascript target update calls to until after the page finished load.

        * UIProcess/socket/RemoteInspectorProtocolHandler.cpp:
        * UIProcess/socket/RemoteInspectorProtocolHandler.h:

2019-10-03  Ross Kirsling  <ross.kirsling@sony.com>

        Socket RWI client should acquire backend commands from server
        https://bugs.webkit.org/show_bug.cgi?id=202421

        Reviewed by Devin Rousso.

        * UIProcess/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::dispatchMap):
        (WebKit::RemoteInspectorClient::setBackendCommands):
        * UIProcess/socket/RemoteInspectorClient.h:
        Receive "BackendCommands" message from server (which is already base64-encoded) and hand it over to RWIProxy.

        * UIProcess/win/WebProcessPoolWin.cpp:
        (WebKit::backendCommandsPath):
        (WebKit::initializeRemoteInspectorServer):
        On Windows, initialize server with the path to InspectorBackendCommands.js from the CFBundle.

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

        Replace _WKProcessPoolConfiguration.suppressesConnectionTerminationOnSystemChange with SPI on _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202544

        Reviewed by Tim Horton.

        The _WKProcessPoolConfiguration SPI was originally introduced in rdar://problem/40650244
        Keep both working during the transition period, but we need it to not be on the process pool.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration suppressesConnectionTerminationOnSystemChange]):
        (-[_WKWebsiteDataStoreConfiguration setSuppressesConnectionTerminationOnSystemChange:]):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::suppressesConnectionTerminationOnSystemChange const):
        (WebKit::WebsiteDataStoreConfiguration::setSuppressesConnectionTerminationOnSystemChange):

2019-10-03  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION(249649): Unable to open local files in MiniBrowser on macOS
        https://bugs.webkit.org/show_bug.cgi?id=201798

        Reviewed by Brent Fulgham.

        The commit <https://trac.webkit.org/changeset/249649> introduced a MiniBrowser regression on macOS where MiniBrowser
        is not able to open local files. The change set r249649 fixed a problem where the WebContent process PID was not ready
        to be used when creating a sandbox extension. This happened in the cases where the WebContent process had not finished
        launching when the load started. The WebContent process is also creating sandbox extensions for the Networking process
        for the files being loaded, and also needs to be passing the audit token of the Networking process when creating these.
        This patch implements getting the audit token for the Networking process when the WebProcess is sending a message to
        the UI process to establish the Networking process connection. The audit token is stored in the NetworkProcessConnection
        object, and passed to the NetworkLoadParameters object when the load is started. Finally, when encoding the Network
        resources load parameters, the audit token is used to create an extension for the Networking process.

        API test: WKWebView.LoadFileWithLoadRequest

        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<audit_token_t>::encode):
        (IPC::ArgumentCoder<audit_token_t>::decode):
        * Platform/IPC/ArgumentCoders.h:
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::create):
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::SandboxExtensionImpl::SandboxExtensionImpl):
        (WebKit::SandboxExtension::createHandleForMachLookupByPid):
        (WebKit::SandboxExtension::createHandleForReadByPid):
        (WebKit::SandboxExtension::createHandleForReadByAuditToken):
        * Shared/SandboxExtension.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::openNetworkProcessConnection):
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::setNetworkProcessAuditToken):
        (WebKit::NetworkProcessConnection::networkProcessAuditToken const):
        * WebProcess/Network/NetworkProcessConnectionInfo.h: Added.
        (WebKit::NetworkProcessConnectionInfo::identifier):
        (WebKit::NetworkProcessConnectionInfo::encode const):
        (WebKit::NetworkProcessConnectionInfo::decode):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/WebProcess.cpp:
        (WebKit::getNetworkProcessConnection):
        (WebKit::WebProcess::ensureNetworkProcessConnection):

2019-10-03  Konstantin Tokarev  <annulen@yandex.ru>

        CMake-built WebKit.framework should launch XPC services successfully
        https://bugs.webkit.org/show_bug.cgi?id=202490

        Reviewed by Carlos Alberto Lopez Perez.

        target_link_options() requires CMake 3.10, however we can avoid
        raising required CMake version by moving it to PlatformMac.cmake,
        also avoid introduction of new CMake variable.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2019-10-03  Jiewen Tan  <jiewen_tan@apple.com>

        Support googleLegacyAppidSupport extension
        https://bugs.webkit.org/show_bug.cgi?id=202427
        <rdar://problem/55887473>

        Reviewed by Brent Fulgham.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManagerInternal::collectTransports):
        (WebKit::AuthenticatorManagerInternal::processGoogleLegacyAppIdSupportExtension):
        (WebKit::AuthenticatorManager::handleRequest):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::processGoogleLegacyAppIdSupportExtension):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.h:
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::continueRegisterCommandAfterResponseReceived):

2019-10-03  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement dummy _WKWebAuthenticationPanel SPI
        https://bugs.webkit.org/show_bug.cgi?id=202507
        <rdar://problem/55918793>

        Reviewed by Brent Fulgham.

        This patch implements dummy _WKWebAuthenticationPanel SPI to unblock Safari.

        Here are the illustrations for each SPI:
        1) -[WKUIDelegatePrivate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:] is used at the beginning of
        any WebAuthn ceremonies. A WKFrameInfo is provided for more info of the initiating frame so clients could decide either show
        the RP ID or the origin of the frame which may or may not be the RP ID. A callback of _WKWebAuthenticationPanelResult is
        provided such that clients could inform WebKit to continue the ceremony or not. Case like rate limiting of a modular dialog
        could result in _WKWebAuthenticationPanelResultDidNotPresent. Then WebKit will abort the operation.
        _WKWebAuthenticationPanelResultUnavailable tells WebKit the client has no UI implemented and therefore WebKit will operate
        in a non UI mode which basically will only enable HID authenticators, and is the current behavior of macOS Safari.
        2) -[_WKWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:] is primarily to instruct users to do some
        actionable thing to recover from some error state. However, it could be used for pure info as well. For
        _WKWebAuthenticationPanelInfoMultipleNFCTagPresents, users can be instructed to only hold one NFC tag to the scanner. For
        _WKWebAuthenticationPanelInfoNoCredentialsFound, users can potentially switch to another security key that could hit a match.
        3) -[_WKWebAuthenticationPanelDelegate panel:dismissWebAuthenticationPanelWithResult:] is to dismiss UI.
        _WKWebAuthenticationResult is provided such that client could show different animations as a hint to the user. The reasons for
        failure could either be timeout or InvalidStateError which will be reported to the page as well. InvalidStateError signals a
        credential matching an entry of the exclude list (excludeCredentials) is found on the authenticator.
        4) -[_WKWebAuthenticationPanel cancel] is the way clients tell WebKit a user cancel.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h: Added.
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm: Added.
        (-[_WKWebAuthenticationPanel _initWithRelayingPartyID:]):
        (-[_WKWebAuthenticationPanel relyingPartyID]):
        (-[_WKWebAuthenticationPanel cancel]):
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanelInternal.h: Added.
        * WebKit.xcodeproj/project.pbxproj:

2019-10-03  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WPE] Enable async scrolling
        https://bugs.webkit.org/show_bug.cgi?id=202449

        Reviewed by Carlos Garcia Campos.

        For WPE, explicitly enable the threaded scrolling preference on the
        WebPreferences object. For GTK, the same preference is enabled in
        parallel with the forced-compositing preference, as the async scrolling
        feature depends on always-on AC mode.

        To help with quick evaluation of potential issues around async scrolling
        the feature can still be disabled via the WEBKIT_DISABLE_ASYNC_SCROLLING
        environment variable, though this only works in DEVELOPER_MODE builds.

        * Shared/WebPreferencesDefaultValues.h: Default-enable async frame and
        overflow scrolling on Nicosia-using ports.
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_set_hardware_acceleration_policy):
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend):
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::DrawingAreaCoordinatedGraphics):
        (WebKit::DrawingAreaCoordinatedGraphics::updatePreferences):
        (WebKit::DrawingAreaCoordinatedGraphics::supportsAsyncScrolling):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h:

2019-10-03  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Enable runtime checks and triggers for async non-main-frame scrolling
        https://bugs.webkit.org/show_bug.cgi?id=202509

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Allow the non-main-frame compositing trigger for the Nicosia-using ports
        as well. This will enable non-main-frame compositing if the related
        setting is also enabled.

2019-10-03  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Don't hardcode swipe navigation gesture style
        https://bugs.webkit.org/show_bug.cgi?id=202447

        Reviewed by Carlos Garcia Campos.

        Use GTK foreign drawing to draw swipe gesture dimming and shadow instead of
        hardcoded opacity and gradient values.

        Have separate elements for dimming and shadow. Additionally, add border
        and outline. Dimming layer opacity always matches progress, shadow opacity
        is 1 except when the page is almost completely retracted. Border and outline
        opacity is always 1. Outline is drawn above the top page. For determining
        shadow, border and outline width, 'min-width' property is used.

        Each element also has .right or .left style class depending on text direction.

        Creating patterns is relatively expensive, so do it once a gesture
        starts and clear them once it ends. Style changes are currently not
        handled, since it's unlikely anything would change while the gesture
        is done. Dimming layer is created with the same width as webview and is
        clipped when drawing.

        Translate existing dimming and shadow into css as is, add subtle border and
        outline. Since it's controlled via css, downstreams can override the style.

        Set WebKitWebView css name to 'webkitwebview', and only apply styles for
        elements directly preceded by it, otherwise the selectors are too generic.

        * PlatformGTK.cmake: Add gtk.css to gresource bundle.
        * Resources/gtk/gtk-theme.css: Added.
        (webkitwebview > dimming):
        (webkitwebview > shadow):
        (webkitwebview > shadow.right):
        (webkitwebview > shadow.left):
        (webkitwebview > border):
        (webkitwebview > outline):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_class_init): Set css name to 'webkitwebview'.
        * UIProcess/ViewGestureController.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::createStyleContext):
        (WebKit::createElementPattern):
        (WebKit::elementWidth):
        (WebKit::ViewGestureController::beginSwipeGesture): Create helper patterns.
        (WebKit::ViewGestureController::draw): Rework drawing to use the patterns.
        (WebKit::ViewGestureController::removeSwipeSnapshot): Clear the patterns.

2019-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make PSON optional
        https://bugs.webkit.org/show_bug.cgi?id=200967

        Reviewed by Michael Catanzaro.

        It's not possible to enable PSON by default and keep backwards compatibility, applications might need to use new
        API to monitor the page ID changes in the Web view. So, this patch adds a construct only property to
        WebKitWebContext to enable PSON.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextGetProperty):
        (webkitWebContextSetProperty):
        (webkitWebContextConstructed):
        (webkit_web_context_class_init):

2019-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add WebKitWebView:page-id property
        https://bugs.webkit.org/show_bug.cgi?id=201642

        Reviewed by Michael Catanzaro.

        The page ID of a WebKitWebView can now change, so we need a way to get notified when it changes.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewGetProperty): Add getter for page-id.
        (webkit_web_view_class_init): Add page-id property
        (webkitWebViewDidChangePageID): Emit notify::page-id.
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didChangeWebPageID const): Call webkitWebViewDidChangePageID().
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/wpe/APIViewClient.h:
        (API::ViewClient::didChangePageID): Added virtual method.
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didChangeWebPageID const): Call WKWPE::View::didChangePageID().
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::didChangePageID): Call API::ViewClient::didChangePageID().
        * UIProcess/API/wpe/WPEView.h:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::didChangeWebPageID const): Added virtual method.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToWebProcess): Call PageClient::didChangeWebPageID().

2019-10-02  Andy Estes  <aestes@apple.com>

        [iOS] When hit testing for a context menu interaction, do not consider whether the element is contenteditable
        https://bugs.webkit.org/show_bug.cgi?id=202498
        <rdar://problem/54723131>

        Reviewed by Tim Horton.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::startInteractionWithElementAtPosition): Changed to call
        WebCore::Frame::nodeRespondingToInteraction.

2019-10-02  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION (r245672): <select> dropdown with text-rendering: optimizeLegibility freezes Safari
        https://bugs.webkit.org/show_bug.cgi?id=202198

        Reviewed by Tim Horton.

        NSFont has a bug where passing "auto" to kCTFontOpticalSizeAttribute
        causes an exception to be thrown. We don't catch the exception, so we
        pop up back to the runloop, which confuses the UI process.

        The solution is twofold: 1) Workaround the bug by passing the font size
        to kCTFontOpticalSizeAttribute instead, and 2) catch any exceptions that
        this part of the code might throw.

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):

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

        [CMake] Don't link WebKit.framework with SecItemShim
        ​https://bugs.webkit.org/show_bug.cgi?id=202490

        * PlatformMac.cmake:
        Otherwise everything that uses the Security framework crashes immediately.
        We only need it in the NetworkProcess.

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

        CMake-built WebKit.framework should launch XPC services successfully
        https://bugs.webkit.org/show_bug.cgi?id=202490

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2019-10-02  Kate Cheney  <katherine_cheney@apple.com>

        Updated resource load statistics are never merged into the SQLite Database backend (202372).
        https://bugs.webkit.org/show_bug.cgi?id=202372
        <rdar://problem/55854542>

        Reviewed by Brent Fulgham. 

        This patch has a lot of changes to the test infrastructure to be able 
        to test the mergeStatistics function. Merging functionality mimics
        that of the ResourceLoadStatisticsMemoryStore and the merge() function in
        ResourceLoadStatistics.cpp.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        Added new SQLite queries that are needed to merge new statistics.

        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        Added new prepare statements for new SQLite queries.

        (WebKit::ResourceLoadStatisticsDatabaseStore::insertObservedDomain):
        Updated to use domainID() instead of confirmDomainDoesNotExist which 
        was deleted. Changed the insert bind parameters
        to utilize new enum of Observed Domain table indices which will help
        reduce errors in the future if the database schema changes.

        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        Changed {public} to {private} in logging statement to avoid leaking
        sensitive information when logging the query error.

        (WebKit::ResourceLoadStatisticsDatabaseStore::confirmDomainDoesNotExist const): Deleted.
        This function essentially does the exact same thing as domainID and
        we can reduce code duplication by deleting it and transitioning all
        other functions to use domainID instead.

        (WebKit::ResourceLoadStatisticsDatabaseStore::domainID const):
        Changed {public} to {private} in logging statement to avoid leaking
        sensitive information when logging the query error.
        
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        In order to reuse this code for the merge statistics function, I added
        a check before each insert call to ensure the relationship does not
        already exist in the database. This was not needed before because it
        was only called on an empty database.

        (WebKit::ResourceLoadStatisticsDatabaseStore::merge):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistic):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistics):
        Merges new statistic.

        (WebKit::ResourceLoadStatisticsDatabaseStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::recursivelyFindNonPrevalentDomainsThatRedirectedToThisDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setDomainsAsPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::predicateValueForDomain const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrevalentResource):
        Changed {public} to {private} in logging statement to avoid leaking
        sensitive information when logging the query error.

        (WebKit::ResourceLoadStatisticsDatabaseStore::setGrandfathered):
        Fix a bug uncovered by the new test cases.
        
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureResourceStatisticsForRegistrableDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearDatabaseContents):
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieTreatmentForOrigin const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearExpiredUserInteractions):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearGrandfathering):
        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateLastSeen):
        Changed {public} to {private} in logging statement to avoid leaking
        sensitive information when logging the query error.
        
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateDataRecordsRemoved):
        A new function that utilizes a query needed for the merging of two
        statistics.
        
        (WebKit::ResourceLoadStatisticsDatabaseStore::confirmDomainDoesNotExist const): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::mergeStatistics):
        (WebKit::ResourceLoadStatisticsMemoryStore::wasAccessedAsFirstPartyDueToUserInteraction const): Deleted.
        Removed the check for updating times accessed due to first party 
        interaction, which is data no longer needed in updated ITP. 

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        Added the mergeStatistics function (previously only in the memory
        store) to the parent class now that it is used by both stores.
        
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        This function now calls mergeStatistics on the database store if
        enabled.

        (WebKit::WebResourceLoadStatisticsStore::mergeStatisticForTesting):
        This function builds a vector from the sample data to test the
        mergeStatistics() function of the database store.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::mergeStatisticForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsMergeStatistic):
        Fixed bug where isGrandfathered function in WKWebsiteDataStoreRef
        was calling hasHadUserInteraction by mistake.

        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::mergeStatisticForTesting):
        * UIProcess/Network/NetworkProcessProxy.h:
        This code is for testing the mergeStatistics() function.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::isGrandfathered):
        (WebKit::WebsiteDataStore::mergeStatisticForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Added this function which contacts the networkProcess to retrieve the
        grandfathered value for a domain. This was not included before because
        of a bug in WKWebsiteDataStoreRef.

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

        Provide originating website URL to AR QuickLook
        https://bugs.webkit.org/show_bug.cgi?id=202451

        Reviewed by Antoine Quint.

        Declare the setAdditionalParameters method and
        call it with the originating page URL if available.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:

2019-10-02  Keith Rollin  <krollin@apple.com>

        Properly mark canceled resources in NetworkActivityTracker
        https://bugs.webkit.org/show_bug.cgi?id=202440
        <rdar://problem/55843651>

        Reviewed by Brent Fulgham.

        The nw_activity facility tracking resource loads did not originally
        have support for reporting resources that were canceled. It now has
        that support (since late MacOS 14-aligned SDKs), so add support for it
        in NetworkActivityTracker and use it in places where we were
        previously reporting the status of canceled resources as "None".

        * NetworkProcess/NetworkActivityTracker.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::stopAllNetworkActivityTracking):
        (WebKit::NetworkConnectionToWebProcess::stopAllNetworkActivityTrackingForPage):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        * NetworkProcess/cocoa/NetworkActivityTrackerCocoa.mm:
        (WebKit::NetworkActivityTracker::complete):

2019-10-02  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for non-Mac ports after r250600.

        * UIProcess/WebProcessPool.cpp:
        Make the CoreGraphicsSPI.h header include exclusive to the Mac port.

2019-10-02  Antoine Quint  <graouts@apple.com>

        Unreviewed build fix for macOS, broken by r250595.

        * UIProcess/WebProcessPool.cpp:

2019-10-02  youenn fablet  <youenn@apple.com>

        Use strongly typed identifiers for webrtc sockets
        https://bugs.webkit.org/show_bug.cgi?id=202400

        Reviewed by Chris Dumez.

        Refactoring to use LibWebRTCSocketIdentifier instead of uint64_t.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::LibWebRTCSocketClient):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createSocket):
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        (WebKit::NetworkRTCProvider::wrapNewTCPConnection):
        (WebKit::NetworkRTCProvider::addSocket):
        (WebKit::NetworkRTCProvider::takeSocket):
        (WebKit::NetworkRTCProvider::newConnection):
        (WebKit::NetworkRTCProvider::didReceiveNetworkRTCSocketMessage):
        (WebKit::NetworkRTCProvider::closeListeningSockets):
        (WebKit::NetworkRTCProvider::callSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCSocket.cpp:
        (WebKit::NetworkRTCSocket::NetworkRTCSocket):
        * NetworkProcess/webrtc/NetworkRTCSocket.h:
        * Scripts/webkit/messages.py:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
        (WebKit::LibWebRTCNetwork::socket):
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::LibWebRTCSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createServerTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createUdpSocket):
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createNewConnectionSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
        (WebKit::LibWebRTCSocketFactory::socket):
        (WebKit::LibWebRTCSocketFactory::resolver):
        (WebKit::LibWebRTCSocketFactory::takeResolver):
        (WebKit::LibWebRTCSocketFactory::disableNonLocalhostConnections):
        * WebProcess/Network/webrtc/WebRTCSocket.cpp:
        (WebKit::WebRTCSocket::signalOnNetworkThread):
        (WebKit::WebRTCSocket::WebRTCSocket):
        (WebKit::WebRTCSocket::signalSentPacket):
        (WebKit::WebRTCSocket::signalConnect):
        (WebKit::WebRTCSocket::signalClose):
        (WebKit::WebRTCSocket::signalNewConnection):
        * WebProcess/Network/webrtc/WebRTCSocket.h:
        * WebProcess/Network/webrtc/WebRTCSocket.messages.in:

2019-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Stop using legacy custom protocol implementation
        https://bugs.webkit.org/show_bug.cgi?id=202407

        Reviewed by Žan Doberšek.

        Use the new approach, which is simpler and doesn't require to go to the network process to load custom
        protocols.

        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp: Removed.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::m_messagePortChannelRegistry):
        * NetworkProcess/soup/WebKitSoupRequestInputStream.cpp: Removed.
        * NetworkProcess/soup/WebKitSoupRequestInputStream.h: Removed.
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitCustomProtocolManagerClient.cpp: Removed.
        * UIProcess/API/glib/WebKitCustomProtocolManagerClient.h: Removed.
        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestCreate):
        (webkit_uri_scheme_request_get_scheme):
        (webkit_uri_scheme_request_get_uri):
        (webkit_uri_scheme_request_get_path):
        (webkit_uri_scheme_request_get_web_view):
        (webkitURISchemeRequestReadCallback):
        (webkit_uri_scheme_request_finish_error):
        * UIProcess/API/glib/WebKitURISchemeRequestPrivate.h:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkitWebContextDispose):
        (webkit_web_context_register_uri_scheme):
        (webkitWebContextCreatePageForWebView):
        * UIProcess/API/glib/WebKitWebContextPrivate.h:
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::request const):
        * UIProcess/soup/WebProcessPoolSoup.cpp:

2019-10-02  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Enable async scrolling at build-time for Nicosia-using ports
        https://bugs.webkit.org/show_bug.cgi?id=202397

        Reviewed by Carlos Garcia Campos.

        * Shared/WebEvent.h:
        Enable WebWheelEvent phasing for WPE, as required by the
        ASYNC_SCROLLING code.

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

        Clean up some includes to make the build a bit faster
        https://bugs.webkit.org/show_bug.cgi?id=202444

        Reviewed by Geoff Garen.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:

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

        Progress towards a functioning CMake build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=202443

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2019-10-01  John Wilander  <wilander@apple.com>

        Storage Access API: document.hasStorageAccess() should return true when the cookie policy allows access
        https://bugs.webkit.org/show_bug.cgi?id=202435
        <rdar://problem/55718526>

        Reviewed by Brent Fulgham.

        WebKit's Storage Access API implementation has so far only looked at whether ITP is
        blocking cookie access or not. However, the default cookie policy is still in
        effect underneath ITP. document.hasStorageAccess() should return true if the
        third-party:
        a) is not classified by ITP, and
        b) has cookies which implies it can use cookies as third-party according to the
        default cookie policy.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasCookies):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::hasStorageAccess):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):

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

        [CSS Shadow Parts] Parse 'part' attribute
        https://bugs.webkit.org/show_bug.cgi?id=202409

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferences.yaml:

        Add experimental feature, default to disabled for now.

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

        Progress towards successful CMake build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=202426

        Rubber-stamped by Tim Horton.

        * Platform/cocoa/PaymentAuthorizationPresenter.h:
        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        * Platform/cocoa/PaymentAuthorizationViewController.h:
        * Platform/cocoa/PaymentAuthorizationViewController.mm:
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
        * PlatformMac.cmake:
        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandleForReadByPid):
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _hasRegisteredServiceWorker]):
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm:
        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet delegate]):
        (-[WKShareSheet setDelegate:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h:
        * WebProcess/WebPage/Cocoa/WebRemoteObjectRegistry.cpp:

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

        Clean up some includes to make the build a bit faster
        https://bugs.webkit.org/show_bug.cgi?id=202417

        Reviewed by Jer Noble.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Plugin.h:
        Fix the build.

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

        Fix GTK build after r250558
        https://bugs.webkit.org/show_bug.cgi?id=202390

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        (webkit_dom_dom_window_confirm):

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

        Fix an internal build.

        Ignore some deprecation warnings.  We'll adopt new SPI soon.

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

2019-10-01  youenn fablet  <youenn@apple.com>

        Remove races condition when validating capture sandbox extension revocation
        https://bugs.webkit.org/show_bug.cgi?id=202133
        <rdar://problem/55660905>

        Reviewed by Eric Carlson.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::~UserMediaPermissionRequestManagerProxy):
        Explicitly ask the page to stop capture.
        This will make sure capture is stopped when revoking sandbox extensions.

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

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=202384

        Rubber-stamped by Tim Horton.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * PlatformMac.cmake:
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        * WebKit2Prefix.h:

2019-09-30  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] Move Remote Inspector Server initialization out of WebView
        https://bugs.webkit.org/show_bug.cgi?id=202369

        Reviewed by Ross Kirsling.
        
        Move Remote Inspector Server initialization to Windows WebProcessPool initialization.

        * UIProcess/win/WebProcessPoolWin.cpp:
        * UIProcess/win/WebView.cpp:

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

        Move DownloadMonitor test speed multiplier from WebProcessPool to WebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202339

        Reviewed by Youenn Fablet.

        This was only used for some unit tests, which still are accelerated so they pass in the same amount of time as before.
        I need this value to not be process-global in the NetworkProcess.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::Download):
        (WebKit::Download::testSpeedMultiplier const):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::resumeDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/DownloadMonitor.cpp:
        (WebKit::DownloadMonitor::applicationDidEnterBackground):
        (WebKit::DownloadMonitor::testSpeedMultiplier const):
        (WebKit::DownloadMonitor::timerFired):
        (WebKit::DownloadMonitor::speedMultiplier const): Deleted.
        * NetworkProcess/Downloads/DownloadMonitor.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::download):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::testSpeedMultiplier const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration downloadMonitorSpeedMultiplierForTesting]): Deleted.
        (-[_WKProcessPoolConfiguration setDownloadMonitorSpeedMultiplierForTesting:]): Deleted.
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration testSpeedMultiplier]):
        (-[_WKWebsiteDataStoreConfiguration setTestSpeedMultiplier:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::testSpeedMultiplier const):
        (WebKit::WebsiteDataStoreConfiguration::setTestSpeedMultiplier):

2019-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] IconDatabase is not thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=201303

        Reviewed by Žan Doberšek.

        Rewrite the IconDatabase implementation. Now that we are the only users of this code, we can simply it a lot and
        design it specifically for our API, which implementation has been simplified a lot too. There's no change in
        the database schema nor in behavior from the API point of view.

        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::IconDatabase):
        (WebKit::IconDatabase::~IconDatabase):
        (WebKit::IconDatabase::createTablesIfNeeded):
        (WebKit::IconDatabase::populatePageURLToIconURLMap):
        (WebKit::IconDatabase::clearStatements):
        (WebKit::IconDatabase::pruneTimerFired):
        (WebKit::IconDatabase::startPruneTimer):
        (WebKit::IconDatabase::clearLoadedIconsTimerFired):
        (WebKit::IconDatabase::startClearLoadedIconsTimer):
        (WebKit::IconDatabase::iconIDForIconURL):
        (WebKit::IconDatabase::setIconIDForPageURL):
        (WebKit::IconDatabase::iconData):
        (WebKit::IconDatabase::addIcon):
        (WebKit::IconDatabase::updateIconTimestamp):
        (WebKit::IconDatabase::deleteIcon):
        (WebKit::IconDatabase::checkIconURLAndSetPageURLIfNeeded):
        (WebKit::IconDatabase::loadIconForPageURL):
        (WebKit::IconDatabase::iconURLForPageURL):
        (WebKit::IconDatabase::setIconForPageURL):
        (WebKit::IconDatabase::clear):
        * UIProcess/API/glib/IconDatabase.h:
        (WebKit::IconDatabase::create):
        * UIProcess/API/glib/WebKitFaviconDatabase.cpp:
        (webkitFaviconDatabaseCreate):
        (webkitFaviconDatabaseIsOpen):
        (webkitFaviconDatabaseOpen):
        (webkitFaviconDatabaseClose):
        (webkitFaviconDatabaseGetLoadDecisionForIcon):
        (webkitFaviconDatabaseSetIconForPageURL):
        (webkitFaviconDatabaseGetFaviconInternal):
        (webkit_favicon_database_get_favicon):
        (webkit_favicon_database_get_favicon_finish):
        (webkit_favicon_database_get_favicon_uri):
        (webkit_favicon_database_clear):
        * UIProcess/API/glib/WebKitFaviconDatabasePrivate.h:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextDispose):
        (webkit_web_context_set_favicon_database_directory):
        (webkitWebContextCreatePageForWebView):
        (webkitWebContextWebViewDestroyed):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewRequestFavicon):
        (webkitWebViewGetLoadDecisionForIcon):
        (webkitWebViewSetIcon):

2019-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add about:gpu
        https://bugs.webkit.org/show_bug.cgi?id=202305

        Reviewed by Žan Doberšek.

        A builtin protocol handler to show information about hardware acceleration. This is useful information we need
        from people reporting issues in accelerated compositing mode.

        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitProtocolHandler.cpp: Added.
        (WebKit::WebKitProtocolHandler::WebKitProtocolHandler):
        (WebKit::WebKitProtocolHandler::handleRequest):
        (WebKit::webkitPortName):
        (WebKit::hardwareAccelerationPolicy):
        (WebKit::webGLEnabled):
        (WebKit::openGLAPI):
        (WebKit::nativeInterface):
        (WebKit::WebKitProtocolHandler::handleGPU):
        * UIProcess/API/glib/WebKitProtocolHandler.h: Added.
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):

2019-09-30  Commit Queue  <commit-queue@webkit.org>

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

        it is failing
        TestWebKitAPI.ProcessSwap.GetUserMediaCaptureState (Requested
        by youenn on #webkit).

        Reverted changeset:

        "Delay capture sandbox extension revocation to after the page
        close message is sent"
        https://bugs.webkit.org/show_bug.cgi?id=202133
        https://trac.webkit.org/changeset/250291

2019-09-29  Zan Dobersek  <zdobersek@igalia.com>

        ScrollingTreeScrollingNode: use LayerRepresentation for scroll container, scrolled contents layers
        https://bugs.webkit.org/show_bug.cgi?id=202256
        <rdar://problem/55772092>

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::establishLayerTreeScrollingRelations):
        Use static casts to retrieve the CALayer pointers from the
        LayerRepresentation objects due to the explicit operators.

2019-09-29  Zan Dobersek  <zdobersek@igalia.com>

        Tighten up LayerRepresentation operators
        https://bugs.webkit.org/show_bug.cgi?id=202344

        Reviewed by Simon Fraser.

        With LayerRepresentation operators now being explicit, we require
        to manually specify conversion to CALayer pointers or
        GraphicsLayer::PlatformLayerID values.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateBeforeChildren):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::commitStateBeforeChildren):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::commitStateBeforeChildren):

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

        [GTK][WPE] Fixes for non-unified builds after r249714
        https://bugs.webkit.org/show_bug.cgi?id=202304

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkLoadChecker.h: Add missing inclusion of the pal/SessionID.h header.
        * NetworkProcess/NetworkResourceLoadMap.cpp: Add missing inclusion of the
        NetworkResourceLoader.h header.
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationCreate): Add missing namespace to usage of the
        WebKit::IsPersistent::Yes value.
        * UIProcess/WebPageProxy.cpp: Add missing inclusion of the LegacyGlobalSettings.h header.

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

        Adopt new UIWebGeolocationPolicyDecider SPI to pass a view instead of a window
        https://bugs.webkit.org/show_bug.cgi?id=202329
        <rdar://problem/25963823>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        (WebKit::decidePolicyForGeolocationRequestFromOrigin):
        Switch to newer SPI that takes a UIView instead of a UIWindow, so that
        UIWebGeolocationPolicyDecider can find the correct presenting view controller.

2019-09-27  Zalan Bujtas  <zalan@apple.com>

        [iPadOS] Can’t use RalphLauren.com on iPad because hover menus don’t stay up
        https://bugs.webkit.org/show_bug.cgi?id=202331
        <rdar://problem/55629493>

        Reviewed by Tim Horton.

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

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

        Move shouldUseTestingNetworkSession from NetworkProcessCreationParameters to NetworkSessionCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=202327

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::ensureSession):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/curl/RemoteNetworkingContextCurl.cpp:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationSetPerOriginStorageQuota):
        (WKWebsiteDataStoreConfigurationSetNetworkCacheSpeculativeValidationEnabled):
        (WKWebsiteDataStoreConfigurationGetTestingSessionEnabled):
        (WKWebsiteDataStoreConfigurationSetTestingSessionEnabled):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::testingSessionEnabled const):
        (WebKit::WebsiteDataStoreConfiguration::setTestingSessionEnabled):

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

        Move legacy custom protocol registration from process pool to NetworkProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=202315

        Reviewed by Tim Horton.

        Legacy custom protocol registration is a global thing, which is why it's legacy and we're trying to get rid of it.
        In the meantime, we don't want it to be in the set of things the NetworkProcess depends on the WebProcessPool for, which should be an empty set.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::registerGlobalURLSchemeAsHavingCustomProtocolHandlers):
        (WebKit::WebProcessPool::unregisterGlobalURLSchemeAsHavingCustomProtocolHandlers):
        (WebKit::WebProcessPool::registerSchemeForCustomProtocol): Deleted.
        (WebKit::WebProcessPool::unregisterSchemeForCustomProtocol): Deleted.
        * UIProcess/WebProcessPool.h:

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

        Layout Test http/tests/cache-storage/cache-records-persistency.https.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=202323

        Reviewed by Tim Horton.

        This reverts most of r250351.
        It turns out NetworkProcessProxy::addSession has some side effects in the UIProcess that are useful for NetworkProcess resumption after crashes.  Let's keep that.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2019-09-27  Jer Noble  <jer.noble@apple.com>

        Unreviewed build-fix: wrap the AssertionServicesSPI.h in an IOS_FAMILY check.

        * WebProcess/cocoa/WebProcessCocoa.mm:

2019-09-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS]: When inserting a photo and then inserting auto-corrected text, the photo is removed
        https://bugs.webkit.org/show_bug.cgi?id=202294

        Reviewed by Wenson Hsieh.

        WebPage::applyAutocorrectionInternal() calls wordRangeFromPosition() to
        calculate the range of the word to be replaced with the auto-corrected
        word. But if the text of the range does not match the original text,
        applyAutocorrectionInternal() tries to correct the range by moving it
        forward such that the length of the text range matches the length of the
        original text.

        Another case, which should correct the range also, is: the range does not
        have a text but it is not collapsed. In this case, we should set the range
        back to the selection range so non-text nodes is removed.

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

2019-09-27  John Wilander  <wilander@apple.com>

        Storage Access API: document.hasStorageAccess() should return false by default
        https://bugs.webkit.org/show_bug.cgi?id=202281
        <rdar://problem/55718526>

        Reviewed by Alex Christensen.

        document.hasStorageAccess() should return false by default so that it only
        returns true if the context has asked for and been granted storage access.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):

2019-09-27  Jer Noble  <jer.noble@apple.com>

        [iOS] Lock screen controls can fail to play web content
        https://bugs.webkit.org/show_bug.cgi?id=202279

        Reviewed by Chris Dumez.

        When playback is paused from the lock screen via Now Playing controls, the WebProcess,
        UIProcess, and Network Process will all be suspended. MediaRemote will take an assertion
        and wake up the WebProcess when a remote control command to "play" is sent via the Now
        Playing controls. However, if a synchronous message to the (suspended) Network or UIProcess
        is issued before the notification that the process was unexpectedly unsuspended can be
        issued (which will subsequently unsuspend the UIProcess and Network process), we can get
        into a deadlocked state where the main thread is blocked on the sync message to a suspended
        process.

        To work around this problem, move all the processing from ProcessTaskStateObserver to a
        WorkQueue / background thread. This requires making the ProcessTaskStateObserver thread-safe,
        though its only current client is a Singleton (the WebProcess class), and so the risk of
        thread safety issues is currently minimal. Regardless, access to the Client pointer must be
        guarded by a Lock, and the Client itself must become ref-counted, so that the
        ProcessTaskStateObserver can ref its Client (the WebProcess) during callback processing.

        Unfortunately, sendWithAsyncReply() is not thread safe, nor is ProcessAssertion, so instead
        just use send() and set a 5-second timeout before expiring the assertion, and just use
        BKSProcessStateAssertion directly.

        * Shared/Cocoa/ProcessTaskStateObserver.h:
        (WebKit::ProcessTaskStateObserver::Client::ref):
        (WebKit::ProcessTaskStateObserver::Client::deref):
        (WebKit::ProcessTaskStateObserver::setClient): Deleted.
        (WebKit::ProcessTaskStateObserver::client): Deleted.
        * Shared/Cocoa/ProcessTaskStateObserver.mm:
        (-[WKProcessTaskStateObserverDelegate process:taskStateDidChange:]):
        (WebKit::ProcessTaskStateObserver::create):
        (WebKit::ProcessTaskStateObserver::ProcessTaskStateObserver):
        (WebKit::ProcessTaskStateObserver::~ProcessTaskStateObserver):
        (WebKit::ProcessTaskStateObserver::invalidate):
        (WebKit::ProcessTaskStateObserver::client):
        (WebKit::ProcessTaskStateObserver::setTaskState):
        * WebProcess/WebProcess.cpp:
        (WebKit::m_taskStateObserver):
        * WebProcess/WebProcess.h:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::processWasUnexpectedlyUnsuspended):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::processTaskStateDidChange):

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

        Move service worker process termination delay disabling from process pool to website data store
        https://bugs.webkit.org/show_bug.cgi?id=202308

        Reviewed by Chris Dumez.

        It's only there for a test, which still works quickly.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::swServerForSession):
        (WebKit::NetworkProcess::addServiceWorkerSession):
        (WebKit::NetworkProcess::disableServiceWorkerProcessTerminationDelay): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        * Shared/WebsiteDataStoreParameters.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _disableServiceWorkerProcessTerminationDelay]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration serviceWorkerProcessTerminationDelayEnabled]):
        (-[_WKWebsiteDataStoreConfiguration setServiceWorkerProcessTerminationDelayEnabled:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::disableServiceWorkerProcessTerminationDelay): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::serviceWorkerProcessTerminationDelayEnabled const):
        (WebKit::WebsiteDataStoreConfiguration::setServiceWorkerProcessTerminationDelayEnabled):

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

        Enable and disable ResourceLoadStatistics only by session
        https://bugs.webkit.org/show_bug.cgi?id=202298

        Reviewed by Chris Dumez.

        This is needed to keep per-session things per-session and per-process-pool things per-process-pool.
        This was a strange case where we would take the current session's value and apply it globally.
        This has no change in behavior because it is globally enabled and disabled by API clients anyways.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setResourceLoadStatisticsEnabled):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setResourceLoadStatisticsEnabled): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):

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

        Remove unused WebProcessPool::setCanHandleHTTPSServerTrustEvaluation
        https://bugs.webkit.org/show_bug.cgi?id=202285

        Reviewed by Youenn Fablet.

        The SPI to set this was deprecated in r250377 with a replacement that was adopted in rdar://problem/55731135
        I removed a layout test using the old SPI and replaced it with a more precise API test verifying the behavior of the new SPI
        before and after the introduction of NSURLSession's _strictTrustEvaluate:queue:completionHandler:

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setCanHandleHTTPSServerTrustEvaluation): Deleted.
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::canHandleHTTPSServerTrustEvaluation const): Deleted.
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (canNSURLSessionTrustEvaluate): Deleted.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetCanHandleHTTPSServerTrustEvaluation):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setCanHandleHTTPSServerTrustEvaluation:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::setCanHandleHTTPSServerTrustEvaluation): Deleted.
        * UIProcess/WebProcessPool.h:

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

        Remove unused APIProcessPoolConfiguration::diskCacheSpeculativeValidationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=202290

        Reviewed by Carlos Garcia Campos.

        The SPI to set this was deprecated in r250377 with a replacement that was adopted in rdar://problem/55731135

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDiskCacheSpeculativeValidationEnabled):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationGetNetworkCacheSpeculativeValidationEnabled):
        (WKWebsiteDataStoreConfigurationSetNetworkCacheSpeculativeValidationEnabled):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration diskCacheSpeculativeValidationEnabled]):
        (-[_WKProcessPoolConfiguration setDiskCacheSpeculativeValidationEnabled:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

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

        [CoordinatedGraphics] support bounds origin
        https://bugs.webkit.org/show_bug.cgi?id=198998

        Reviewed by Carlos Garcia Campos.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::updateSceneState):
        Apply bounds origin value to the TextureMapperLayer object.

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

        Make IsNSURLSessionWebSocketEnabled an experimental flag
        https://bugs.webkit.org/show_bug.cgi?id=202135
        <rdar://problem/55694721>

        Reviewed by Geoff Garen.

        Add C API to switch off this feature in WTR.

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

2019-09-27  Jiewen Tan  <jiewen_tan@apple.com>

        SubFrameSOAuthorizationSession should ensure messages are posted in the right order to the parent frame
        https://bugs.webkit.org/show_bug.cgi?id=202061
        <rdar://problem/55485666>

        Reviewed by Youenn Fablet.

        This patch ensures messages that signal the process of SOAuthorization interception are posted in
        the right order to the parent frame. Before this patch, there are chances that SOAuthorizationDidCancel
        could be posted to the parent before SOAuthorizationDidStart. There are few causes that lead to
        this race condition:
        1) SubFrameSOAuthorizationSession::beforeStart posts SOAuthorizationDidStart in the next runloop. So
        extension could have the chance to invoke SubFrameSOAuthorizationSession::fallBackToWebPathInternal
        before SOAuthorizationDidStart is posted.
        2) Even if the order is right in the UI process, it is not guaranteed that Web process will strictly
        follow the order as the loading process is async.

        To fix the issue:
        1) SubFrameSOAuthorizationSession::beforeStart now posts SOAuthorizationDidStart in the same runloop.
        2) Observer is introduced in FrameLoadState such that SubFrameSOAuthorizationSession could know if
        the loading is finished. With this new capacity, SubFrameSOAuthorizationSession can ensure it only
        posts next message when the previous message has been posted.

        Implementation wise, a deque to queue requests is provided to maintain order.
        1) When new request is added to the deque, SubFrameSOAuthorizationSession will only load the request
        if it is the only element in the deque. Otherwise, it does nothing.
        2) When SubFrameSOAuthorizationSession receives didFinishLoad, it pops the head of the queue and loads
        the next request in the queue if any.
        The above design should guarantee all requests are loaded in sequence.

        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.h:
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:
        (WebKit::SubFrameSOAuthorizationSession::SubFrameSOAuthorizationSession):
        (WebKit::SubFrameSOAuthorizationSession::~SubFrameSOAuthorizationSession):
        (WebKit::SubFrameSOAuthorizationSession::fallBackToWebPathInternal):
        (WebKit::SubFrameSOAuthorizationSession::completeInternal):
        (WebKit::SubFrameSOAuthorizationSession::beforeStart):
        (WebKit::SubFrameSOAuthorizationSession::didFinishLoad):
        (WebKit::SubFrameSOAuthorizationSession::appendRequestToLoad):
        (WebKit::SubFrameSOAuthorizationSession::loadRequestToFrame):
        (WebKit::SubFrameSOAuthorizationSession::loadDataToFrame): Deleted.
        (WebKit::SubFrameSOAuthorizationSession::postDidCancelMessageToParent): Deleted.
        * UIProcess/FrameLoadState.cpp:
        (WebKit::FrameLoadState::addObserver):
        (WebKit::FrameLoadState::removeObserver):
        (WebKit::FrameLoadState::didFinishLoad):
        * UIProcess/FrameLoadState.h:

2019-09-26  Kate Cheney  <katherine_cheney@apple.com>

        Resource Load Statistics: Downgrade all third-party referrer headers
        https://bugs.webkit.org/show_bug.cgi?id=201353
        <rdar://problem/54895650>
        
        Majority of this patch was written by John Wilander <wilander@apple.com>.

        Reviewed by Brent Fulgham. 

        When tracking protections are enabled, we should downgrade all third-party
        referrers to their origins. Note that this downgrade will be specific to
        Cocoa so other ports will have to adopt as they see fit.

        Cocoa already does this downgrade in ephemeral sessions (shipping).

        The majority of these changes are test infrastructure. The functional
        change is in WebKit::NetworkDataTaskCocoa and WebKit::NetworkSession.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setShouldDowngradeReferrerForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::isResourceLoadStatisticsEnabled const):
        (WebKit::NetworkSession::setShouldDowngradeReferrerForTesting):
        (WebKit::NetworkSession::shouldDowngradeReferrer const):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::isThirdPartyRequest const):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::restrictRequestReferrerToOriginIfNeeded):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCocoa::isThirdPartyRequest): Deleted.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsShouldDowngradeReferrerForTesting):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setShouldDowngradeReferrerForTesting):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldDowngradeReferrerForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2019-09-26  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (iOS 13): Trying to record just audio using HTML Media Capture crashes Safari
        https://bugs.webkit.org/show_bug.cgi?id=202039
        <rdar://problem/55566628>

        Reviewed by Jer Noble.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _mediaTypesForPickerSourceType:]): UIImagePickerController doesn't 
        support audio-only recording, so show the video recorder for "audio/*".

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

        Add some logging to help diagnose blank or stuck WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=202297
        <rdar://problem/55763610>

        Reviewed by Wenson Hsieh.

        Our current logging is insufficient to rule out some of the potential
        causes of stuck/blank WKWebViews in <rdar://problem/53399054>. Add
        some new logging, and improve some existing logging, to aid in diagnosis.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _willInvokeUIScrollViewDelegateCallback]):
        (-[WKWebView _didInvokeUIScrollViewDelegateCallback]):
        Rename _delayUpdateVisibleContentRects to be more specific that it
        was due to us being underneath a UIScrollView delegate callback.

        (-[WKWebView _processWillSwapOrDidExit]):
        (-[WKWebView _didCommitLayerTree:]):
        Add a log when we receive an incoming commit while visible content rect
        updates are being deferred. Also, include the current transaction ID
        and the transaction ID that _needsResetViewState... is waiting for, to
        help rule out a class of potential problems.

        Add a log when we receive an incoming commit more than 5 seconds after
        a visible content rect update.

        (-[WKWebView _updateVisibleContentRects]):
        Keep track of when we defer visual content rect updates for any reason,
        and log the first time we do an update after deferring them. This will make
        it MUCH easier at-a-glance to tell if one of the "bailing" messages
        represents a long-term state (a problem), or is expected.

        Keep track of how long it's been since we sent a visible content rect update
        and didn't get a commit back from the Web Content process; if it's been
        more than 5 seconds, start logging.

        (-[WKWebView _cancelAnimatedResize]):
        (-[WKWebView _didCompleteAnimatedResize]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]):
        Turn animated resize logging into release logging. It is a common culprit
        for many kinds of bugs, while also not being high volume, so this is well worth it.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):
        Show the current value of m_layerTreeFreezeReasons in addition to the old value and delta,
        so you don't have to manually compute the current value when reading logs.

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

        ContextMenu on a link in an email no longer shows web preview
        https://bugs.webkit.org/show_bug.cgi?id=201120
        <rdar://54353617>

        Reviewed by Wenson Hsieh.

        Only go down the image path if we are not also a link.

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

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

        Stop using testRunner.overridePreference() to turn on Page Cache
        https://bugs.webkit.org/show_bug.cgi?id=202274

        Reviewed by Alex Christensen.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2019-09-26  Andy Estes  <aestes@apple.com>

        Crash under WebPage::beginPrinting when m_printContext becomes null due to synchronous layout
        https://bugs.webkit.org/show_bug.cgi?id=202171
        <rdar://problem/49731211>

        Reviewed by Tim Horton.

        Speculatively fix a null pointer dereference crash in WebPage::beginPrinting.

        WebPage::beginPrinting creates a PrintContext, stores it in m_printContext, then calls
        PrintContext::begin which forces a synchronous, paginated layout. If a post-layout task
        executes script, that might result in the WebPage being closed and m_printContext being set
        to nullptr.

        Guard against this in WebPage::beginPrinting by adding a null check before calling
        PrintContext::computePageRects.

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

2019-09-26  Kate Cheney  <katherine_cheney@apple.com>

        Enable LayoutTests using ResourceLoadStatistics SQLite backend (195420)
        https://bugs.webkit.org/show_bug.cgi?id=195420
        <rdar://problem/54213551>

        Reviewed by Brent Fulgham.

        Changed all RELEASE_LOG_ERROR() calls involving domain strings to
        RELEASE_LOG_ERROR_IF_ALLOWED() to prevent leaking information about
        the domain strings only if sessionID.isAlwaysOnLoggingAllowed().

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        Added autovacuuming to the constructor to avoid manually calling
        runVacuumCommand(). Changed constructor to take in sessionID so it
        can use RELEASE_LOG_ERROR_IF_ALLOWED which requires the sessionID.

        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        Added 2 statements that were not being prepared.

        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        Corrected incorrect capitalization. Added check for nullopt in case
        domainID is for a domain not in the database yet.

        (WebKit::ResourceLoadStatisticsDatabaseStore::domainID const):
        Changed return value to Optional<unsigned>. Some tests were directly
        checking for subframes under top frame domains on domains that had
        not been inserted yet. Now, domainID() won't crash but will return
        a nullopt value which can be checked to know that the tests failed.

        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        Added a check to assure domainID exists and updated the domainID
        interactions to work as Optionals.

        (WebKit::ResourceLoadStatisticsDatabaseStore::populateFromMemoryStore):
        Moved the prepareStatements() call after the vacuum command in the case
        where the database is empty. Otherwise called it before returning.

        (WebKit::ResourceLoadStatisticsDatabaseStore::recursivelyFindNonPrevalentDomainsThatRedirectedToThisDomain):
        Added a space to the SQL commands to correct the syntax.

        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources):
        Corrected a bug in the SQL command for querying
        subframeUnderTopFrameDomain. The old query was asking for subresource.

        (WebKit::ResourceLoadStatisticsDatabaseStore::reclassifyResources):
        Spelling fix.

        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        Changed string concatenation to binding.

        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        The grandfathering.html test was failing because domains were being
        "set" to grandfathered in the database before being inserted. This fix
        ensures all domains before setting the grandfathering flag.

        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
        Multiple tests were failing because the query to insert the relationship
        for the source domain relies on the target domain being in the
        ObservedDomains table. This patch ensures all domains are added before
        performing the query.

        (WebKit::ResourceLoadStatisticsDatabaseStore::setUserInteraction):
        Added a != SQLITE_OK check to make sure an error is logged if the
        statement fails to bind.

        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        Changed string concatenation to binding.

        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):   
        The SQL statement was being bound to a value and not being reset. This
        patch resets the statement after binding. Additionally, the step()
        function was being compared to SQLITE_DONE instead of SQLITE_ROW,
        causing an error if the query returned results. The
        ASSERT_NOT_REACHED() was causing null searches to crash instead of
        returning false (i.e. if a domain is not in the database it should
        return that it has no user interaction instead of crashing).

        (WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource): 
        Updated domainID call to act as an Optional. 
        
        (WebKit::ResourceLoadStatisticsDatabaseStore::predicateValueForDomain const):
        The SQL statement was being bound to a value and not being reset. This
        patch resets the statement after binding. SQLITE_DONE changed to
        SQLITE_ROW to return non-empty query results. ASSERT_NOT_REACHED()
        removed for the same reasons as above. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureResourceStatisticsForRegistrableDomain):
        Fixed the release log statement which was logging the wrong function 
        name.

        (WebKit::ResourceLoadStatisticsDatabaseStore::clearDatabaseContents): 
        Clears the database and rebuilds the tables on a clear command to
        match the functionality in the Memory Store.

        (WebKit::ResourceLoadStatisticsDatabaseStore::clear):                   
        Call the clearDatabaseContents function to match the functionality 
        in the Memory Store. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::hasUserGrantedStorageAccessThroughPrompt const):
        Updated domainID call to act as an Optional. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUnexpiredRecentUserInteraction):
        Tests were failing because shouldRemoveAllWebsiteDataFor() was not 
        checking for expired user interaction. Matched functionality in the
        Memory Store.

        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllWebsiteDataFor):
        Tests were failing because shouldRemoveAllWebsiteDataFor() was not 
        checking for expired user interaction. Matched functionality in the
        Memory Store. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToRemoveWebsiteDataFor):
        Spelling fix. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded): 
        Last seen should be sorted in ascending order because you want to 
        prune the older statistics first, which will have a lower lastSeen
        field (secondsSinceEpoch() will be lower for older values).

        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllWebsiteDataFor const): Deleted.
        Deleted const specifier because the function needs to clear the
        database. 

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:      
        Declared new functions. Updated spelling error (registerable --> 
        registrable). Updated constructor to take sessionID. 

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp: 
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        ITP database flag now is stored in the NetworkProcess.
        * NetworkProcess/NetworkProcess.cpp: 

        (WebKit::NetworkProcess::initializeNetworkProcess): 
        Set the ITP database flag which is now stored in the Network Process. 

        (WebKit::NetworkProcess::setUseITPDatabase): 
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::isITPDatabaseEnabled const):
        * NetworkProcess/NetworkProcess.messages.in:
        Passed the setUseITPDatabase flag to the initialization function 
        of the statistics store to enable the database backend.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        SandboxExtension::consumePermanently was not getting called on the 
        WebKitTestRunner resourceLoadStatistics path. This was preventing
        the database file from opening. 

        (WebKit::NetworkSession::recreateResourceLoadStatisticStore):
        Destroy old WebResourceLoadStatisticsStore and create a new one using
        the ITP database.

        * NetworkProcess/NetworkSession.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetUseITPDatabase):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setUseITPDatabase):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setUseITPDatabase):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Passed the setUseITPDatabase flag to the initialization function
        of the statistics store to enable the database backend. 

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

        [iOS 13] Tapping on a non-editable text selection should toggle callout bar visibility instead of clearing selection
        https://bugs.webkit.org/show_bug.cgi?id=202254
        <rdar://problem/54410263>

        Reviewed by Megan Gardner.

        In iOS 13, tapping a text selection should toggle callout bar visibility (i.e. "selection commands" in UIKit).
        This currently does not work for non-editable text, since the synthetic click gesture simultaneously fires
        alongside the text interaction assistant's non-editable tap gesture, which dispatches a click to the page which
        then clears the selection.

        To remedy this and match platform behavior, we avoid recognizing clicks that occur over the text selection, but
        only in the case where the bounding rect of the text selection doesn't cover a large portion of the visible
        content rect of the web view. This ensures that the user doesn't get stuck in a state where it's impossible to
        dismiss a very large text selection (e.g. after selecting all the content on the page).

        Tests:  editing/selection/ios/clear-selection-after-tap-in-large-selected-non-editable-text.html
                editing/selection/ios/toggle-callout-bar-after-tap-in-selected-non-editable-text.html

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

        Check the last known selection rects (on _lastSelectionDrawingInfo) to see if the tapped point lies within at
        least one of the selection rects.

        (-[WKContentView gestureRecognizerShouldBegin:]):

2019-09-26  Patrick Griffis  <pgriffis@igalia.com>

        [GTK] Fix logic of dark theme detection
        https://bugs.webkit.org/show_bug.cgi?id=202276

        - If GTK_THEME is set it has a higher priority to GtkSettings.
        - GTK_THEME may be a -dark theme or :dark variant, handle both.

        Reviewed by Michael Catanzaro.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::effectiveAppearanceIsDark const):

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

        Add replacement SPI on _WKWebsiteDataStoreConfiguration for enabling speculative cache validation and IPC-free server trust evaluation
        https://bugs.webkit.org/show_bug.cgi?id=202251

        Reviewed by Tim Horton.

        These are two performance optimizations that are currently per-ProcessPool that need to be per-WebsiteDataStore.
        This makes replacement SPI and deprecates the old SPI.  I'm going to adopt the new SPI then remove the old SPI.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration networkCacheSpeculativeValidationEnabled]):
        (-[_WKWebsiteDataStoreConfiguration setNetworkCacheSpeculativeValidationEnabled:]):
        (-[_WKWebsiteDataStoreConfiguration fastServerTrustEvaluationEnabled]):
        (-[_WKWebsiteDataStoreConfiguration setFastServerTrustEvaluationEnabled:]):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::fastServerTrustEvaluationEnabled const):
        (WebKit::WebsiteDataStoreConfiguration::setFastServerTrustEvaluationEnabled):
        (WebKit::WebsiteDataStoreConfiguration::networkCacheSpeculativeValidationEnabled const):
        (WebKit::WebsiteDataStoreConfiguration::setNetworkCacheSpeculativeValidationEnabled):

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

        Fix failing layout tests after trac.webkit.org/r250183
        https://bugs.webkit.org/show_bug.cgi?id=202053
        <rdar://problem/54542190>

        Reviewed by Tim Horton.

        Followup to r250183: move the implementation of -gestureRecognizer:shouldReceiveTouch: out of
        ENABLE(TOUCH_EVENTS) and into ENABLE(POINTER_EVENTS) instead. This logic is necessary in order for scrolling
        via pan gestures to work on iOS, in the case where ENABLE(POINTER_EVENTS) is on but ENABLE(TOUCH_EVENTS) is off.
        This is because the new swipe gesture recognizers added in r250183 will otherwise always take priority over the
        scroll view's pan gestures.

        Fixes the following layout tests:
        - fast/scrolling/ios/reconcile-layer-position-recursive.html
        - fast/scrolling/ios/click-events-during-momentum-scroll-in-main-frame.html
        - fast/scrolling/ios/click-events-after-long-press-during-momentum-scroll-in-main-frame.html

        * UIProcess/ios/WKContentViewInteraction.mm:

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

        Update selections after scrolling for iframes and hide selections while iframes and overflow scrolls are scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=202125

        Reviewed by Tim Horton.

        Add additional calls into UIKit differentiate between main frame scrolling and overflow/iframe scrolling.
        Add piping for iframe specific scrolling.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _willStartScrollingOrZooming]):
        (-[WKContentView _didEndScrollingOrZooming]):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::subFrameScrollPositionChanged):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::subFrameScrollPositionChanged):

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

        Page temporarily jumps to an excessively small viewport scale while loading usatoday.com
        https://bugs.webkit.org/show_bug.cgi?id=202224
        <rdar://problem/52906640>

        Reviewed by Tim Horton.

        Tweaks the content-aware shrink-to-fit algorithm to bail in the case where the content width is extremely large,
        such that it bails instead of attempting to fit the entire content of the page. See WebCore ChangeLog for more
        details.

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

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

        Don't fall back to default session if session can't be found for cookie operations
        https://bugs.webkit.org/show_bug.cgi?id=202222

        Reviewed by Geoff Garen.

        Apparently, during teardown of private browsing sessions, there is sometimes a race condition and cookies from a torn-down session are requested.
        In this case, just fail like we do all other operations in this file.  Otherwise, it's a breach of privacy.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::storageSession):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        * NetworkProcess/NetworkConnectionToWebProcess.h:

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

        Remove duplicate WebsiteDataStoreConfiguration copying code
        https://bugs.webkit.org/show_bug.cgi?id=202215

        Reviewed by Tim Horton.

        WKWebsiteDataStore's _initWithConfiguration was duplicating the functionality of WebsiteDataStoreConfiguration::copy.
        The former should just call the latter.
        This move has the side effect of making _WKWebsiteDataStoreConfiguration's paths readable, which I think is desirable so I added a unit test verifying it is so.

        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationCreate):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration init]):
        (-[_WKWebsiteDataStoreConfiguration initNonPersistentConfiguration]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::createNonPersistent):
        (WebKit::WebsiteDataStore::defaultDataStore):
        (WebKit::WebsiteDataStore::defaultDataStoreConfiguration): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::create):
        (WebKit::WebsiteDataStoreConfiguration::isPersistent const):
        (WebKit::WebsiteDataStoreConfiguration::setPersistent): Deleted.

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

        Replace WebsiteDataStoreParameters::privateSessionParameters with re-initializing all sessions immediately upon NetworkProcess resumption
        https://bugs.webkit.org/show_bug.cgi?id=202211

        Reviewed by Tim Horton.

        Re-adding an ephemeral session after a NetworkProcess crash based on guessing that all its parameters are empty was added in r227590 with a test.
        That test passes even when that re-adding code is removed because we re-add all sessions with parameters from the UIProcess when we restart a NetworkProcess.
        I move the addition of non-default sessions to the initialization message instead of messages after the initialization message to remove race conditions that
        might cause loads to happen before the NetworkProcess has received its second message from the UIProcess.  I also add a unit test to verify that session
        resumption also works with non-default persistent WebsiteDataStores.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters): Deleted.
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters): Deleted.
        * Shared/WebsiteDataStoreParameters.h:
        (WebKit::WebsiteDataStoreParameters::legacyPrivateSessionParameters): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

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

        Replace _WKProcessPoolConfiguration.CTDataConnectionServiceType with _WKWebsiteDataStoreConfiguration.dataConnectionServiceType
        https://bugs.webkit.org/show_bug.cgi?id=202174

        Reviewed by Tim Horton.

        _WKProcessPoolConfiguration.CTDataConnectionServiceType is used in one place and needs a replacement so we can
        start a NetworkProcess without a WKProcessPool.  Since this SPI only does something in the low-level networking code,
        I verified that the new SPI sets the String the way the old one does, and the old one keeps working in the interim.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration dataConnectionServiceType]):
        (-[_WKWebsiteDataStoreConfiguration setDataConnectionServiceType:]):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::dataConnectionServiceType const):
        (WebKit::WebsiteDataStoreConfiguration::setDataConnectionServiceType):

2019-09-25  Commit Queue  <commit-queue@webkit.org>

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

        it is creating failures on iOS bots (Requested by youenn on
        #webkit).

        Reverted changeset:

        "Make IsNSURLSessionWebSocketEnabled an experimental flag"
        https://bugs.webkit.org/show_bug.cgi?id=202135
        https://trac.webkit.org/changeset/250336

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

        Creation of a service worker connection for a service worker job should be based on the job scope
        https://bugs.webkit.org/show_bug.cgi?id=202185

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::swServerForSession):
        Assert that registrable domain is not empty.
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        Use the scope URL instead of the script URL which may be empty in case of an unregister job.

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

        [iPadOS] [DataActivation] Focus moves away after focusing input fields on www.att.com
        https://bugs.webkit.org/show_bug.cgi?id=202167
        <rdar://problem/55185021>

        Reviewed by Tim Horton.

        When using the data activation page on www.att.com, one of the sections on the page contains several select
        elements; in the case where the user agent:

        1. contains the string "iPad", and
        2. does not contain the string "Safari"

        ...www.att.com's data activation page will opt into a mode where it adds blur event listeners to the select
        elements; in this blur event listener, www.att.com proceeds to programmatically focus a non-editable div element
        after a 1 second timeout. The reasons for this behavior remain unclear to me, though it's worth noting that the
        blur event handler name is "screenReaderFocus", which suggests that this is in place to ensure compatibility
        with screen readers.

        In iOS 12, dismissing the popover would blur the focused select menu with an animation. Since the animation
        would take a slightly less than 1 second, www.att.com's logic would have the effect of moving focus to the div
        element shortly after dismissing the select menu. However, after r243808, we no longer attempt to blur the
        focused select element when dismissing the popover. This means that the select element is only blurred the next
        time the user activates another focused element, such as one of the input fields on the page, or a different
        select element. Consequently, the logic to move focus into a div element now occurs only after a different
        element has already been focused; this results in focus moving away from newly focused elements after 1 second
        in the case where a select element has previously focused.

        To mitigate this, restore iOS 12 behavior behind a site- and app-specific quirk. See comments below for more
        details.

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

        Add a new behavioral quirk flag to FocusedElementInformation to determine whether we should use "legacy" select
        popover dismissal behavior (i.e. blurring the focused select element when dismissing the select popover, as well
        as dismissing the popover with animation).

        * Shared/WebPreferences.yaml:

        Enable site-specific quirks by default in WKWebView. With regards to this bug, this change allows for
        site-specific hacks (namely, legacy select popover dismissal) in DataActivation. However, this also fixes
        various known bugs that are otherwise addressed in Safari only, via site-specific quirks.

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

        For apps linked on or before iOS 13 and macOS 10.15, revert the default of value of NeedsSiteSpecificQuirks to
        false. This is done here instead of in a default value function in WebPreferencesDefaultValues to prevent the
        default values of NeedsSiteSpecificQuirks in the web process and UI process from going out of sync, since the
        web process is not necessarily linked against the same SDK as the application.

        * UIProcess/Cocoa/VersionChecks.h:

        Add a new DYLD version check for the first version of iOS and macOS where site-specific quirks are enabled by
        default.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView endEditingAndUpdateFocusAppearanceWithReason:]):
        (-[WKContentView _elementDidBlur]):
        (-[WKContentView _shouldUseLegacySelectPopoverDismissalBehavior]):

        We only use "legacy" select popover dismissal behavior in the case where the site-specific quirk flag is on, a
        select popover is used (i.e. the device is an iPad and a select element is focused), and the application bundle
        is "com.apple.DataActivation".

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController shouldDismissWithAnimation]):

        Keyed off of _shouldUseLegacySelectPopoverDismissalBehavior.

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

2019-09-25  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r250324.

        Broke many mac wk2 layout tests

        Reverted changeset:

        "Enable LayoutTests using ResourceLoadStatistics SQLite
        backend (195420)"
        https://bugs.webkit.org/show_bug.cgi?id=195420
        https://trac.webkit.org/changeset/250324

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

        Make IsNSURLSessionWebSocketEnabled an experimental flag
        https://bugs.webkit.org/show_bug.cgi?id=202135

        Reviewed by Geoffrey Garen.

        * Shared/WebPreferences.yaml:

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

        [iOS] Regression(r249703) frequent 'kill() returned unexpected error' log messages
        https://bugs.webkit.org/show_bug.cgi?id=202173

        Reviewed by Geoffrey Garen.

        The kill(pid, 0) command actually fails with an EPERM error when there is a process
        running with the given pid, and this is causing us to log a lot of errors. The good
        news is that we merely want to know that there is no process with the given PID and
        we correctly get a ESRCH error in this case. I renamed the function from
        isRunningProcessPID() to wasTerminated() and only check for ESRCH error now. I no
        longer log any error otherwise since this is expected.

        Also, for performance reason, I no longer call kill(pid, 0) from inside
        AuxiliaryProcessProxy::state() as it gets called a lot. I instead only call it from
        AuxiliaryProcessProxy::wasTerminated() and call it from
        WebProcessPool::tryTakePrewarmedProcess().

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::state const):
        (WebKit::AuxiliaryProcessProxy::wasTerminated const):
        (WebKit::AuxiliaryProcessProxy::isRunningProcessPID): Deleted.
        * UIProcess/AuxiliaryProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):

2019-09-24  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] Start RemoteInspectorServer
        https://bugs.webkit.org/show_bug.cgi?id=199938
        <rdar://problem/53323048>

        Reviewed by Fujii Hironori.

        Enable the remote inspector client on WinCairo.
        The inspector server will run if the WEBKIT_INSPECTOR_SERVER environment variable is set.
        WEBKIT_INSPECTOR_SERVER needs to be set in the form of <ip>:port e.g. WEBKIT_INSPECTOR_SERVER=127.0.0.1:1234.

        Updated the protocol handler to update the target list with DOM manipulation.

        * UIProcess/socket/RemoteInspectorClient.cpp:
        * UIProcess/socket/RemoteInspectorClient.h:
        * UIProcess/socket/RemoteInspectorProtocolHandler.cpp:
        * UIProcess/socket/RemoteInspectorProtocolHandler.h:
        * UIProcess/win/WebView.cpp:

2019-09-24  Kate Cheney  <katherine_cheney@apple.com>

        Enable LayoutTests using ResourceLoadStatistics SQLite backend (195420)
        https://bugs.webkit.org/show_bug.cgi?id=195420
        <rdar://problem/54213551>

        Reviewed by Brent Fulgham.

        Changed all RELEASE_LOG_ERROR() calls involving domain strings to
        RELEASE_LOG_ERROR_IF_ALLOWED() to prevent leaking information about
        the domain strings only if sessionID.isAlwaysOnLoggingAllowed().

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        Added autovacuuming to the constructor to avoid manually calling
        runVacuumCommand(). Changed constructor to take in sessionID so it
        can use RELEASE_LOG_ERROR_IF_ALLOWED which requires the sessionID.

        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements):
        Added 2 statements that were not being prepared.

        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        Corrected incorrect capitalization. Added check for nullopt in case
        domainID is for a domain not in the database yet.

        (WebKit::ResourceLoadStatisticsDatabaseStore::domainID const):
        Changed return value to Optional<unsigned>. Some tests were directly
        checking for subframes under top frame domains on domains that had
        not been inserted yet. Now, domainID() won't crash but will return
        a nullopt value which can be checked to know that the tests failed.

        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        Added a check to assure domainID exists and updated the domainID
        interactions to work as Optionals.

        (WebKit::ResourceLoadStatisticsDatabaseStore::populateFromMemoryStore):
        Moved the prepareStatements() call after the vacuum command in the case
        where the database is empty. Otherwise called it before returning.

        (WebKit::ResourceLoadStatisticsDatabaseStore::recursivelyFindNonPrevalentDomainsThatRedirectedToThisDomain):
        Added a space to the SQL commands to correct the syntax.

        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources):
        Corrected a bug in the SQL command for querying
        subframeUnderTopFrameDomain. The old query was asking for subresource.

        (WebKit::ResourceLoadStatisticsDatabaseStore::reclassifyResources):
        Spelling fix.

        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        Changed string concatenation to binding.

        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        The grandfathering.html test was failing because domains were being
        "set" to grandfathered in the database before being inserted. This fix
        ensures all domains before setting the grandfathering flag.

        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
        Multiple tests were failing because the query to insert the relationship
        for the source domain relies on the target domain being in the
        ObservedDomains table. This patch ensures all domains are added before
        performing the query.

        (WebKit::ResourceLoadStatisticsDatabaseStore::setUserInteraction):
        Added a != SQLITE_OK check to make sure an error is logged if the
        statement fails to bind.

        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        Changed string concatenation to binding.

        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):   
        The SQL statement was being bound to a value and not being reset. This
        patch resets the statement after binding. Additionally, the step()
        function was being compared to SQLITE_DONE instead of SQLITE_ROW,
        causing an error if the query returned results. The
        ASSERT_NOT_REACHED() was causing null searches to crash instead of
        returning false (i.e. if a domain is not in the database it should
        return that it has no user interaction instead of crashing).

        (WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource): 
        Updated domainID call to act as an Optional. 
        
        (WebKit::ResourceLoadStatisticsDatabaseStore::predicateValueForDomain const):
        The SQL statement was being bound to a value and not being reset. This
        patch resets the statement after binding. SQLITE_DONE changed to
        SQLITE_ROW to return non-empty query results. ASSERT_NOT_REACHED()
        removed for the same reasons as above. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureResourceStatisticsForRegistrableDomain):
        Fixed the release log statement which was logging the wrong function 
        name.

        (WebKit::ResourceLoadStatisticsDatabaseStore::clearDatabaseContents): 
        Clears the database and rebuilds the tables on a clear command to
        match the functionality in the Memory Store.

        (WebKit::ResourceLoadStatisticsDatabaseStore::clear):                   
        Call the clearDatabaseContents function to match the functionality 
        in the Memory Store. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::hasUserGrantedStorageAccessThroughPrompt const):
        Updated domainID call to act as an Optional. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUnexpiredRecentUserInteraction):
        Tests were failing because shouldRemoveAllWebsiteDataFor() was not 
        checking for expired user interaction. Matched functionality in the
        Memory Store.

        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllWebsiteDataFor):
        Tests were failing because shouldRemoveAllWebsiteDataFor() was not 
        checking for expired user interaction. Matched functionality in the
        Memory Store. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToRemoveWebsiteDataFor):
        Spelling fix. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded): 
        Last seen should be sorted in ascending order because you want to 
        prune the older statistics first, which will have a lower lastSeen
        field (secondsSinceEpoch() will be lower for older values).

        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllWebsiteDataFor const): Deleted.
        Deleted const specifier because the function needs to clear the
        database. 

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:      
        Declared new functions. Updated spelling error (registerable --> 
        registrable). Updated constructor to take sessionID. 

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp: 
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        ITP database flag now is stored in the NetworkProcess.
        * NetworkProcess/NetworkProcess.cpp: 

        (WebKit::NetworkProcess::initializeNetworkProcess): 
        Set the ITP database flag which is now stored in the Network Process. 

        (WebKit::NetworkProcess::addWebsiteDataStore):
        SandboxExtension::consumePermanently was not getting called on the 
        WebKitTestRunner resourceLoadStatistics path. This was preventing
        the database file from opening. 

        (WebKit::NetworkProcess::setUseITPDatabase): 
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::isITPDatabaseEnabled const):
        * NetworkProcess/NetworkProcess.messages.in:
        Passed the setUseITPDatabase flag to the initialization function 
        of the statistics store to enable the database backend.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::recreateResourceLoadStatisticStore):
        Destroy old WebResourceLoadStatisticsStore and create a new one using
        the ITP database.

        * NetworkProcess/NetworkSession.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetUseITPDatabase):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setUseITPDatabase):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setUseITPDatabase):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Passed the setUseITPDatabase flag to the initialization function
        of the statistics store to enable the database backend. 

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

        Make iOS WebProcessPool directory getters static
        https://bugs.webkit.org/show_bug.cgi?id=202157

        Reviewed by Tim Horton.

        No change in behavior.  This just cuts another dependency the NetworkProcessProxy has on its owning WebProcessPool.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::cookieStorageDirectory):
        (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):
        (WebKit::WebProcessPool::parentBundleDirectory):
        (WebKit::WebProcessPool::networkingCachesDirectory):
        (WebKit::WebProcessPool::webContentCachesDirectory):
        (WebKit::WebProcessPool::containerTemporaryDirectory):
        (WebKit::WebProcessPool::cookieStorageDirectory const): Deleted.
        (WebKit::WebProcessPool::parentBundleDirectory const): Deleted.
        (WebKit::WebProcessPool::networkingCachesDirectory const): Deleted.
        (WebKit::WebProcessPool::webContentCachesDirectory const): Deleted.
        (WebKit::WebProcessPool::containerTemporaryDirectory const): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebProcessPool.h:

2019-09-24  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Minor code cleanup in BubblewrapLauncher
        https://bugs.webkit.org/show_bug.cgi?id=201906

        This just cleans up string handling and some
        whitespace fixes.

        Reviewed by Carlos Garcia Campos.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::XDGDBusProxyLauncher::setAddress):
        (WebKit::XDGDBusProxyLauncher::launch):
        (WebKit::XDGDBusProxyLauncher::makeProxyPath):
        (WebKit::XDGDBusProxyLauncher::dbusAddressToPath):

2019-09-24  Zalan Bujtas  <zalan@apple.com>

        [iPadOs] The second click event is missing on double tap when dblclick handler is not present
        https://bugs.webkit.org/show_bug.cgi?id=202006
        <rdar://problem/51706828>

        Reviewed by Wenson Hsieh.

        While double tapping,
        1. the first tap triggers a click event through the normal _singleTapIdentified/_singleTapRecognized codepath.
        2. and the second tap should trigger either
          a second single click event or
          a second single click followed by a dblclick event when dblclick handler is present.
        However the second click is dropped on the floor when the node under the cursor does not have a dblclick handler (see handleDoubleTapForDoubleClickAtPoint()) -so we end up sending one click event.

        This patch fixes this case by sending the second tap through the normal single tap flow when the dblclick handler is not present.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (WebKit::WebPage::positionInformation):
        (WebKit::WebPage::requestPositionInformation):

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

        Move HSTS storage directory to LegacyGlobalSettings
        https://bugs.webkit.org/show_bug.cgi?id=202059

        Reviewed by Tim Horton.

        I continue my lamentation begun in r245075.
        Remove the glib setting of it on the WebKitWebContext because they use it on the WebsiteDataStore.  We should do that too when we can.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setHSTSStorageDirectory:]):
        (-[_WKProcessPoolConfiguration hstsStorageDirectory]):
        * UIProcess/LegacyGlobalSettings.h:
        (WebKit::LegacyGlobalSettings::setHSTSStorageDirectory):
        (WebKit::LegacyGlobalSettings::hstsStorageDirectory const):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

2019-09-24  Keith Rollin  <krollin@apple.com>

        Coalesce or remove PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=202119
        <rdar://problem/55638792>

        Reviewed by Alex Christensen.

        After refactoring and other code evolution, some platform checks have
        ended up looking like PLATFORM(MAC) || PLATFORM(IOS_FAMILY) (or
        vice-versa). These can be converted into the equivalent
        PLATFORM(COCOA). Where the instance occurs in a Cocoa-only file, the
        check can be removed altogether (along with any "#else" branches).

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

2019-09-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        FocusPreservationTests.ChangingFocusedNodeResetsFocusPreservationState triggers a debug assertion
        https://bugs.webkit.org/show_bug.cgi?id=202145
        <rdar://problem/51273128>

        Reviewed by Tim Horton.

        Fixes an assertion in -tableView:cellForRowAtIndexPath: to only require the cell to have a non-zero
        width in the case where the table view itself has a non-empty width. When run under TestWebKitAPI,
        this assertion currently fires because the view controller used to show the popover isn't actually
        presented, so the view controller's view (i.e. the UITableView) ends up being empty. This causes all
        of its table view cells to subsequently become empty upon reuse.

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController tableView:cellForRowAtIndexPath:]):

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

        Require a WebsiteDataStore when creating or resuming downloads
        https://bugs.webkit.org/show_bug.cgi?id=202081

        Reviewed by Youenn Fablet.

        No change in behavior, but I'll have to move Safari to the new SPI.
        This makes it so there are no cases where we guess we need to use the default session,
        and it allows downloads to function correctly once there is a NetworkProcess singleton.
        Removing the unused WebProcessPool& in the callbacks will allow us to eventually have
        downloads only associated with a WebsiteDataStore and not a WebProcessPool.

        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didStart):
        (API::DownloadClient::didReceiveAuthenticationChallenge):
        (API::DownloadClient::didReceiveResponse):
        (API::DownloadClient::didReceiveData):
        (API::DownloadClient::decideDestinationWithSuggestedFilename):
        (API::DownloadClient::didCreateDestination):
        (API::DownloadClient::didFinish):
        (API::DownloadClient::didFail):
        (API::DownloadClient::didCancel):
        (API::DownloadClient::processDidCrash):
        (API::DownloadClient::willSendRequest):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient):
        (WKContextDownloadURLRequest):
        (WKContextResumeDownload):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setDownloadDelegate:]):
        (-[WKProcessPool _downloadURLRequest:originatingWebView:]):
        (-[WKProcessPool _resumeDownloadFromData:path:originatingWebView:]):
        (-[WKProcessPool _downloadURLRequest:websiteDataStore:originatingWebView:]):
        (-[WKProcessPool _resumeDownloadFromData:websiteDataStore:path:originatingWebView:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/glib/WebKitDownloadClient.cpp:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextDispose):
        (webkitWebContextStartDownload):
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didStart):
        (WebKit::DownloadClient::didReceiveResponse):
        (WebKit::DownloadClient::didReceiveData):
        (WebKit::DownloadClient::didReceiveAuthenticationChallenge):
        (WebKit::DownloadClient::didCreateDestination):
        (WebKit::DownloadClient::processDidCrash):
        (WebKit::DownloadClient::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadClient::didFinish):
        (WebKit::DownloadClient::didFail):
        (WebKit::DownloadClient::didCancel):
        (WebKit::DownloadClient::willSendRequest):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::create):
        (WebKit::DownloadProxy::DownloadProxy):
        (WebKit::DownloadProxy::invalidate):
        (WebKit::DownloadProxy::processDidClose):
        (WebKit::DownloadProxy::didStart):
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        (WebKit::DownloadProxy::willSendRequest):
        (WebKit::DownloadProxy::didReceiveResponse):
        (WebKit::DownloadProxy::didReceiveData):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync):
        (WebKit::DownloadProxy::didCreateDestination):
        (WebKit::DownloadProxy::didFinish):
        (WebKit::DownloadProxy::didFail):
        (WebKit::DownloadProxy::didCancel):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):
        * UIProcess/Downloads/DownloadProxyMap.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::createDownloadProxy):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::setDownloadClient):
        (WebKit::WebProcessPool::download):
        (WebKit::WebProcessPool::resumeDownload):
        (WebKit::WebProcessPool::createDownloadProxy):
        * UIProcess/WebProcessPool.h:

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

        Delay capture sandbox extension revocation to after the page close message is sent
        https://bugs.webkit.org/show_bug.cgi?id=202133

        Reviewed by Eric Carlson.

        This ensures that the sandbox extension is removed once no longer useful
        and makes our WebProcess assertions fine.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::~UserMediaPermissionRequestManagerProxy):

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

        Drop unnecessary SessionID.h header includes
        https://bugs.webkit.org/show_bug.cgi?id=202129

        Reviewed by Alex Christensen.

        * NetworkProcess/AdClickAttributionManager.h:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIPageConfiguration.h:
        * WebProcess/Cache/WebCacheStorageProvider.h:
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/Network/WebSocketChannel.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/curl/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        * WebProcess/WebPage/WebFrame.h:

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

        PlugInClient::didStartFromOrigin() does not need a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=202127

        Reviewed by Geoffrey Garen.

        * WebProcess/WebCoreSupport/WebPlugInClient.cpp:
        (WebKit::WebPlugInClient::didStartFromOrigin):
        * WebProcess/WebCoreSupport/WebPlugInClient.h:

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

        FrameSpecificStorageAccessIdentifier does not need a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=202093

        Reviewed by Geoffrey Garen.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestStorageAccess):

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

        macOS: <datalist> dropdown shadow is cropped, looks nothing like NSComboBox
        https://bugs.webkit.org/show_bug.cgi?id=199350

        Reviewed by Wenson Hsieh.

        Improve the appearance of the macOS <datalist> dropdown, adopting the
        roundly-cornered and backdrop-ful appearance of the current NSComboBox style.

        Use the proper window shadow instead of our own inside the window, both
        so that we match the system and so that it doesn't get clipped.

        Allow vertical rubber-banding, because NSComboBox does.

        Don't highlight on hover, because NSComboBox doesn't. Do use NSTableView's
        selection mechanism instead of rolling our own for highlights driven by
        keyboard-based navigation.

        Make use of NSTableCellView, since it has some smarts around pixel alignment
        that we don't need to duplicate (and things are blurry on 1x displays without).

        Also rename some classes to make it a bit more clear what's going on:
        WKDataListSuggestionCell -> WKDataListSuggestionView (it's a NSView, not an NSCell)
        WKDataListSuggestionsView -> WKDataListSuggestionsController (it's not a view at all)

        * Platform/spi/mac/AppKitSPI.h:
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (WebKit::WebDataListSuggestionsDropdownMac::show):
        (-[WKDataListSuggestionWindow initWithContentRect:styleMask:backing:defer:]):
        (-[WKDataListSuggestionWindow canBecomeKeyWindow]):
        (-[WKDataListSuggestionWindow hasKeyAppearance]):
        (-[WKDataListSuggestionWindow shadowOptions]):
        (-[WKDataListSuggestionView initWithFrame:]):
        (-[WKDataListSuggestionView setText:]):
        (-[WKDataListSuggestionView setBackgroundStyle:]):
        (-[WKDataListSuggestionTableRowView drawSelectionInRect:]):
        (-[WKDataListSuggestionTableView initWithElementRect:]):
        (-[WKDataListSuggestionTableView layout]):
        (-[WKDataListSuggestionTableView reload]):
        (-[WKDataListSuggestionsController initWithInformation:inView:]):
        (-[WKDataListSuggestionsController currentSelectedString]):
        (-[WKDataListSuggestionsController updateWithInformation:]):
        (-[WKDataListSuggestionsController moveSelectionByDirection:]):
        (-[WKDataListSuggestionsController invalidate]):
        (-[WKDataListSuggestionsController dropdownRectForElementRect:]):
        (-[WKDataListSuggestionsController showSuggestionsDropdown:]):
        (-[WKDataListSuggestionsController tableView:rowViewForRow:]):
        (-[WKDataListSuggestionsController tableView:viewForTableColumn:row:]):
        (-[WKDataListSuggestionCell initWithFrame:]): Deleted.
        (-[WKDataListSuggestionCell setText:]): Deleted.
        (-[WKDataListSuggestionCell setActive:]): Deleted.
        (-[WKDataListSuggestionCell drawRect:]): Deleted.
        (-[WKDataListSuggestionCell mouseEntered:]): Deleted.
        (-[WKDataListSuggestionCell mouseExited:]): Deleted.
        (-[WKDataListSuggestionCell acceptsFirstResponder]): Deleted.
        (-[WKDataListSuggestionTable initWithElementRect:]): Deleted.
        (-[WKDataListSuggestionTable setVisibleRect:]): Deleted.
        (-[WKDataListSuggestionTable currentActiveRow]): Deleted.
        (-[WKDataListSuggestionTable setActiveRow:]): Deleted.
        (-[WKDataListSuggestionTable reload]): Deleted.
        (-[WKDataListSuggestionTable acceptsFirstResponder]): Deleted.
        (-[WKDataListSuggestionTable enclosingScrollView]): Deleted.
        (-[WKDataListSuggestionTable removeFromSuperviewWithoutNeedingDisplay]): Deleted.
        (-[WKDataListSuggestionsView initWithInformation:inView:]): Deleted.
        (-[WKDataListSuggestionsView currentSelectedString]): Deleted.
        (-[WKDataListSuggestionsView updateWithInformation:]): Deleted.
        (-[WKDataListSuggestionsView moveSelectionByDirection:]): Deleted.
        (-[WKDataListSuggestionsView invalidate]): Deleted.
        (-[WKDataListSuggestionsView dropdownRectForElementRect:]): Deleted.
        (-[WKDataListSuggestionsView showSuggestionsDropdown:]): Deleted.
        (-[WKDataListSuggestionsView selectedRow:]): Deleted.
        (-[WKDataListSuggestionsView numberOfRowsInTableView:]): Deleted.
        (-[WKDataListSuggestionsView tableView:heightOfRow:]): Deleted.
        (-[WKDataListSuggestionsView tableView:viewForTableColumn:row:]): Deleted.

2019-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Drop animation when dragging images from Photos to WebKit2 Mail compose is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=201674
        <rdar://problem/51250952>

        Reviewed by Tim Horton.

        Our current logic for handling dropped content in editable elements on iOS works like this in the ideal case:

        (1)     UIKit asks us for a targeted preview for each UIDragItem. We don't know (and can't determine this
                synchronously without blocking on the web process) so we simply retarget the preview to animate to the
                last known caret location.

        (2)     Soonafter, UIKit hands us a drop preview update block, which may be used to retarget the drop preview
                once, as long as the drop animation is less than 90% complete. We stash these update blocks for now.

        (3)     -dropInteraction:performDrop: is then called, and we start loading item provider data right away.

        (4)     When the data has finished loading, we perform the drop in the web process. After any inserted images
                have finished loading, we take snapshots (of the dropped content as well as surrounding web content
                minus the dropped content), and deliver these images to the UI process via TextIndicatorData.

        (5)     Upon receiving the TextIndicatorData sent in (4), we use the image data to create updated targeted drag
                previews, and use these to invoke the preview update blocks we stored earlier in (2). We also obscure
                the entire web view with a snapshot of the view minus any dropped content, such that the updated drop
                previews may animate into place without also showing the final content.

        (6)     When the drop animation ends, we remove the unselected content snapshot view added in (5) simultaneously
                as the targeted previews disappear, revealing the actual dropped content on the page. The drop is now
                complete.

        However, note that the drag update block we invoke in (5) doesn't work if the drop animation is already more
        than 90% complete. Since the lifecycle of the drop animation is distinct from that of item provider loading, if
        the delay between (3) and (4) exceeds 90% of the total drop animation time, we'll fail to update the targeted
        previews, such that the user only sees the initial drag preview fly on top of the caret and disappear. While we
        typically win this race for data dragged from other WebKit apps, we almost always lose when dragging from Photos
        and end up with a janky drop animation. This is especially true for any images that aren't locally available,
        and need to be fetched from iCloud. An additional problem is that in step (5), we use the same final snapshot to
        update the drop preview of every item, since we don't have a snapshot for the fragment corresponding to each
        individual dropped item.

        To address these issues for Mail in the case where the user drops images with known sizes (i.e. -[NSItemProvider
        preferredPresentationSize] is specified), we introduce an alternate codepath for handling dropped images that
        performs the drop immediately upon receiving -dropInteraction:performDrop: in the UI process. Since the data has
        yet to arrive, we instead handle the drop by inserting placeholder image elements at the drag caret position,
        which initially have no source but are sized to fit their expected final image sizes. After doing so, we
        snapshot the page (minus the dropped content range, as usual) and deliver this snapshot to the UI process, along
        with the rects (in root view coordinates) of each placeholder image that was inserted. In the UI process, we
        then take this snapshot and obscure the content view with it, and also use each of the placeholder rects to
        provide an updated target for each drag preview, such that the drop previews now animate to their final
        locations on the page.

        When the data eventually arrives, we handle the drop by detecting the placeholder elements we inserted earlier,
        and using the dropped data to update the source attribute and attachment backing for each of these placeholder
        elements instead of attempting to insert new content.

        Note that this codepath is currently only enabled for SPI clients that set -[WKWebView _editable] to YES, since
        it involves us performing the editing action for the drop (thus changing the DOM) prior to the preventable drop
        event, and prior to us having any data at all. However, the drop event can't come before the editing action,
        since we need to have already loaded data from the item providers to expose it via the dataTransfer of the drop
        event. This contradiction means that this image placeholder hack is only for _editable SPI clients that, at the
        very least, will not require preventing default behavior when dropping only images with predetermined sizes.

        Covered by 2 new API tests. See comments below for more detail.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/DragDropInteractionState.h:
        * UIProcess/ios/DragDropInteractionState.mm:
        (WebKit::DragDropInteractionState::setDefaultDropPreview):

        Add a way to keep track of default drop previews that we observed during each call to
        -dropInteraction:previewForDroppingItem:withDefault:. In the image placeholder drop scenario, we use these
        default drop previews later on to create retargeted drop previews after the placeholders have been inserted.

        (WebKit::DragDropInteractionState::defaultDropPreview const):
        (WebKit::DragDropInteractionState::deliverDelayedDropPreview):

        Add an alternate version of deliverDelayedDropPreview that is used when inserting image placeholders. Rather
        than use text indicator data of the final dropped content on the page, use the root-view-coordinate rects of
        each of the placeholder elements to reposition the default drop previews.

        There's additional logic here to handle the case where the final image is taller than the height of the
        unobscured content rect, in which case we clip the drop preview using UIDragPreviewParameter's visiblePath to
        prevent the drop preview from being shown outside of the bounds of the web view.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _deliverDelayedDropPreviewIfPossible:]):
        (sizesOfPlaceholderElementsToInsertWhenDroppingItems):

        Collects the list of expected image sizes for the dropped item providers, or an empty list in the case where
        any of the item providers may not be represented as inline images or do not have predetermined sizes.

        (-[WKContentView _handleDropByInsertingImagePlaceholders:session:]):

        If possible, handles the drop by inserting image placeholders instead of waiting for the data to finish loading
        before dropping. Returns whether or not we decided to proceed with the image placeholder drop.

        (-[WKContentView dropInteraction:performDrop:]):
        (-[WKContentView dropInteraction:item:willAnimateDropWithAnimator:]):

        Fixes a bug where the unselected content snapshot view could linger around on the web view forever after a drop
        where the data doesn't load in time for the drop to finish by keeping track of whether there is an actively
        animating drag item, and only applying the unselected content snapshot if so.

        (-[WKContentView dropInteraction:previewForDroppingItem:withDefault:]):

        Stash the default drop preview away here.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::insertDroppedImagePlaceholders):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::insertDroppedImagePlaceholders):

        See WebCore ChangeLog for more information.

        (WebKit::WebPage::didFinishLoadingImageForElement):

        If the image that finished loading is a dropped image placeholder, allow DragController to "finalize" it by
        stripping away some styles that were temporarily added.

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

        REGRESSION(250143) Disk cache should be enabled for Safari
        https://bugs.webkit.org/show_bug.cgi?id=202117

        Reviewed by Brady Eidson.

        r250143 made it so in Safari, when setCacheModel is called for the first time in NetworkProcess::initializeNetworkProcess,
        it didn't have a path to check available disk space.  This resulted in disabling the disk cache in Safari, which caused a
        huge performance regression.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::setCacheModel):

2019-09-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] LocalAuthenticator tests are failing on internal bots
        https://bugs.webkit.org/show_bug.cgi?id=201844
        <rdar://problem/54278693>

        Reviewed by Brent Fulgham.

        This patch adds a way for mock tests to select a credential in getAssertion
        ceremonies such that a test can ensure it always uses the credential it manages.
        Credentials managed by other test could be deleted at anytime.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::getAssertion):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.h:
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::selectCredential const):
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.h:
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        (WebKit::MockLocalConnection::selectCredential const):
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h:

2019-09-23  David Quesada  <david_quesada@apple.com>

        [iOS] REGRESSION(r250151): Occasional assertion failures in ShareableBitmap::~ShareableBitmap()
        https://bugs.webkit.org/show_bug.cgi?id=202112
        rdar://problem/55624598

        Reviewed by Chris Dumez.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::releaseDataProviderData):
        It is possible and valid for a UIImage created from a ShareableBitmap's CGImage representation
        to be deallocated on a background thread. When this happens, releaseDataProviderData() should
        ensure it's running on the main thread before deref'ing the ShareableBitmap. Otherwise the
        bitmap can be deallocated on the background thread, violating an assertion added in r250151.

2019-09-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve the Uncaught Exception View file a bug link
        https://bugs.webkit.org/show_bug.cgi?id=201717

        Reviewed by Devin Rousso.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::bringInspectedPageToFront):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        Provide a way to bring the inspected page to the foreground.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::openInNewTab):
        Use it when opening a new tab beside the inspected page.

2019-09-23  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r250169 and r250236.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::createCurlRequest):
        * UIProcess/API/C/curl/WKWebsiteDataStoreRefCurl.cpp:
        (WKWebsiteDataStoreEnableDefaultNetworkProxySettings):
        (WKWebsiteDataStoreEnableCustomNetworkProxySettings):
        (WKWebsiteDataStoreDisableNetworkProxySettings):

2019-09-23  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copy/ref churn of for loop variables in WebKit
        <https://webkit.org/b/202096>

        Reviewed by Darin Adler.

        Fix unwanted copying/ref churn of loop variables by making them
        const references.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::domainsToString):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant presentationRectForElementUsingClosestIndicatedRect]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _singleTapDidReset:]):
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsControl textSuggestions]):

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

        WebPage::sessionID() does not need to get the sessionID from there WebCore Page
        https://bugs.webkit.org/show_bug.cgi?id=202094

        Reviewed by Youenn Fablet.

        WebPage::sessionID() does not need to get the sessionID from there WebCore Page, it can
        simply get the sessionID from the WebProcess singleton, now that we have a single session
        per WebProcess. This will avoid potential crashes trying to dereference m_page to get the
        sessionID, since m_page can be null.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sessionID const):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sessionID const): Deleted.

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

        Simplify UserMediaPermissionRequestManager management of UserMediaRequest
        https://bugs.webkit.org/show_bug.cgi?id=201688

        Reviewed by Eric Carlson.

        Instead of having two maps to go from ID to request and request to ID,
        Make request own its ID and keep a single ID to request map.
        Rename it to m_ongoingUserMediaRequests.

        Rename requests that are not processed because the document cannot start media as m_pendingUserMediaRequests.
        In case the request is cancelled following the stopping of active dom objects, we just remove it from m_pendingUserMediaRequests
        instead of denying the request. This matches Chrome and Firefox behavior.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::cancelUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::mediaCanStart):
        (WebKit::UserMediaPermissionRequestManager::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManager::userMediaAccessWasDenied):
        (WebKit::UserMediaPermissionRequestManager::addDeviceChangeObserver):
        (WebKit::generateRequestID): Deleted.
        (WebKit::UserMediaPermissionRequestManager::removeMediaRequestFromMaps): Deleted.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

2019-09-23  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Don't use prgname in dbus-proxy socket path
        https://bugs.webkit.org/show_bug.cgi?id=201979

        The path length for the socket is limited to 108 bytes so it is easy for a long
        prgname to cause it to get truncated and fail. Since we only allow the socket
        path into the sandbox the unique directory isn't necessary.

        Reviewed by Michael Catanzaro.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::XDGDBusProxyLauncher::setAddress):

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

        [SOUP] Stop setting G_TLS_GNUTLS_PRIORITY
        https://bugs.webkit.org/show_bug.cgi?id=172154

        Reviewed by Carlos Garcia Campos.

        Nowadays, I maintain glib-networking. WebKit doesn't need to override its defaults to be
        secure anymore. By overriding glib-networking's default priority, WebKit is force-reenabling
        TLS 1.0 and TLS 1.1 even when glib-networking has disabled them.

        * NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp:
        (main):
        * WebProcess/EntryPoint/unix/WebProcessMain.cpp:
        (main):

2019-09-21  Dan Bernstein  <mitz@apple.com>

        Fix an assertion failure introduced in r250186.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptionsWithAttributes): Corrected the
          assertion.

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

        Reduce use of SessionID::defaultSessionID() in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=202080

        Reviewed by Alex Christensen.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::convertMainResourceLoadToDownload):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebPage/WebFrame.h:

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

        Drop unnecessary NetworkProcess::m_sessionByConnection
        https://bugs.webkit.org/show_bug.cgi?id=202088

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:

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

        WebIDBConnectionToClient does not need to be RefCounted or a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=202089

        Reviewed by Alex Christensen.

        WebIDBConnectionToClient does not need to be RefCounted, the ref() / deref() virtual function
        it implemented from its interface were dead code. We now stop subclassing RefCounted and have
        the NetworkConnectionToWebProcess fully own the WebIDBConnectionToClient. Instead of the
        WebIDBConnectionToClient having 3 data members for the NetworkProcess, the sessionID and the IPC
        connection, use a single data member to its NetworkConnectionToWebProcess parent. It can get
        everything it needs from its parent.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::idbServer):
        (WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess):
        (WebKit::WebIDBConnectionToClient::messageSenderConnection const):
        (WebKit::WebIDBConnectionToClient::connectionToClient):
        (WebKit::WebIDBConnectionToClient::deleteDatabase):
        (WebKit::WebIDBConnectionToClient::openDatabase):
        (WebKit::WebIDBConnectionToClient::abortTransaction):
        (WebKit::WebIDBConnectionToClient::commitTransaction):
        (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToClient::createObjectStore):
        (WebKit::WebIDBConnectionToClient::deleteObjectStore):
        (WebKit::WebIDBConnectionToClient::renameObjectStore):
        (WebKit::WebIDBConnectionToClient::clearObjectStore):
        (WebKit::WebIDBConnectionToClient::createIndex):
        (WebKit::WebIDBConnectionToClient::deleteIndex):
        (WebKit::WebIDBConnectionToClient::renameIndex):
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        (WebKit::WebIDBConnectionToClient::getRecord):
        (WebKit::WebIDBConnectionToClient::getAllRecords):
        (WebKit::WebIDBConnectionToClient::getCount):
        (WebKit::WebIDBConnectionToClient::deleteRecord):
        (WebKit::WebIDBConnectionToClient::openCursor):
        (WebKit::WebIDBConnectionToClient::iterateCursor):
        (WebKit::WebIDBConnectionToClient::establishTransaction):
        (WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose):
        (WebKit::WebIDBConnectionToClient::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent):
        (WebKit::WebIDBConnectionToClient::openDBRequestCancelled):
        (WebKit::WebIDBConnectionToClient::confirmDidCloseFromServer):
        (WebKit::WebIDBConnectionToClient::getAllDatabaseNames):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        * NetworkProcess/NetworkConnectionToWebProcess.h:

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

        Regression(iOS 13) web views do not deal properly with their window's UIScene changing
        https://bugs.webkit.org/show_bug.cgi?id=202070
        <rdar://problem/55580699>

        Reviewed by Tim Horton.

        Web views do not deal properly with their window's UIScene changing. If a Safari window is in the
        background for 1 minute, its UIScene will be detached and the window will get a new UIScene if
        the user later switches to this window. Our web views listen to UIScene notifications to determine
        their visibility and currently stop receiving visibility updates once the window’s UIScene has
        changed. This causes view freezes because our WebContent process does not know its view is visible
        and keeps its layer tree frozen.

        Previously, when our view would be added to a window, we would get this window's UIScene and listen
        for UISceneDidEnterBackgroundNotification / UISceneWillEnterForegroundNotification for this UIScene
        object. Instead, we now listen to these notifications for ALL the application's UIScenes. Our handler
        then checks if the notification's UIScene object matches the current window's UIScene before
        forwarding the notification to the rest of WebKit.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        (WebKit::ApplicationStateTracker::~ApplicationStateTracker):

2019-09-21  Dan Bernstein  <mitz@apple.com>

        Safari 13 may launch leftover 32-bit plug-in process from Safari 12’s WebKit, which crashes
        https://bugs.webkit.org/show_bug.cgi?id=202077
        <rdar://problem/55547063>

        Reviewed by Sam Weinig.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginArchitecture): Removed support for i386 plug-ins.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName): Assert that the requested process type is not Plugin32.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptionsWithAttributes): Assert that the
          plug-in architecture is x86_64.

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

        [Pointer Events] touch-action set to pan-x or pan-y alone should disable scrolling altogether if the intial gesture is in the disallowed direction
        https://bugs.webkit.org/show_bug.cgi?id=202053
        <rdar://problem/54542190>

        Reviewed by Tim Horton.

        Although the Pointer Events specification does not specify this clearly (see https://github.com/w3c/pointerevents/issues/303), setting "touch-action" to a value
        that only allows scrolling a specific direction ("pan-x" or "pan-y") should disable scrolling in the specified direction if the panning gesture initially is directed
        in the opposite direction. In practice, this means that setting "touch-action: pan-y" on an element should disable scrolling if the user initially pans horizontally,
        even if later on in the gesture the user pans vertically. This allows for sites that want to offer a programmatic horizontal scroller to disable vertical scrolling
        if the user pans horizontally.

        In order to support this, we add four UISwipeGestureRecognizers, one for each direction, and we selectively allows touches to be recognizer for them based on the
        "touch-action" value specified at the initial touch location for a given gesture. In the case of "touch-action: pan-y" we only allow the left and right swipe recognizers
        to be enabled, and in the case of "touch-action: pan-x" we only allow the up and down swipe recognizers to be enabled. If any of those gesture recognizers is recognized,
        scrolling will be disabled for the duration of this gesture. If a UIScrollView panning gesture recognizer is recognized prior to a swipe, they won't have a chance to be
        recognized.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldReceiveTouch:]):

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

        [Apple Pay] Clean up handling of summary items and payment method updates
        https://bugs.webkit.org/show_bug.cgi?id=202018
        <rdar://problem/55470632>

        Reviewed by Tim Horton.

        Now that PaymentMethodUpdate knows how to convert itself to a
        PKPaymentRequestPaymentMethodUpdate, PaymentAuthorizationPresenter can merely pass the
        converted update directly to the platform delegate rather than passing the individual
        components and relying on the delegate to instantiate the platform update itself. Added
        FIXMEs for applying a similar treatment to ShippingContactUpdate and ShippingMethodUpdate.

        * Platform/cocoa/PaymentAuthorizationPresenter.h:
        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::PaymentAuthorizationPresenter::completePaymentMethodSelection):
        (WebKit::PaymentAuthorizationPresenter::completeShippingContactSelection):
        (WebKit::PaymentAuthorizationPresenter::completeShippingMethodSelection):
        * Platform/cocoa/WKPaymentAuthorizationDelegate.h:
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
        (-[WKPaymentAuthorizationDelegate completePaymentMethodSelection:]):
        (-[WKPaymentAuthorizationDelegate completeShippingContactSelection:]):
        (-[WKPaymentAuthorizationDelegate completeShippingMethodSelection:]):
        (-[WKPaymentAuthorizationDelegate _didSelectPaymentMethod:completion:]):
        (-[WKPaymentAuthorizationDelegate _didSelectShippingContact:completion:]):
        (-[WKPaymentAuthorizationDelegate _didSelectShippingMethod:completion:]):
        (-[WKPaymentAuthorizationDelegate completeShippingContactSelection:summaryItems:shippingMethods:errors:]): Deleted.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest):
        (WebKit::toPKPaymentSummaryItemType): Deleted.
        (WebKit::toPKPaymentSummaryItem): Deleted.
        (WebKit::toPKPaymentSummaryItems): Deleted.
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::PaymentMethodUpdate>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentMethodUpdate>::decode):

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202027
        <rdar://problem/55547109>

        Reviewed by Alex Christensen.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        After version checks have been removed, there are some cases where the
        preprocessor conditional looks like "#if PLATFORM(MAC) ||
        PLATFORM(IOS_FAMILY)". These can be collapsed into "#if
        PLATFORM(COCOA)". This additional cleanup will be performed in a
        subsequent patch.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Joe Pecoraro was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

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

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

        Remove unnecessary abstractions around WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=201655

        Reviewed by Chris Dumez.

        * PlatformFTW.cmake:
        * PlatformWin.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/APIHTTPCookieStore.cpp:
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::websiteDataStore):
        (API::PageConfiguration::setWebsiteDataStore):
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        * UIProcess/API/APIWebsiteDataStore.cpp: Removed.
        * UIProcess/API/APIWebsiteDataStore.h: Removed.
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::WebsitePolicies):
        (API::WebsitePolicies::setWebsiteDataStore):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetCacheModel):
        (WKContextGetCacheModel):
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreGetTypeID):
        (WKWebsiteDataStoreGetDefaultDataStore):
        (WKWebsiteDataStoreCreateNonPersistentDataStore):
        (WKWebsiteDataStoreCreateWithConfiguration):
        (WKWebsiteDataStoreGetHTTPCookieStore):
        (WKWebsiteDataStoreSetResourceLoadStatisticsDebugModeWithCompletionHandler):
        (WKWebsiteDataStoreSetResourceLoadStatisticsPrevalentResourceForDebugMode):
        (WKWebsiteDataStoreSetStatisticsLastSeen):
        (WKWebsiteDataStoreSetStatisticsPrevalentResource):
        (WKWebsiteDataStoreSetStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreDumpResourceLoadStatistics):
        (WKWebsiteDataStoreIsStatisticsPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubresourceUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubFrameUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsRedirectingTo):
        (WKWebsiteDataStoreSetStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreIsStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreSetStatisticsGrandfathered):
        (WKWebsiteDataStoreIsStatisticsGrandfathered):
        (WKWebsiteDataStoreSetStatisticsSubframeUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsCrossSiteLoadWithLinkDecoration):
        (WKWebsiteDataStoreSetStatisticsTimeToLiveUserInteraction):
        (WKWebsiteDataStoreStatisticsProcessStatisticsAndDataRecords):
        (WKWebsiteDataStoreStatisticsUpdateCookieBlocking):
        (WKWebsiteDataStoreStatisticsSubmitTelemetry):
        (WKWebsiteDataStoreSetStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WKWebsiteDataStoreSetStatisticsIsRunningTest):
        (WKWebsiteDataStoreSetStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WKWebsiteDataStoreSetStatisticsNotifyPagesWhenTelemetryWasCaptured):
        (WKWebsiteDataStoreSetStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WKWebsiteDataStoreSetStatisticsGrandfatheringTime):
        (WKWebsiteDataStoreSetStatisticsMaxStatisticsEntries):
        (WKWebsiteDataStoreSetStatisticsPruneEntriesDownTo):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WKWebsiteDataStoreStatisticsClearThroughWebsiteDataRemoval):
        (WKWebsiteDataStoreStatisticsDeleteCookiesForTesting):
        (WKWebsiteDataStoreStatisticsHasLocalStorage):
        (WKWebsiteDataStoreSetStatisticsCacheMaxAgeCap):
        (WKWebsiteDataStoreStatisticsHasIsolatedSession):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        (WKWebsiteDataStoreRemoveAllFetchCaches):
        (WKWebsiteDataStoreRemoveFetchCacheForOrigin):
        (WKWebsiteDataStoreRemoveAllIndexedDatabases):
        (WKWebsiteDataStoreRemoveLocalStorage):
        (WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations):
        (WKWebsiteDataStoreGetFetchCacheOrigins):
        (WKWebsiteDataStoreGetFetchCacheSizeForOrigin):
        (WKWebsiteDataStoreCopyServiceWorkerRegistrationDirectory):
        (WKWebsiteDataStoreSetServiceWorkerRegistrationDirectory):
        (WKWebsiteDataStoreClearAllDeviceOrientationPermissions):
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        (WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval):
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm: Removed.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore defaultDataStore]):
        (+[WKWebsiteDataStore nonPersistentDataStore]):
        (-[WKWebsiteDataStore dealloc]):
        (-[WKWebsiteDataStore httpCookieStore]):
        (-[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        (+[WKWebsiteDataStore _defaultDataStoreExists]):
        (+[WKWebsiteDataStore _deleteDefaultDataStoreForTesting]):
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        (-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsEnabled]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsEnabled:]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsDebugMode]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsDebugMode:]):
        (-[WKWebsiteDataStore _cacheStorageDirectory]):
        (-[WKWebsiteDataStore _setCacheStorageDirectory:]):
        (-[WKWebsiteDataStore _serviceWorkerRegistrationDirectory]):
        (-[WKWebsiteDataStore _setServiceWorkerRegistrationDirectory:]):
        (-[WKWebsiteDataStore _setBoundInterfaceIdentifier:]):
        (-[WKWebsiteDataStore _boundInterfaceIdentifier]):
        (-[WKWebsiteDataStore _setAllowsCellularAccess:]):
        (-[WKWebsiteDataStore _allowsCellularAccess]):
        (-[WKWebsiteDataStore _setProxyConfiguration:]):
        (-[WKWebsiteDataStore _sourceApplicationBundleIdentifier]):
        (-[WKWebsiteDataStore _setSourceApplicationBundleIdentifier:]):
        (-[WKWebsiteDataStore _sourceApplicationSecondaryIdentifier]):
        (-[WKWebsiteDataStore _setSourceApplicationSecondaryIdentifier:]):
        (-[WKWebsiteDataStore _proxyConfiguration]):
        (-[WKWebsiteDataStore _indexedDBDatabaseDirectory]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldSubmitTelemetry:]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsTestingCallback:]):
        (-[WKWebsiteDataStore _getAllStorageAccessEntriesFor:completionHandler:]):
        (-[WKWebsiteDataStore _scheduleCookieBlockingUpdate:]):
        (-[WKWebsiteDataStore _setPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _getIsPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _clearPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _processStatisticsAndDataRecords:]):
        (-[WKWebsiteDataStore _hasRegisteredServiceWorker]):
        (-[WKWebsiteDataStore _delegate]):
        (-[WKWebsiteDataStore set_delegate:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStoreInternal.h:
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp: Removed.
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerSetProperty):
        (webkitWebsiteDataManagerGetDataStore):
        (webkit_website_data_manager_get_local_storage_directory):
        (webkit_website_data_manager_get_disk_cache_directory):
        (webkit_website_data_manager_get_offline_application_cache_directory):
        (webkit_website_data_manager_get_indexeddb_directory):
        (webkit_website_data_manager_get_websql_directory):
        (webkit_website_data_manager_get_hsts_cache_directory):
        (webkit_website_data_manager_fetch):
        (webkit_website_data_manager_remove):
        (webkit_website_data_manager_clear):
        (webkitWebsiteDataManagerCreate): Deleted.
        * UIProcess/API/glib/WebKitWebsiteDataManagerPrivate.h:
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp: Removed.
        * UIProcess/Cocoa/NavigationState.mm:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::websiteDataStoreFromSessionID):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_webProcessCache):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::processDidFinishLaunching):
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::defaultApplicationCacheDirectory):
        (WebKit::WebsiteDataStore::defaultCacheStorageDirectory):
        (WebKit::WebsiteDataStore::defaultNetworkCacheDirectory):
        (WebKit::WebsiteDataStore::defaultMediaCacheDirectory):
        (WebKit::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        (WebKit::WebsiteDataStore::defaultLocalStorageDirectory):
        (WebKit::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (WebKit::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):
        (WebKit::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        (WebKit::WebsiteDataStore::tempDirectoryFileSystemRepresentation):
        (WebKit::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (WebKit::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::globalDefaultDataStore):
        (WebKit::WebsiteDataStore::defaultDataStore):
        (WebKit::WebsiteDataStore::deleteDefaultDataStoreForTesting):
        (WebKit::WebsiteDataStore::defaultDataStoreExists):
        (WebKit::WebsiteDataStore::defaultDataStoreConfiguration):
        (WebKit::WebsiteDataStore::isAssociatedProcessPool const):
        (WebKit::WebsiteDataStore::defaultMediaCacheDirectory):
        (WebKit::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        (WebKit::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        * UIProcess/WebsiteData/win/WebsiteDataStoreWin.cpp:
        (WebKit::WebsiteDataStore::defaultApplicationCacheDirectory):
        (WebKit::WebsiteDataStore::defaultCacheStorageDirectory):
        (WebKit::WebsiteDataStore::defaultNetworkCacheDirectory):
        (WebKit::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        (WebKit::WebsiteDataStore::defaultLocalStorageDirectory):
        (WebKit::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (WebKit::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):
        (WebKit::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (WebKit::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        * UIProcess/glib/WebProcessProxyGLib.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/glib/WebsiteDataStoreGLib.cpp: Copied from Source/WebKit/UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp.
        (API::WebsiteDataStore::defaultApplicationCacheDirectory): Deleted.
        (API::WebsiteDataStore::defaultNetworkCacheDirectory): Deleted.
        (API::WebsiteDataStore::defaultCacheStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory): Deleted.
        (API::WebsiteDataStore::defaultLocalStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::defaultHSTSDirectory): Deleted.
        (API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory): Deleted.
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation): Deleted.
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::setWebsiteDataStore):

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

        REGRESSION (iOS 13): rAF stops firing when navigating away cross-origin and then back
        https://bugs.webkit.org/show_bug.cgi?id=201767
        <rdar://problem/55350854>

        Reviewed by Tim Horton.

        This is a follow-up to r249961 to address crashes when navigating back cross-origin to a page
        that uses requestAnimationFrame. r249961 took care of moving RemoteLayerTreeDisplayRefreshMonitor
        objects from one RemoteLayerTreeDrawingArea to another but failed to tell those monitors
        about their new drawingArea. As a result, RemoteLayerTreeDrawingArea::willDestroyDisplayRefreshMonitor()
        would not get called on the new drawing area when it should have.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::updateDrawingArea):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::adoptDisplayRefreshMonitorsFromDrawingArea):

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201967
        <rdar://problem/55504738>

        Reviewed by Andy Estes.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        After version checks have been removed, there are some cases where the
        preprocessor conditional looks like "#if PLATFORM(MAC) ||
        PLATFORM(IOS_FAMILY)". These can be collapsed into "#if
        PLATFORM(COCOA)". This additional cleanup will be performed in a
        subsequent patch.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Andy Estes was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _uploadItemFromMediaInfo:successBlock:failureBlock:]):

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

        Sanitize suggested filenames used for saving PDFs
        https://bugs.webkit.org/show_bug.cgi?id=202034
        <rdar://problem/53183075>

        Reviewed by Chris Dumez.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishLoadingDataForCustomContentProvider):
        (WebKit::WebPageProxy::saveDataToFileInDownloadsFolder):
        (WebKit::WebPageProxy::savePDFToFileInDownloadsFolder):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplicationRaw): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplicationRaw): Deleted.
        Sanitize suggested filenames to ensure that they comprise only one path component
        when concatenated with their destination directory.

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

        Add release logging for when a view is added / removed from a window
        https://bugs.webkit.org/show_bug.cgi?id=202050

        Reviewed by Tim Horton.

        Add release logging for when a view is added / removed from a window to help determine the
        view's visibility in the logs.

        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView willMoveToWindow:]):
        (-[WKApplicationStateTrackingView didMoveToWindow]):

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

        ApplicationStateTracker::m_isBackground initialization does not account for UIScenes
        https://bugs.webkit.org/show_bug.cgi?id=202048

        Reviewed by Geoffrey Garen.

        ApplicationStateTracker::m_isBackground initialization does not account for UIScenes, it merely checks
        the visibility state of the whole app. It should instead check the visibility state of the window's
        UIScene.

        This patch also refactors the code a little bit to reduce #ifdef'ing.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):

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

        Document no longer needs to store a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=202024

        Reviewed by Geoffrey Garen.

        Document no longer needs to store a SessionID, now that we have a single
        session per WebProcess. It can simply get its sessionID from its Page.

        * WebProcess/WebPage/WebCookieJar.cpp:
        (WebKit::WebCookieJar::cookieRequestHeaderFieldValue const):
        * WebProcess/WebPage/WebCookieJar.h:

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

        [iOS] ASSERTION FAILED: Unsafe to ref/deref of ShareableBitmap from different threads
        https://bugs.webkit.org/show_bug.cgi?id=201712
        <rdar://problem/55289916>

        Reviewed by Tim Horton.

        Make sure ShareableBitmap objects are always ref'd / deref'd on the main thread by dispatching to
        the main thread in ShareableBitmap::releaseBitmapContextData() before calling deref().

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::ShareableBitmap):
        (WebKit::ShareableBitmap::~ShareableBitmap):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::releaseBitmapContextData):

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

        Begin moving WebsiteDataStore setters to WebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202025

        Reviewed by Chris Dumez.

        Most of these were only needed before initNonPersistentConfiguration existed.

        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationGetPerOriginStorageQuota):
        (WKWebsiteDataStoreConfigurationSetPerOriginStorageQuota):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetPerOriginStorageQuota):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        (-[WKWebsiteDataStore _perOriginStorageQuota]):
        (-[WKWebsiteDataStore _setPerOriginStorageQuota:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration perOriginStorageQuota]):
        (-[_WKWebsiteDataStoreConfiguration setPerOriginStorageQuota:]):
        (-[_WKWebsiteDataStoreConfiguration boundInterfaceIdentifier]):
        (-[_WKWebsiteDataStoreConfiguration setBoundInterfaceIdentifier:]):
        (-[_WKWebsiteDataStoreConfiguration allowsCellularAccess]):
        (-[_WKWebsiteDataStoreConfiguration setAllowsCellularAccess:]):
        (-[_WKWebsiteDataStoreConfiguration proxyConfiguration]):
        (-[_WKWebsiteDataStoreConfiguration setProxyConfiguration:]):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::setSourceApplicationSecondaryIdentifier):
        (WebKit::WebsiteDataStore::setSourceApplicationBundleIdentifier):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::setBoundInterfaceIdentifier):
        (WebKit::WebsiteDataStore::boundInterfaceIdentifier):
        (WebKit::WebsiteDataStore::sourceApplicationBundleIdentifier const):
        (WebKit::WebsiteDataStore::sourceApplicationSecondaryIdentifier const):
        (WebKit::WebsiteDataStore::setAllowsCellularAccess):
        (WebKit::WebsiteDataStore::allowsCellularAccess):
        (WebKit::WebsiteDataStore::setProxyConfiguration):
        (WebKit::WebsiteDataStore::proxyConfiguration):
        (WebKit::WebsiteDataStore::setPerOriginStorageQuota): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::boundInterfaceIdentifier const):
        (WebKit::WebsiteDataStoreConfiguration::setBoundInterfaceIdentifier):
        (WebKit::WebsiteDataStoreConfiguration::allowsCellularAccess const):
        (WebKit::WebsiteDataStoreConfiguration::setAllowsCellularAccess):
        (WebKit::WebsiteDataStoreConfiguration::proxyConfiguration const):
        (WebKit::WebsiteDataStoreConfiguration::setProxyConfiguration):

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

        Introduce LegacyGlobalSettings for settings the NetworkProcess needs from a WebProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=201970

        Reviewed by Geoff Garen.

        I'm starting by moving the cache model to this new abstraction.
        We were using it in tests to disable the page cache, which should be done with a boolean on the pool configuration, not by changing the cache model.
        We were also using it in WKContextSetCacheModel which has several clients that won't change quickly, so this abstraction is used to maintain existing behavior.
        I need this so I can make a NetworkProcess not depend on anything from a WebProcessPool when starting.

        * Sources.txt:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetCacheModel):
        (WKContextGetCacheModel):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration pageCacheEnabled]):
        (-[_WKProcessPoolConfiguration setPageCacheEnabled:]):
        * UIProcess/LegacyGlobalSettings.cpp: Added.
        (WebKit::LegacyGlobalSettings::singleton):
        (WebKit::LegacyGlobalSettings::setCacheModel):
        * UIProcess/LegacyGlobalSettings.h: Added.
        (WebKit::LegacyGlobalSettings::cacheModel const):
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::updateCapacity):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::updateMaxSuspendedPageCount):
        (WebKit::WebProcessPool::setCacheModel):
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:

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

        Deprecate unused C API aliases for WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=202029

        Reviewed by Chris Dumez.

        This is a piece of r249768.

        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetTypeID):
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        (WKApplicationCacheManagerDeleteAllEntries):
        * UIProcess/API/C/WKApplicationCacheManager.h:
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetTypeID):
        (WKKeyValueStorageManagerGetOriginKey):
        (WKKeyValueStorageManagerGetCreationTimeKey):
        (WKKeyValueStorageManagerGetModificationTimeKey):
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        (WKKeyValueStorageManagerDeleteEntriesForOrigin):
        (WKKeyValueStorageManagerDeleteAllEntries):
        * UIProcess/API/C/WKKeyValueStorageManager.h:
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetTypeID):
        (WKResourceCacheManagerGetCacheOrigins):
        (WKResourceCacheManagerClearCacheForOrigin):
        (WKResourceCacheManagerClearCacheForAllOrigins):
        (toWebsiteDataTypes): Deleted.
        * UIProcess/API/C/WKResourceCacheManager.h:

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

        Remove functionality to disable TLS fallback
        https://bugs.webkit.org/show_bug.cgi?id=201998

        Reviewed by Geoff Garen.

        Since r249019 it is not used.  It was a useful experiment and I'm glad we didn't see any regressions.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setAllowsTLSFallback:]):
        (-[WKWebsiteDataStore _allowsTLSFallback]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setAllowsTLSFallback): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::allowsTLSFallback const): Deleted.

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

        Remove unused storage paths on APIProcessPoolConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202028

        Reviewed by Chris Dumez.

        This is a piece of r249768.
        There is no way to set these paths and they have been replaced by WebsiteDataStore paths.
        There was one remaining use of the global disk cache directory in NetworkProcess::setCacheModel,
        which I replaced with the default session's disk cache directory, which is equivalent.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::diskCacheDirectory const): Deleted.
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        (WebKit::NetworkProcessCreationParameters::NetworkProcessCreationParameters): Deleted.
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::open):
        (WebKit::NetworkCache::Cache::Cache):
        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::Cache::storageDirectory):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration): Deleted.
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration): Deleted.
        (API::ProcessPoolConfiguration::~ProcessPoolConfiguration): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_set_disk_cache_directory):
        (websiteDataStoreConfigurationForWebProcessPoolConfiguration): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::resolvePathsForSandboxExtensions):
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::processPools const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202032
        <rdar://problem/55548468>

        Reviewed by Alex Christensen.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Dan Bates was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

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

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201973
        <rdar://problem/55506966>

        Reviewed by Alex Christensen.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Chris Dumez was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):

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

        Unreviewed, fix confusing release logging under WebPageProxy::loadRequestWithNavigationShared().

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

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

        Regression(r248832): Unable to quicklook HTML files in Mail
        https://bugs.webkit.org/show_bug.cgi?id=202012
        <rdar://problem/55285295>

        Reviewed by Per Arne Vollan.

        Follow-up to fix bug in r250110. Now that loadFile() calls
        maybeInitializeSandboxExtensionHandle(), it no longer needs to
        call assumeReadAccessToBaseURL(). This is because maybeInitializeSandboxExtensionHandle()
        already take care of it.

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

2019-09-20  Joonghun Park  <pjh0718@gmail.com>

        Unreviewed. Remove duplicated HashMap iteration since r248734.

        ASSERT statement already exists for |storageNamespaceID|,
        so |HashMap.get| for the parameter is not needed.

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

2019-09-20  Joonghun Park  <pjh0718@gmail.com>

        Unreviewed. Fix Build warning below since r248734.

        warning: unused variable ‘foo’ [-Wunused-variable]

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::destroySessionStorageNamespace):
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::add):
        (WebKit::StorageManagerSet::waitUntilTasksFinished):

2019-09-19  Brent Fulgham  <bfulgham@apple.com>

        [FTW, WinCairo] Support running tests in Release mode
        https://bugs.webkit.org/show_bug.cgi?id=202021

        Reviewed by Don Olmstead.

        In Bug 201597, we added new features to better lock down JSC features in the
        potentially untrusted WebContent process.

        Unfortunately, this change included XPC Dictionary items used at startup to
        lock down JSC features before entering the main execution of the process. These
        changes were not done for the WinCairo or FTW ports.

        We need to pass the state of the JIT and whether to enable certain JSC features
        at process launch. Since the XPC mechanisms we use on macOS and iOS do not exist
        on Windows, I am implementing them as command-line flags.

            -configure-jsc-for-testing: Sets the JSC in testing mode.
            -disable-jit: Disables the JIT.

        See r249808 for the equivalent changes on macOS and iOS.

        * PlatformFTW.cmake: Add some missing header files needed when building tests.
        * Shared/win/AuxiliaryProcessMainWin.cpp:
        (WebKit::AuxiliaryProcessMainBase::parseCommandLine):
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess):

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

        Add better logging for when the view visibility state changes
        https://bugs.webkit.org/show_bug.cgi?id=202008

        Reviewed by Geoffrey Garen.

        * UIProcess/ApplicationStateTracker.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityState):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground):
        (WebKit::WebPageProxy::applicationWillEnterForeground):

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

        Regression(r248832): Unable to quicklook HTML files in Mail
        https://bugs.webkit.org/show_bug.cgi?id=202012
        <rdar://problem/55285295>

        Reviewed by Geoff Garen and Brent Fulgham.

        r248832 inadvertently reverted the fix for Mail that landed in r247400 by not using
        the same logic to initialize the sandbox extension if the process had already
        finished launching or not. In particular, the new code path that happens on process
        launch unconditionally used '/' as resource directory for the sandbox extension if
        the client did not provide one. The logic in maybeInitializeSandboxExtensionHandle()
        would use the file URL's base URL as resource directory when creating a sandbox
        extension for '/' would fail (which it often does).

        To address the issue, have the logic that runs on process launch call
        maybeInitializeSandboxExtensionHandle() so avoid duplicating code and make sure
        both cases now have the Mail fix.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::isLaunching const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        macCatalyst apps crash under TextCheckingControllerProxy::replaceRelativeToSelection when spell checking
        https://bugs.webkit.org/show_bug.cgi?id=202010
        <rdar://problem/54974971>

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        (WebKit::TextCheckingControllerProxy::replaceRelativeToSelection):
        relativeReplacementRange is in the coordinate space of the document's text,
        not the replacement string. We need to adjust into replacement string
        coordinates before slicing the replacement, or we'll throw an exception
        trying to read past the end of the string, in the case where the
        replacement string is shorter than the replaced string (by more than 2 characters).

2019-09-19  Yury Semikhatsky  <yurys@chromium.org>

        WebStorageNamespaceProvider / StorageNamespaceImpl no longer need SessionIDs
        https://bugs.webkit.org/show_bug.cgi?id=201922
        <rdar://problem/55505906>

        Reviewed by Chris Dumez.

        Fix GTK Debug compilation after https://trac.webkit.org/changeset/250083:
        ../../Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:75:55: error: no member named 'singleton' in namespace 'WebCore::Process'
        ASSERT_UNUSED(sessionID, sessionID == WebProcess::singleton().sessionID());
                                          ~~~~~~~~~~~~^

        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:

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

        WorkerGlobalScope does not need a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=201991

        Reviewed by Alex Christensen.

        WorkerGlobalScope does not need a SessionID, now that we have a single session
        per WebProcess.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::serviceWorkerConnection):
        (WebKit::WebServiceWorkerProvider::existingServiceWorkerConnection):
        (WebKit::WebServiceWorkerProvider::serviceWorkerConnectionForSession): Deleted.
        (WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession): Deleted.
        * WebProcess/Storage/WebServiceWorkerProvider.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateThrottleState):

2019-09-19  Brent Fulgham  <bfulgham@apple.com>

        Create InjectedBundle SPI to better support NSSecureCoding
        https://bugs.webkit.org/show_bug.cgi?id=201810
        <rdar://problem/55265713>

        The encoding/decoding routines used by WebKit’s InjectedBundles are based on NSCoding.
        While we have changed WebKit internals to use NSSecureCoding, there are a number of
        injected bundles that need to serialize custom classes between the InjectedBundle and
        the relevant WebKit UIProcess.

        We need to lock down this communications channel by enforcing NSSecureCoding.

        This patch creates new SPI to allow the UIProcess to specify classes that it will accept
        in messages from the WebContet Process (and Injected Bundle).

        It adds the following property to the WKProcessPoolConfiguration:

            @property (nonatomic, copy) NSSet<Class> *customClassesForParameterCoder;

        If no custom classes are specified, the standard serialization primitives are supported:
            NSArray, NSData, NSDate, NSDictionary, NSNull, NSNumber, NSSet, NSString,
            NSTimeZone, NSURL, and NSUUID.

        Reviewed by Brady Eidson.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy): Copy any custom classes.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyCustomClassesForParameterCoder): Added.
        (WKContextConfigurationSetCustomClassesForParameterCoder): Added.
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/WKProcessGroup.h:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (toStringVector): Added.
        (-[WKProcessGroup initWithInjectedBundleURL:andCustomClassesForParameterCoder:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setInputDelegate:]): Restrict serialization to allowed classes.
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration customClassesForParameterCoder]): Added.
        (-[_WKProcessPoolConfiguration setCustomClassesForParameterCoder:]): Added.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize): Register any custom classes
        provided in the configuraton.
        (WebKit::WebProcessPool::initializeClassesForParameterCoding): Added.
        (WebKit::WebProcessPool::allowedClassesForParameterCoding const): Added.
        * UIProcess/WebProcessPool.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::elementDidFocus): Restrict serialization to allowed
        classes only.

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

        AddPlugInAutoStartOriginHash / PlugInDidReceiveUserInteraction IPC should not need to pass a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=201962

        Reviewed by Geoffrey Garen.

        AddPlugInAutoStartOriginHash / PlugInDidReceiveUserInteraction IPC from the WebProcess to the UIProcess
        should not need to pass a SessionID, since the UIProcess already knows the SessionID of a given WebProcess.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::addPlugInAutoStartOriginHash): Deleted.
        (WebKit::WebProcessPool::plugInDidReceiveUserInteraction): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addPlugInAutoStartOriginHash):
        (WebKit::WebProcessProxy::plugInDidReceiveUserInteraction):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::plugInDidStartFromOrigin):
        (WebKit::WebProcess::plugInDidReceiveUserInteraction):

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

        WebStorageNamespaceProvider / StorageNamespaceImpl no longer need SessionIDs
        https://bugs.webkit.org/show_bug.cgi?id=201922

        Reviewed by Geoffrey Garen.

        WebStorageNamespaceProvider / StorageNamespaceImpl no longer need SessionIDs, now that
        we have a single session per WebProcess.

        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::connect):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebKit::StorageNamespaceImpl::sessionID const):
        (WebKit::StorageNamespaceImpl::copy):
        * WebProcess/WebStorage/StorageNamespaceImpl.h:
        (): Deleted.
        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):

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

        Decrease use of sessionID in WebLoaderStrategy
        https://bugs.webkit.org/show_bug.cgi?id=201961

        Reviewed by Geoffrey Garen.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::tryLoadingUsingURLSchemeHandler):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebLoaderStrategy.h:

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

        WebSocketStream does not need a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=201960

        Reviewed by Geoffrey Garen.

        WebSocketStream does not need a SessionID, now that we have a single session per WebProcess.

        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createSocketStreamHandle):
        * WebProcess/Network/WebSocketStream.cpp:
        (WebKit::WebSocketStream::create):
        (WebKit::WebSocketStream::WebSocketStream):
        * WebProcess/Network/WebSocketStream.h:

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

        LibWebRTCProvider does not need sessionIDs anymore
        https://bugs.webkit.org/show_bug.cgi?id=201959

        Reviewed by Geoffrey Garen.

        LibWebRTCProvider does not need sessionIDs anymore, now that we have a single session per WebProcess.

        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::registerMDNSName):
        (WebKit::LibWebRTCProvider::createSocketFactory):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:

2019-09-18  Yury Semikhatsky  <yurys@chromium.org>

        [GTK] Compilation errors when GL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=200223

        Fix following compilation error when building with ENABLE_OPENGL=OFF
        ../../Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp:123:51: error: use of undeclared identifier 'WaylandCompositor'
        parameters.waylandCompositorDisplayName = WaylandCompositor::singleton().displayName();
                                                  ^
        Reviewed by Philippe Normand.

        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): only make a call when using EGL, this matches
        guards in WaylandCompositor.h. The condition was changed in r245807.

2019-09-18  Timothy Hatcher  <timothy@apple.com>

        Eagerly create and add the m_layerHostingView to WKWebView.
        https://bugs.webkit.org/show_bug.cgi?id=201942

        Reviewed by Tim Horton.

        Some apps will add subviews to WKWebView, and by the time we add our m_layerHostingView view we might be
        adding it behind a view that should have been added behind our layer hosting view subview. This affected
        the Spark email app, due to changes in order of loading delegate calls and when compositing is enabled.
        Instead of delayed creation of m_layerHostingView, always create it and add it to to the WKWebView.
        This ensures proper ordering of subviews when clients add a view behind all existing subviews.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl): Create and add m_layerHostingView here.
        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayer): Remove creation and removal of m_layerHostingView.
        Just set the sublayers of m_layerHostingView's layer here.

2019-09-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Can't drag undocked Inspector window by its title text
        https://bugs.webkit.org/show_bug.cgi?id=190886
        <rdar://problem/44574547>

        Reviewed by Tim Horton.

        * UIProcess/mac/WKInspectorWKWebView.mm:
        (-[WKInspectorWKWebView _opaqueRectForWindowMoveWhenInTitlebar]):
        Legendary.

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

        BlobRegistry no longer needs SessionIDs
        https://bugs.webkit.org/show_bug.cgi?id=201936

        Reviewed by Geoffrey Garen.

        BlobRegistry no longer needs SessionIDs, now that we have a single session per WebProcess.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked):
        (WebKit::BlobRegistryProxy::unregisterBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2019-09-18  Benjamin Nham  <nham@apple.com>

        NetworkLoadParameters shouldn't store sessionID
        https://bugs.webkit.org/show_bug.cgi?id=201921

        Reviewed by Chris Dumez.

        Now that there's a single session id per WebProcess, we don't need to
        store the session id in NetworkLoadParameters anymore. Clients can just
        directly ask NetworkConnectionToWebProcess for the WebProcess's session
        ID instead.

        * NetworkProcess/AdClickAttributionManager.cpp:
        (WebKit::AdClickAttributionManager::fireConversionRequest):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::startPreflight):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadMap.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::convertToDownload):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        (WebKit::PingLoad::loadRequest):
        (WebKit::PingLoad::didReceiveChallenge):
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::PreconnectTask):
        * NetworkProcess/PreconnectTask.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        (WebKit::WebLoaderStrategy::preconnectTo):

2019-09-18  Andy Estes  <aestes@apple.com>

        [Apple Pay] Tell websites why a session was cancelled
        https://bugs.webkit.org/show_bug.cgi?id=201912
        <rdar://problem/55469706>

        Reviewed by Brady Eidson.

        Remembered the error passed to -[WKPaymentAuthorizationDelegate _willFinishWithError:] and
        sent it to the WebContent process in Messages::WebPaymentCoordinator::DidCancelPaymentSession.

        * Platform/cocoa/PaymentAuthorizationPresenter.h:
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
        (-[WKPaymentAuthorizationDelegate _didFinish]):
        (-[WKPaymentAuthorizationDelegate _willFinishWithError:]):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::didCancelPaymentSession):
        (WebKit::WebPaymentCoordinatorProxy::presenterDidFinish):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        (WebKit::WebPaymentCoordinatorProxy::didCancelPaymentSession):
        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::PaymentSessionError>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentSessionError>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::networkProcessConnectionClosed):
        (WebKit::WebPaymentCoordinator::didCancelPaymentSession):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/ApplePay/WebPaymentCoordinator.messages.in:

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

        WebSWContextManagerConnection::installServiceWorker IPC no longer need a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=201882

        Reviewed by Geoffrey Garen.

        WebSWContextManagerConnection::installServiceWorker IPC no longer need a sessionID now that we have a single
        sessionID per WebProcess.

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::installServiceWorkerContext):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::ServiceWorkerFrameLoaderClient::ServiceWorkerFrameLoaderClient):
        (WebKit::ServiceWorkerFrameLoaderClient::sessionID const):
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):

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

        Stop passing sessionIDs to NetworkProcessConnection methods
        https://bugs.webkit.org/show_bug.cgi?id=201886

        Reviewed by Geoffrey Garen.

        Stop passing sessionIDs to NetworkProcessConnection methods. This is no longer
        necessary now that we have a single session per WebProcess.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles):
        (WebKit::NetworkProcessConnection::didCacheResource):
        (WebKit::NetworkProcessConnection::idbConnectionToServer):
        (WebKit::NetworkProcessConnection::idbConnectionToServerForSession): Deleted.
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

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

        CacheStorageProvider::createCacheStorageConnection() does not need to take in a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=201920

        Reviewed by Geoffrey Garen.

        CacheStorageProvider::createCacheStorageConnection() does not need to take in a SessionID.
        This sessionID is no longer used now that we have a session per WebProcess.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        (WebKit::WebCacheStorageConnection::sessionID const): Deleted.
        * WebProcess/Cache/WebCacheStorageConnection.h:
        * WebProcess/Cache/WebCacheStorageProvider.cpp:
        (WebKit::WebCacheStorageProvider::createCacheStorageConnection):
        * WebProcess/Cache/WebCacheStorageProvider.h:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::blobSize):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

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

        Drop FrameLoaderClient::sessionID()
        https://bugs.webkit.org/show_bug.cgi?id=201916

        Reviewed by Geoffrey Garen.

        Drop FrameLoaderClient::sessionID(). The Frame can get the sessionID from its page (Which is
        what the FrameLoaderClient::sessionID() ended up doing) and other call sites at WebKit2 layer
        can get the sessionID from the WebProcess singleton.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::ServiceWorkerFrameLoaderClient::ServiceWorkerFrameLoaderClient):
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

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

        WebServiceWorkerProvider::handleFetch() does not need to take in a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=201917

        Reviewed by Geoffrey Garen.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::handleFetch):
        * WebProcess/Storage/WebServiceWorkerProvider.h:

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

        WebSWServerToContextConnection::PostMessageToServiceWorkerClient IPC no longer needs to take a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=201883

        Reviewed by Geoffrey Garen.

        WebSWServerToContextConnection::PostMessageToServiceWorkerClient IPC no longer needs to take a sessionID,
        now that we have a single session per WebProcess.

        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::postMessageToServiceWorkerClient):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::postMessageToServiceWorkerClient):
        * WebProcess/Storage/WebSWContextManagerConnection.h:

2019-09-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] bubblewrap sandbox should be disabled when running inside docker
        https://bugs.webkit.org/show_bug.cgi?id=201914

        Reviewed by Michael Catanzaro.

        Detect if running inside Docker by checking the file /.dockerenv
        In that case, disable the sandbox.

        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::isInsideDocker):
        (WebKit::ProcessLauncher::launchProcess):

2019-09-17  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed WinCairo build fix following r249985.

        * Shared/WebProcessDataStoreParameters.h:

2019-09-17  Dean Jackson  <dino@apple.com>

        Remove the "Show Link Previews" and "Hide Link Previews" action menus in the preview platter
        https://bugs.webkit.org/show_bug.cgi?id=201864
        <rdar://55190038>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKActionSheetAssistant.mm: Remove the toggle action from the
        default values.
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):
        * UIProcess/ios/WKContentViewInteraction.mm: No longer try to add a toggle when
        it isn't there.
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (menuWithShowLinkPreviewAction): Deleted.

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

        Stop calling Page::setSessionID() from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=201888

        Reviewed by Alex Christensen.

        Stop calling Page::setSessionID() from WebKit2 since Page's sessionID can never change when
        using WebKit2 (We process-swap and create a new Page in a new process when changing data
        store). Instead, we now pass the sessionID ID when constructing the Page, as part of the
        PageConfiguration structure.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):
        (WebKit::WebPage::setSessionID): Deleted.
        * WebProcess/WebPage/WebPage.h:

2019-09-17  Mark Lam  <mark.lam@apple.com>

        Use constexpr instead of const in symbol definitions that are obviously constexpr.
        https://bugs.webkit.org/show_bug.cgi?id=201879

        Rubber-stamped by Joseph Pecoraro.

        * WebProcess/Plugins/Netscape/JSNPObject.h:

2019-09-17  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restabilization of non-unified build.

        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:

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

        WebProcess class methods should not need to take a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=201881

        Reviewed by Geoffrey Garen.

        WebProcess class methods should not need to take a sessionID given that we have a single
        session per WebProcess now.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebProcessDataStoreParameters.h:
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::addAutoStartOriginHash):
        (WebKit::PlugInAutoStartProvider::autoStartOriginHashesCopy const):
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTableWithItemsPassingTest):
        (WebKit::PlugInAutoStartProvider::didReceiveUserInteraction):
        * UIProcess/Plugins/PlugInAutoStartProvider.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToAllProcesses):
        (WebKit::WebProcessPool::sendToAllProcessesForSession):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginDidReceiveUserInteraction):
        * WebProcess/WebCoreSupport/WebPlugInClient.cpp:
        (WebKit::WebPlugInClient::didStartFromOrigin):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        (WebKit::WebProcess::removeWebPage):
        (WebKit::WebProcess::isPlugInAutoStartOriginHash):
        (WebKit::WebProcess::shouldPlugInAutoStartFromOrigin):
        (WebKit::WebProcess::plugInDidStartFromOrigin):
        (WebKit::WebProcess::didAddPlugInAutoStartOriginHash):
        (WebKit::WebProcess::resetPlugInAutoStartOriginHashes):
        (WebKit::WebProcess::plugInDidReceiveUserInteraction):
        (WebKit::WebProcess::fetchWebsiteData):
        (WebKit::WebProcess::deleteWebsiteData):
        (WebKit::WebProcess::deleteWebsiteDataForOrigins):
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

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

        WebMDNSRegister no longer needs to be provided sessionIDs
        https://bugs.webkit.org/show_bug.cgi?id=201876

        Reviewed by Geoffrey Garen.

        WebMDNSRegister no longer needs to be provided sessionIDs, now that we
        have one session per WebProcess.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        (WebKit::NetworkMDNSRegister::sessionID const):
        * NetworkProcess/webrtc/NetworkMDNSRegister.h:
        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::registerMDNSName):
        (WebKit::LibWebRTCProvider::createSocketFactory):
        * WebProcess/Network/webrtc/WebMDNSRegister.cpp:
        (WebKit::WebMDNSRegister::registerMDNSName):
        * WebProcess/Network/webrtc/WebMDNSRegister.h:

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

        WebSWServerConnection does not need to store a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=201878

        Reviewed by Geoffrey Garen.

        WebSWServerConnection does not need to store a sessionID, it can simply get it from its SWServer.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::WebSWServerConnection):
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::sessionID const):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:

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

        WebPaymentCoordinatorProxy does not need sessionIDs
        https://bugs.webkit.org/show_bug.cgi?id=201875

        Reviewed by Geoffrey Garen.

        WebPaymentCoordinatorProxy does not need sessionIDs so let's stop passing them around.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::canMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest):
        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebKit::WebPaymentCoordinator::showPaymentUI):

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

        There should be a single CacheStorageConnection per WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=201874

        Reviewed by Geoffrey Garen.

        There should be a single CacheStorageConnection per WebProcess now that we have a single session
        per WebProcess. This invariant allows us to simplify the code.

        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::~CacheStorageEngineConnection):
        (WebKit::CacheStorageEngineConnection::open):
        (WebKit::CacheStorageEngineConnection::remove):
        (WebKit::CacheStorageEngineConnection::caches):
        (WebKit::CacheStorageEngineConnection::retrieveRecords):
        (WebKit::CacheStorageEngineConnection::deleteMatchingRecords):
        (WebKit::CacheStorageEngineConnection::putRecords):
        (WebKit::CacheStorageEngineConnection::reference):
        (WebKit::CacheStorageEngineConnection::dereference):
        (WebKit::CacheStorageEngineConnection::clearMemoryRepresentation):
        (WebKit::CacheStorageEngineConnection::engineRepresentation):
        (WebKit::CacheStorageEngineConnection::sessionID const):
        * NetworkProcess/cache/CacheStorageEngineConnection.h:
        * NetworkProcess/cache/CacheStorageEngineConnection.messages.in:
        * WebProcess/Cache/WebCacheStorageConnection.cpp:
        (WebKit::WebCacheStorageConnection::WebCacheStorageConnection):
        (WebKit::WebCacheStorageConnection::open):
        (WebKit::WebCacheStorageConnection::remove):
        (WebKit::WebCacheStorageConnection::retrieveCaches):
        (WebKit::WebCacheStorageConnection::retrieveRecords):
        (WebKit::WebCacheStorageConnection::batchDeleteOperation):
        (WebKit::WebCacheStorageConnection::batchPutOperation):
        (WebKit::WebCacheStorageConnection::reference):
        (WebKit::WebCacheStorageConnection::dereference):
        (WebKit::WebCacheStorageConnection::clearMemoryRepresentation):
        (WebKit::WebCacheStorageConnection::engineRepresentation):
        (WebKit::WebCacheStorageConnection::updateQuotaBasedOnSpaceUsage):
        (WebKit::WebCacheStorageConnection::sessionID const):
        * WebProcess/Cache/WebCacheStorageConnection.h:
        * WebProcess/Cache/WebCacheStorageProvider.cpp:
        (WebKit::WebCacheStorageProvider::createCacheStorageConnection):
        * WebProcess/Cache/WebCacheStorageProvider.h:

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

        Unreviewed attempt to fix internal build after r249962.

        * UIProcess/API/C/WKPreferencesRef.h:

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

        REGRESSION (r249923): ASSERTION FAILED: sessionID == WebProcess::singleton().sessionID() in WebCore::SWClientConnection *WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession(PAL::SessionID)
        https://bugs.webkit.org/show_bug.cgi?id=201859
        <rdar://problem/55426742>

        Reviewed by Alex Christensen.

        Drop support for the WKPreferencesSetPrivateBrowsingEnabled() C API (Mark as deprecated and make it a no-op) as it
        was changing a WebContent process's sessionID, which is no longer supported. This was also using the legacy private
        browsing session, which we're trying to get rid of. There is suitable C API to do private browsing (WKWebsiteDataStoreRef).

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPrivateBrowsingEnabled):
        (WKPreferencesGetPrivateBrowsingEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageIsURLKnownHSTSHost):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::isURLKnownHSTSHost const):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::addPage):
        (WebKit::WebPreferences::removePage):
        (WebKit::WebPreferences::updateBoolValueForKey):
        * UIProcess/WebPreferences.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        REGRESSION (iOS 13): rAF stops firing when navigating away cross-origin and then back
        https://bugs.webkit.org/show_bug.cgi?id=201767
        <rdar://problem/55350854>

        Reviewed by Geoffrey Garen.

        When navigating back and restoring a SuspendedPage, WebPage::reinitializeWebPage() ends up
        reconstructing a new DrawingArea to match the identifier of the DrawingAreaProxy that the
        UIProcess created. The issue is that when reconstructing the DrawingArea, we were losing
        the DisplayRefreshMonitors that had been registered on the previous drawing area. To
        address the issue, we now make sure to transfer the DisplayRefreshMonitors over from the
        old to the new drawing area. This patch is kept as small as possible to faciliate cherry
        picking to a branch. However, I think we should consider refactoring the code so that
        we no longer need to re-create the DrawingArea in the WebProcess in this case.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::adoptDisplayRefreshMonitorsFromDrawingArea):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::adoptDisplayRefreshMonitorsFromDrawingArea):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):

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

        Unreviewed, rolling out r249950.

        Broke the iOS build.

        Reverted changeset:

        "Remove the "Show Link Previews" and "Hide Link Previews"
        action menus in the preview platter"
        https://bugs.webkit.org/show_bug.cgi?id=201864
        https://trac.webkit.org/changeset/249950

2019-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Initial view loading is slow
        https://bugs.webkit.org/show_bug.cgi?id=201451

        Reviewed by Sergio Villar Senin.

        The problem is that now we are always calling DrawingAreaProxy::waitForBackingStoreUpdateOnNextPaint() after a
        new process is launched and we used to do that only when launching a new process after a crash. This makes
        m_hasReceivedFirstUpdate useless, because it's always set to true right after a process is launched. Then, we
        wait up to half a second (which is usually the case for the initial load) until the first update. We only want
        to do that when recovering from a crash or when swapping processes to avoid flashing effect.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcess): Add ProcessLaunchReason parameter and pass it to
        finishAttachingToWebProcess instead of IsProcessSwap.
        (WebKit::WebPageProxy::swapToWebProcess): Pass ProcessLaunchReason::ProcessSwap to
        finishAttachingToWebProcess().
        (WebKit::WebPageProxy::finishAttachingToWebProcess): Do not call
        DrawingAreaProxy::waitForBackingStoreUpdateOnNextPaint() when process launch reason is ProcessLaunchReason::InitialProcess.
        (WebKit::WebPageProxy::launchProcessForReload): Pass ProcessLaunchReason::Reload to launchProcess().
        * UIProcess/WebPageProxy.h: Remove IsProcessSwap and add ProcessLaunchReason instead that is passed to
        launchProcess and finishAttachingToWebProcess.

2019-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r249275): [GTK][WPE] WebPage injected bundle messages no longer work
        https://bugs.webkit.org/show_bug.cgi?id=201865

        Reviewed by Žan Doberšek.

        We use them to implement the web resources API. This is another regression of r249275 because we are using the
        page proxy identifier when we really want to the web page identifier.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextGetWebViewForPage): Use WebPageProxy::webPageID() instead of WebPageProxy::identifier().

2019-09-17  Dean Jackson  <dino@apple.com>

        Remove the "Show Link Previews" and "Hide Link Previews" action menus in the preview platter
        https://bugs.webkit.org/show_bug.cgi?id=201864
        <rdar://55190038>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKActionSheetAssistant.mm: Remove the toggle action from the
        default values.
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):
        * UIProcess/ios/WKContentViewInteraction.mm: No longer try to add a toggle when
        it isn't there.
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (menuWithShowLinkPreviewAction): Deleted.

2019-09-17  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Use WebPreferences instead of RuntimeEnabledFeatures in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=198176
        <rdar://problem/55285709>

        Reviewed by Youenn Fablet.

        This patch does the following two things:
        1) It merges WebAuthenticationRequestData::creationOptions and requestOptions into a variant, and therefore
        merges code paths that involve WebAuthenticationRequestData.
        2) It teaches WebAuthenticationRequestData to store a WebPreferences such that AuthenticatorManager could utilize
        runtime feature flags to turn features on or off.

        * UIProcess/WebAuthentication/Authenticator.cpp:
        (WebKit::Authenticator::handleRequest):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::handleRequest):
        (WebKit::AuthenticatorManager::clearState):
        (WebKit::AuthenticatorManager::authenticatorAdded):
        (WebKit::AuthenticatorManager::startDiscovery):
        (WebKit::AuthenticatorManager::makeCredential): Deleted.
        (WebKit::AuthenticatorManager::getAssertion): Deleted.
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserConsented):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserConsented):
        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
        (WebKit::LocalService::isAvailable):
        Don't check RuntimeEnabledFeatures given it is for WebCore.
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        (): Deleted.
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        (WebKit::WebAuthenticatorCoordinatorProxy::handleRequest):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::continueMakeCredentialAfterResponseReceived const):
        (WebKit::CtapAuthenticator::getAssertion):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::makeCredential):
        (WebKit::U2fAuthenticator::checkExcludeList):
        (WebKit::U2fAuthenticator::issueRegisterCommand):
        (WebKit::U2fAuthenticator::getAssertion):
        (WebKit::U2fAuthenticator::issueSignCommand):
        (WebKit::U2fAuthenticator::continueRegisterCommandAfterResponseReceived):
        (WebKit::U2fAuthenticator::continueSignCommandAfterResponseReceived):

2019-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Keeps running obsolete WebProcess-es for too long
        https://bugs.webkit.org/show_bug.cgi?id=201492

        Reviewed by Chris Dumez.

        That's how the web process cache is expected to work, but it's true that it probably only makes sense to use it
        when cache model is primary web browser.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::updateCapacity): Disable the web process cache when cache model is not primary web browser.

2019-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash closing web view while hardware acceleration is enabled
        https://bugs.webkit.org/show_bug.cgi?id=200856

        Reviewed by Michael Catanzaro.

        The crash happens when destroying the WaylandCompositor::Surface because the web view GL context is used to
        release the texture, but the GL context is no longer valid after web view
        unrealize. AcceleratedBackingStoreWayland should handle the web view unrealize to destroy the GL context. It
        will be created on demand again after the web view is realized.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Notify AcceleratedBackingStore.
        (webkitWebViewBaseUnrealize): Ditto.
        * UIProcess/gtk/AcceleratedBackingStore.h:
        (WebKit::AcceleratedBackingStore::realize): Added.
        (WebKit::AcceleratedBackingStore::unrealize): Added.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::realize): In case of using WaylandCompositor, call
        WaylandCompositor::bindWebPage() to bind the WebPageProxy to the Wayland surface.
        (WebKit::AcceleratedBackingStoreWayland::unrealize): Destroy GL resources and the GL context.
        (WebKit::AcceleratedBackingStoreWayland::tryEnsureGLContext): Do not try to create the GL context if the web
        view is not realized.
        (WebKit::AcceleratedBackingStoreWayland::displayBuffer): Remove the code to initialize the texture.
        (WebKit::AcceleratedBackingStoreWayland::paint): And add it here.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.h:
        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::Surface::setWebPage): Return early if given page is the current one already.
        (WebKit::WaylandCompositor::bindWebPage): Set the surface WebPageProxy.
        (WebKit::WaylandCompositor::unbindWebPage): Unset the surface WebPageProxy.
        * UIProcess/gtk/WaylandCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode): When restoring a previous layer tree
        host, always call resumeRendering() to balance the suspendRendering() called in exitAcceleratedCompositingMode().

2019-09-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249910.

        Caused layout test failures and timeouts on Catalina

        Reverted changeset:

        "REGRESSION(249649): Unable to open local files in MiniBrowser
        on macOS"
        https://bugs.webkit.org/show_bug.cgi?id=201798
        https://trac.webkit.org/changeset/249910

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

        Drop sessionID / websiteDataStoreID from WebPageCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=201847

        Reviewed by Youenn Fablet.

        Drop sessionID / websiteDataStoreID from WebPageCreationParameters now that we have
        one session per WebProcess.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        (WebKit::WebPageCreationParameters::WebPageCreationParameters): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):

2019-09-16  Dean Jackson  <dino@apple.com>

        Provide a prototype for AR QuickLook to trigger processing in the originating page
        https://bugs.webkit.org/show_bug.cgi?id=201371

        Hopefully fix the public iOS 13 build.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:

2019-09-16  David Kilzer  <ddkilzer@apple.com>

        [WebAuthn] Name instance variables consistently in WKMockNFTag
        <https://webkit.org/b/201845>

        Reviewed by Jiewen Tan.

        * UIProcess/WebAuthentication/Mock/MockNfcService.mm:
        Make all @synthesize instance variables use a leading underscore
        for their name.

2019-09-16  Dean Jackson  <dino@apple.com>

        REGRESSION: iPad: Safari becomes unresponsive after context menu on 1-800-MY-APPLE phone number, tapping 'Add to Contacts'
        https://bugs.webkit.org/show_bug.cgi?id=201816
        <rdar://55105827>

        Reviewed by Darin Adler.

        When generating the DataDetectorsContext for a position, we should
        also provide the source rectangle for the link in root view coordinates.
        This allows DataDetectors to show any modal dialogs in the right
        position.

        * UIProcess/ios/WKContentViewInteraction.mm: Use either the bounds of the positionInformation
        or the text bounding rectangle.
        (-[WKContentView dataDetectionContextForPositionInformation:]):

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

        NetworkProcessConnection does not need HashMaps of sessionIDs for Service Workers and IDB
        https://bugs.webkit.org/show_bug.cgi?id=201830

        Reviewed by Geoffrey Garen.

        NetworkProcessConnection does not need HashMaps of sessionIDs for Service Workers and IDB, since
        we now have one sessionID per WebContent process.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::create):
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::idbConnectionToServerForSession):
        (WebKit::NetworkProcessConnection::serviceWorkerConnectionForSession):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::existingIDBConnectionToServer const):
        (WebKit::NetworkProcessConnection::existingServiceWorkerConnectionForSession):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::serviceWorkerConnectionForSession):
        (WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession):
        (WebKit::WebServiceWorkerProvider::handleFetch):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):

2019-09-16  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Correct lifespan of other SharedBitmaps
        https://bugs.webkit.org/show_bug.cgi?id=201800

        Reviewed by Dean Jackson.

        The pop-up menu code creates its own SharedBitmap in the WebContent process,
        which needs to release its handle before destruction, otherwise the UIProcess
        will be unable to access the GPU texture (since it will have been cleaned up).

        Since WebPopupMenuProxyWin has its own HWND and WinProc, it needs its own
        swapChain to handle syncing of content to the screen.

        This patch also audits other uses of SharedBitmap to make sure a similar
        problem doesn't exist elsewhere.

        * Shared/ShareableBitmap.h:
        * Shared/win/ShareableBitmapDirect2D.cpp:
        (WebKit::ShareableBitmap::paint):
        (WebKit::ShareableBitmap::createDirect2DSurface):
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::showPopupMenu): Add Direct2D code paths.
        (WebKit::WebPopupMenuProxyWin::paint): Update for Direct2D.
        (WebKit::WebPopupMenuProxyWin::setupSwapChain): Added.
        (WebKit::WebPopupMenuProxyWin::configureBackingStore): Added.
        * UIProcess/win/WebPopupMenuProxyWin.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setupSwapChain): Move some implementation code to the
        Direct2DUtilities file.
        * UIProcess/win/WebView.h:
        (WebKit::WebView::d3dDevice const):
        (WebKit::WebView::d3dImmediateContext const):
        (WebKit::WebView::d3dDevice): Deleted.
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::show):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::getImageForFindMatch): Prevent WebContent process from
        destroying SharedBitmap before the UIProcess can receive it.

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

        Simplify WebResourceLoadObserver now that we have one WebProcess per session
        https://bugs.webkit.org/show_bug.cgi?id=201821

        Reviewed by Brent Fulgham.

        Simplify WebResourceLoadObserver now that we have one WebProcess per session.
        No need to pass sessionIDs around or store statistics per sessionID.
        Also, only initialize the WebResourceLoadObserver if both ITP is enabled and
        we're not in a WebContent process used for an ephemeral session.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::resourceLoadStatisticsUpdated):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        (WebKit::WebResourceLoadObserver::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadObserver::ensureResourceStatisticsForRegistrableDomain):
        (WebKit::WebResourceLoadObserver::scheduleNotificationIfNeeded):
        (WebKit::WebResourceLoadObserver::statisticsForURL):
        (WebKit::WebResourceLoadObserver::takeStatistics):
        (WebKit::WebResourceLoadObserver::clearState):
        (WebKit::WebResourceLoadObserver::logFontLoad):
        (WebKit::WebResourceLoadObserver::logCanvasRead):
        (WebKit::WebResourceLoadObserver::logCanvasWriteOrMeasure):
        (WebKit::WebResourceLoadObserver::logNavigatorAPIAccessed):
        (WebKit::WebResourceLoadObserver::logScreenAPIAccessed):
        (WebKit::WebResourceLoadObserver::logSubresourceLoading):
        (WebKit::WebResourceLoadObserver::logWebSocketLoading):
        (WebKit::WebResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):

2019-09-16  David Kilzer  <ddkilzer@apple.com>

        Fix build failure in MockNfcService.mm
        <https://webkit.org/b/201839>

        Reviewed by Brady Eidson.

        * UIProcess/WebAuthentication/Mock/MockNfcService.mm:
        Specify instance variable names for @synthesized variables that
        need to be manually released in -dealloc under MRR.

2019-09-16  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION(249649): Unable to open local files in MiniBrowser on macOS
        https://bugs.webkit.org/show_bug.cgi?id=201798

        Reviewed by Brent Fulgham.

        The commit <https://trac.webkit.org/changeset/249649> introduced a MiniBrowser regression on macOS where
        MiniBrowser is not able to open local files. The change set r249649 fixed a problem where the WebContent
        process PID was not ready to be used when creating a sandbox extension. This happened in the cases where
        the WebContent process had not finished launching when the load started. The WebContent process is also
        creating sandbox extensions for the Networking process for the files being loaded, and also needs to be
        passing the PID of the Networking process when creating these. This patch is addressing this by getting
        the PID of the Networking process when the WebContent process is initially getting the connection to the
        Networking process. The PID is then stored in the NetworkProcessConnection class, from where it is passed
        to the NetworkLoadParameters, and used when creating the sandbox extension for the Networking process.

        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::openNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::networkProcessCrashed):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::create):
        (WebKit::NetworkProcessConnection::networkProcessPID const):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::getNetworkProcessConnection):
        (WebKit::WebProcess::ensureNetworkProcessConnection):

2019-09-16  David Kilzer  <ddkilzer@apple.com>

        [WebAuthn] REGRESSION (r249059): Leak of WKMockNFTag objects and WKMockNFTag instance variables
        <https://webkit.org/b/201813>

        Reviewed by Darin Adler.

        * UIProcess/WebAuthentication/Mock/MockNfcService.mm:
        (-[WKMockNFTag dealloc]): Add method and release instance
        variables to fix leaks.
        (WebKit::MockNfcService::detectTags const): Use adoptNS() to fix
        leaks of WKMockNFTag objects.

2019-09-16  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r243113): Leak of multiple instance variable blocks when deallocating _WKAttributedStringNavigationDelegate
        <https://webkit.org/b/201812>

        Reviewed by Timothy Hatcher.

        * UIProcess/API/Cocoa/NSAttributedString.mm:
        (-[_WKAttributedStringNavigationDelegate dealloc]): Add method
        to release instance variable blocks to fix potential leaks.

2019-09-16  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed build fix.

        * NetworkProcess/NetworkConnectionToWebProcess.h: Add missing forward
        declaration of the NetworkSession class.

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

        Store sessionID on the NetworkConnectionToWebProcess now that there is one session per WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=201789

        Reviewed by Alex Christensen.

        Store sessionID on the NetworkConnectionToWebProcess now that there is one session per WebProcess.
        As a result, we no longer need to pass the sessionID in each IPC from the WebProcess to the
        NetworkProcess.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::create):
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::createSocketStream):
        (WebKit::NetworkConnectionToWebProcess::createSocketChannel):
        (WebKit::NetworkConnectionToWebProcess::networkSession):
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        (WebKit::NetworkConnectionToWebProcess::storageSession):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL):
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForFrame):
        (WebKit::NetworkConnectionToWebProcess::clearPageSpecificDataForResourceLoadStatistics):
        (WebKit::NetworkConnectionToWebProcess::logUserInteraction):
        (WebKit::NetworkConnectionToWebProcess::hasStorageAccess):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccessUnderOpener):
        (WebKit::NetworkConnectionToWebProcess::startTrackingResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        (WebKit::NetworkConnectionToWebProcess::unregisterSWConnection):
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::sessionID const):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::openNetworkProcessConnection):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sessionID const):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked):
        (WebKit::BlobRegistryProxy::unregisterBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        (WebKit::BlobRegistryProxy::blobSize):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::connect):
        * WebProcess/Network/WebSocketStream.cpp:
        (WebKit::WebSocketStream::WebSocketStream):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::m_userAgent):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchWillChangeDocument):
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        (WebKit::WebResourceLoadObserver::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        * WebProcess/WebPage/WebCookieJar.cpp:
        (WebKit::WebCookieJar::cookies const):
        (WebKit::WebCookieJar::setCookies):
        (WebKit::WebCookieJar::cookiesEnabled const):
        (WebKit::WebCookieJar::cookieRequestHeaderFieldValue const):
        (WebKit::WebCookieJar::getRawCookies const):
        (WebKit::WebCookieJar::deleteCookie):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::hasStorageAccess):
        (WebKit::WebPage::requestStorageAccess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::removeWebPage):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::sessionID const):

2019-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r249142): [GTK] Epiphany delayed page loads continue indefinitely
        https://bugs.webkit.org/show_bug.cgi?id=201544

        Reviewed by Michael Catanzaro.

        WebPageProxy::loadAlternateHTML() is an exception, because it's an API request but always sets the navigationID
        to 0. We always want to reset the pending API request URL when alternate HTML load starts.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): Check also that it's an API alternate HTML load
        to reset the pending API request URL.

2019-09-15  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r248592): Leak of CFDictionaryRef in WebKit::NetworkRTCProvider::proxyInfoFromSession()
        <https://webkit.org/b/201811>

        Reviewed by Youenn Fablet.

        * NetworkProcess/webrtc/NetworkRTCProvider.mm:
        (WebKit::NetworkRTCProvider::proxyInfoFromSession): Use
        RetainPtr<> to fix the leak.

2019-09-14  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Check for a Snap sandbox a bit harder
        https://bugs.webkit.org/show_bug.cgi?id=201793

        Reviewed by Michael Catanzaro.

        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::isInsideSnap): Check whether the SNAP_NAME and SNAP_REVISION
        environment variables are defined as well.

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

        Add release logging in WebLoaderStrategy to check that a load is going through service worker
        https://bugs.webkit.org/show_bug.cgi?id=201761

        Reviewed by Chris Dumez.

        This allows identifying whether a load remains pending on the service worker fetch path.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):

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

        [MacOS/iOS] imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-abort.https.html is sometimes crashing in Debug
        https://bugs.webkit.org/show_bug.cgi?id=201686

        Reviewed by Alexey Proskuryakov.

        A load might be cancelled shortly after being started in network process.
        In that case, NetworkDataTaskCocoa might be destroyed, thus removed from the ID to task map
        but some handlers might still be called until the NSURLSessionTask is finished cancelling.
        This happens for authentication challenges.
        In case where the NSURLSessionTask is cancelling, return early instead of processing the challenge.

        Covered by LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-abort.https.html and LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-abort.https.html no longer crashing in debug.

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

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

        Provide a prototype for AR QuickLook to trigger processing in the originating page
        https://bugs.webkit.org/show_bug.cgi?id=201371
        <rdar://54904781>

        Reviewed by Simon Fraser.

        Provide a way for a Web page to know if an action in the AR scene
        was performed, if and only if the system AR library calls a delegate with
        particular parameters. Post a message to the originating frame so
        the page can detect the action.

        * Scripts/webkit/messages.py: Include the right header for SystemPreviewInfo.

        * Shared/WebCoreArgumentCoders.cpp: Use SystemPreviewInfo.
        (IPC::ArgumentCoder<ResourceRequest>::encode):
        (IPC::ArgumentCoder<ResourceRequest>::decode):

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _triggerSystemPreviewActionOnFrame:page:]): New helper/test function
        to trigger the system preview action.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/Cocoa/DownloadClient.mm: Use new type.
        (WebKit::DownloadClient::didStart):

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm: Implement the delegate so that
        we can detect an action. When it happens, tell the WebPageProxy to send a message.

        * UIProcess/Downloads/DownloadProxy.h: Use SystemPreviewInfo type.
        (WebKit::DownloadProxy::systemPreviewDownloadInfo const):
        (WebKit::DownloadProxy::systemPreviewDownloadRect const): Deleted.

        * UIProcess/SystemPreviewController.h:
        (WebKit::SystemPreviewController::previewInfo const):

        * UIProcess/WebPageProxy.cpp: Send it over to the Web Process.
        (WebKit::WebPageProxy::systemPreviewActionTriggered const):
        * UIProcess/WebPageProxy.h:

        * WebProcess/WebPage/WebPage.cpp: Check the destination still exists, and then talk
        to the Document.
        (WebKit::WebPage::systemPreviewActionTriggered):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Partition processes running service workers by session ID
        https://bugs.webkit.org/show_bug.cgi?id=201643

        Reviewed by Chris Dumez.

        Remove the management of server context connections from NetworkProcess.
        The WebProcessPool service worker process map is now keyed by both registrable domain and sessionID.
        Update WebProcessPool to only expose the number of service worker processes instead of the full map.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::swServerForSession):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::swServerForSessionIfExists):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        (WebKit::WebSWServerConnection::updateThrottleState):
        (WebKit::WebSWServerConnection::contextConnectionCreated):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::~WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::connectionIsNoLongerNeeded):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _webPageContentProcessCount]):
        (-[WKProcessPool _serviceWorkerProcessCount]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::m_userAgent):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):

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

        AuxiliaryProcessProxy::sendWithAsyncReply should queue up messages if sent while the process is starting like it does messages without replies
        https://bugs.webkit.org/show_bug.cgi?id=201746

        Reviewed by Youenn Fablet.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):
        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::sendWithAsyncReply):

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

        Use WebProcess processIdentifier to identify Service Worker connections
        https://bugs.webkit.org/show_bug.cgi?id=201459

        Reviewed by Chris Dumez.

        Make WebSWServerConnection be stored in NetworkConnectionToWebProcess.
        They are now keyed by session IDs hence why WebSWClientConnection is using the session ID as message connection ID.
        Creation no longer requires a sync IPC since the connection is uniquely identified by its session ID and its process ID.
        These IDs are stable over network process crash.
        Within NetworkProcess, a server connection is managed by a SWServer which is session ID specific.
        In that case, the process identifier uniquely identifies the connection.

        Move WebSWServerToContextConnection be owned by NetworkConnectionToWebProcess.
        Instead of creating it when webprocess is connecting to network process, use a dedicated IPC message.
        This is similar to WebSWServerConnection once WebProcess asks to create it.
        This will allow existing WebProcess, in cache or running pages, to run service workers as well.
        A context connection map is kept in Network Process to reuse context connections since these connections are not sessionID specific.

        Migrate from a single boolean to a HashSet to track whether some connections are in the process of being created.
        Previously if two requests to create connections were done shortly one after the other on different registrable
        domains, the second request would not be processed.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::forEachSWServer):
        (WebKit::NetworkProcess::needsServerToContextConnectionForRegistrableDomain const):
        (WebKit::NetworkProcess::createServerToContextConnection):
        (WebKit::NetworkProcess::postMessageToServiceWorkerClient):
        (WebKit::NetworkProcess::registerSWServerConnection):
        (WebKit::NetworkProcess::unregisterSWServerConnection):
        (WebKit::NetworkProcess::registerSWContextConnection):
        (WebKit::NetworkProcess::unregisterSWContextConnection):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::WebSWServerConnection):
        (WebKit::WebSWServerConnection::postMessageToServiceWorkerClient):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::~WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::postMessageToServiceWorkerClient):
        (WebKit::WebSWServerToContextConnection::connectionMayNoLongerBeNeeded):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::openNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::serviceWorkerConnectionForSession):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        (WebKit::WebSWClientConnection::~WebSWClientConnection):
        (WebKit::WebSWClientConnection::messageSenderConnection const):
        (WebKit::WebSWClientConnection::scheduleJobInServer):
        (WebKit::WebSWClientConnection::finishFetchingScriptInServer):
        (WebKit::WebSWClientConnection::addServiceWorkerRegistrationInServer):
        (WebKit::WebSWClientConnection::removeServiceWorkerRegistrationInServer):
        (WebKit::WebSWClientConnection::postMessageToServiceWorker):
        (WebKit::WebSWClientConnection::registerServiceWorkerClient):
        (WebKit::WebSWClientConnection::unregisterServiceWorkerClient):
        (WebKit::WebSWClientConnection::didResolveRegistrationPromise):
        (WebKit::WebSWClientConnection::matchRegistration):
        (WebKit::WebSWClientConnection::runOrDelayTaskForImport):
        (WebKit::WebSWClientConnection::whenRegistrationReady):
        (WebKit::WebSWClientConnection::getRegistrations):
        (WebKit::WebSWClientConnection::startFetch):
        (WebKit::WebSWClientConnection::cancelFetch):
        (WebKit::WebSWClientConnection::continueDidReceiveFetchResponse):
        (WebKit::WebSWClientConnection::connectionToServerLost):
        (WebKit::WebSWClientConnection::clear):
        (WebKit::WebSWClientConnection::syncTerminateWorker):
        (WebKit::WebSWClientConnection::updateThrottleState):
        (WebKit::WebSWClientConnection::storeRegistrationsOnDiskForTesting):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::m_userAgent):
        (WebKit::WebSWContextManagerConnection::postMessageToServiceWorkerClient):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-09-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249801.

        Caused two servier worker layout tests to become flaky.

        Reverted changeset:

        "Use WebProcess processIdentifier to identify Service Worker
        connections"
        https://bugs.webkit.org/show_bug.cgi?id=201459
        https://trac.webkit.org/changeset/249801

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

        Pass sessionID to WebProcess with other WebProcessDataStoreParameters
        https://bugs.webkit.org/show_bug.cgi?id=201730

        Reviewed by Alex Christensen.

        Pass sessionID to WebProcess with other WebProcessDataStoreParameters and store
        it on the WebProcess object. In follow-up patches, I will use this sessionID
        more and leverage the fact that we have one sessionID per Webprocess to simplify
        the WebKit2-layer code.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebProcessDataStoreParameters.h:
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::sendWebProcessDataStoreParameters): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setWebsiteDataStore):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::sessionID const):

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

        [WKTR] Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED()
        https://bugs.webkit.org/show_bug.cgi?id=201546

        Reviewed by Alex Christensen.

        Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED() from WebKitTestRunner as it does not do
        the right thing for WebKit2 and tests have been rewritten to not use it.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::ensureLegacyPrivateBrowsingSession): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetPrivateBrowsingEnabled): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureLegacyPrivateBrowsingSessionInNetworkProcess): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::setSessionIDForTesting):

2019-09-12  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] webkit_settings_set_user_agent() allows content forbidden in HTTP headers
        https://bugs.webkit.org/show_bug.cgi?id=201077

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_set_user_agent): Check the passed string using the new
        WebCore::isValidUserAgentHeaderValue() function, and return early without
        changing the setting if the string is not usable in the User-Agent HTTP
        header.

2019-09-12  Mark Lam  <mark.lam@apple.com>

        Harden JSC against the abuse of runtime options.
        https://bugs.webkit.org/show_bug.cgi?id=201597
        <rdar://problem/55167068>

        Reviewed by Filip Pizlo.

        Linux parts contributed by Carlos Garcia Campos <cgarcia@igalia.com>.

        1. Add plumbing to allow WK2 tests to configureJSCForTesting().
        2. Removed the call enable Options::useBigInt in WebInspectorUI.
           WebInspectorUI doesn't really need it for now.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/unix/AuxiliaryProcessMain.cpp:
        (WebKit::AuxiliaryProcessMainBase::parseCommandLine):
        * Shared/unix/AuxiliaryProcessMain.h:
        (WebKit::AuxiliaryProcessMain):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationSetShouldConfigureJSCForTesting):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration configureJSCForTesting]):
        (-[_WKProcessPoolConfiguration setConfigureJSCForTesting:]):
        * UIProcess/Launcher/ProcessLauncher.h:
        (WebKit::ProcessLauncher::Client::shouldConfigureJSCForTesting const):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shouldConfigureJSCForTesting const):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::WebInspectorUI):

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

        Fix accidental copies in NetworkLoadChecker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=199528

        Reviewed by Youenn Fablet.

        Coverity noticed that we are copying a ResourceRequest and a ContentExtensionResultOrError
        in NetworkLoadChecker::checkRequest by mistake, when the intent was to move them as rvalue
        references.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRequest):
        * NetworkProcess/NetworkLoadChecker.h:

2019-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crashes when intercept response continues with original content
        https://bugs.webkit.org/show_bug.cgi?id=201707
        <rdar://problem/55261857>

        Reviewed by David Kilzer.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveData):
        Copy the data for the callback since the deferral may run it much later.

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

        Use typed identifiers for IDB connection identifiers
        https://bugs.webkit.org/show_bug.cgi?id=201682

        Reviewed by Chris Dumez.

        Remove no longer needed conversion from process identifier to idb connection identifier.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::identifier const):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2019-09-12  Charlie Turner  <cturner@igalia.com>

        [GTK] Allow CacheStore::destroyEngine to destroy default engine for soup.
        https://bugs.webkit.org/show_bug.cgi?id=201690

        Reviewed by Carlos Garcia Campos.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::destroyEngine): As we do for
        NetworkProcess::destroySession, also allow destroying the engine
        for the default session for the same reason.

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

        Use WebProcess processIdentifier to identify Service Worker connections
        https://bugs.webkit.org/show_bug.cgi?id=201459

        Reviewed by Chris Dumez.

        Make WebSWServerConnection be stored in NetworkConnectionToWebProcess.
        They are now keyed by session IDs hence why WebSWClientConnection is using the session ID as message connection ID.
        Creation no longer requires a sync IPC since the connection is uniquely identified by its session ID and its process ID.
        These IDs are stable over network process crash.
        Within NetworkProcess, a server connection is managed by a SWServer which is session ID specific.
        In that case, the process identifier uniquely identifies the connection.

        Move WebSWServerToContextConnection be owned by NetworkConnectionToWebProcess.
        Instead of creating it when webprocess is connecting to network process, use a dedicated IPC message.
        This is similar to WebSWServerConnection once WebProcess asks to create it.
        This will allow existing WebProcess, in cache or running pages, to run service workers as well.
        A context connection map is kept in Network Process to reuse context connections since these connections are not sessionID specific.

        Migrate from a single boolean to a HashSet to track whether some connections are in the process of being created.
        Previously if two requests to create connections were done shortly one after the other on different registrable
        domains, the second request would not be processed.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::forEachSWServer):
        (WebKit::NetworkProcess::needsServerToContextConnectionForRegistrableDomain const):
        (WebKit::NetworkProcess::createServerToContextConnection):
        (WebKit::NetworkProcess::postMessageToServiceWorkerClient):
        (WebKit::NetworkProcess::registerSWServerConnection):
        (WebKit::NetworkProcess::unregisterSWServerConnection):
        (WebKit::NetworkProcess::registerSWContextConnection):
        (WebKit::NetworkProcess::unregisterSWContextConnection):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::WebSWServerConnection):
        (WebKit::WebSWServerConnection::postMessageToServiceWorkerClient):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::~WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::postMessageToServiceWorkerClient):
        (WebKit::WebSWServerToContextConnection::connectionMayNoLongerBeNeeded):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::openNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::serviceWorkerConnectionForSession):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        (WebKit::WebSWClientConnection::~WebSWClientConnection):
        (WebKit::WebSWClientConnection::messageSenderConnection const):
        (WebKit::WebSWClientConnection::scheduleJobInServer):
        (WebKit::WebSWClientConnection::finishFetchingScriptInServer):
        (WebKit::WebSWClientConnection::addServiceWorkerRegistrationInServer):
        (WebKit::WebSWClientConnection::removeServiceWorkerRegistrationInServer):
        (WebKit::WebSWClientConnection::postMessageToServiceWorker):
        (WebKit::WebSWClientConnection::registerServiceWorkerClient):
        (WebKit::WebSWClientConnection::unregisterServiceWorkerClient):
        (WebKit::WebSWClientConnection::didResolveRegistrationPromise):
        (WebKit::WebSWClientConnection::matchRegistration):
        (WebKit::WebSWClientConnection::runOrDelayTaskForImport):
        (WebKit::WebSWClientConnection::whenRegistrationReady):
        (WebKit::WebSWClientConnection::getRegistrations):
        (WebKit::WebSWClientConnection::startFetch):
        (WebKit::WebSWClientConnection::cancelFetch):
        (WebKit::WebSWClientConnection::continueDidReceiveFetchResponse):
        (WebKit::WebSWClientConnection::connectionToServerLost):
        (WebKit::WebSWClientConnection::clear):
        (WebKit::WebSWClientConnection::syncTerminateWorker):
        (WebKit::WebSWClientConnection::updateThrottleState):
        (WebKit::WebSWClientConnection::storeRegistrationsOnDiskForTesting):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::m_userAgent):
        (WebKit::WebSWContextManagerConnection::postMessageToServiceWorkerClient):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-09-11  Keith Rollin  <krollin@apple.com>

        Log timeoutValue passed on to CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=201701
        <rdar://problem/55279683>

        Reviewed by Chris Dumez.

        We occasionally see cases where resource-loads into CFNetwork take a
        long time. Rather than timing out after the default of 60s, they stay
        pending for many minutes. To better understand why this is happening,
        log the timeoutValue we pass to CFNetwork when loading resources.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):

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

        Protect UserMediaRequest when stopping it
        https://bugs.webkit.org/show_bug.cgi?id=201687
        <rdar://problem/55241215>

        Reviewed by Eric Carlson.

        By removing the request from the map, we may destroy the request.
        To make sure it stays alive, take the request from the map.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::cancelUserMediaRequest):

2019-09-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249768.

        Caused 4 API tests to assert, perf test failures, and layout
        test crashes under ASan

        Reverted changeset:

        "Remove unnecessary abstractions around WebsiteDataStore"
        https://bugs.webkit.org/show_bug.cgi?id=201655
        https://trac.webkit.org/changeset/249768

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

        REGRESSION (iOS 13): Top fixed element on apple.com flickers in size while pinching in
        https://bugs.webkit.org/show_bug.cgi?id=201668
        rdar://problem/51934041

        Reviewed by Frédéric Wang.

        The UI process can have transient state that pushes scrolling-tree-managed layers into custom
        locations while pinch-zooming. We have to apply this state both when the visible rects
        in the UI process change (existing code in -[WKContentView didUpdateVisibleRect:...]) and when
        we get new layers from the web process (added in RemoteLayerTreeDrawingAreaProxy::commitLayerTree()
        in this patch).

        Move some code into WebPageProxy to create functions that we can call from both places.

        For manual testing, visit a page with fixed banners, pinch in slightly, then pinch out and,
        while keeping your fingers down, move the contents around.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:contentInsets:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::unconstrainedLayoutViewportRect const):
        (WebKit::WebPageProxy::adjustLayersForLayoutViewport):

2019-09-11  Antti Koivisto  <antti@apple.com>

        REGRESSION (245006): can't scroll in "read more" view in Eventbrite app
        https://bugs.webkit.org/show_bug.cgi?id=201683
        <rdar://problem/54582602>

        Reviewed by Simon Fraser.

        Content <body> has 'overflow:hidden'.

        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::hasScrollableMainFrame const):

        Fix by adding an app specific LinkedOnOrAfter quirk that always allows main frame scrolling.

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

        Remove unnecessary abstractions around WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=201655

        Reviewed by Chris Dumez.

        This patch does four things to simplify WebsiteDataStore code:
        1. It removes API::WebsiteDataStore, which was just an unnecessary wrapper around WebKit::WebsiteDataStore.
        2. It deprecates the unused aliases of WebsiteDataStore, WKApplicationCacheManagerRef and WKKeyValueStorageManagerRef
        3. It removes the unused APIProcessPoolConfiguration properties that have been moved to WebsiteDataStore.
        4. It makes WKWebsiteDataStore._delegate weak instead of strong, as already annotated in WKWebsiteDataStorePrivate.h
        There should be no change in behavior from this patch.

        * PlatformFTW.cmake:
        * PlatformWin.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/APIHTTPCookieStore.cpp:
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::websiteDataStore):
        (API::PageConfiguration::setWebsiteDataStore):
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        (API::ProcessPoolConfiguration::copy):
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APIWebsiteDataStore.cpp: Removed.
        * UIProcess/API/APIWebsiteDataStore.h: Removed.
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetTypeID):
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        (WKApplicationCacheManagerDeleteAllEntries):
        * UIProcess/API/C/WKApplicationCacheManager.h:
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (useWithPolicies):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetTypeID):
        (WKKeyValueStorageManagerGetOriginKey):
        (WKKeyValueStorageManagerGetCreationTimeKey):
        (WKKeyValueStorageManagerGetModificationTimeKey):
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        (WKKeyValueStorageManagerDeleteEntriesForOrigin):
        (WKKeyValueStorageManagerDeleteAllEntries):
        * UIProcess/API/C/WKKeyValueStorageManager.h:
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetTypeID):
        (WKResourceCacheManagerGetCacheOrigins):
        (WKResourceCacheManagerClearCacheForOrigin):
        (WKResourceCacheManagerClearCacheForAllOrigins):
        (toWebsiteDataTypes): Deleted.
        * UIProcess/API/C/WKResourceCacheManager.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreGetTypeID):
        (WKWebsiteDataStoreGetDefaultDataStore):
        (WKWebsiteDataStoreCreateNonPersistentDataStore):
        (WKWebsiteDataStoreCreateWithConfiguration):
        (WKWebsiteDataStoreGetHTTPCookieStore):
        (WKWebsiteDataStoreSetResourceLoadStatisticsDebugModeWithCompletionHandler):
        (WKWebsiteDataStoreSetResourceLoadStatisticsPrevalentResourceForDebugMode):
        (WKWebsiteDataStoreSetStatisticsLastSeen):
        (WKWebsiteDataStoreSetStatisticsPrevalentResource):
        (WKWebsiteDataStoreSetStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreDumpResourceLoadStatistics):
        (WKWebsiteDataStoreIsStatisticsPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubresourceUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubFrameUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsRedirectingTo):
        (WKWebsiteDataStoreSetStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreIsStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreSetStatisticsGrandfathered):
        (WKWebsiteDataStoreIsStatisticsGrandfathered):
        (WKWebsiteDataStoreSetStatisticsSubframeUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsCrossSiteLoadWithLinkDecoration):
        (WKWebsiteDataStoreSetStatisticsTimeToLiveUserInteraction):
        (WKWebsiteDataStoreStatisticsProcessStatisticsAndDataRecords):
        (WKWebsiteDataStoreStatisticsUpdateCookieBlocking):
        (WKWebsiteDataStoreStatisticsSubmitTelemetry):
        (WKWebsiteDataStoreSetStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WKWebsiteDataStoreSetStatisticsIsRunningTest):
        (WKWebsiteDataStoreSetStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WKWebsiteDataStoreSetStatisticsNotifyPagesWhenTelemetryWasCaptured):
        (WKWebsiteDataStoreSetStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WKWebsiteDataStoreSetStatisticsGrandfatheringTime):
        (WKWebsiteDataStoreSetStatisticsMaxStatisticsEntries):
        (WKWebsiteDataStoreSetStatisticsPruneEntriesDownTo):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WKWebsiteDataStoreStatisticsClearThroughWebsiteDataRemoval):
        (WKWebsiteDataStoreStatisticsDeleteCookiesForTesting):
        (WKWebsiteDataStoreStatisticsHasLocalStorage):
        (WKWebsiteDataStoreSetStatisticsCacheMaxAgeCap):
        (WKWebsiteDataStoreStatisticsHasIsolatedSession):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        (WKWebsiteDataStoreRemoveAllFetchCaches):
        (WKWebsiteDataStoreRemoveFetchCacheForOrigin):
        (WKWebsiteDataStoreRemoveAllIndexedDatabases):
        (WKWebsiteDataStoreRemoveLocalStorage):
        (WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations):
        (WKWebsiteDataStoreGetFetchCacheOrigins):
        (WKWebsiteDataStoreGetFetchCacheSizeForOrigin):
        (WKWebsiteDataStoreCopyServiceWorkerRegistrationDirectory):
        (WKWebsiteDataStoreSetServiceWorkerRegistrationDirectory):
        (WKWebsiteDataStoreSetPerOriginStorageQuota):
        (WKWebsiteDataStoreClearAllDeviceOrientationPermissions):
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        (WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval):
        * UIProcess/API/C/WKWebsitePolicies.cpp:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm: Removed.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore defaultDataStore]):
        (+[WKWebsiteDataStore nonPersistentDataStore]):
        (-[WKWebsiteDataStore dealloc]):
        (-[WKWebsiteDataStore httpCookieStore]):
        (-[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        (+[WKWebsiteDataStore _defaultDataStoreExists]):
        (+[WKWebsiteDataStore _deleteDefaultDataStoreForTesting]):
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        (-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsEnabled]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsEnabled:]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsDebugMode]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsDebugMode:]):
        (-[WKWebsiteDataStore _perOriginStorageQuota]):
        (-[WKWebsiteDataStore _setPerOriginStorageQuota:]):
        (-[WKWebsiteDataStore _cacheStorageDirectory]):
        (-[WKWebsiteDataStore _setCacheStorageDirectory:]):
        (-[WKWebsiteDataStore _serviceWorkerRegistrationDirectory]):
        (-[WKWebsiteDataStore _setServiceWorkerRegistrationDirectory:]):
        (-[WKWebsiteDataStore _setBoundInterfaceIdentifier:]):
        (-[WKWebsiteDataStore _boundInterfaceIdentifier]):
        (-[WKWebsiteDataStore _setAllowsCellularAccess:]):
        (-[WKWebsiteDataStore _allowsCellularAccess]):
        (-[WKWebsiteDataStore _setProxyConfiguration:]):
        (-[WKWebsiteDataStore _sourceApplicationBundleIdentifier]):
        (-[WKWebsiteDataStore _setSourceApplicationBundleIdentifier:]):
        (-[WKWebsiteDataStore _sourceApplicationSecondaryIdentifier]):
        (-[WKWebsiteDataStore _setSourceApplicationSecondaryIdentifier:]):
        (-[WKWebsiteDataStore _setAllowsTLSFallback:]):
        (-[WKWebsiteDataStore _allowsTLSFallback]):
        (-[WKWebsiteDataStore _proxyConfiguration]):
        (-[WKWebsiteDataStore _indexedDBDatabaseDirectory]):
        (-[WKWebsiteDataStore _resourceLoadStatisticsSetShouldSubmitTelemetry:]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsTestingCallback:]):
        (-[WKWebsiteDataStore _getAllStorageAccessEntriesFor:completionHandler:]):
        (-[WKWebsiteDataStore _scheduleCookieBlockingUpdate:]):
        (-[WKWebsiteDataStore _setPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _getIsPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _clearPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _processStatisticsAndDataRecords:]):
        (-[WKWebsiteDataStore _hasRegisteredServiceWorker]):
        (-[WKWebsiteDataStore _delegate]):
        (-[WKWebsiteDataStore set_delegate:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStoreInternal.h:
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp: Removed.
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp:
        (API::WebsiteDataStore::defaultApplicationCacheDirectory): Deleted.
        (API::WebsiteDataStore::defaultCacheStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultNetworkCacheDirectory): Deleted.
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory): Deleted.
        (API::WebsiteDataStore::defaultLocalStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory): Deleted.
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation): Deleted.
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation): Deleted.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::addSingleCookie):
        (WebKit::WebAutomationSession::deleteAllCookies):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::websiteDataStoreFromSessionID):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_webProcessCache):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::resolvePathsForSandboxExtensions):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::sendWebProcessDataStoreParameters):
        (WebKit::WebProcessPool::processDidFinishLaunching):
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::defaultApplicationCacheDirectory):
        (WebKit::WebsiteDataStore::defaultCacheStorageDirectory):
        (WebKit::WebsiteDataStore::defaultNetworkCacheDirectory):
        (WebKit::WebsiteDataStore::defaultMediaCacheDirectory):
        (WebKit::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        (WebKit::WebsiteDataStore::defaultLocalStorageDirectory):
        (WebKit::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (WebKit::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):
        (WebKit::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        (WebKit::WebsiteDataStore::tempDirectoryFileSystemRepresentation):
        (WebKit::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (WebKit::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::globalDefaultDataStore):
        (WebKit::WebsiteDataStore::defaultDataStore):
        (WebKit::WebsiteDataStore::deleteDefaultDataStoreForTesting):
        (WebKit::WebsiteDataStore::defaultDataStoreExists):
        (WebKit::WebsiteDataStore::defaultDataStoreConfiguration):
        (WebKit::WebsiteDataStore::isAssociatedProcessPool const):
        (WebKit::WebsiteDataStore::processPools const):
        (WebKit::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        * UIProcess/WebsiteData/win/WebsiteDataStoreWin.cpp:
        (WebKit::WebsiteDataStore::defaultApplicationCacheDirectory):
        (WebKit::WebsiteDataStore::defaultCacheStorageDirectory):
        (WebKit::WebsiteDataStore::defaultNetworkCacheDirectory):
        (WebKit::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        (WebKit::WebsiteDataStore::defaultLocalStorageDirectory):
        (WebKit::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (WebKit::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):
        (WebKit::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (WebKit::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        * UIProcess/glib/WebsiteDataStoreGLib.cpp: Copied from Source/WebKit/UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp.
        (API::WebsiteDataStore::defaultApplicationCacheDirectory): Deleted.
        (API::WebsiteDataStore::defaultNetworkCacheDirectory): Deleted.
        (API::WebsiteDataStore::defaultCacheStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory): Deleted.
        (API::WebsiteDataStore::defaultLocalStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory): Deleted.
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::defaultHSTSDirectory): Deleted.
        (API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory): Deleted.
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation): Deleted.
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation): Deleted.
        * WebKit.xcodeproj/project.pbxproj:

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

        REGRESSION: Scrubbing on ted.com does not work well
        https://bugs.webkit.org/show_bug.cgi?id=201635
        <rdar://problem/51463649>

        Reviewed by Dean Jackson.

        This website uses custom media controls that simply don't work well on iOS when the User-Agent string is the desktop one, so we default to the mobile UA.

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

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

        REGRESSION (r233780): After swiping to navigate back, pinching to zoom in on webcontent snaps back to zoomed out when letting go
        https://bugs.webkit.org/show_bug.cgi?id=201671
        <rdar://problem/50488372>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        Reset m_lastTransactionIDWithScaleChange, since it is not guaranteed
        to only march forward. Otherwise, we can get stuck with a very large
        m_lastTransactionIDWithScaleChange, and will not allow stable-state
        user-driven zooms until the current transactionID exceeds it.

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

        Nullptr crash in Page::sessionID() via WebKit::WebFrameLoaderClient::detachedFromParent2()
        https://bugs.webkit.org/show_bug.cgi?id=201625

        Reviewed by Ryosuke Niwa.

        This is based on a patch from Ryosuke Niwa.

        The crash was caused by WebFrameLoaderClient::sessionID() calling WebPage::sessionID() without
        checking the nullity of WebPage::m_page which can be null. Added a null check.

        Because passing a wrong session to RemoveStorageAccessForFrame could result in a leak, this patch
        also replaces m_hasFrameSpecificStorageAccess boolean with an optioanl struct which stores
        session ID, frame ID, and page ID even after WebCore::Frame or WebCore::Page had been cleared
        or before WebFrameLoaderClient::m_frame is set.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::sessionID const):
        (WebKit::WebFrameLoaderClient::setHasFrameSpecificStorageAccess):
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchWillChangeDocument):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::frameLoaderClient const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestStorageAccess):

2019-09-10  Brady Eidson  <beidson@apple.com>

        Add SPI to save a PDF from the contents of a WKWebView.
        <rdar://problem/48955900> and https://bugs.webkit.org/show_bug.cgi?id=195765

        Reviewed by Tim Horton.

        This is refactoring a combination of "snapshotFirstPage" PDF printing code and the
        "takeSnapshot" API code to capture the on-screen visible page to a PDF at full fidelity.

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

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::drawToPDF):
        (WebKit::WebPageProxy::drawToPDFCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

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

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::drawToPDFCallback): Move to cross platform WebPageProxy.

        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::pdfSnapshotAtSize):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pdfSnapshotAtSize): Instead of assuming 1 page capped at 200 inches,
          paginate every 200 inches.
        (WebKit::WebPage::drawToPDF):
        (WebKit::paintSnapshotAtSize): Deleted.
        (WebKit::WebPage::pdfSnapshotAtSize): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Hangs on Swiss.com due to the web process being blocked on StorageAreaMap::LoadValuesIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=201644
        <rdar://problem/54942761>

        Reviewed by Geoffrey Garen.

        Mark the StorageManagerSet::GetValues sync IPC from the WebContent process to the Network
        process with a UnboundedSynchronousIPCScope so that it will process critical sync IPC
        from the UIProcess (such as WebPage::GetPositionInformation) while waiting for a reply.

        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::loadValuesIfNeeded):

2019-09-10  David Quesada  <david_quesada@apple.com>

        Remove a leftover reference to the StorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=192759

        Reviewed by Alex Christensen.

        * WebKit.xcodeproj/project.pbxproj:
            Remove com.apple.WebKit.Storage.sb as an input file to the "Copy iOS Sandbox Profiles
            for Manual Sandboxing" build phase. The file no longer exists.

2019-09-10  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fixes for non-unified builds after r249022
        https://bugs.webkit.org/show_bug.cgi?id=201610

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/NetworkCORSPreflightChecker.h: Add missing inclusion of the WebPageProxyIdentifier.h header.
        * NetworkProcess/NetworkLoadChecker.h: Add missing inclusion of the WebPageProxyIdentifier.h header.

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

        UserMediaProcessManager is revoking sandbox extensions too aggressively
        https://bugs.webkit.org/show_bug.cgi?id=201638

        Reviewed by Eric Carlson.

        Sandbox revocation was sometimes happening when a page is being closed while another page from the same process is starting capture.
        In that case, revocation might happen while it should not.
        To prevent this, we do not revoke sandbox extensions if there are pending captures for a page of the process.
        Whenever a page does not have any pending capture, sandbox extensions may be revoked.

        Covered by OnDeviceChangeCrash API test in debug mode.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        (WebKit::UserMediaPermissionRequestManagerProxy::hasPendingCapture const):
        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::revokeSandboxExtensionsIfNeeded):

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

        [iOS] We sometimes attempt to use a terminated prewarmed WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=201614
        <rdar://problem/54714507>

        Reviewed by Geoffrey Garen.

        On iOS, it is possible for our processes to get terminated (e.g. jetsammed) while the UIProcess
        is suspended. Upon resuming, it takes a little while for the UIProcess to get the notification
        that the mac connection to its child process has been severed and the UIProcess may try to use
        it for a load. This is especially problematic for prewarmed process because the client will end
        up showing a crash banner and reloading when we could have used a new process rather the prewarmed
        one if we had known it was dead.

        This patch makes 2 improvements:
        1. It makes AuxiliaryProcessProxy::state() return Terminated if we still have a connection but
           the PID is not the PID of a running process. I also added a check in tryTakePrewarmedProcess()
           to not use the prewarmed process if it state() is Terminated.
        2. When the UIProcess is about to get suspended, have the process pools terminate their non-critical
           processes (i.e. prewarmed + the ones used for PageCache). This makes WebKit friendlier with
           other apps on the system when suspended with regards to memory. Also, it makes it less likely
           useful WebContent processes will get jetsammed.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::state const):
        (WebKit::AuxiliaryProcessProxy::isRunningProcessPID):
        * UIProcess/AuxiliaryProcessProxy.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::applicationIsAboutToSuspend):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager init]):
        (-[WKProcessAssertionBackgroundTaskManager _releaseBackgroundTask]):

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

        REGRESSION: http/tests/resourceLoadStatistics/do-not-capture-statistics-for-simple-top-navigations.html is frequently timing out on iOS EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=201550

        Reviewed by Alex Christensen.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleResourceLoadStatisticsNotifyObserver):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:

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

        Disable TLS 1.0 and 1.1 in WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=201573

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _allowAnyTLSCertificateForWebSocketTesting]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

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

        Clarify some macCatalyst feature flags
        https://bugs.webkit.org/show_bug.cgi?id=201619
        <rdar://problem/54615618>

        Reviewed by Megan Gardner.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _showShareSheet:inRect:completionHandler:]):
        We prefer specific flags over platform checks.

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

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in http/tests/adClickAttribution/conversion-disabled-in-ephemeral-session.html
        https://bugs.webkit.org/show_bug.cgi?id=201596

        Reviewed by Alex Christensen.

        Allow WKFramePolicyListenerUseWithPolicies() C API to switch to a persistent non-default session.
        This is important since WebKitTestRunner is not using the default session anymore and I need to
        be able to switch it back to its normal session after going to an ephemeral one.

        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (useWithPolicies):

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

        Deprecate unused SPI to preconnect to a server
        https://bugs.webkit.org/show_bug.cgi?id=201558

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextPreconnectToServer):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _preconnectToServer:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::preconnectToServer): Deleted.
        * UIProcess/WebProcessPool.h:

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

        Unreviewed Windows build fix.

        * WebProcess/WebPage/WebPage.h:

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

        [macOS] Pid is sometimes invalid when creating sandbox extensions by pid.
        https://bugs.webkit.org/show_bug.cgi?id=201543
        <rdar://problem/54733465>

        Reviewed by Brent Fulgham.

        There is a race condition when starting a load of a local file, where the WebContent process has not finished
        launching yet, and its pid is not available. When we try to create a sandbox extension by using the pid of the
        WebContent process, it is not available in the cases where the WebContent process has just launched and has not
        finished launching yet. This patch creates a new dummy Web page message, 'LoadRequestWaitingForPID', which will
        be sent instead of a normal 'LoadRequest' message, and only when the WebContent process has not finished
        launching. When the WebContent process has finished launching, and we are about to actually send the pending
        messages, we can detect that a 'LoadRequestWaitingForPID' has been appended for sending, and replace it with a
        normal 'LoadReqest' message where we have created the sandbox extension issue with a valid pid. The message
        'LoadRequestWaitingForPID' is never intended to reach the WebContent process, it is just there to replace with
        a normal 'LoadRequest' message with a new sandbox extension. In the implementation of the message handler on
        the WebContent process side, we assert that the method is never called. This patch makes sure the ordering of
        the Web page messages are the same, even when we modify the message.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::fileLoadRequest):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Remove ServiceWorkerProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=201506

        Reviewed by Chris Dumez.

        Instead of using a specific ServiceWorkerProcessProxy, move the logic directly in WebProcessProxy.
        This will allow us in the future to run a service worker in a process that already runs a web page,
        thus saving the need to spin off a new process.

        This patch adds a new WebProcessProxy::createForServiceWorkers method instead of creating a
        ServiceWorkerProcessProxy. The behavior is then similar: a process running a service worker cannot run a page.

        * Sources.txt:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _hasRegisteredServiceWorker]):
        * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
        (WebKit::BackgroundProcessResponsivenessTimer::shouldBeActive const):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::openNetworkProcessConnection):
        * UIProcess/ServiceWorkerProcessProxy.cpp: Removed.
        * UIProcess/ServiceWorkerProcessProxy.h: Removed.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::updateServiceWorkerUserAgent):
        (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers):
        (WebKit::WebProcessPool::updateProcessAssertions):
        (WebKit::WebProcessPool::isServiceWorkerPageID const):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createForServiceWorkers):
        (WebKit::WebProcessProxy::getLaunchOptions):
        (WebKit::WebProcessProxy::didBecomeUnresponsive):
        (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const):
        (WebKit::WebProcessProxy::didSetAssertionState):
        (WebKit::WebProcessProxy::didExceedCPULimit):
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        (WebKit::WebProcessProxy::setServiceWorkerUserAgent):
        (WebKit::WebProcessProxy::updateServiceWorkerPreferencesStore):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::isRunningServiceWorkers const):
        (WebKit::WebProcessProxy::hasServiceWorkerPageProxy):
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebKit.xcodeproj/project.pbxproj:

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

        Use WebProcess processIdentifier to identify IDB connections between WebProcess and NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=201419

        Reviewed by Alex Christensen.

        We change from an identifier generated by NetworkProcess to WebProcess identifier.
        A WebProcess identifier is unique globally and is stable even in case of NetworkProcess crash.
        This removes the need for a sync IPC and makes things more easy to handle in case of NetworkProcess crash.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::create):
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::getAllDatabaseNames):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        (WebKit::WebIDBConnectionToServer::identifier const):
        (WebKit::WebIDBConnectionToServer::coreConnectionToServer):
        (WebKit::WebIDBConnectionToServer::getAllDatabaseNames):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::idbConnectionToServerForSession):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::existingIDBConnectionToServer const):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):

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

        Move checkProcessLocalPortForActivity from provider to registry
        https://bugs.webkit.org/show_bug.cgi?id=201400

        Reviewed by Alex Christensen.

        Implement registry callback at NetworkProcess level.
        Remove NetworkMessagePortChannelProvider since only a registry is now needed.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkMessagePortChannelProvider.cpp: Removed.
        * NetworkProcess/NetworkMessagePortChannelProvider.h: Removed.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::createMessagePortChannelRegistry):
        (WebKit::m_messagePortChannelRegistry):
        (WebKit::m_messagePortChannelProvider): Deleted.
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::messagePortChannelRegistry):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
        (WebKit::WebMessagePortChannelProvider::checkProcessLocalPortForActivity): Deleted.
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:

2019-09-08  David Quesada  <david_quesada@apple.com>

        Remove some unused constants in VersionChecks.h
        https://bugs.webkit.org/show_bug.cgi?id=201599

        Reviewed by Youenn Fablet.

        * UIProcess/Cocoa/VersionChecks.h:
            Remove two macros that are unused as of r244512.

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

        [macCatalyst] The last typed character in password fields shouldn't be echoed
        https://bugs.webkit.org/show_bug.cgi?id=201595
        <rdar://problem/55166367>

        Reviewed by Tim Horton.

        Disable password echoing on macCatalyst, to better match behavior on macOS.

        * Shared/WebPreferencesDefaultValues.h:

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

        Rewrite http/tests/workers/service/serviceworker-private-browsing.https.html as an API test
        https://bugs.webkit.org/show_bug.cgi?id=201574

        Reviewed by Alex Christensen.

        Update Service Workers so that they obey the "secureContextChecksEnabled" preference.
        This was needed to allow my service worker to access self.caches in my API test.

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

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

        Marking up a note on iOS results in a PDF with no contents
        https://bugs.webkit.org/show_bug.cgi?id=201530
        <rdar://problem/53686019>

        Unreviewed follow-up.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _waitForDrawToPDFCallback]):
        Remove an ASSERT_NOT_REACHED that fires if the synchronous wait for printing
        times out. This is a totally legitimite situation that can occur if the process
        crashes; there's no need for an assert there.

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

        Null check m_client in NetworkDataTask::didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=201587
        <rdar://problem/54743444>

        Reviewed by Chris Dumez.

        clearClient can be called at any time.  We null check it everyhere else we use it,
        and we are seeing crashes at this call site.  Let's not crash.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::didReceiveResponse):

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

        Remove WebsiteDataStore::legacyDefaultDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=200054

        Reviewed by Carlos Garcia Campos.

        Its last needed use was removed in rdar://problem/47030981
        This changes WKContextConfigurationCreateWithLegacyOptions to be equal to WKContextConfigurationCreate,
        but it has no remaining clients so it is only being retained for binary compabibility.
        This also changes WKContextCreateWithInjectedBundlePath and WKContextCreate to be equal to WKContextCreateWithConfiguration,
        and after rdar://problem/47030981 there are no meaningful clients of those functions, also.
        There is one existing client of WKContextCreateWithInjectedBundlePath in rdar://problem/50323967 but our current implementation
        is compatible enough for them because it uses their injected bundle still.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        (API::ProcessPoolConfiguration::createWithLegacyOptions): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::createLegacy): Deleted.
        (API::WebsiteDataStore::legacyDefaultDataStoreConfiguration): Deleted.
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreate):
        (WKContextCreateWithInjectedBundlePath):
        (WKContextGetWebsiteDataStore):
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCreate):
        (WKContextConfigurationCreateWithLegacyOptions):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/API/win/APIWebsiteDataStoreWin.cpp:
        (API::WebsiteDataStore::legacyDefaultApplicationCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultNetworkCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultWebSQLDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultIndexedDBDatabaseDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultLocalStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultMediaCacheDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultMediaKeysStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory): Deleted.
        (API::WebsiteDataStore::legacyDefaultJavaScriptConfigurationDirectory): Deleted.
        * UIProcess/WebInspectorUtilities.cpp:
        (WebKit::inspectorProcessPool):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_webProcessCache):
        (WebKit::legacyWebsiteDataStoreConfiguration): Deleted.
        * UIProcess/WebProcessPool.h:

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

        Fix Windows build
        https://bugs.webkit.org/show_bug.cgi?id=201517

        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:

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

        Remove calls to WKContextGetWebsiteDataStore missed in r249614
        https://bugs.webkit.org/show_bug.cgi?id=200050

        It turns out I didn't need to introduce another way of clearing all cookies between tests.
        I just needed to make the call to WKHTTPCookieStoreDeleteAllCookies use the right WebsiteDataStore.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearCachedCredentials):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::clearCredentials):
        (WebKit::NetworkSession::clearCookies): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::clearCookies): Deleted.

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

        Fix Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=200050

        * PlatformWin.cmake:

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

        Fix Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=201517

        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:

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

        Deprecate WKContextGetWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=200050

        Reviewed by Geoff Garen.

        The last use of it was removed in rdar://problem/47030981
        In order to remove its use in WebKitTestRunner, I needed to make WKWebsiteDataStoreConfigurationRef
        to replace the WKContextConfigurationRef members that should've been associated with the WebsiteDataStore the whole time.
        There is one use of WKContextGetWebsiteDataStore in TestWebKitAPI still I'll investigate later.

        * Shared/API/c/WKBase.h:
        * Sources.txt:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::create):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetApplicationCacheManager):
        (WKContextGetKeyValueStorageManager):
        (WKContextGetResourceCacheManager):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyDiskCacheDirectory):
        (WKContextConfigurationSetDiskCacheDirectory):
        (WKContextConfigurationCopyApplicationCacheDirectory):
        (WKContextConfigurationSetApplicationCacheDirectory):
        (WKContextConfigurationCopyIndexedDBDatabaseDirectory):
        (WKContextConfigurationSetIndexedDBDatabaseDirectory):
        (WKContextConfigurationCopyLocalStorageDirectory):
        (WKContextConfigurationSetLocalStorageDirectory):
        (WKContextConfigurationCopyWebSQLDatabaseDirectory):
        (WKContextConfigurationSetWebSQLDatabaseDirectory):
        (WKContextConfigurationCopyMediaKeysStorageDirectory):
        (WKContextConfigurationSetMediaKeysStorageDirectory):
        (WKContextConfigurationCopyResourceLoadStatisticsDirectory):
        (WKContextConfigurationSetResourceLoadStatisticsDirectory):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp: Added.
        (WKWebsiteDataStoreConfigurationGetTypeID):
        (WKWebsiteDataStoreConfigurationCreate):
        (WKWebsiteDataStoreConfigurationCopyApplicationCacheDirectory):
        (WKWebsiteDataStoreConfigurationSetApplicationCacheDirectory):
        (WKWebsiteDataStoreConfigurationCopyNetworkCacheDirectory):
        (WKWebsiteDataStoreConfigurationSetNetworkCacheDirectory):
        (WKWebsiteDataStoreConfigurationCopyIndexedDBDatabaseDirectory):
        (WKWebsiteDataStoreConfigurationSetIndexedDBDatabaseDirectory):
        (WKWebsiteDataStoreConfigurationCopyLocalStorageDirectory):
        (WKWebsiteDataStoreConfigurationSetLocalStorageDirectory):
        (WKWebsiteDataStoreConfigurationCopyWebSQLDatabaseDirectory):
        (WKWebsiteDataStoreConfigurationSetWebSQLDatabaseDirectory):
        (WKWebsiteDataStoreConfigurationCopyMediaKeysStorageDirectory):
        (WKWebsiteDataStoreConfigurationSetMediaKeysStorageDirectory):
        (WKWebsiteDataStoreConfigurationCopyResourceLoadStatisticsDirectory):
        (WKWebsiteDataStoreConfigurationSetResourceLoadStatisticsDirectory):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h: Added.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreCreateWithConfiguration):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-09-06  Mark Lam  <mark.lam@apple.com>

        Harden protection of the Gigacage Config parameters.
        https://bugs.webkit.org/show_bug.cgi?id=201570
        <rdar://problem/55134229>

        Reviewed by Saam Barati.

        Just renaming a function name here.

        * WebProcess/WebProcess.cpp:

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

        Incorrect selection rect revealed after pasting images in a contenteditable element
        https://bugs.webkit.org/show_bug.cgi?id=201549
        <rdar://problem/50956429>

        Reviewed by Simon Fraser.

        Tweak some existing logic to use the new visibleImageElementsInRangeWithNonLoadedImages helper function. See
        WebCore for more details.

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

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

        Move the ResourceLoadObserver logic to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=201517

        Reviewed by Brent Fulgham.

        Move the ResourceLoadObserver logic to WebKit2 since it is not used by WebKit1. This allows us to simplify
        code.

        In a follow-up patch, I will simplify the code even further by leveraging the fact that a WebContent process
        is always associated with a single WebsiteDataStore / sessionID:
        - No need for a HashMap of sessionIDs
        - No need to even allocate the ResourceLoadObserver if the WebProcess is associated with an ephemeral session.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::resourceLoadStatisticsUpdated):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp: Copied from Source/WebCore/loader/ResourceLoadObserver.cpp.
        (WebKit::is3xxRedirect):
        (WebKit::WebResourceLoadObserver::WebResourceLoadObserver):
        (WebKit::WebResourceLoadObserver::shouldLog const):
        (WebKit::WebResourceLoadObserver::requestStorageAccessUnderOpener):
        (WebKit::WebResourceLoadObserver::ensureResourceStatisticsForRegistrableDomain):
        (WebKit::WebResourceLoadObserver::scheduleNotificationIfNeeded):
        (WebKit::WebResourceLoadObserver::updateCentralStatisticsStore):
        (WebKit::WebResourceLoadObserver::statisticsForURL):
        (WebKit::WebResourceLoadObserver::takeStatistics):
        (WebKit::WebResourceLoadObserver::clearState):
        (WebKit::WebResourceLoadObserver::nonNullOwnerURL const):
        (WebKit::WebResourceLoadObserver::logFontLoad):
        (WebKit::WebResourceLoadObserver::logCanvasRead):
        (WebKit::WebResourceLoadObserver::logCanvasWriteOrMeasure):
        (WebKit::WebResourceLoadObserver::logNavigatorAPIAccessed):
        (WebKit::WebResourceLoadObserver::logScreenAPIAccessed):
        (WebKit::WebResourceLoadObserver::logSubresourceLoading):
        (WebKit::WebResourceLoadObserver::logWebSocketLoading):
        (WebKit::WebResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.h: Added.
        * WebProcess/WebProcess.cpp:

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

        [WebAuthn] Make WebAuthn default off and let clients turn it on at will
        https://bugs.webkit.org/show_bug.cgi?id=201439
        <rdar://problem/54998154>

        Reviewed by Youenn Fablet.

        This patch makes WebAuthn default off such that clients that have the right entitlements
        could turn it on and we don't risk at turning on a Web API that does nothing by default.

        This patch doesn't add any SPI to turn the feature on as it is currently doable via
        - [WKPreferencesPrivate _setEnabled:forExperimentalFeature:].

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultWebAuthenticationEnabled): Deleted.
        * Shared/WebPreferencesDefaultValues.h:

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

        Deprecate all WKCookieManagerRef functions
        https://bugs.webkit.org/show_bug.cgi?id=201473

        Reviewed by Chris Dumez.

        Their use was removed in rdar://problem/55039275
        Created replacement C API that more closely resembles the public ObjC API for WebKitTestRunner.

        * Shared/API/c/WKBase.h:
        * Sources.txt:
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::deleteAllCookies):
        (API::HTTPCookieStore::setHTTPCookieAcceptPolicy):
        (API::HTTPCookieStore::deleteCookiesInDefaultUIProcessCookieStore):
        (API::HTTPCookieStore::setHTTPCookieAcceptPolicyInDefaultUIProcessCookieStore):
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetStorageAccessAPIEnabled):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerGetTypeID):
        (WKCookieManagerSetClient):
        (WKCookieManagerGetHostnamesWithCookies):
        (WKCookieManagerDeleteCookiesForHostname):
        (WKCookieManagerDeleteAllCookies):
        (WKCookieManagerDeleteAllCookiesModifiedAfterDate):
        (WKCookieManagerSetHTTPCookieAcceptPolicy):
        (WKCookieManagerGetHTTPCookieAcceptPolicy):
        (WKCookieManagerSetStorageAccessAPIEnabled):
        (WKCookieManagerStartObservingCookieChanges):
        (WKCookieManagerStopObservingCookieChanges):
        * UIProcess/API/C/WKCookieManager.h:
        * UIProcess/API/C/WKHTTPCookieStoreRef.cpp: Added.
        (WKHTTPCookieStoreGetTypeID):
        (WKHTTPCookieStoreDeleteAllCookies):
        (WKHTTPCookieStoreSetHTTPCookieAcceptPolicy):
        * UIProcess/API/C/WKHTTPCookieStoreRef.h: Added.
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreGetHTTPCookieStore):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/APIHTTPCookieStoreCocoa.mm:
        (API::HTTPCookieStore::deleteCookiesInDefaultUIProcessCookieStore):
        (API::toNSHTTPCookieAcceptPolicy):
        (API::HTTPCookieStore::setHTTPCookieAcceptPolicyInDefaultUIProcessCookieStore):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setStorageAccessAPIEnabled): Deleted.
        * UIProcess/WebCookieManagerProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

2019-09-06  Darryl Pogue  <darryl@dpogue.ca>

        REGRESSION(iOS 12): Keyboard dismissal leaves WKWebView viewport-fit=cover content offscreen
        https://bugs.webkit.org/show_bug.cgi?id=192564

        Reviewed by Tim Horton.

        The new keyboard height was being read into a variable after the scrollview had already been
        adjusted. This worked when the keyboard was opening, because the scrollview is adjusted with
        the correct value a second time when the keyboard animation has finished. However, when the
        keyboard is closed, the adjustment was being made before the correct height was stored,
        leading to the scrollview being positioned as if the keyboard were still open.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _adjustForAutomaticKeyboardInfo:animated:lastAdjustment:]):

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

        Marking up a note on iOS results in a PDF with no contents
        https://bugs.webkit.org/show_bug.cgi?id=201530
        <rdar://problem/53686019>

        Reviewed by Andy Estes.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::connectionDidClose):
        * Platform/IPC/Connection.h:
        If the main thread is blocked when the Web Content process dies, and
        something eventually calls waitForAndDispatchImmediately without
        returning control to the main run loop, we will wait for the full timeout,
        because a) the code to mark the connection invalid is dispatched
        to the main thread, and b) the secondary thread that is informed of
        the Web Content process dying did not yet have a "waiting for" message
        to mark as interrupted (because it wasn't waiting yet).

        Fix this race by adding a bit that is set under the waitForMessage lock
        on the secondary thread when the connection is invalidated, identically
        to m_shouldWaitForSyncReplies, which solves the same problem for sync
        messages.

        Read the new bit when we are about to start waiting, and bail if it is set.
        It's OK to not read it inside the loop because we are guaranteed to have
        waitForMessage set at that point, so the normal interruption bit will work.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _processDidExit]):
        Reset _isPrintingToPDF; the Web Content process is never going to get
        back to us if it crashes.

        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        Do not bail from starting a printing operation if one is already occurring.
        This fixes the original bug, because Markup ends up invalidating the page
        count at least one extra time before asking for the printed document.
        Instead of maintaining the fragile requirement that you cannot recompute
        the page count while printing, just let it happen. In order to make this
        work safely, synchronously wait for the previous printed result before
        continuing with the next print.

        We could do more coalescing here if need be, but calls to -_recalcPageCount
        are not high in volume.

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

        Fix unused argument warning from GCC.

        * Platform/IPC/ArgumentCoders.h:
        (IPC::TupleDecoder<0>::decode):
        There was indeed an unused argument.

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

        When disabling legacy private browsing for testing, change the SessionID back to what it was, not the defaultSessionID
        https://bugs.webkit.org/show_bug.cgi?id=201480

        Reviewed by Youenn Fablet.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2019-09-06  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Do not enable the sandbox in Snap
        https://bugs.webkit.org/show_bug.cgi?id=201486

        Reviewed by Carlos Garcia Campos.

        Running inside of Snap adds its own complications and is simply
        not supported for now.

        Also update isInsideFlatpak() for consistency.

        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::isInsideFlatpak):
        (WebKit::isInsideSnap):
        (WebKit::ProcessLauncher::launchProcess):

2019-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crashes when intercept response is a 404
        https://bugs.webkit.org/show_bug.cgi?id=201514

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):
        Ensure the WebResourceLoader stays around during intercepts.

        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        Only perform the work if the m_coreLoader is still alive.

2019-09-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Add support for MouseEvent.buttons
        https://bugs.webkit.org/show_bug.cgi?id=201445

        Reviewed by Brent Fulgham.

        * Shared/win/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent):
        Set m_buttons.

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

        REGRESSION: http/tests/adClickAttribution/second-attribution-converted-with-higher-priority.html and http/tests/adClickAttribution/second-attribution-converted-with-lower-priority.html are flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=201440
        <rdar://problem/54998427>

        Reviewed by Alex Christensen.

        Add private WKBundlePage API to query if the WebPage is currently suspended or not.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageIsSuspended):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

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

        Remove StorageArea pointers in StorageManagerSet when removing StorageManagers that own them
        https://bugs.webkit.org/show_bug.cgi?id=201324

        Reviewed by Alex Christensen.

        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::storageAreaIdentifiers const):
        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
        * NetworkProcess/WebStorage/SessionStorageNamespace.cpp:
        (WebKit::SessionStorageNamespace::storageAreaIdentifiers const):
        * NetworkProcess/WebStorage/SessionStorageNamespace.h:
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::allStorageAreaIdentifiers const):
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::remove):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.cpp:
        (WebKit::TransientLocalStorageNamespace::storageAreaIdentifiers const):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.h:

2019-09-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r249275): [GTK][WPE] wrong page ID returned by webkit_web_view_get_page_id()
        https://bugs.webkit.org/show_bug.cgi?id=201504

        Reviewed by Michael Catanzaro.

        We want to return the page identifier not the web page proxy id.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_get_page_id):

2019-09-05  Pablo Saavedra  <psaavedra@igalia.com>

        Build failure after r249501 for ports with SERVICE_WORKER set OFF
        https://bugs.webkit.org/show_bug.cgi?id=201503

        Reviewed by Youenn Fablet.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):

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

        MobileSafari may crash when invoking the C++ lambda in -[WKContentView _shareForWebView:]
        https://bugs.webkit.org/show_bug.cgi?id=201479
        <rdar://problem/51511834>

        Reviewed by Tim Horton.

        Fix the crash by making -_shareForWebView: robust in the case where there are no selection rects
        known in the UI process when -[WKContentView _share:] is invoked.

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

2019-09-04  Ryosuke Niwa  <rniwa@webkit.org>

        Replace defaultCustomPasteboardDataEnabled by an equivalent macro
        https://bugs.webkit.org/show_bug.cgi?id=201477

        Reviewed by Wenson Hsieh.

        r227282 introduced defaultCustomPasteboardDataEnabled() to disable the custom pasteboard data on
        apps linked against old SDKs. However, this had a bug that the check inside WebContent process
        would always return true because WebContent process is always linked against the latest SDKs.
        Because WebPreferences values aren't propagated from UI process to WebContent process unless
        there is a value change, it meant that custom pasteboard data is always enabled.

        This patch replaces this function with a simple macro which always enables the custom pasteboard
        data on iOS family and macOS as it has always been the case before and after r227282.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCustomPasteboardDataEnabled): Deleted.
        * Shared/WebPreferencesDefaultValues.h:

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

        -[WKContentView selectedText] returns an empty string when selecting more than 200 characters
        https://bugs.webkit.org/show_bug.cgi?id=201471
        <rdar://problem/55039227>

        Reviewed by Tim Horton.

        The fix for <rdar://problem/54308019> is contingent on -[WKContentView selectedText] returning a non-empty
        result in the case where text is selected. However, in WebKit, if more than 200 characters are selected,
        -selectedText ends up returning nothing.

        This is due to logic added in trac.webkit.org/r167624 that was intended to return the selected text in
        PostLayoutData's wordAtSelection, up to a maximum of 200 characters, likely for performance and/or security
        reasons. However, instead of truncating at 200 characters, the change simply drops wordAtSelection altogether.
        This patch fixes this issue by taking the first 200 characters of the selected text.

        Test: EditorStateTests.SelectedText

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

2019-09-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Local Overrides - Provide substitution content for resource loads (URL based)
        https://bugs.webkit.org/show_bug.cgi?id=201262
        <rdar://problem/13108764>

        Reviewed by Devin Rousso.

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        New sources.

        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        On receiving a response, check with the inspector if an active
        frontend will override the response content.

        * WebProcess/Network/WebResourceInterceptController.h:
        * WebProcess/Network/WebResourceInterceptController.cpp:
        (WebKit::WebResourceInterceptController::isIntercepting const):
        (WebKit::WebResourceInterceptController::beginInterceptingResponse):
        (WebKit::WebResourceInterceptController::continueResponse):
        (WebKit::WebResourceInterceptController::interceptedResponse):
        (WebKit::WebResourceInterceptController::defer):
        Buffer networking callbacks for an ongoing intercept.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::havePerformedSecurityChecks const):
        Handle new response source.

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

        Unreviewed minor follow-up fix after r249501 to address crashes in debug.

        * NetworkProcess/cache/NetworkCache.h:
        (WTF::HashTraits<WebKit::NetworkCache::GlobalFrameID>::constructDeletedValue):
        (WTF::HashTraits<WebKit::NetworkCache::GlobalFrameID>::isDeletedValue):

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

        Expose WebPageProxy identifier to the Network Process
        https://bugs.webkit.org/show_bug.cgi?id=201467

        Reviewed by Geoffrey Garen.

        Expose WebPageProxy identifier to the Network Process (similarly to WebPage / WebFrame identifiers)
        so that it can use it whenever it IPCs the UIProcess. The IPCs from the network process were the
        last one requiring the UIProcess to lookup a WebPageProxy object from a WebPageIdentifier (rather
        than a WebPageProxyIdentifier).

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didCommitCrossSiteLoadWithDataTransfer):
        (WebKit::NetworkProcess::logDiagnosticMessage):
        (WebKit::NetworkProcess::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcess::logDiagnosticMessageWithValue):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        (WebKit::PingLoad::didReceiveChallenge):
        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::GlobalFrameID::hash const):
        (WebKit::NetworkCache::operator==):
        (WTF::GlobalFrameIDHash::hash):
        (WTF::GlobalFrameIDHash::equal):
        (WTF::HashTraits<WebKit::NetworkCache::GlobalFrameID>::emptyValue):
        (WTF::HashTraits<WebKit::NetworkCache::GlobalFrameID>::constructDeletedValue):
        (WTF::HashTraits<WebKit::NetworkCache::GlobalFrameID>::isDeletedValue):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::logSpeculativeLoadingDiagnosticMessage):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::shouldCoalesceChallenge const):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        (WebKit::NetworkProcessProxy::logDiagnosticMessage):
        (WebKit::NetworkProcessProxy::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcessProxy::logDiagnosticMessageWithValue):
        (WebKit::NetworkProcessProxy::requestStorageAccessConfirm):
        (WebKit::NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransfer):
        (WebKit::NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
        (WebKit::NetworkProcessProxy::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::start):
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::isServiceWorkerPageID const):
        (WebKit::WebProcessPool::didCommitCrossSiteLoadWithDataTransfer):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::ServiceWorkerFrameLoaderClient::ServiceWorkerFrameLoaderClient):
        (WebKit::ServiceWorkerFrameLoaderClient::createDocumentLoader):
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        (isType):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::webPageProxyID const):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestStorageAccess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

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

        macCatalyst: Re-enable iOS WKWebView printing API
        https://bugs.webkit.org/show_bug.cgi?id=201392
        <rdar://problem/54690252>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webViewPrintFormatter]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/_WKWebViewPrintFormatter.mm:
        * UIProcess/_WKWebViewPrintFormatterInternal.h:
        * UIProcess/ios/WKContentView.mm:
        _WKWwebViewPrintFormatter was disabled during bringup because requisite
        UIKit bits were missing, but they are not anymore (and have not been for
        quite some time), so remove these unnecessary platform ifdefs.

2019-09-04  Patrick Griffis  <pgriffis@igalia.com>

        [WPE][GTK] Fix sandbox parsing DISPLAY on X11
        https://bugs.webkit.org/show_bug.cgi?id=201462

        Reviewed by Michael Catanzaro.

        On some setups the DISPLAY env var was incorrectly parsed.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bindX11):

2019-09-04  Brian Burg  <bburg@apple.com>

        Selenium test 'interactions_tests.py::testContextClick' is hanging
        https://bugs.webkit.org/show_bug.cgi?id=201161
        <rdar://problem/54728541>

        Reviewed by Chris Dumez.

        A web page should not show native context menus if user interactions are being simulated for WebDriver.
        Showing a native context menu spawns a nested run loop. Since there's no way to interact
        with native UI via WebDriver, the test will hang until the context menu is manually dismissed.

        To fix this, pretend to show the context menu in UIProcess and dismiss it immediately.
        This is necessary to trigger oncontextmenu events appropriately and resume handling mouse events.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu): Hook into isControlledByAutomation here.
        We could short circuit this on the WebProcess side, but the check would be more crude
        and suppress context menus even if user interaction isn't being simulated. This would be
        problematic for a user who wants to interrupt their test session and interact with it.
        The main use case for this is right clicking on the test page and choose "Inspect".

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

        Abstract out WebSocketChannel message queue
        https://bugs.webkit.org/show_bug.cgi?id=201359

        Reviewed by Alex Christensen.

        Make use of newly added NetworkSendQueue.

        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::createMessageQueue):
        (WebKit::WebSocketChannel::WebSocketChannel):
        (WebKit::WebSocketChannel::send):
        (WebKit::WebSocketChannel::disconnect):
        * WebProcess/Network/WebSocketChannel.h:

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

        Move MessageRegistry to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=201299

        Reviewed by Alex Christensen.

        Move message registry to NetworkProcess.
        Take benefit of this move to use async reply IPC as much as possible.
        This also allows to remove the IPC message to UIProcess when doing postMessage with service workers.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::createNewMessagePortChannel):
        (WebKit::NetworkConnectionToWebProcess::entangleLocalPortInThisProcessToRemote):
        (WebKit::NetworkConnectionToWebProcess::messagePortDisentangled):
        (WebKit::NetworkConnectionToWebProcess::messagePortClosed):
        (WebKit::NetworkConnectionToWebProcess::nextMessageBatchIdentifier):
        (WebKit::NetworkConnectionToWebProcess::takeAllMessagesForPort):
        (WebKit::NetworkConnectionToWebProcess::didDeliverMessagePortMessages):
        (WebKit::NetworkConnectionToWebProcess::postMessageToRemote):
        (WebKit::NetworkConnectionToWebProcess::checkRemotePortForActivity):
        (WebKit::NetworkConnectionToWebProcess::checkProcessLocalPortForActivity):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkMessagePortChannelProvider.cpp: Added.
        (WebKit::NetworkMessagePortChannelProvider::NetworkMessagePortChannelProvider):
        (WebKit::NetworkMessagePortChannelProvider::createNewMessagePortChannel):
        (WebKit::NetworkMessagePortChannelProvider::entangleLocalPortInThisProcessToRemote):
        (WebKit::NetworkMessagePortChannelProvider::messagePortDisentangled):
        (WebKit::NetworkMessagePortChannelProvider::messagePortClosed):
        (WebKit::NetworkMessagePortChannelProvider::takeAllMessagesForPort):
        (WebKit::NetworkMessagePortChannelProvider::postMessageToRemote):
        (WebKit::NetworkMessagePortChannelProvider::checkRemotePortForActivity):
        (WebKit::NetworkMessagePortChannelProvider::checkProcessLocalPortForActivity):
        * NetworkProcess/NetworkMessagePortChannelProvider.h: Added.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::m_messagePortChannelProvider):
        (WebKit::NetworkProcess::webProcessConnection const):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::messagePortChannelRegistry):
        * Sources.txt:
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::shutDown):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::initializeSWClientConnection):
        (WebKit::NetworkProcessConnection::messagesAvailableForPort):
        (WebKit::NetworkProcessConnection::checkProcessLocalPortForActivity):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::postMessageToServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::postMessageToServiceWorkerClient):
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
        (WebKit::networkProcessConnection):
        (WebKit::WebMessagePortChannelProvider::createNewMessagePortChannel):
        (WebKit::WebMessagePortChannelProvider::entangleLocalPortInThisProcessToRemote):
        (WebKit::WebMessagePortChannelProvider::messagePortDisentangled):
        (WebKit::WebMessagePortChannelProvider::messagePortClosed):
        (WebKit::WebMessagePortChannelProvider::takeAllMessagesForPort):
        (WebKit::WebMessagePortChannelProvider::postMessageToRemote):
        (WebKit::WebMessagePortChannelProvider::checkRemotePortForActivity):
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2019-09-03  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Unable to open local file from favorites bar
        https://bugs.webkit.org/show_bug.cgi?id=201444

        Reviewed by Brent Fulgham.

        The sandbox extension handle should be created providing the pid of the receiving process.

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

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

        FrameLoader::FrameProgressTracker::progressCompleted() does not need a pageID
        https://bugs.webkit.org/show_bug.cgi?id=201431

        Reviewed by Antti Koivisto.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::pageLoadCompleted):
        * WebProcess/Network/WebLoaderStrategy.h:

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

        Null deref under -[WKWebView _addUpdateVisibleContentRectPreCommitHandler]'s handler block
        https://bugs.webkit.org/show_bug.cgi?id=201436
        <rdar://problem/40640475>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView dealloc]):
        (-[WKWebView _addUpdateVisibleContentRectPreCommitHandler]):
        We crash sending a message to a deallocated WKWebView inside the handler block
        passed to +[CATransaction addCommitHandler:]. This seems impossible, because
        we carefully retain it, but it's possible that it could be the result of
        the handler block being installed under -dealloc (in which case retaining
        the WKWebView wouldn't actually extend its lifetime). -[WKWebView dealloc]
        is fairly sizable, and it's hard to follow all paths from it, so instead
        add a RELEASE_LOG_FAULT, so we'll get simulated crash logs, and bail,
        so we'll stop actually crashing (if this is the cause).

        This is just a speculative fix, but a hopeful one, since intentionally calling
        -_addUpdateVisibleContentRectPreCommitHandler: from dealloc yields a similar-looking
        crash under the handler block.

2019-09-03  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Enable WebAuthn by default for MobileSafari and SafariViewService
        https://bugs.webkit.org/show_bug.cgi?id=201369
        <rdar://problem/54903724>

        Reviewed by Brent Fulgham.

        Communications to security keys require entitlements, which are not guaranteed to be present in third party
        WKWebView clients. Therefore, only enable WebAuthn by default for MobileSafari and SafariViewService.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultWebAuthenticationEnabled):
        * Shared/WebPreferencesDefaultValues.h:

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

        Rename WebPage::pageID() to WebPage::identifier()
        https://bugs.webkit.org/show_bug.cgi?id=201428

        Reviewed by Antti Koivisto.

        * Shared/API/Cocoa/WKBrowsingContextHandle.mm:
        (-[WKBrowsingContextHandle _initWithPage:]):
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::WebPaymentCoordinator):
        (WebKit::WebPaymentCoordinator::showPaymentUI):
        (WebKit::WebPaymentCoordinator::messageSenderDestinationID const):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::didDestroyNotification):
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        (WebKit::WebAuthenticatorCoordinator::WebAuthenticatorCoordinator):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowRect):
        (WebKit::WebChromeClient::focusedFrameChanged):
        (WebKit::WebChromeClient::createWindow):
        (WebKit::WebChromeClient::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        (WebKit::WebChromeClient::toolbarsVisible):
        (WebKit::WebChromeClient::statusbarVisible):
        (WebKit::WebChromeClient::menubarVisible):
        (WebKit::WebChromeClient::wrapCryptoKey const):
        (WebKit::WebChromeClient::unwrapCryptoKey const):
        (WebKit::WebChromeClient::signedPublicKeyAndChallengeString const):
        * WebProcess/WebCoreSupport/WebColorChooser.cpp:
        (WebKit::WebColorChooser::WebColorChooser):
        (WebKit::WebColorChooser::reattachColorChooser):
        (WebKit::WebColorChooser::setSelectedColor):
        (WebKit::WebColorChooser::endChooser):
        * WebProcess/WebCoreSupport/WebDataListSuggestionPicker.cpp:
        (WebKit::WebDataListSuggestionPicker::handleKeydownWithIdentifier):
        (WebKit::WebDataListSuggestionPicker::close):
        (WebKit::WebDataListSuggestionPicker::displayWithActivationType):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::pageID const):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::show):
        (WebKit::WebPopupMenu::hide):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::createPreviewLoaderClient):
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        (WebKit::TextCheckingControllerProxy::TextCheckingControllerProxy):
        (WebKit::TextCheckingControllerProxy::~TextCheckingControllerProxy):
        * WebProcess/WebPage/Cocoa/WebRemoteObjectRegistry.cpp:
        (WebKit::WebRemoteObjectRegistry::WebRemoteObjectRegistry):
        (WebKit::WebRemoteObjectRegistry::close):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::addScrollingTreeForPage):
        (WebKit::EventDispatcher::removeScrollingTreeForPage):
        (WebKit::EventDispatcher::clearQueuedTouchEventsForPage):
        (WebKit::EventDispatcher::getQueuedTouchEventsForPage):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::RemoteScrollingCoordinator):
        (WebKit::RemoteScrollingCoordinator::~RemoteScrollingCoordinator):
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::sendMessageToBackend):
        (WebKit::RemoteWebInspectorUI::changeSheetRect):
        (WebKit::RemoteWebInspectorUI::startWindowDrag):
        (WebKit::RemoteWebInspectorUI::bringToFront):
        (WebKit::RemoteWebInspectorUI::closeWindow):
        (WebKit::RemoteWebInspectorUI::reopen):
        (WebKit::RemoteWebInspectorUI::resetState):
        (WebKit::RemoteWebInspectorUI::openInNewTab):
        (WebKit::RemoteWebInspectorUI::save):
        (WebKit::RemoteWebInspectorUI::append):
        (WebKit::RemoteWebInspectorUI::showCertificate):
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::ViewGestureGeometryCollector):
        (WebKit::ViewGestureGeometryCollector::~ViewGestureGeometryCollector):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::backListCount const):
        (WebKit::WebBackForwardListProxy::forwardListCount const):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openLocalInspectorFrontend):
        (WebKit::WebInspector::closeFrontendConnection):
        (WebKit::WebInspector::bringToFront):
        (WebKit::WebInspector::elementSelectionChanged):
        (WebKit::WebInspector::timelineRecordingChanged):
        (WebKit::WebInspector::setMockCaptureDevicesEnabledOverride):
        (WebKit::WebInspector::updateDockingAvailability):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::m_textAutoSizingAdjustmentTimer):
        (WebKit::WebPage::messageSenderDestinationID const):
        (WebKit::WebPage::close):
        (WebKit::WebPage::goToBackForwardItem):
        (WebKit::WebPage::setFixedLayoutSize):
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):
        (WebKit::WebPage::restoreSessionInternal):
        (WebKit::WebPage::setCurrentHistoryItemForReattach):
        (WebKit::WebPage::updateIsInWindow):
        (WebKit::WebPage::setActivityState):
        (WebKit::WebPage::mainFrameDidLayout):
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::hasStorageAccess):
        (WebKit::WebPage::requestStorageAccess):
        (WebKit::WebPage::textInputContextsInRect):
        (WebKit::WebPage::elementForTextInputContext):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::identifier const):
        (WebKit::WebPage::pageID const): Deleted.
        * WebProcess/WebPage/WebPageInspectorTarget.cpp:
        (WebKit::WebPageInspectorTarget::identifier const):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase setWebPage:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::transformObjectsToHandles):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::copy):
        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionManager::PlaybackSessionManager):
        (WebKit::PlaybackSessionManager::~PlaybackSessionManager):
        (WebKit::PlaybackSessionManager::invalidate):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::VideoFullscreenManager):
        (WebKit::VideoFullscreenManager::~VideoFullscreenManager):
        (WebKit::VideoFullscreenManager::invalidate):

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

        [iOS] Treat a two-finger single tap as if the user tapped with the Cmd key pressed
        https://bugs.webkit.org/show_bug.cgi?id=201420
        <rdar://problem/53207786>

        Reviewed by Simon Fraser.

        Set the metaKey modifier to true when generating a click event based on a two-finger single tap. This is important so that sites like Google and DuckDuckGo
        correctly open links in their search results page in a new tab in Safari on iOS. This currently doesn't work because those sites will call preventDefault()
        if the metaKey flag isn't set on a "click" event, and if it is set, they let the browser handle the navigation themselves.

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

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

        [macOS] Correct sandbox violation in Flash plugin
        https://bugs.webkit.org/show_bug.cgi?id=201228
        <rdar://problem/54347503>

        Reviewed by Alex Christensen.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:

2019-09-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] Deprecate nonfunctional process limit APIs
        https://bugs.webkit.org/show_bug.cgi?id=193749

        Reviewed by Žan Doberšek.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_set_process_model):
        (webkit_web_context_get_process_model):
        (webkit_web_context_set_web_process_count_limit):
        (webkit_web_context_get_web_process_count_limit):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/wpe/WebKitWebContext.h:

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

        Make NetworkConnectionToWebProcess keyed by their WebProcess identifier
        https://bugs.webkit.org/show_bug.cgi?id=201300

        Reviewed by Alex Christensen.

        Make sure to create each NetworkConnectionToWebProcess for a given WebProcess.
        Pass the process identifier at creation time.
        This will allow to have the message registry be moved to NetworkProcess
        so as to check port activity between processes.
        This identifier might also be used in the future for other connections like
        service worker context/client/server identifiers.

        No observable change of behavior.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::create):
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::webProcessIdentifier const):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::NetworkProcess::resume):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithAsyncReply):
        Allow to pass send options.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        Make use of async reply to simplify the handling of lambdas.
        (WebKit::NetworkProcessProxy::openNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

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

        Introduce WorkerMessagePortChannelRegistry
        https://bugs.webkit.org/show_bug.cgi?id=201333

        Reviewed by Alex Christensen.

        By introducing WorkerMessagePortChannelRegistry, we are making
        sure UIMessagePortChannelProvider is only called from the main thread.
        This will help when moving the registry to network process.

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

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

        Abstract out LibWebRTCSocketClient so that rtc sockets can be implemented without libwebrtc sockets
        https://bugs.webkit.org/show_bug.cgi?id=201302

        Reviewed by Alex Christensen.

        Introduce NetworkRTCProvider::Socket to be able to implement RTC socket support with non libwebrtc API

        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createSocket):
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::proxyInfoFromSession):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        (WebKit::NetworkRTCProvider::wrapNewTCPConnection):
        (WebKit::NetworkRTCProvider::addSocket):
        (WebKit::NetworkRTCProvider::takeSocket):
        (WebKit::NetworkRTCProvider::newConnection):
        (WebKit::NetworkRTCProvider::closeListeningSockets):
        (WebKit::NetworkRTCProvider::callSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.mm:
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCSocket.cpp:
        (WebKit::NetworkRTCSocket::sendTo):
        (WebKit::NetworkRTCSocket::close):
        (WebKit::NetworkRTCSocket::setOption):

2019-09-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Cairo] out-of-bounds read in ShareableBitmap::paint if a fractional device scale factor is used
        https://bugs.webkit.org/show_bug.cgi?id=196340

        Reviewed by Brent Fulgham.

        In ShareableBitmap::paint, srcRectScaled can be out-of-bounds of
        the surface if a fractional device scale factor is used.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint): Use cairoSurfaceSetDeviceScale
        to set a device scale factor to the surface instead of multiplying
        srcRect with a device scale factor.

2019-09-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r249366.

        WinCairo WebKit2 crashes in some websites and the device scale
        factor is not correct in high DPI.

        Reverted changeset:

        "[WinCairo, FTW] Properly handle device scale factor"
        https://bugs.webkit.org/show_bug.cgi?id=201361
        https://trac.webkit.org/changeset/249366

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

        Long presses that interrupt accelerated scrolling dispatch clicks on apps linked against iOS 12 or earlier
        https://bugs.webkit.org/show_bug.cgi?id=201346
        <rdar://problem/54885784>

        Reviewed by Dean Jackson.

        For apps that are linked on or after iOS 13, we add a context menu interaction to the content view, which
        requires us to disable (or avoid adding) the highlight long press gesture recognizer. However, for apps that are
        linked on the iOS 12 SDK or prior, this gesture is still present, and fires when long pressing for (roughly) up
        to 0.75 seconds if a tap gesture was not recognized instead. Firing this gesture sends a click event to the
        page; this brings back some form of <rdar://problem/53889373>, but only when holding for slightly longer than a
        normal tap, and also only in apps linked on iOS 12 or earlier. To fix this, we apply a similar solution as in
        r248433 and detect whether a long press gesture interrupted scroll view deceleration in
        -gestureRecognizerShouldBegin:. If so, we return NO to avoid clicking. See per-method comments below for more
        details.

        Testing this bug as-is was tricky, since there's no way in layout tests to simulate being linked on or before a
        given SDK version. Luckily, recall that:
        1. This bug occurs when the highlight gesture recognizer is enabled and added to the content view.
        2. The highlight gesture recognizer only needs to be disabled or removed when context menu interaction is added.
        As such, we should be able to restore the highlight gesture recognizer by suppressing the context menu
        interaction in an app linked-on-or-after iOS 13, by setting allowsLinkPreview to NO. Unfortunately, this doesn't
        quite work, since we currently always avoid adding the highlight gesture recognizer if the app is linked on
        iOS 13 or later.

        However, this means that the highlight gesture recognizer is absent from the content view in apps linked against
        iOS 13 that disable link previews, even though its absence is not required. This means that long pressing a
        clickable element in a web view that disables link previews does not show a tap highlight on iOS 13, whereas it
        would on iOS 12; this is a regression, albeit a very subtle one. To fix this subtle issue and make it possible
        to write a test for this bug, we refactor some logic for creating and configuring the highlight long press
        gesture, such that we now unconditionally add the highlight gesture, but only enable it in apps linked on or
        after iOS 13 if link previews (i.e. context menu interaction) are not allowed.

        Test: fast/scrolling/ios/click-events-after-long-press-during-momentum-scroll-in-overflow.html

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setAllowsLinkPreview:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):

        Refactor our gesture setup logic to always create and add the long press and highlight long press gestures, but
        conditionally disable them based on whether or not (1) the context menu is available, and (2) WKWebView's
        allowsLinkPreview property.

        (-[WKContentView _didChangeLinkPreviewAvailability]):
        (-[WKContentView _updateLongPressAndHighlightLongPressGestures]):

        Add a new helper to update the enabled state of the long press and highlight long press gestures, by consulting
        -_shouldUseContextMenu and -allowsLinkPreview. This is called when setting up the gestures, as well as whenever
        -allowsLinkPreview changes.

        (-[WKContentView gestureRecognizerShouldBegin:]):

        Factor out logic to ascend the view hierarchy in search of a UIScrollView that was interrupted while
        decelerating into a local lambda function; use this for both the highlight gesture and the single tap gesture,
        to determine whether they should begin.

        * UIProcess/ios/WKHighlightLongPressGestureRecognizer.h: Added.
        * UIProcess/ios/WKHighlightLongPressGestureRecognizer.mm: Added.

        In order to remember the UIScrollView (if any) tracked by the highlight long press gesture, we subclass
        _UIWebHighlightLongPressGestureRecognizer. While UILongPressGestureRecognizer does have SPI to ask for a list of
        UITouches, by the time the gesture has been recognized and the gesture delegates are invoked, these UITouches
        no longer correspond to UIViews. As such, the only time we have access to the list of UITouches with their
        UIViews is during the touches* subclass hooks.

        (-[WKHighlightLongPressGestureRecognizer reset]):

        Clear out the tracked UIScrollView here, when the gesture is reset (i.e. after ending, or being canceled).

        (-[WKHighlightLongPressGestureRecognizer touchesBegan:withEvent:]):

        Remember the last touched UIScrollView here.

        (-[WKHighlightLongPressGestureRecognizer lastTouchedScrollView]):
        * WebKit.xcodeproj/project.pbxproj:

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

        [WinCairo, FTW] Properly handle device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=201361

        Reviewed by Don Olmstead.

        Update the WebView and WebProcess to correctly handle
        the device scale factor.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Tell the page the current device scale factor.
        * WebProcess/win/WebProcessMainWin.cpp:
        (WebKit::WebProcessMainWin): Tell the process to be aware of device scale.

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

        DocumentStorageAccess::hasStorageAccess() / requestStorageAccess() don't need to know about pageID / frameID
        https://bugs.webkit.org/show_bug.cgi?id=201364

        Reviewed by John Wilander.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::hasStorageAccess):
        (WebKit::WebChromeClient::requestStorageAccess):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hasStorageAccess):
        (WebKit::WebPage::requestStorageAccess):
        * WebProcess/WebPage/WebPage.h:

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

        WebPage::fromCorePage() to take and return a C++ reference
        https://bugs.webkit.org/show_bug.cgi?id=201367

        Reviewed by Antti Koivisto.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::addVisitedLink):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::page const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::fromCorePage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPageOverlay.cpp:
        (WebKit::WebPageOverlay::willMoveToPage):
        (WebKit::WebPageOverlay::didMoveToPage):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::copy):
        * WebProcess/WebStorage/StorageNamespaceImpl.h:
        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):

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

        [PSON] We no longer need to throw away suspended pages in a process before using it for a navigation
        https://bugs.webkit.org/show_bug.cgi?id=201344

        Reviewed by Antti Koivisto.

        We no longer need to throw away suspended pages in a process before using it for a navigation, now that
        Bug 201225 has been fixed. WebPage objects (suspended or live) in the process now have distinct
        identifiers and can coexist.

        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::RemoteObjectRegistry):
        * UIProcess/Cocoa/UIRemoteObjectRegistry.cpp:
        (WebKit::UIRemoteObjectRegistry::UIRemoteObjectRegistry):
        * WebProcess/WebPage/Cocoa/WebRemoteObjectRegistry.cpp:
        (WebKit::WebRemoteObjectRegistry::WebRemoteObjectRegistry):
        (WebKit::WebRemoteObjectRegistry::close):

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

        Assertion hit when saving to PDF from printing dialog
        https://bugs.webkit.org/show_bug.cgi?id=201351

        Reviewed by Tim Horton.

        [WKPrintingView knowsPageRange:] may get called from a background thread and ends up calling
        WeakPtr::get() which asserts because it is generally unsafe to get the raw pointer from a
        WeakPtr to an object owned by another thread. However, the methods here merely want to null
        check it so add a thread-safe method (pageIsClosed()) to WebFrameProxy for it.

        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::pageIsClosed const):
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView knowsPageRange:]):

2019-08-30  Alex Christensen  <achristensen@webkit.org>

        Remove HAVE_CFNETWORK_WITH_AUTO_ADDED_HTTP_HEADER_SUPPRESSION_SUPPORT conditional
        https://bugs.webkit.org/show_bug.cgi?id=201280

        Reviewed by Youenn Fablet.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

2019-08-30  Alex Christensen  <achristensen@webkit.org>

        Remove HAVE_CFNETWORK_WITH_IGNORE_HSTS conditional
        https://bugs.webkit.org/show_bug.cgi?id=201279

        Reviewed by Darin Adler.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (ignoreHSTS):
        (updateIgnoreStrictTransportSecuritySettingIfNecessary):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):

2019-08-30  Alex Christensen  <achristensen@webkit.org>

        Allow process cache to cache processes when using a non-default persistent WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=201329

        Reviewed by Chris Dumez.

        Treat all persistent sessions the same when deciding whether to clear all cached web processes using a particular website data store.
        This removes a huge performance regression on warm plt when switching to using a non-default persistent session.
        I also removed a call to removeSession which is redundant with the one in the WebsiteDataStore destructor, which is where it should be.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::canCacheProcess const):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore):

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

        Caret does not appear in text field inside a transformed, overflow: hidden container
        https://bugs.webkit.org/show_bug.cgi?id=201317
        <rdar://problem/54859264>

        Reviewed by Simon Fraser.

        Adjust isTransparentOrFullyClipped to use the new methods in RenderLayer and RenderObject. See WebCore ChangeLog
        for more details.

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

2019-08-30  Simon Fraser  <simon.fraser@apple.com>

        Add system tracing points for compositing updates, and touch-event dispatching
        https://bugs.webkit.org/show_bug.cgi?id=201327

        Reviewed by Alex Christensen.
        
        TraceScope in EventDispatcher::dispatchTouchEvents().

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::dispatchTouchEvents):

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

        [FTW] Use DirectX SharedResource as basis for SharedBitmap
        https://bugs.webkit.org/show_bug.cgi?id=201157

        Reviewed by Alex Christensen.

        Currently an ID2D1Bitmap is used as the backing store for the SharedBitmap that is the
        base type for sharing data between the WebContent Process and the UIProcess. However, this
        involves moving GPU memory to local memory, copying that memory into the SharedMemory member
        of the SharedBitmap, then building a new GPU bitmap on the UIProcess side from that SharedMemory.

        Profiling indicates that this is the single largest place FTW WebKit spends its time.

        Instead, we should use Direct2D's ability to render to an IDXGISurface, which can be shared
        between multiple processes. This should avoid the GPU->CPU copy, the Direct2D-allocated
        CPU->Shared Memory copy, and the shared memory to GPU copy.

        Reviewed by Alex Christensen.

        * Platform/SharedMemory.h:
        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::encodeHandle): Added.
        (WebKit::SharedMemory::Handle::encode const): Use new helper function.
        (WebKit::SharedMemory::Handle::decodeHandle): Added.
        (WebKit::SharedMemory::Handle::decode): Use new helper function.
        * PlatformFTW.cmake: Add D3X11 libraries.
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Configuration::encode const): Encode shared resource handle for DX texture.
        (WebKit::ShareableBitmap::Configuration::decode): Ditto (but decode).
        (WebKit::ShareableBitmap::ShareableBitmap): Create SharedResource (if needed).
        (WebKit::ShareableBitmap::~ShareableBitmap): Add cleanup code for SharedResoure.
        (WebKit::ShareableBitmap::numBytesForSize): Only allocate a small memory store when using GPU textures.
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::dxSurface):
        * Shared/win/ShareableBitmapDirect2D.cpp:
        (WebKit::ShareableBitmap::createSharedResource): Added.
        (WebKit::ShareableBitmap::disposeSharedResource): Added.
        (WebKit::ShareableBitmap::leakSharedResource): Added.
        (WebKit::ShareableBitmap::createGraphicsContext): Update for new data types.
        (WebKit::ShareableBitmap::paint): Ditto.
        (WebKit::ShareableBitmap::createDirect2DSurface): Update for new data types.
        (WebKit::ShareableBitmap::createImage): Ditto.
        (WebKit::createSurfaceFromData): Deleted.
        (WebKit::ShareableBitmap::sync): Deleted.
        * UIProcess/BackingStore.cpp:
        * UIProcess/BackingStore.h:
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/BackingStoreDirect2D.cpp:
        (WebKit::BackingStore::createBackend):
        (WebKit::BackingStore::paint):
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/win/PageClientImpl.cpp:
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::device const):
        (WebKit::WebPageProxy::setDevice):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Initialize DirectX stuff.
        (WebKit::WebView::paint): Use new DiretX drawing logic.
        (WebKit::WebView::onSizeEvent): Update SwapChain's buffer sizes when resizing.
        (WebKit::WebView::setupSwapChain): Added.
        (WebKit::WebView::configureBackingStore): Added.
        * UIProcess/win/WebView.h:
        (WebKit::WebView::d3dDevice):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::display):

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

        [PSON] Bump the WebPage's identifier every time we process-swap
        https://bugs.webkit.org/show_bug.cgi?id=201225

        Reviewed by Alex Christensen.

        Every time we create a new WebPage object in a provisional process, we now assign it a new
        identifier, instead of using the identifier of the WebPage in the committed process. This
        will address issues with IPC when navigating back and forth between processes since we will
        no longer be confused as to which WebPage the IPC is coming from. Also, this will allow
        suspended WebPages to keep living in the process, even if we use the process for a new load
        (will be done in a follow-up patch) since we will no longer have an identifier conflict.

        * Scripts/webkit/messages.py:
        * Shared/API/APIPageHandle.cpp:
        (API::PageHandle::create):
        (API::PageHandle::createAutoconverting):
        (API::PageHandle::PageHandle):
        (API::PageHandle::encode const):
        (API::PageHandle::decode):
        * Shared/API/APIPageHandle.h:
        (API::PageHandle::pageProxyID const):
        (API::PageHandle::webPageID const):
        * Shared/API/Cocoa/WKBrowsingContextHandle.mm:
        (-[WKBrowsingContextHandle _initWithPageProxy:]):
        (-[WKBrowsingContextHandle _initWithPage:]):
        (-[WKBrowsingContextHandle _initWithPageProxyID:andWebPageID:]):
        (-[WKBrowsingContextHandle hash]):
        (-[WKBrowsingContextHandle isEqual:]):
        (-[WKBrowsingContextHandle encodeWithCoder:]):
        (-[WKBrowsingContextHandle initWithCoder:]):
        * Shared/API/Cocoa/WKBrowsingContextHandleInternal.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::ObjCObjectGraph::encode):
        (WebKit::ObjCObjectGraph::decode):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController handle]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView dealloc]):
        (-[WKWebView _remoteObjectRegistry]):
        (-[WKWebView _handle]):
        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestCreate):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::~WebViewImpl):
        (WebKit::WebViewImpl::remoteObjectRegistry):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        (WebKit::NetworkProcessProxy::logDiagnosticMessage):
        (WebKit::NetworkProcessProxy::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcessProxy::logDiagnosticMessageWithValue):
        (WebKit::NetworkProcessProxy::requestStorageAccessConfirm):
        (WebKit::NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
        (WebKit::NetworkProcessProxy::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        (WebKit::ProvisionalPageProxy::startURLSchemeTask):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::webPageID const):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.messages.in:
        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::addVisitedLinkHashFromPage):
        * UIProcess/VisitedLinkStore.h:
        * UIProcess/VisitedLinkStore.messages.in:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createFrontendPage):
        (WebKit::WebInspectorProxy::openLocalInspectorFrontend):
        (WebKit::WebInspectorProxy::closeFrontendPageAndWindow):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::startURLSchemeTask):
        (WebKit::WebPageProxy::startURLSchemeTaskShared):
        (WebKit::WebPageProxy::loadSynchronousURLSchemeTask):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::webPageFromCorePageIdentifier):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::startTask):
        (WebKit::WebURLSchemeHandler::taskCompleted):
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::create):
        (WebKit::WebURLSchemeTask::WebURLSchemeTask):
        (WebKit::WebURLSchemeTask::didPerformRedirection):
        (WebKit::WebURLSchemeTask::didReceiveResponse):
        (WebKit::WebURLSchemeTask::didReceiveData):
        (WebKit::WebURLSchemeTask::didComplete):
        (WebKit::WebURLSchemeTask::pageDestroyed):
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::pageProxyID const):
        (WebKit::WebURLSchemeTask::webPageID const):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController handle]):
        (+[WKWebProcessPlugInBrowserContextController lookUpBrowsingContextFromHandle:]):
        * WebProcess/UserContent/WebUserContentController.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/Cocoa/WebRemoteObjectRegistry.cpp:
        (WebKit::WebRemoteObjectRegistry::WebRemoteObjectRegistry):
        (WebKit::WebRemoteObjectRegistry::close):
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::addVisitedLink):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection):
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sessionStorageNamespaceIdentifier const):
        (WebKit::WebPage::webPageProxyIdentifier const):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebKit::StorageNamespaceImpl::copy):
        (WebKit::StorageNamespaceImpl::sessionStoragePageID const):
        * WebProcess/WebStorage/StorageNamespaceImpl.h:
        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::transformHandlesToObjects):

2019-08-30  Keith Rollin  <krollin@apple.com>

        Remove AppKitCompatibilityDeclarations.h
        https://bugs.webkit.org/show_bug.cgi?id=201283
        <rdar://problem/54822042>

        Reviewed by Alexey Proskuryakov.

        The two copies of these files -- on in WTF, one in MiniBrowser -- are
        empty and can be removed.

        * WebKit2Prefix.h:

2019-08-30  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] New API to remove a filter from an user content manager given its identifier
        https://bugs.webkit.org/show_bug.cgi?id=200479

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitUserContentManager.cpp:
        (webkit_user_content_manager_remove_filter_by_id): Add new public API function.
        * UIProcess/API/gtk/WebKitUserContentManager.h: Add declaration for
        webkit_user_content_manager_remove_filter_by_id().
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: List new function.
        * UIProcess/API/wpe/WebKitUserContentManager.h: Add declaration for
        webkit_user_content_manager_remove_filter_by_id().
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt: List new function.

2019-08-30  Pablo Saavedra  <psaavedra@igalia.com>

        [GTK] Build failure in Debian Stable and Ubuntu LTS bots
        https://bugs.webkit.org/show_bug.cgi?id=201337

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::bindSurfaceToWebPage):

2019-08-30  Philippe Normand  <pnormand@igalia.com>

        [WPE][Qt] loadingChanged signal parameter is unusable
        https://bugs.webkit.org/show_bug.cgi?id=201301

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/wpe/qt/WPEQtView.h: Explicitely name signal
        parameter. It is a runtime requirement for QML.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove HAVE_PASSKIT_GRANULAR_ERRORS conditional
        https://bugs.webkit.org/show_bug.cgi?id=201278
        <rdar://problem/54821052>

        Reviewed by Alex Christensen.

        HAVE_PASSKIT_GRANULAR_ERRORS is always True, so remove the conditional
        tests, keeping the True branches and removing the False branches.

        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::PaymentAuthorizationPresenter::completePaymentSession):
        (WebKit::PaymentAuthorizationPresenter::completeShippingContactSelection):
        * Platform/cocoa/PaymentAuthorizationViewController.mm:
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didAuthorizePayment:completion:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingMethod:completion:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectShippingContact:completion:]): Deleted.
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didSelectPaymentMethod:completion:]): Deleted.
        * Platform/cocoa/WKPaymentAuthorizationDelegate.h:
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
        (-[WKPaymentAuthorizationDelegate completePaymentMethodSelection:]):
        (-[WKPaymentAuthorizationDelegate completePaymentSession:errors:didReachFinalState:]):
        (-[WKPaymentAuthorizationDelegate completeShippingContactSelection:summaryItems:shippingMethods:errors:]):
        (-[WKPaymentAuthorizationDelegate completeShippingMethodSelection:]):
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard):
        (WebKit::toPKContactFields):
        (WebKit::toNSSet):
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest):
        (WebKit::toPKAddressField): Deleted.

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

        Add "IsolatedCopy" in the name of String getters that call isolatedCopy() on the string
        https://bugs.webkit.org/show_bug.cgi?id=201318

        Reviewed by Alex Christensen.

        Add "IsolatedCopy" in the name of String getters that call isolatedCopy() on the string, for clarity.

        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::storageDirectoryPathIsolatedCopy const):
        (WebKit::ResourceLoadStatisticsPersistentStorage::resourceLogFilePath const):
        (WebKit::ResourceLoadStatisticsPersistentStorage::monitorDirectoryForNewStatistics):
        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h:
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::blobDirectoryPathIsolatedCopy const):
        (WebKit::NetworkCache::BlobStorage::synchronize):
        (WebKit::NetworkCache::BlobStorage::blobPathForHash const):
        * NetworkProcess/cache/NetworkCacheBlobStorage.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::basePathIsolatedCopy const):
        (WebKit::NetworkCache::Storage::versionPath const):
        (WebKit::NetworkCache::Storage::recordsPathIsolatedCopy const):
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::recordDirectoryPathForKey const):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        (WebKit::NetworkCache::Storage::shrink):
        (WebKit::NetworkCache::Storage::deleteOldVersions):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2019-08-29  Keith Rollin  <krollin@apple.com>

        Update .xcconfig symbols to reflect the current set of past and future product versions.
        https://bugs.webkit.org/show_bug.cgi?id=200720
        <rdar://problem/54305032>

        Reviewed by Alex Christensen.

        Remove version symbols related to old OS's we no longer support,
        ensure that version symbols are defined for OS's we do support.

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

2019-08-29  Keith Rollin  <krollin@apple.com>

        Invalid XPCServices symlinks are being created
        https://bugs.webkit.org/show_bug.cgi?id=201320
        <rdar://problem/54719612>

        Reviewed by Dan Bernstein.

        When performing incremental builds, errant XPCServices symlinks can be
        created. For example, in the following, the second symlink is the
        correct one. The first symlink gets created when the build process
        tries to create the symlink and it already exists. When it already
        exists, the command to create the symlink actually follows the
        existing symlink and creates the (second) symlink at the location
        where the first symlink points.

            WebKit.framework/Versions/A/XPCServices/XPCServices@ -> Versions/Current/XPCServices
            WebKit.framework/XPCServices@ -> Versions/Current/XPCServices

        Address this by specifying -h to the `ln` command, which will cause it
        to not follow symlinks if they already exist at the target.

        Also, fix a benign issue where the Xcode build variable WRAPPER_NAME
        was being referenced in a context where it wasn't defined.

        * WebKit.xcodeproj/project.pbxproj:

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

        Speculative loads should use the NetworkSession owning their Cache
        https://bugs.webkit.org/show_bug.cgi?id=201314

        Reviewed by Chris Dumez.

        This provides a performance improvement when using non-default persistent WKWebsiteDataStores.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::open):
        (WebKit::NetworkCache::Cache::Cache):
        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::Cache::sessionID const):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):

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

        [iOS 13] Caret does not appear in text field if the body element is translated completely out of the viewport
        https://bugs.webkit.org/show_bug.cgi?id=201287
        <rdar://problem/54780864>

        Reviewed by Tim Horton.

        During EditorState computation, we use the hidden editable element heuristic to determine whether we should
        begin suppressing selection gestures and UI. Currently, we use the editable root of the selection range to
        determine where in the layer tree we should start our ascent, in search of a completely transparent or
        completely clipped container.

        However, in the case where the selection is inside a focused text field, this causes us to walk up the layer
        tree starting at the RenderLayer corresponding to the text field's inner contenteditable div, which is different
        than the text field's enclosing RenderLayer in the case where the containing block is transformed, such that no
        part of it is within the visible viewport. This scenario is exercised by the below test case, in which the caret
        after transforming the body horizontally by -100vw is hidden due to a false positive in the hidden editable area
        heuristic.

        Fix this by starting the layer tree ascent from the enclosing layer of the text form control if applicable,
        instead of the inner editable area under the shadow root of the form control.

        Test: editing/selection/ios/show-selection-in-transformed-container.html

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

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

        Skip fetch event dispatching if no fetch event handler is added at script evaluation time
        https://bugs.webkit.org/show_bug.cgi?id=201174

        Reviewed by Chris Dumez.

        Store whether a fetch event handler is set at script evaluation time.
        If not, we skip the fetch event entirely so that the network load can start sooner.
        If fetch event is skipped, we trigger soft update, as defined in
        https://w3c.github.io/ServiceWorker/#handle-fetch step 16.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::softUpdate):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::serviceWorkerStarted):
        (WebKit::WebSWContextManagerConnection::serviceWorkerFailedToStart):
        (WebKit::WebSWContextManagerConnection::softUpdate):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 3)
        https://bugs.webkit.org/show_bug.cgi?id=201224
        <rdar://problem/54795934>

        Reviewed by Darin Adler.

        Remove symbols in WebKitTargetConditionals.xcconfig related to macOS
        10.13, including WK_MACOS_1013 and WK_MACOS_BEFORE_1013, and suffixes
        like _MACOS_SINCE_1013.

        * Configurations/WebKitTargetConditionals.xcconfig:

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

        Use WebPageProxy callbacks in case of authentication challenge received from Service Worker
        https://bugs.webkit.org/show_bug.cgi?id=201177

        Reviewed by Alex Christensen.

        Send topOrigin for every possible load to NetworkProcess.
        Send topOrigin as part of authentication challenge to UIProcess.

        If there is no corresponding page for the pageID, try getting a page
        related to the service worker using the topOrigin and send the challenge to it.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        (WebKit::PingLoad::didReceiveChallenge):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::processAuthenticationChallenge):
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        * UIProcess/WebPageProxy.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):

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

        Dissociate the WebPageProxy's identifier from the WebPage's
        https://bugs.webkit.org/show_bug.cgi?id=201233

        Reviewed by Alex Christensen.

        Dissociate the WebPageProxy's identifier from the WebPage's. This will allow bumping the
        WebPage's identifier everytime we create a WebPage in a new process in case of process
        swap on navigation (Bug 201225).

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::pageID const):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController handle]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView dealloc]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _dispatchSetViewLayoutSize:]):
        (-[WKWebView _cancelAnimatedResize]):
        (-[WKWebView _remoteObjectRegistry]):
        (-[WKWebView _handle]):
        (-[WKWebView _focusTextInputContext:completionHandler:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getAllStorageAccessEntriesFor:completionHandler:]):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextGetWebViewForPage):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_get_page_id):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::handleForWebPageProxy):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::waitForNavigationToCompleteOnPage):
        (WebKit::WebAutomationSession::respondToPendingPageNavigationCallbacksWithTimeout):
        (WebKit::WebAutomationSession::navigationOccurredForFrame):
        (WebKit::WebAutomationSession::documentLoadedForFrame):
        (WebKit::WebAutomationSession::inspectorFrontendLoaded):
        (WebKit::WebAutomationSession::mouseEventsFlushedForPage):
        (WebKit::WebAutomationSession::keyboardEventsFlushedForPage):
        (WebKit::WebAutomationSession::willClosePage):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::computeElementLayout):
        (WebKit::WebAutomationSession::selectOptionElement):
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::inputDispatcherForPage):
        (WebKit::WebAutomationSession::viewportInViewCenterPointOfElement):
        (WebKit::WebAutomationSession::simulateMouseInteraction):
        (WebKit::WebAutomationSession::simulateKeyboardInteraction):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::takeScreenshot):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::inspectBrowsingContext):
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::PlaybackSessionManagerProxy):
        (WebKit::PlaybackSessionManagerProxy::invalidate):
        * UIProcess/Cocoa/TextCheckingController.mm:
        (WebKit::TextCheckingController::replaceRelativeToSelection):
        (WebKit::TextCheckingController::removeAnnotationRelativeToSelection):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::VideoFullscreenManagerProxy):
        (WebKit::VideoFullscreenManagerProxy::invalidate):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection):
        (WebKit::WebPageProxy::paymentCoordinatorAddMessageReceiver):
        (WebKit::WebPageProxy::paymentCoordinatorRemoveMessageReceiver):
        (WebKit::WebPageProxy::speakingErrorOccurred):
        (WebKit::WebPageProxy::boundaryEventOccurred):
        (WebKit::WebPageProxy::voicesDidChange):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::~WebViewImpl):
        (WebKit::WebViewImpl::windowDidOrderOffScreen):
        (WebKit::WebViewImpl::windowDidOrderOnScreen):
        (WebKit::WebViewImpl::windowDidChangeOcclusionState):
        (WebKit::WebViewImpl::viewDidHide):
        (WebKit::WebViewImpl::viewDidUnhide):
        (WebKit::WebViewImpl::activeSpaceDidChange):
        (WebKit::WebViewImpl::remoteObjectRegistry):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision):
        * UIProcess/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::connect):
        (WebKit::InspectorTargetProxy::disconnect):
        (WebKit::InspectorTargetProxy::sendMessageToTargetBackend):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::createRequest):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::show):
        (WebKit::WebNotificationManagerProxy::cancel):
        (WebKit::WebNotificationManagerProxy::didDestroyNotification):
        (WebKit::pageIDsMatch):
        (WebKit::pageAndNotificationIDsMatch):
        (WebKit::WebNotificationManagerProxy::clearNotifications):
        (WebKit::WebNotificationManagerProxy::providerDidShowNotification):
        (WebKit::WebNotificationManagerProxy::providerDidClickNotification):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::processDidTerminate):
        (WebKit::ProvisionalPageProxy::cancel):
        (WebKit::ProvisionalPageProxy::initializeWebPage):
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        (WebKit::ProvisionalPageProxy::didCreateMainFrame):
        (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::load):
        (WebKit::RemoteWebInspectorProxy::sendMessageToFrontend):
        (WebKit::RemoteWebInspectorProxy::createFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorProxy::closeFrontendPageAndWindow):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::~SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::unsuspend):
        (WebKit::SuspendedPageProxy::close):
        (WebKit::SuspendedPageProxy::didProcessRequestToSuspend):
        (WebKit::SuspendedPageProxy::loggingString const):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::~ViewGestureController):
        (WebKit::ViewGestureController::disconnectFromProcess):
        (WebKit::ViewGestureController::connectToProcess):
        (WebKit::ViewGestureController::controllerForGesture):
        (WebKit::ViewGestureController::forceRepaintIfNeeded):
        (WebKit::ViewGestureController::requestRenderTreeSizeNotificationIfNeeded):
        * UIProcess/ViewGestureController.h:
        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::addVisitedLinkHashFromPage):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::WebAuthenticatorCoordinatorProxy):
        (WebKit::WebAuthenticatorCoordinatorProxy::~WebAuthenticatorCoordinatorProxy):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::itemForID):
        (WebKit::WebBackForwardList::restoreFromState):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply):
        (WebKit::WebEditCommandProxy::reapply):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::loadURL):
        (WebKit::WebFrameProxy::loadData):
        (WebKit::WebFrameProxy::stopLoading const):
        (WebKit::WebFrameProxy::collapseSelection):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::WebFullScreenManagerProxy):
        (WebKit::WebFullScreenManagerProxy::~WebFullScreenManagerProxy):
        (WebKit::WebFullScreenManagerProxy::willEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::didEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::willExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::didExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::setAnimatingFullScreen):
        (WebKit::WebFullScreenManagerProxy::requestExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::saveScrollPosition):
        (WebKit::WebFullScreenManagerProxy::restoreScrollPosition):
        (WebKit::WebFullScreenManagerProxy::setFullscreenInsets):
        (WebKit::WebFullScreenManagerProxy::setFullscreenAutoHideDuration):
        (WebKit::WebFullScreenManagerProxy::setFullscreenControlsHidden):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        (WebKit::WebInspectorProxy::invalidate):
        (WebKit::WebInspectorProxy::sendMessageToFrontend):
        (WebKit::WebInspectorProxy::connect):
        (WebKit::WebInspectorProxy::close):
        (WebKit::WebInspectorProxy::reset):
        (WebKit::WebInspectorProxy::updateForNewPageProcess):
        (WebKit::WebInspectorProxy::setFrontendConnection):
        (WebKit::WebInspectorProxy::showConsole):
        (WebKit::WebInspectorProxy::showResources):
        (WebKit::WebInspectorProxy::showMainResourceForFrame):
        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::detach):
        (WebKit::WebInspectorProxy::togglePageProfiling):
        (WebKit::WebInspectorProxy::toggleElementSelection):
        (WebKit::WebInspectorProxy::createFrontendPage):
        (WebKit::WebInspectorProxy::openLocalInspectorFrontend):
        (WebKit::WebInspectorProxy::open):
        (WebKit::WebInspectorProxy::closeFrontendPageAndWindow):
        (WebKit::WebInspectorProxy::attachAvailabilityChanged):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::setUIClient):
        (WebKit::WebPageProxy::setIconLoadingClient):
        (WebKit::WebPageProxy::launchProcess):
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::swapToWebProcess):
        (WebKit::WebPageProxy::launchProcessForReload):
        (WebKit::WebPageProxy::launchProcessWithItem):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::tryRestoreScrollPosition):
        (WebKit::WebPageProxy::setControlledByAutomation):
        (WebKit::WebPageProxy::setIndicating):
        (WebKit::WebPageProxy::createInspectorTargets):
        (WebKit::WebPageProxy::setBackgroundColor):
        (WebKit::WebPageProxy::setTopContentInset):
        (WebKit::WebPageProxy::setUnderlayColor):
        (WebKit::WebPageProxy::viewWillStartLiveResize):
        (WebKit::WebPageProxy::viewWillEndLiveResize):
        (WebKit::WebPageProxy::activityStateDidChange):
        (WebKit::WebPageProxy::viewDidEnterWindow):
        (WebKit::WebPageProxy::dispatchActivityStateChange):
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        (WebKit::WebPageProxy::setInitialFocus):
        (WebKit::WebPageProxy::clearSelection):
        (WebKit::WebPageProxy::restoreSelectionInFocusedEditableElement):
        (WebKit::WebPageProxy::validateCommand):
        (WebKit::WebPageProxy::increaseListLevel):
        (WebKit::WebPageProxy::decreaseListLevel):
        (WebKit::WebPageProxy::changeListType):
        (WebKit::WebPageProxy::setBaseWritingDirection):
        (WebKit::WebPageProxy::setNeedsFontAttributes):
        (WebKit::WebPageProxy::scheduleFullEditorStateUpdate):
        (WebKit::WebPageProxy::selectAll):
        (WebKit::WebPageProxy::executeEditCommand):
        (WebKit::WebPageProxy::requestFontAttributesAtSelectionStart):
        (WebKit::WebPageProxy::setEditable):
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::dragEnded):
        (WebKit::WebPageProxy::didStartDrag):
        (WebKit::WebPageProxy::dragCancelled):
        (WebKit::WebPageProxy::processNextQueuedMouseEvent):
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::handleGestureEvent):
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::resetPotentialTapSecurityOrigin):
        (WebKit::WebPageProxy::handleTouchEventAsynchronously):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::cancelPointer):
        (WebKit::WebPageProxy::touchWithIdentifierWasRemoved):
        (WebKit::WebPageProxy::scrollBy):
        (WebKit::WebPageProxy::centerSelectionInVisibleArea):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::setUserAgent):
        (WebKit::WebPageProxy::resumeActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::suspendActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::setCustomTextEncodingName):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::setTextZoomFactor):
        (WebKit::WebPageProxy::setPageZoomFactor):
        (WebKit::WebPageProxy::setPageAndTextZoomFactors):
        (WebKit::WebPageProxy::scalePage):
        (WebKit::WebPageProxy::scalePageInViewCoordinates):
        (WebKit::WebPageProxy::scaleView):
        (WebKit::WebPageProxy::windowScreenDidChange):
        (WebKit::WebPageProxy::accessibilitySettingsDidChange):
        (WebKit::WebPageProxy::setUseFixedLayout):
        (WebKit::WebPageProxy::setFixedLayoutSize):
        (WebKit::WebPageProxy::setAlwaysShowsHorizontalScroller):
        (WebKit::WebPageProxy::setAlwaysShowsVerticalScroller):
        (WebKit::WebPageProxy::listenForLayoutMilestones):
        (WebKit::WebPageProxy::setSuppressScrollbarAnimations):
        (WebKit::WebPageProxy::setEnableVerticalRubberBanding):
        (WebKit::WebPageProxy::setEnableHorizontalRubberBanding):
        (WebKit::WebPageProxy::setBackgroundExtendsBeyondPage):
        (WebKit::WebPageProxy::setPaginationMode):
        (WebKit::WebPageProxy::setPaginationBehavesLikeColumns):
        (WebKit::WebPageProxy::setPageLength):
        (WebKit::WebPageProxy::setGapBetweenPages):
        (WebKit::WebPageProxy::setPaginationLineGridEnabled):
        (WebKit::WebPageProxy::findStringMatches):
        (WebKit::WebPageProxy::findString):
        (WebKit::WebPageProxy::getImageForFindMatch):
        (WebKit::WebPageProxy::selectFindMatch):
        (WebKit::WebPageProxy::indicateFindMatch):
        (WebKit::WebPageProxy::hideFindUI):
        (WebKit::WebPageProxy::countStringMatches):
        (WebKit::WebPageProxy::replaceMatches):
        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld):
        (WebKit::WebPageProxy::runJavaScriptInFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getContentsAsAttributedString):
        (WebKit::WebPageProxy::getBytecodeProfile):
        (WebKit::WebPageProxy::getSamplingProfilerOutput):
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::preferencesDidChange):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        (WebKit::WebPageProxy::didCancelClientRedirectForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::didNavigateWithNavigationDataShared):
        (WebKit::WebPageProxy::didPerformClientRedirectShared):
        (WebKit::WebPageProxy::didPerformServerRedirectShared):
        (WebKit::trySOAuthorization):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::showShareSheet):
        (WebKit::WebPageProxy::setMediaVolume):
        (WebKit::WebPageProxy::setMuted):
        (WebKit::WebPageProxy::stopMediaCapture):
        (WebKit::WebPageProxy::stopAllMediaPlayback):
        (WebKit::WebPageProxy::suspendAllMediaPlayback):
        (WebKit::WebPageProxy::resumeAllMediaPlayback):
        (WebKit::WebPageProxy::handleMediaEvent):
        (WebKit::WebPageProxy::setVolumeOfMediaElement):
        (WebKit::WebPageProxy::setMayStartMediaWhenInWindow):
        (WebKit::WebPageProxy::didChooseColor):
        (WebKit::WebPageProxy::didEndColorPicker):
        (WebKit::WebPageProxy::didCloseSuggestions):
        (WebKit::WebPageProxy::didSelectOption):
        (WebKit::WebPageProxy::setAllowsMediaDocumentInlinePlayback):
        (WebKit::WebPageProxy::backForwardAddItem):
        (WebKit::WebPageProxy::messageSenderDestinationID const):
        (WebKit::WebPageProxy::valueChangedForPopupMenu):
        (WebKit::WebPageProxy::setTextFromItemForPopupMenu):
        (WebKit::WebPageProxy::postMessageToInjectedBundle):
        (WebKit::WebPageProxy::failedToShowPopupMenu):
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::contextMenuItemSelected):
        (WebKit::WebPageProxy::handleContextMenuKeyEvent):
        (WebKit::WebPageProxy::didChooseFilesForOpenPanelWithDisplayStringAndIcon):
        (WebKit::WebPageProxy::didChooseFilesForOpenPanel):
        (WebKit::WebPageProxy::didCancelForOpenPanel):
        (WebKit::WebPageProxy::advanceToNextMisspelling):
        (WebKit::WebPageProxy::changeSpellingToWord):
        (WebKit::WebPageProxy::removeEditCommand):
        (WebKit::WebPageProxy::didFinishCheckingText):
        (WebKit::WebPageProxy::didCancelCheckingText):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):
        (WebKit::WebPageProxy::gamepadActivity):
        (WebKit::WebPageProxy::updateWebsitePolicies):
        (WebKit::WebPageProxy::backForwardRemovedItem):
        (WebKit::WebPageProxy::setCanRunModal):
        (WebKit::WebPageProxy::beginPrinting):
        (WebKit::WebPageProxy::endPrinting):
        (WebKit::WebPageProxy::computePagesForPrinting):
        (WebKit::WebPageProxy::drawRectToImage):
        (WebKit::WebPageProxy::drawPagesToPDF):
        (WebKit::WebPageProxy::drawPagesForPrinting):
        (WebKit::WebPageProxy::setMinimumSizeForAutoLayout):
        (WebKit::WebPageProxy::setAutoSizingShouldExpandToViewHeight):
        (WebKit::WebPageProxy::setViewportSizeForCSSViewportUnits):
        (WebKit::WebPageProxy::handleAlternativeTextUIResult):
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::cancelComposition):
        (WebKit::WebPageProxy::setScrollPinningBehavior):
        (WebKit::WebPageProxy::setOverlayScrollbarStyle):
        (WebKit::WebPageProxy::addMIMETypeWithCustomContentProvider):
        (WebKit::WebPageProxy::changeFontAttributes):
        (WebKit::WebPageProxy::changeFont):
        (WebKit::WebPageProxy::setTextAsync):
        (WebKit::WebPageProxy::insertTextAsync):
        (WebKit::WebPageProxy::hasMarkedText):
        (WebKit::WebPageProxy::getMarkedRangeAsync):
        (WebKit::WebPageProxy::getSelectedRangeAsync):
        (WebKit::WebPageProxy::characterIndexForPointAsync):
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync):
        (WebKit::WebPageProxy::setCompositionAsync):
        (WebKit::WebPageProxy::confirmCompositionAsync):
        (WebKit::WebPageProxy::takeSnapshot):
        (WebKit::WebPageProxy::requestActiveNowPlayingSessionInfo):
        (WebKit::WebPageProxy::performImmediateActionHitTestAtLocation):
        (WebKit::WebPageProxy::immediateActionDidUpdate):
        (WebKit::WebPageProxy::immediateActionDidCancel):
        (WebKit::WebPageProxy::immediateActionDidComplete):
        (WebKit::WebPageProxy::handleAcceptedCandidate):
        (WebKit::WebPageProxy::setUseSystemAppearance):
        (WebKit::WebPageProxy::setHeaderBannerHeightForTesting):
        (WebKit::WebPageProxy::setFooterBannerHeightForTesting):
        (WebKit::WebPageProxy::setShouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPageProxy::setPlaybackTarget):
        (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange):
        (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget):
        (WebKit::WebPageProxy::clearWheelEventTestTrigger):
        (WebKit::WebPageProxy::setShouldScaleViewToFitDocument):
        (WebKit::WebPageProxy::getLoadDecisionForIcon):
        (WebKit::WebPageProxy::setResourceCachingDisabled):
        (WebKit::WebPageProxy::setUserInterfaceLayoutDirection):
        (WebKit::WebPageProxy::didAllowPointerLock):
        (WebKit::WebPageProxy::didDenyPointerLock):
        (WebKit::WebPageProxy::requestPointerUnlock):
        (WebKit::WebPageProxy::setURLSchemeHandlerForScheme):
        (WebKit::WebPageProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
        (WebKit::WebPageProxy::effectiveAppearanceDidChange):
        (WebKit::WebPageProxy::insertAttachment):
        (WebKit::WebPageProxy::updateAttachmentAttributes):
        (WebKit::WebPageProxy::getApplicationManifest):
        (WebKit::WebPageProxy::setDefersLoadingForTesting):
        (WebKit::WebPageProxy::updateCurrentModifierState):
        (WebKit::WebPageProxy::simulateDeviceOrientationChange):
        (WebKit::WebPageProxy::detectDataInAllFrames):
        (WebKit::WebPageProxy::removeDataDetectedLinks):
        (WebKit::WebPageProxy::textInputContextsInRect):
        (WebKit::WebPageProxy::focusTextInputContext):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::identifier const):
        (WebKit::WebPageProxy::webPageID const):
        * UIProcess/WebPageProxyIdentifier.h: Added.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
        (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::webPage):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::addVisitedLinkStoreUser):
        (WebKit::WebProcessProxy::removeVisitedLinkStoreUser):
        (WebKit::WebProcessProxy::hasProvisionalPageWithID const):
        (WebKit::WebProcessProxy::isAllowedToUpdateBackForwardItem const):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::startTask):
        (WebKit::WebURLSchemeHandler::stopAllTasksForPage):
        (WebKit::WebURLSchemeHandler::stopTask):
        (WebKit::WebURLSchemeHandler::removeTaskFromPageMap):
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::WebURLSchemeTask):
        (WebKit::WebURLSchemeTask::didPerformRedirection):
        (WebKit::WebURLSchemeTask::didReceiveResponse):
        (WebKit::WebURLSchemeTask::didReceiveData):
        (WebKit::WebURLSchemeTask::didComplete):
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::pageID const):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getAllStorageAccessEntries):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getCenterForZoomGesture):
        * UIProcess/ios/EditableImageController.mm:
        (WebKit::EditableImageController::EditableImageController):
        (WebKit::EditableImageController::~EditableImageController):
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::SmartMagnificationController):
        (WebKit::SmartMagnificationController::~SmartMagnificationController):
        (WebKit::SmartMagnificationController::handleSmartMagnificationGesture):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _wk_printedDocument]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestFocusedElementInformation):
        (WebKit::WebPageProxy::updateVisibleContentRects):
        (WebKit::WebPageProxy::resendLastVisibleContentRects):
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize):
        (WebKit::WebPageProxy::setForceAlwaysUserScalable):
        (WebKit::WebPageProxy::setMaximumUnobscuredSize):
        (WebKit::WebPageProxy::setDeviceOrientation):
        (WebKit::WebPageProxy::setOverrideViewportArguments):
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::updateSelectionWithTouches):
        (WebKit::WebPageProxy::replaceDictatedText):
        (WebKit::WebPageProxy::replaceSelectedText):
        (WebKit::WebPageProxy::requestAutocorrectionData):
        (WebKit::WebPageProxy::applyAutocorrection):
        (WebKit::WebPageProxy::selectTextWithGranularityAtPoint):
        (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::selectPositionAtPoint):
        (WebKit::WebPageProxy::beginSelectionInDirection):
        (WebKit::WebPageProxy::updateSelectionWithExtentPoint):
        (WebKit::WebPageProxy::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPageProxy::requestDictationContext):
        (WebKit::WebPageProxy::requestAutocorrectionContext):
        (WebKit::WebPageProxy::getSelectionContext):
        (WebKit::WebPageProxy::handleTwoFingerTapAtPoint):
        (WebKit::WebPageProxy::handleStylusSingleTapAtPoint):
        (WebKit::WebPageProxy::selectWithTwoTouches):
        (WebKit::WebPageProxy::requestPositionInformation):
        (WebKit::WebPageProxy::startInteractionWithElementAtPosition):
        (WebKit::WebPageProxy::stopInteraction):
        (WebKit::WebPageProxy::performActionOnElement):
        (WebKit::WebPageProxy::applicationDidEnterBackground):
        (WebKit::WebPageProxy::applicationDidFinishSnapshottingAfterEnteringBackground):
        (WebKit::WebPageProxy::applicationWillEnterForeground):
        (WebKit::WebPageProxy::applicationWillResignActive):
        (WebKit::WebPageProxy::applicationDidBecomeActive):
        (WebKit::WebPageProxy::extendSelection):
        (WebKit::WebPageProxy::selectWordBackward):
        (WebKit::WebPageProxy::requestRectsForGranularityWithSelectionOffset):
        (WebKit::WebPageProxy::requestRectsAtSelectionOffsetWithText):
        (WebKit::WebPageProxy::storeSelectionForAccessibility):
        (WebKit::WebPageProxy::startAutoscrollAtPosition):
        (WebKit::WebPageProxy::cancelAutoscroll):
        (WebKit::WebPageProxy::moveSelectionByOffset):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        (WebKit::WebPageProxy::willStartUserTriggeredZooming):
        (WebKit::WebPageProxy::potentialTapAtPosition):
        (WebKit::WebPageProxy::commitPotentialTap):
        (WebKit::WebPageProxy::cancelPotentialTap):
        (WebKit::WebPageProxy::tapHighlightAtPosition):
        (WebKit::WebPageProxy::handleTap):
        (WebKit::WebPageProxy::didRecognizeLongPress):
        (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint):
        (WebKit::WebPageProxy::inspectorNodeSearchMovedToPosition):
        (WebKit::WebPageProxy::inspectorNodeSearchEndedAtPosition):
        (WebKit::WebPageProxy::blurFocusedElement):
        (WebKit::WebPageProxy::setIsShowingInputViewForFocusedElement):
        (WebKit::WebPageProxy::autofillLoginCredentials):
        (WebKit::WebPageProxy::focusNextFocusedElement):
        (WebKit::WebPageProxy::setFocusedElementValue):
        (WebKit::WebPageProxy::setFocusedElementValueAsNumber):
        (WebKit::WebPageProxy::setFocusedElementSelectedIndex):
        (WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF):
        (WebKit::WebPageProxy::contentSizeCategoryDidChange):
        (WebKit::WebPageProxy::generateSyntheticEditingCommand):
        (WebKit::WebPageProxy::hardwareKeyboardAvailabilityChanged):
        (WebKit::WebPageProxy::requestEvasionRectsAboveSelection):
        (WebKit::WebPageProxy::updateSelectionWithDelta):
        (WebKit::WebPageProxy::requestDocumentEditingContext):
        (WebKit::WebPageProxy::requestDragStart):
        (WebKit::WebPageProxy::requestAdditionalItemsForDragSession):
        (WebKit::WebPageProxy::didConcludeDrop):
        (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrameShared):
        * UIProcess/mac/RemoteWebInspectorProxyMac.mm:
        (WebKit::RemoteWebInspectorProxy::platformSave):
        (WebKit::RemoteWebInspectorProxy::platformAppend):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::handleMagnificationGestureEvent):
        (WebKit::ViewGestureController::handleSmartMagnificationGesture):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformSave):
        (WebKit::WebInspectorProxy::platformAppend):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        (WebKit::WebPageProxy::setMainFrameIsScrollable):
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::fontAtSelection):
        (WebKit::WebPageProxy::stringSelectionForPasteboard):
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        (WebKit::WebPageProxy::readSelectionFromPasteboard):
        (WebKit::WebPageProxy::replaceSelectionWithPasteboardData):
        (WebKit::WebPageProxy::sendComplexTextInputToPlugin):
        (WebKit::WebPageProxy::uppercaseWord):
        (WebKit::WebPageProxy::lowercaseWord):
        (WebKit::WebPageProxy::capitalizeWord):
        (WebKit::WebPageProxy::setSmartInsertDeleteEnabled):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        (WebKit::WebPageProxy::shouldDelayWindowOrderingForEvent):
        (WebKit::WebPageProxy::acceptsFirstMouse):
        * WebKit.xcodeproj/project.pbxproj:

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

        Use inline data member initialization in ProcessLauncher
        https://bugs.webkit.org/show_bug.cgi?id=201247

        Reviewed by Ryosuke Niwa.

        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::ProcessLauncher):
        * UIProcess/Launcher/ProcessLauncher.h:

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

        Reloading a web view with a fixed-width viewport and variable content width restores the previous page scale, shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=201256
        <rdar://problem/54809509>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):
        When restoring page state from a history item, if the saved scale was equal to the
        initial scale at the time it was saved, ignore the saved scale and use the current
        initial scale instead.

        Normally this doesn't matter because a given page's initial scale doesn't usually change
        between loads, but it totally can! See the test for one example of a way an API client
        might cause this; you could also imagine something similar happening if the actual
        page content changed.

2019-08-28  Megan Gardner  <megan_gardner@apple.com>

        Null check webFrame when creating a print preview to prevent a crash.
        https://bugs.webkit.org/show_bug.cgi?id=201237
        <rdar://problem/51618863>

        Reviewed by Tim Horton.

        Move and expend a null check to keep from crashing when making a print preview.

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _drawPreview:]):
        (-[WKPrintingView drawRect:]):

2019-08-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        All image drawing functions should take an argument of type ImagePaintingOptions
        https://bugs.webkit.org/show_bug.cgi?id=201059

        Reviewed by Simon Fraser.

        GraphicsContext::drawImage() now takes an ImagePaintingOptions.

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

2019-08-28  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=201197
        <rdar://problem/54759985>

        Reviewed by Darin Adler.

        Update conditionals that reference WK_MACOS_1013 and suffixes like
        _MACOS_SINCE_1013, assuming that we're always building on 10.13 or
        later and that these conditionals are always True or False.

        See Bug 200694 for earlier changes in this area.

        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebKit.xcconfig:

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

        Have WebPageProxy generate the page identifier by itself
        https://bugs.webkit.org/show_bug.cgi?id=201223

        Reviewed by Ryosuke Niwa.

        Have WebPageProxy generate the page identifier by itself instead of
        having the WebProcessProxy do it.

        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::m_serviceWorkerPageID):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        (WebKit::WebProcessProxy::generatePageID): Deleted.
        * UIProcess/WebProcessProxy.h:

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

        REGRESSION(r243434): Wrong URL passed to WebKitWebView::load-failed when cancelling previous load
        https://bugs.webkit.org/show_bug.cgi?id=201176

        Reviewed by Žan Doberšek.

        Use the current provisional/committed url when faking an error event, instead of the current active URI that can
        be the pending api request of a new load.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewWillStartLoad):

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

        [GTK][WPE] Implement HSTS for the soup network backend
        https://bugs.webkit.org/show_bug.cgi?id=192074

        Reviewed by Carlos Garcia Campos.

        libsoup 2.67.1 introduced HSTS support via a SoupSessionFeature.
        Add support to the soup network backend by adding the feature to
        SoupNetworkSession and handling HSTS protocol upgrades, by
        propagating the scheme change further to clients. This patch adds
        the HSTS feature unconditionally, but it still possible to add
        a boolean property to the web context class if desired.

        Additionally, add API to the WebKitWebsiteDataManager to specify
        the directory where the HSTS database is saved. If the directory
        is not set or if the data manager is ephemeral, use a
        non-persistent, memory only HSTS enforcer.

        Implement as well the methods needed to clean-up and delete HSTS
        policies from the storage and expose the feature in GTK+
        MiniBrowser's about:data.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::suppressesConnectionTerminationOnSystemChange const):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest):
        (WebKit::NetworkDataTaskSoup::clearRequest):
        (WebKit::NetworkDataTaskSoup::shouldAllowHSTSPolicySetting const):
        (WebKit::NetworkDataTaskSoup::shouldAllowHSTSProtocolUpgrade const):
        (WebKit::NetworkDataTaskSoup::protocolUpgradedViaHSTS):
        (WebKit::NetworkDataTaskSoup::hstsEnforced):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::getHostNamesWithHSTSCache):
        (WebKit::NetworkProcess::deleteHSTSCacheForHostNames):
        (WebKit::NetworkProcess::clearHSTSCache):
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:
        (API::WebsiteDataStore::defaultHSTSDirectory):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        * UIProcess/API/glib/WebKitWebsiteData.cpp:
        (recordContainsSupportedDataTypes):
        (toWebKitWebsiteDataTypes):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetProperty):
        (webkitWebsiteDataManagerSetProperty):
        (webkitWebsiteDataManagerConstructed):
        (webkit_website_data_manager_class_init):
        (webkitWebsiteDataManagerGetDataStore):
        (webkit_website_data_manager_get_hsts_cache_directory):
        (toWebsiteDataTypes):
        * UIProcess/API/gtk/WebKitWebsiteData.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitWebsiteData.h:
        * UIProcess/API/wpe/WebKitWebsiteDataManager.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::hstsStorageDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setHSTSStorageDirectory):

2019-08-27  Mark Lam  <mark.lam@apple.com>

        Refactor to use VM& instead of VM* at as many places as possible.
        https://bugs.webkit.org/show_bug.cgi?id=201172

        Reviewed by Yusuke Suzuki.

        * WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMNode.cpp:
        (webkit_dom_node_for_js_value):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertyNames):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::identifierFromIdentifierRep):
        (WebKit::NPJSObject::enumerate):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertNPVariantToJSValue):
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::counterValue):

2019-08-27  James Savage  <james.savage@apple.com>

        Populate alternate URL for _WKActivatedElementInfo in UIContextMenu SPI.
        https://bugs.webkit.org/show_bug.cgi?id=201165.
        rdar://problem/54729648.

        Reviewed by Dean Jackson.

        * UIProcess/API/APIContextMenuElementInfo.h:
        * UIProcess/API/APIContextMenuElementInfo.cpp:
        (API::ContextMenuElementInfo::ContextMenuElementInfo): Initialize new memeber.

        * UIProcess/API/Cocoa/WKContextMenuElementInfo.mm:
        (-[WKContextMenuElementInfo _activatedElementInfo]): Use new initializer.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]): Ditto.

        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (+[_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:userInfo:]):
            Ditto.
        (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:userInfo:]): Set new ivar.
        (+[_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:]): Deleted.
        (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:]): Deleted.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView assignLegacyDataForContextMenuInteraction]): Use new initializer.
        (-[WKContentView continueContextMenuInteraction:]): If the context menu is being generated for
            an image, and we do not have a URL associated with the position information, try to
            generate one using existing SPI. This change also passes through the userInfo via a new
            property on _WKActivatedElementInfo. We only do this for the SPI version of this delegate
            method, because the API is not called for image previews.
        (-[WKContentView _contextMenuInteraction:overrideSuggestedActionsForConfiguration:]): Use new
            initializer.

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

        [RemoteInspector][Socket] Restructuring the components of Socket implementation
        https://bugs.webkit.org/show_bug.cgi?id=201079

        Reviewed by Ross Kirsling.

        RemoteInspectorClient is now free from creation of SocketEndpoint. All communication
        to SocketEndpoint id now the duty of super class.

        * UIProcess/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::RemoteInspectorClient): Remove direct communication to Socket Endpoint.
        (WebKit::RemoteInspectorClient::sendWebInspectorEvent): Ditto.
        * UIProcess/socket/RemoteInspectorClient.h:

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

        Introduce subclasses to RemoteObjectRegistry for the UIProcess and the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=201153

        Reviewed by Alex Christensen.

        This better factoring improves code clarity.

        * PlatformMac.cmake:
        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        (WebKit::RemoteObjectRegistry::~RemoteObjectRegistry):
        (WebKit::RemoteObjectRegistry::takeBackgroundActivityToken):
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::RemoteObjectRegistry):
        (WebKit::RemoteObjectRegistry::sendInvocation):
        (WebKit::RemoteObjectRegistry::sendReplyBlock):
        (WebKit::RemoteObjectRegistry::sendUnusedReply):
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _initWithWebPage:]):
        (-[_WKRemoteObjectRegistry _initWithWebPageProxy:]):
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/UIRemoteObjectRegistry.cpp: Added.
        (WebKit::UIRemoteObjectRegistry::takeBackgroundActivityToken):
        (WebKit::UIRemoteObjectRegistry::UIRemoteObjectRegistry):
        (WebKit::UIRemoteObjectRegistry::sendInvocation):
        (WebKit::UIRemoteObjectRegistry::messageSender):
        * UIProcess/Cocoa/UIRemoteObjectRegistry.h: Added.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::setRemoteObjectRegistry):
        (WebKit::WebPage::remoteObjectRegistry):
        * WebProcess/WebPage/Cocoa/WebRemoteObjectRegistry.cpp: Added.
        (WebKit::WebRemoteObjectRegistry::WebRemoteObjectRegistry):
        (WebKit::WebRemoteObjectRegistry::~WebRemoteObjectRegistry):
        (WebKit::WebRemoteObjectRegistry::close):
        (WebKit::WebRemoteObjectRegistry::messageSender):
        * WebProcess/WebPage/Cocoa/WebRemoteObjectRegistry.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        * WebProcess/WebPage/WebPage.h:

2019-08-26  Jer Noble  <jer.noble@apple.com>

        Removing fullscreen element in rAF() callback after requestFullscreen() can leave fullscreen in inconsistent state.
        https://bugs.webkit.org/show_bug.cgi?id=201101
        <rdar://problem/54164587>

        Reviewed by Eric Carlson.

        Add more state to track in which direction the animation is flowing to allow in-process
        animations to be cancelled more gracefully.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController enterFullScreen]):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController requestExitFullScreen]):
        (-[WKFullScreenWindowController exitFullScreen]):
        * WebProcess/cocoa/VideoFullscreenManager.h:
        (WebKit::VideoFullscreenInterfaceContext::animationState const):
        (WebKit::VideoFullscreenInterfaceContext::setAnimationState):
        (WebKit::VideoFullscreenInterfaceContext::isAnimating const): Deleted.
        (WebKit::VideoFullscreenInterfaceContext::setIsAnimating): Deleted.
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::enterVideoFullscreenForVideoElement):
        (WebKit::VideoFullscreenManager::exitVideoFullscreenForVideoElement):
        (WebKit::VideoFullscreenManager::didEnterFullscreen):
        (WebKit::VideoFullscreenManager::didCleanupFullscreen):

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

        Do not clear the pending api request when there's no navigation ID
        https://bugs.webkit.org/show_bug.cgi?id=201175

        Reviewed by Chris Dumez.

        After r247851, the pending API request URL is cleared for subresources in some cases.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

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

        [CoordGraphics] Delay LayerTreeHost creation in always-on AC until DrawingArea painting is enabled
        https://bugs.webkit.org/show_bug.cgi?id=201178

        Reviewed by Carlos Garcia Campos.

        When in always-on AC mode, the LayerTreeHost spawning should be delayed
        until the WebPage construction (which sets up the LayerTreeHost-owning
        DrawingArea implementation) is further done with initializing relevant
        state, and not immediately after the DrawingArea is done with preference
        updates.

        This is necessary in order to enable the LayerTreeHost instance to take
        into account additional WebPage-creation attributes like the correct
        device scale factor. Until now, when the LayerTreeHost was spawned in
        always-on AC mode, the device scale factor was not yet updated in the
        WebPage construction to the appropriate value, leaving the LayerTreeHost
        with the default 1.0 value instead of the intended one.

        DrawingArea::setPaintingEnabled() is repurposed into enablePainting()
        that is to be called once everything should be set for painting (i.e.
        when setPaintingEnabled(true) was being called until now). Inside the
        DrawingAreaProxyCoordinatedGraphics class (only one to provide an
        implementation for this method), the LayerTreeHost is now spawned if
        in always-on AC mode. At this point, all relevant state coming from
        the owning WebPage object should be readily available for the host
        to correctly set up initial graphics scene.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::updatePreferences):
        (WebKit::DrawingAreaCoordinatedGraphics::enablePainting):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::enablePainting):
        (WebKit::DrawingArea::setPaintingEnabled): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):
        (WebKit::WebPage::reinitializeWebPage):

2019-08-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: use more C++ keywords for defining agents
        https://bugs.webkit.org/show_bug.cgi?id=200959

        Reviewed by Joseph Pecoraro.

         - make constructors `protected` when the agent isn't meant to be constructed directly
         - add `virtual` destructors that are defined in the *.cpp so forward-declarations work
         - use `final` wherever possible
         - add comments to indicate where any virtual functions come from

        * UIProcess/WebPageInspectorTargetAgent.h:
        * UIProcess/WebPageInspectorTargetAgent.cpp:

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

        Regression: ITP started doing a lot more IPC after its logic was moved to the network process
        https://bugs.webkit.org/show_bug.cgi?id=201155

        Reviewed by John Wilander.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

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

        REGRESSION (iOS 13): Tests that simulate multiple back-to-back single taps fail or time out
        https://bugs.webkit.org/show_bug.cgi?id=201129
        <rdar://problem/51857277>

        Reviewed by Tim Horton.

        Adds a new SPI hook in WebKit to let clients know when a synthetic tap gesture that has ended has been reset.
        See Tools/ChangeLog and LayoutTests/ChangeLog for more details.

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

2019-08-26  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Go back to ID2D1Bitmap as our NativeImage type
        https://bugs.webkit.org/show_bug.cgi?id=201122

        Reviewed by Alex Christensen.

        In Bug 200093 I switched the OS type of NativeImagePtr from ID2D1Bitmap to IWICBitmap.
        However, this was an ill-advised approach, because it dramatically harmed performance due
        to the heavy use of software rendering.

        I originally made this change because I thought this was the only way to get to the backing
        bits of the bitmaps, but it turns out that a more recent Direct2D data type (ID2D1Bitmap1)
        has the ability to map its memory to CPU-accessible memory, allowing software filter effects.

        This patch switches back to the ID2D1Bitap data type, and hooks up the ID2D1Bitmap1 data type
        to access the underlying memory of the bitmaps when software filter effects are used.

        Reviewed by Alex Christensen.

        * Shared/ShareableBitmap.h:
        * Shared/win/ShareableBitmapDirect2D.cpp:
        * UIProcess/win/BackingStoreDirect2D.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:

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

        [WebAuthn] Support HID authenticators on iOS
        https://bugs.webkit.org/show_bug.cgi?id=201084
        <rdar://problem/51908390>

        Reviewed by Youenn Fablet.

        This patch makes the macOS HID implementation available in iOS as well.
        Mostly, it removes the PLATFORM(MAC) compile time flag.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManagerInternal::collectTransports):
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp:
        (WebKit::AuthenticatorTransportService::create):
        (WebKit::AuthenticatorTransportService::createMock):
        * UIProcess/WebAuthentication/Cocoa/HidConnection.h:
        * UIProcess/WebAuthentication/Cocoa/HidConnection.mm:
        * UIProcess/WebAuthentication/Cocoa/HidService.h:
        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::NfcConnection::NfcConnection):
        A tentative solution before there is an official UI.
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        * UIProcess/WebAuthentication/Mock/MockHidConnection.h:
        * UIProcess/WebAuthentication/Mock/MockHidService.cpp:
        * UIProcess/WebAuthentication/Mock/MockHidService.h:
        * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp:
        * UIProcess/WebAuthentication/fido/CtapHidDriver.h:

2019-08-26  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r248961.

        Same patch was re-landed after being rolled out. Patch is
        causing Catalina/iOS 13 test failures. Rolling out.

        Reverted changeset:

        "Verify Prefetch and credential behavior"
        https://bugs.webkit.org/show_bug.cgi?id=200000
        https://trac.webkit.org/changeset/248961

2019-08-26  Youenn Fablet  <youenn@apple.com>

        Add a WebsiteDataStore delegate to handle AuthenticationChallenge that do not come from pages
        https://bugs.webkit.org/show_bug.cgi?id=196870

        Reviewed by Alex Christensen.

        Make NetworkProcess provide the session ID for any authentication challenge.
        In case there is no associated page for the authentication challenge or this is related to a service worker,
        ask the website data store to take a decision.
        Add website data store delegate to allow applications to make the decision.
        Restrict using the delegate to server trust evaluation only.

        Make ping loads reuse the same mechanism.

        Covered by service worker tests and updated beacon test.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::sessionID const):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::networkProcess):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::didReceiveChallenge):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/cocoa/AuthenticationChallengeDispositionCocoa.h: Copied from Tools/WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.h.
        * Shared/Authentication/cocoa/AuthenticationChallengeDispositionCocoa.mm: Copied from Source/WebKit/Shared/Authentication/cocoa/ClientCertificateAuthenticationXPCConstants.h.
        (WebKit::toAuthenticationChallengeDisposition):
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (WebsiteDataStoreClient::WebsiteDataStoreClient):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreDelegate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::isServiceWorkerPageID const):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStoreClient.h:
        (WebKit::WebsiteDataStoreClient::didReceiveAuthenticationChallenge):
        * WebKit.xcodeproj/project.pbxproj:

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

        [iOS WK2] Make a strongly-typed TransactionID to replace uint64_t transactionIDs
        https://bugs.webkit.org/show_bug.cgi?id=199983

        Reviewed by Dean Jackson.
        
        Add TransactionID which is a MonotonicObjectIdentifier<TransactionIDType>. This is modeled
        after ObjectIdentifier<>, but we can't use that because it doesn't have a guarantee of
        values always increasing by 1 (all derived classes share the same value source). Also, we
        need a per-RemoteLayerTreeDrawingArea set of values, but a static seed would cause values to
        be incremented by all RemoteLayerTreeDrawingAreas in a WebProcess.

        Replace all the bare uint64_t with TransactionID, fixing message generation codegen.

        * Scripts/webkit/messages.py:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::transactionID const):
        (WebKit::RemoteLayerTreeTransaction::setTransactionID):
        * Shared/TransactionID.h: Added.
        (WebKit::MonotonicObjectIdentifier::MonotonicObjectIdentifier):
        (WebKit::MonotonicObjectIdentifier::isHashTableDeletedValue const):
        (WebKit::MonotonicObjectIdentifier::encode const):
        (WebKit::MonotonicObjectIdentifier::decode):
        (WebKit::MonotonicObjectIdentifier::operator== const):
        (WebKit::MonotonicObjectIdentifier::operator> const):
        (WebKit::MonotonicObjectIdentifier::operator>= const):
        (WebKit::MonotonicObjectIdentifier::operator< const):
        (WebKit::MonotonicObjectIdentifier::operator<= const):
        (WebKit::MonotonicObjectIdentifier::operator!= const):
        (WebKit::MonotonicObjectIdentifier::increment):
        (WebKit::MonotonicObjectIdentifier::next const):
        (WebKit::MonotonicObjectIdentifier::toUInt64 const):
        (WebKit::MonotonicObjectIdentifier::operator bool const):
        (WebKit::MonotonicObjectIdentifier::loggingString const):
        (WebKit::MonotonicObjectIdentifier::hashTableDeletedValue):
        (WebKit::MonotonicObjectIdentifier::isValidIdentifier):
        (WebKit::operator<<):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::lastLayerTreeTransactionID const):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processWillSwapOrDidExit]):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.messages.in:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::willCommitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::commitPotentialTap):
        (WebKit::WebPageProxy::handleTap):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        (WebKit::RemoteLayerTreeDrawingArea::nextTransactionID const):
        (WebKit::RemoteLayerTreeDrawingArea::lastCommittedTransactionID const):
        (WebKit::RemoteLayerTreeDrawingArea::takeNextTransactionID):
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::firstLayerTreeTransactionIDAfterDidCommitLoad const):
        (WebKit::WebFrame::setFirstLayerTreeTransactionIDAfterDidCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::handlePotentialDoubleTapForDoubleClickAtPoint):
        (WebKit::WebPage::commitPotentialTap):

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

        Make CacheStorageEngineCaches's decodeCachesNames() more robust against bad input data
        https://bugs.webkit.org/show_bug.cgi?id=201102

        Reviewed by Antti Koivisto.

        Use Vector::tryReserveCapacity() instead of Vector::reserveInitialCapacity() in CacheStorage::decodeCachesNames()
        since the size is read from disk and thus cannot be trusted. If the size is too large, reserveInitialCapacity()
        would end up crashing the network process. Now, we merely discard the data if tryReserveCapacity() fails because
        the size is too large.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::decodeCachesNames):

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

        [iOS] [WebKit2] Tapping on the “I’m” text suggestion after typing “i’” does nothing
        https://bugs.webkit.org/show_bug.cgi?id=201085
        <rdar://problem/53056118>

        Reviewed by Tim Horton.

        Currently, logic in applyAutocorrectionInternal only selects the range to autocorrect if the text of the range
        matches the string to replace (delivered to us from UIKit). In the case of changing "I’" to "I’m", the string to
        replace is "I'" (with a straight quote rather than an apostrophe), even though the DOM contains an apostrophe.

        This is because kbd believes that the document context contains straight quotes (rather than apostrophes). For
        native text views, this works out because UIKit uses relative UITextPositions to determine the replacement
        range rather than by checking against the contents of the document. However, WKWebView does not have the ability
        to synchronously compute and reason about arbitrary UITextPositions relative to the selection, so we instead
        search for the string near the current selection when applying autocorrections.

        Of course, this doesn't work in this scenario because the replacement string contains a straight quote, yet the
        text node contains an apostrophe, so we bail and don't end up replacing any text. To address this, we repurpose
        TextIterator helpers currently used to allow find-in-page to match straight quotes against apostrophes; instead
        of matching the replacement string exactly, we instead match the quote-folded versions of these strings when
        finding the range to replace.

        Test: fast/events/ios/autocorrect-with-apostrophe.html

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

2019-08-23  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix after r249059

        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::NfcConnection::NfcConnection):
        Remove the HAVE() macro.

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

        [geolocation] Rename interfaces and remove [NoInterfaceObject]
        https://bugs.webkit.org/show_bug.cgi?id=200885

        Reviewed by Alex Christensen.

        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::create):
        * Shared/WebGeolocationPosition.h:
        (WebKit::WebGeolocationPosition::corePosition const):
        (WebKit::WebGeolocationPosition::WebGeolocationPosition):
        * UIProcess/API/C/WKGeolocationPosition.cpp:
        (WKGeolocationPositionCreate_c):
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebKit::WebGeolocationManagerProxy::lastPosition const):
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKLegacyCoreLocationProvider positionChanged:]):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::didChangePosition):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        * WebProcess/Geolocation/WebGeolocationManager.messages.in:
        * WebProcess/WebCoreSupport/WebGeolocationClient.cpp:
        (WebKit::WebGeolocationClient::lastPosition):
        * WebProcess/WebCoreSupport/WebGeolocationClient.h:

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

        Unreviewed, rolling out r249001.

        Caused one layout test to fail on all configurations and
        another to time out on Catalina / iOS 13.

        Reverted changeset:

        "Add a WebsiteDataStore delegate to handle
        AuthenticationChallenge that do not come from pages"
        https://bugs.webkit.org/show_bug.cgi?id=196870
        https://trac.webkit.org/changeset/249001

2019-08-23  Brian Burg  <bburg@apple.com>

        REGRESSION(r248713): WebDriver commands which target the implicit main frame now hit an ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=200793
        <rdar://problem/54516988>

        Reviewed by Chris Dumez.

        SimulatedInputDispatcher and its callers need to support Optional<FrameIdentifier>
        and WTF::nullopt as an encoding for the implicit main frame.

        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::resolveLocation):
        (WebKit::SimulatedInputDispatcher::run):

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::viewportInViewCenterPointOfElement):
        (WebKit::WebAutomationSession::performInteractionSequence):
        (WebKit::WebAutomationSession::cancelInteractionSequence):

2019-08-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support NFC authenticators for iOS
        https://bugs.webkit.org/show_bug.cgi?id=188624
        <rdar://problem/43354214>

        Reviewed by Chris Dumez.

        This patch implements support for NFC authenticators including both FIDO2 and U2F ones. It utilizes a private
        framework called NearField instead of CoreNFC to be able to supply a custom UI later if necessary.

        The patch follows almost the same flow as previous HID and Local authenticator support.
        1) Discovery is via NfcService which will invoke NFHardwareManager to start a generic NFC reader session.
        2) Once a reader session is established, a NfcConnection is created to start the polling and register the WKNFReaderSessionDelegate
        to wait for 'didDetectTags'.
        3) When tags are detected, NfcConnection will determine if it meets our requriements: { type, connectability, fido applet availability }.
        The first tag that meets all requirement will then be returned for WebAuthn operations.
        4) The first WebAuthn operation is to send authenticatorGetInfo command to determine the supported protocol, and then initialize corresponding
        authenticators. Noted, the sending/receiving of this command is now abstracted into FidoService which will be shared across HidService and NfcService.
        5) From then, the actual WebAuthn request, either makeCredential or getAssertion will be sent.

        For testing, this patch follows the same flow as well.
        1) MockNfcService overrides NfcService to mock the behavior of NFC Tags discovery.
        2) The same class also swizzles methods from NFReaderSession to mock tag connection and communication.

        * Platform/spi/Cocoa/NearFieldSPI.h: Added.
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManagerInternal::collectTransports):
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp:
        (WebKit::AuthenticatorTransportService::create):
        (WebKit::AuthenticatorTransportService::createMock):
        * UIProcess/WebAuthentication/Cocoa/HidService.h:
        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        (WebKit::HidService::HidService):
        (WebKit::HidService::deviceAdded):
        (WebKit::HidService::continueAddDeviceAfterGetInfo): Deleted.
        * UIProcess/WebAuthentication/Cocoa/NearFieldSoftLink.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        * UIProcess/WebAuthentication/Cocoa/NearFieldSoftLink.mm: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm: Added.
        (WebKit::fido::compareVersion):
        (WebKit::NfcConnection::NfcConnection):
        (WebKit::NfcConnection::~NfcConnection):
        (WebKit::NfcConnection::transact const):
        (WebKit::NfcConnection::didDetectTags const):
        * UIProcess/WebAuthentication/Cocoa/NfcService.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        * UIProcess/WebAuthentication/Cocoa/NfcService.mm: Added.
        (WebKit::NfcService::NfcService):
        (WebKit::NfcService::~NfcService):
        (WebKit::NfcService::didConnectTag):
        (WebKit::NfcService::startDiscoveryInternal):
        (WebKit::NfcService::platformStartDiscovery):
        * UIProcess/WebAuthentication/Cocoa/WKNFReaderSessionDelegate.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        * UIProcess/WebAuthentication/Cocoa/WKNFReaderSessionDelegate.mm: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        (-[WKNFReaderSessionDelegate initWithConnection:]):
        (-[WKNFReaderSessionDelegate readerSession:didDetectTags:]):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::send):
        (WebKit::MockHidConnection::registerDataReceivedCallbackInternal):
        (WebKit::MockHidConnection::parseRequest):
        (WebKit::MockHidConnection::feedReports):
        (WebKit::MockHidConnection::shouldContinueFeedReports):
        * UIProcess/WebAuthentication/Mock/MockNfcService.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        * UIProcess/WebAuthentication/Mock/MockNfcService.mm: Added.
        (-[WKMockNFTag type]):
        (-[WKMockNFTag initWithNFTag:]):
        (-[WKMockNFTag description]):
        (-[WKMockNFTag isEqualToNFTag:]):
        (-[WKMockNFTag initWithType:]):
        (WebKit::MockNfcService::MockNfcService):
        (WebKit::MockNfcService::transceive):
        (WebKit::MockNfcService::platformStartDiscovery):
        (WebKit::MockNfcService::detectTags const):
        * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h:
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.h:
        * UIProcess/WebAuthentication/fido/CtapNfcDriver.cpp: Added.
        (WebKit::CtapNfcDriver::CtapNfcDriver):
        (WebKit::CtapNfcDriver::transact):
        (WebKit::CtapNfcDriver::respondAsync const):
        * UIProcess/WebAuthentication/fido/CtapNfcDriver.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        * UIProcess/WebAuthentication/fido/FidoService.cpp: Added.
        (WebKit::FidoService::FidoService):
        (WebKit::FidoService::getInfo):
        (WebKit::FidoService::continueAfterGetInfo):
        * UIProcess/WebAuthentication/fido/FidoService.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/HidService.h.
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * WebKit.xcodeproj/project.pbxproj:

2019-08-23  Kate Cheney  <katherine_cheney@apple.com>

        Support ITP on a per-session basis (198923)
        https://bugs.webkit.org/show_bug.cgi?id=198923

        Reviewed by Chris Dumez.

        The original implementation of resourceLoadStatisticsUpdated
        did not allow for ITP on a per session basis due to the sessionID
        not being passed to the resourceLoadStatisticsUpdated function.
        This patch allows access of the correct networkSession by passing
        all resourceLoadStatistics in a new data structure of key-value
        pairs, where the sessionID is the key.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::resourceLoadStatisticsUpdated):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * WebProcess/WebProcess.cpp:

2019-08-23  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r249031.

        Causes multiple test failures on iOS simulator

        Reverted changeset:

        "[iOS] Should show input view when became first responder if
        keyboard was showing when the view was resigned"
        https://bugs.webkit.org/show_bug.cgi?id=200902
        https://trac.webkit.org/changeset/249031

2019-08-22  Andy Estes  <aestes@apple.com>

        [watchOS] Disable Content Filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=201047

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

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

        [iOS] Should show input view when became first responder if keyboard was showing when the view was resigned
        https://bugs.webkit.org/show_bug.cgi?id=200902
        <rdar://problem/54231756>

        Reviewed by Wenson Hsieh.

        When resigning first responder save whether the peripheral host has an input view on screen,
        including the software keyboard, so that we show the input view(s) again when the WKWebView
        is made first responder. In Safari, this avoids the need for a person to explicitly focus an
        editable element again to bring up the keyboard when returning to a tab they were previously
        typing in. It also makes the behavior of switching tabs in Safari with a software keyboard
        match the behavior of doing the same thing when a hardware keyboard attached.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::focusedElementDidChangeInputMode):
        Pass a diff of the activity state from the web process to the UI process so that we can
        differentiate between an inputmode change as a result of page deactivation vs a change
        caused by some other means. We need to differentiate these cases because we want to
        ignore a page that sets inputmode "none" (i.e. a request to hide the keyboard) from inside
        a focus event handler if the handler was called as part of the process of page activation
        (i.e. switching to the tab). Google Docs is one example of a web site that sets inputmode
        to "none" as a result of the page activation process.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]): Clear out state.
        (-[WKContentView resignFirstResponderForWebView]): Save whether the peripheral host is on screen
        into a local before ending the editing session. We then copy the local into the ivar if we
        actually will resign. This ordering is explicitly done because:
                1. Ending the editing session may dismiss the keyboard => we need to query the peripheral
                   host first.
                2. If the view is being resigned as a result of a keyboard dismissal (i.e. a person pressed
                   the hide keyboard button on iPad) then the user has indicated that they are finished
                   with the keyboard and we do not want to show the keyboard on page re-activation => we
                   do not want to copy the local to the ivar.
                3. If the view refuses to resign itself then it does not make sense to save the keyboard
                   state as responder status hasn't changed.
        (-[WKContentView shouldShowAutomaticKeyboardUI]): Ignore inputmode="none", if needed.
        (-[WKContentView _didCommitLoadForMainFrame]): Clear out state.
        (-[WKContentView isFirstResponderOrBecomingFirstResponder]): Added.
        (-[WKContentView shouldShowInputViewOnPageActivation:]): Added.
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
        Update ivar if this element is being focused as a result of page activation.
        (-[WKContentView _didUpdateInputMode:activityStateChanges:]): Modified to take the activity state
        diff. If the input mode was changed as a result of page activation then we want to update our ivar
        so that when we call -reloadInputViews and UIKit calls us back in -shouldShowAutomaticKeyboardUI we
        will know to ignore inputmode set to "none" when determining whether to show the automatic keyboard UI.
        Note that we do not need to check/track whether an earlier -_elementDidFocus actually started an
        input session as part of updating the value of our ivar because if an input session was not started,
        say the embedding client disallowed it, then we would not have a focused element => we early return from
        this function. Also remove duplication and improve code readbility by making use of the convenience function
        hasFocusedElement() instead of duplicating what it does.
        (-[WKContentView _didUpdateInputMode:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::focusedElementDidChangeInputMode): Modified to take the activity state diff
        and pass it through.
        (WebKit::WebPageProxy::didReleaseAllTouchPoints): Pass the empty set for the activity state diff to
        keep our current behavior.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::focusedElementDidChangeInputMode): Send the activity state diff to the UI process.
2019-08-22  Keith Rollin  <krollin@apple.com>

        Remove logging that contains a URL
        https://bugs.webkit.org/show_bug.cgi?id=201052
        <rdar://problem/54613204>

        Reviewed by Chris Dumez.

        checkURLReceivedFromWebProcess in WebProcessProxy.cpp contains an old
        logging line that logs a URL. We don't log URLs any more for privacy
        reasons, so remove this.

        A search for WTFLogAlways.*url turns up other matches, but those are
        either false positives or cases where the URLs are logged only on
        demand by the developer as part of debugging.
        checkURLReceivedFromWebProcess is the only place where a URL is logged
        as a matter of course.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):

2019-08-22  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fixes for non-unified builds after r248547
        https://bugs.webkit.org/show_bug.cgi?id=201044

        Reviewed by Philippe Normand.

        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp: Add missing inclusion of
        the wtf/CrossThreadCopier.h header.
        * WebProcess/WebStorage/StorageNamespaceImpl.h: Add missing inclusion of the
        WebCore/PageIdentifier.h header.

2019-08-22  Alex Christensen  <achristensen@webkit.org>

        Disable legacy TLS versions and add a temporary default to re-enable it
        https://bugs.webkit.org/show_bug.cgi?id=200945

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):

2019-08-17  Darin Adler  <darin@apple.com>

        Use makeString and multi-argument StringBuilder::append instead of less efficient multiple appends
        https://bugs.webkit.org/show_bug.cgi?id=200862

        Reviewed by Ryosuke Niwa.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::setAndSerializeSandboxParameters): Use one append instead of multiple.

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

        Typing Korean in title field after typing in the body inserts extraneous characters on blog.naver.com
        https://bugs.webkit.org/show_bug.cgi?id=201023
        <rdar://problem/54294794>

        Reviewed by Ryosuke Niwa.

        After r242833, we began to avoid sending redundant ElementDidFocus updates in the case where a focused element
        was blurred and refocused within the same runloop. This was done to prevent the input view from flickering due
        to input view reloading, as well as scrolling to reveal the focused element, when tapping to change selection on
        Microsoft Word online.

        However, on blog.naver.com, these ElementDidFocus messages were necessary in order to ensure that the platform
        input context changes when moving between the title and body fields, or when tapping to change selection. This
        is because blog.naver.com uses a hidden contenteditable area under a subframe (see WebCore ChangeLog for more
        detail here). While text is never directly inserted into this hidden contenteditable, the events are observed
        and used to "play back" editing in the main visible content area.

        Thus, when moving between the title and body fields (or when changing selection within either), the only hint we
        get is that the hidden editable element is blurred and immediately refocused. Since we no longer send
        ElementDidFocus updates in this scenario, UIKeyboardImpl and kbd are not aware that the page has effectively
        changed input contexts.

        Combined with the fact that Korean IME on iOS may insert additional text given the document context (i.e. text
        that the input manager, kbd, thinks we've previously inserted), this means that when typing several characters
        into the body field on naver and then switching to edit the title, initial keystrokes may insert unexpected
        text in the title field.

        To fix this, we add some hooks to notify the UI process when an element that was blurred has been immediately
        refocused. Upon receiving this message, the UI process then tells UIKeyboardImpl to re-retrieve its input
        context, which calls into -requestAutocorrectionContextWithCompletionHandler: in WKContentView. While notorious
        for being synchronous IPC, this is mitigated by (1) being limiting to only instances where we have a hidden
        editable area, and (2) being limited by a batching mechanism in the web process, such that if the focused
        element is blurred, refocused, re-blurred, and refocused many times in the same runloop, we'll only send a
        single UpdateInputContextAfterBlurringAndRefocusingElement message (as opposed to the many ElementDidFocus
        messages we would've sent in previous releases).

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Add a new mechanism to update the platform input context (on iOS, UIKeyboardImpl's document state) when focus
        moves away from and immediately returns to a hidden editable element.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::updateInputContextAfterBlurringAndRefocusingElement):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _updateInputContextAfterBlurringAndRefocusingElement]):

        Tell the active UIKeyboardImpl to refetch document state from the WKContentView. While this does result in a new
        autocorrection context request (which, unfortunately, triggers synchronous IPC to the web process), this request
        would've still happened anyways in the case where we would previously have sent an ElementDidFocus message.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateInputContextAfterBlurringAndRefocusingElement):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::elementDidFocus):

        In the case where we avoid sending a full ElementDidFocus message to the UI process due to refocusing the same
        element, we should still notify the UI process so that it can synchronize state between the application process
        and kbd. See above for more details.

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

2019-08-22  Youenn Fablet  <youenn@apple.com>

        Add a WebsiteDataStore delegate to handle AuthenticationChallenge that do not come from pages
        https://bugs.webkit.org/show_bug.cgi?id=196870

        Reviewed by Alex Christensen.

        Make NetworkProcess provide the session ID for any authentication challenge.
        In case there is no associated page for the authentication challenge or this is related to a service worker,
        ask the website data store to take a decision.
        Add website data store delegate to allow applications to make the decision.
        Restrict using the delegate to server trust evaluation only.

        Make ping loads reuse the same mechanism.

        Covered by service worker tests and updated beacon test.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::sessionID const):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::networkProcess):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::didReceiveChallenge):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/cocoa/AuthenticationChallengeDispositionCocoa.h: Copied from Tools/WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.h.
        * Shared/Authentication/cocoa/AuthenticationChallengeDispositionCocoa.mm: Copied from Source/WebKit/Shared/Authentication/cocoa/ClientCertificateAuthenticationXPCConstants.h.
        (WebKit::toAuthenticationChallengeDisposition):
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (WebsiteDataStoreClient::WebsiteDataStoreClient):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreDelegate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::isServiceWorkerPageID const):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStoreClient.h:
        (WebKit::WebsiteDataStoreClient::didReceiveAuthenticationChallenge):
        * WebKit.xcodeproj/project.pbxproj:

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

        [SOUP] NetworkProcessSoup does not initialize CacheOptions correctly
        https://bugs.webkit.org/show_bug.cgi?id=200886

        Reviewed by Philippe Normand.

        r247567 wrongly initializes CacheOptions in a local variable that is never used
        instead of using NetworkProcess's member variable, that is later used by the
        NetworkSession to initialize the cache.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):

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

        [Mail] Tapping top of message scrolls back to copied text instead of top of the message
        https://bugs.webkit.org/show_bug.cgi?id=200999
        <rdar://problem/54564878>

        Reviewed by Wenson Hsieh.

        In the case where you have a WebCore selection but are not first responder,
        when you tap the WKWebView to become first responder, EventHandler would
        bail from setting the selection, assuming UIKit was going to do it. This
        behavior was introduced in r233311.

        However, since we are not first responder, UIKit does not change the
        selection, since it considers the view to not be editable.

        Fix this by letting WebCore set the selection in this case, as it used to.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::shouldAllowSingleClickToChangeSelection const):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isShowingInputViewForFocusedElement const):
        Copy the logic from EventHandler, with the added caveat (which fixes the
        aforementioned behavior) that we will allow EventHandler to change the
        selection if we don't have a focused node in the UIKit sense, because
        we know that the platform text interaction code will *not* change the
        selection if that is the case, so it's up to us.

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

        Crash under NetworkCache::Data::mapToFile()
        https://bugs.webkit.org/show_bug.cgi?id=200996
        <rdar://problem/54570421>

        Reviewed by Geoffrey Garen.

        Make sure NetworkCache::Data::mapToFile() calls makeSafeToUseMemoryMapForPath() between
        creating the file and calling mmap().

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::add):
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::Data::mapToFile const):

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

        Have NetworkCache::store() null check its completion handler before calling it
        https://bugs.webkit.org/show_bug.cgi?id=200994

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        Stop passing nullptr for the completion handler now that the parameter has a default value.
        Note that passing nullptr here was likely wrong since the NetworkCache::store() implementation
        did not null-check the completion handler before calling it.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        Have NetworkCache::store() null check its completion handler before calling it as calling
        a null WTF::Function crashes.

        * NetworkProcess/cache/NetworkCache.h:
        Use nullptr as default parameter value for the completion handler.

2019-08-21  Rob Buis  <rbuis@igalia.com>

        Verify Prefetch and credential behavior
        https://bugs.webkit.org/show_bug.cgi?id=200000

        Reviewed by Youenn Fablet.

        Cancel cross-origin prefetches for Vary: Cookie.

        Test: http/wpt/prefetch/link-prefetch-cross-origin-vary-cookie.html

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        * NetworkProcess/cache/PrefetchCache.cpp:
        (WebKit::PrefetchCache::take):

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

        Put keygen element behind a runtime flag and disable it by default
        https://bugs.webkit.org/show_bug.cgi?id=200850

        Reviewed by Antti Koivisto.

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

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

        Crash under StringImpl::~StringImpl() in NetworkProcess::deleteWebsiteDataForRegistrableDomains()
        https://bugs.webkit.org/show_bug.cgi?id=200986
        <rdar://problem/32850192>

        Reviewed by Brent Fulgham.

        Code was calling postStorageTask() with a lambda that captures Strings that are not isolated copied.
        The lambda would get executed on another thread so this is not safe. The CrossThreadTask constructor
        does not take care of this for you, despite its name (the createCrossThreadTask() function does though).

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):

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

        Add internal setting to disable SecureContext checks
        https://bugs.webkit.org/show_bug.cgi?id=200980
        <rdar://problem/54438512>

        Reviewed by Alex Christensen.

        Add internal setting to disable SecureContext checks, in order to facilitate development
        for features like Service workers or device orientation / motion.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _secureContextChecksEnabled]):
        (-[WKPreferences _setSecureContextChecksEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

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

        registrableDomainsToRemoveWebsiteDataFor() does not need to return a HashMap
        https://bugs.webkit.org/show_bug.cgi?id=200985

        Reviewed by John Wilander.

        registrableDomainsToRemoveWebsiteDataFor() does not need to return a HashMap. It is more
        efficient to simply return a Vector since we never need to look up keys.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToRemoveWebsiteDataFor):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToRemoveWebsiteDataFor):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::domainsToString):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::deleteWebsiteDataForRegistrableDomains):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::deleteCookiesForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::deleteWebsiteDataForRegistrableDomains):
        * NetworkProcess/NetworkSession.h:

2019-08-21  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r248942.

        Causes multiple layout test crashes on MacOS Bots

        Reverted changeset:

        "Verify Prefetch and credential behavior"
        https://bugs.webkit.org/show_bug.cgi?id=200000
        https://trac.webkit.org/changeset/248942

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

        Remove support for watchOS < 6.0
        https://bugs.webkit.org/show_bug.cgi?id=200937
        <rdar://problem/54524009>

        Reviewed by Darin Adler.

        Update conditionals that reference __WATCH_OS_VERSION_MIN_REQUIRED and
        __WATCH_OS_VERSION_MAX_ALLOWED, assuming that they both have values >=
        60000. This means that expressions like
        "__WATCH_OS_VERSION_MIN_REQUIRED < 60000" are always False and
        "__WATCH_OS_VERSION_MIN_REQUIRED >= 60000" are always True.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

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

        [GTK] Build failure due to unwieldy definition of “None” from X11 headers
        https://bugs.webkit.org/show_bug.cgi?id=200984

        Reviewed by Carlos Alberto Lopez Perez.

        * SourcesGTK.txt: Mark AcceleratedBackingStore.cpp with @no-unify
        because it includes AcceleratedSurfaceX11.h when building with
        ENABLE_X11_TARGET=ON, which in turn will include the X11 headers.
        It is just lucky that most of the time the order of the generated
        #include statements in the unified sources has been masking this
        problem.

2019-08-21  Rob Buis  <rbuis@igalia.com>

        Verify Prefetch and credential behavior
        https://bugs.webkit.org/show_bug.cgi?id=200000

        Reviewed by Youenn Fablet.

        Cancel cross-origin prefetches for Vary: Cookie.

        Test: http/wpt/prefetch/link-prefetch-cross-origin-vary-cookie.html

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        * NetworkProcess/cache/PrefetchCache.cpp:
        (WebKit::PrefetchCache::take):

2019-08-21  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE] Build failure after r248846 ([WTF] Add makeUnique<T>, which ensures T is fast-allocated, makeUnique / makeUniqueWithoutFastMallocCheck part)
        https://bugs.webkit.org/show_bug.cgi?id=200973

        WPE fails to build with `-DENABLE_WPE_QT_API=ON` after changes done by r248846 in:

          Source/WebKit/UIProcess/API/wpe/qt/WPEQtView.cpp
          Source/WebKit/UIProcess/API/wpe/qt/WPEQtViewBackend.cpp

        ; to forces FastMalloc use.

        Related to:

          https://bugs.webkit.org/show_bug.cgi?id=200611
          https://bugs.webkit.org/show_bug.cgi?id=200620

        This patch puts WPEQt... classes into FastMalloc in the same way it
        was done by many others in r248603.

        Reviewed by Philippe Normand.

        * UIProcess/API/wpe/qt/WPEQtView.cpp:
        (WPEQtView::runJavaScript):
        * UIProcess/API/wpe/qt/WPEQtViewBackend.h:
        * UIProcess/API/wpe/qt/WPEQtViewLoadRequest.h:

2019-08-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] REGRESSION (248501): gmail.com images are still not shown on some versions of iPhone iOS13
        https://bugs.webkit.org/show_bug.cgi?id=200948

        Reviewed by Tim Horton.

        Apply the gmail.com quirk for all iPhone iOS versions till the gmail.com
        bug is fixed.

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

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

        WebSQLiteDatabaseTracker does not ensure it is still alive after dispatching to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=200925

        Reviewed by Geoffrey Garen.

        WebSQLiteDatabaseTracker does not ensure it is still alive after dispatching to the main thread,
        which is not safe. Use WeakPtr to address the issue.

        * Shared/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::willBeginFirstTransaction):
        (WebKit::WebSQLiteDatabaseTracker::didFinishLastTransaction):
        * Shared/WebSQLiteDatabaseTracker.h:

2019-08-20  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Fix scrolling in modern WebKit views
        https://bugs.webkit.org/show_bug.cgi?id=200923

        Reviewed by Don Olmstead.

        The initial implementation of scrolling in Direct2D had errors that
        caused hilarious rendering glitches. This patch corrects the logic
        so that page scroll is correct.

        This patch also fixes a bug that would trigger when resizing windows.

        * Shared/win/ShareableBitmapDirect2D.cpp:
        (WebKit::ShareableBitmap::paint):
        * UIProcess/BackingStore.h:
        (WebKit::BackingStore::renderTarget): Deleted.
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaProxyCoordinatedGraphics::sizeDidChange):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::deviceScaleFactorDidChange):
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h:
        * UIProcess/win/BackingStoreDirect2D.cpp:
        (WebKit::BackingStore::paint):
        (WebKit::BackingStore::incorporateUpdate):
        (WebKit::BackingStore::scroll):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint):
        (WebKit::WebView::onSizeEvent):

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

        Unsafe usage of CookieStorageObserver from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=200920

        Reviewed by Alex Christensen.

        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/Cocoa/APIHTTPCookieStoreCocoa.mm:
        (API::HTTPCookieStore::startObservingChangesToDefaultUIProcessCookieStore):

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

        Use a strongly typed identifier for StorageNamespace's identifier
        https://bugs.webkit.org/show_bug.cgi?id=200895

        Reviewed by Alex Christensen and Youenn Fablet.

        Use a strongly typed identifier for StorageNamespace's identifier instead of uint64_t, to
        avoid type confusion.

        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::LocalStorageNamespace):
        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::destroySessionStorageNamespace):
        (WebKit::StorageManager::cloneSessionStorageNamespace):
        (WebKit::StorageManager::createLocalStorageArea):
        (WebKit::StorageManager::createTransientLocalStorageArea):
        (WebKit::StorageManager::createSessionStorageArea):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateSessionStorageNamespace):
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::connectToLocalStorageArea):
        (WebKit::StorageManagerSet::connectToTransientLocalStorageArea):
        (WebKit::StorageManagerSet::connectToSessionStorageArea):
        (WebKit::StorageManagerSet::cloneSessionStorageNamespace):
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        * NetworkProcess/WebStorage/StorageManagerSet.messages.in:
        * Scripts/webkit/messages.py:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sessionStorageNamespaceIdentifier const):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebKit::WebPageGroupProxy::localStorageNamespaceIdentifier const):
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        * WebProcess/WebStorage/StorageNamespaceIdentifier.h: Copied from Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h.
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebKit::StorageNamespaceImpl::copy):
        (WebKit::StorageNamespaceImpl::sessionStoragePageID const):
        (WebKit::StorageNamespaceImpl::pageGroupID const):
        * WebProcess/WebStorage/StorageNamespaceImpl.h:
        (WebKit::StorageNamespaceImpl::storageNamespaceID const):
        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::getOrCreate):
        (WebKit::WebStorageNamespaceProvider::WebStorageNamespaceProvider):
        (WebKit::WebStorageNamespaceProvider::~WebStorageNamespaceProvider):
        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
        * WebProcess/WebStorage/WebStorageNamespaceProvider.h:

2019-08-20  Dean Jackson  <dino@apple.com>

        REGRESSION: Open in New Tab is missing from context menu
        https://bugs.webkit.org/show_bug.cgi?id=200909
        <rdar://problem/54476169>

        Reviewed by Simon Fraser.

        Don't assume the new API if webView:contextMenuWillPresentForElement:
        is implemented.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (needsDeprecatedPreviewAPI):

2019-08-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Support for JavaScript BigInt
        https://bugs.webkit.org/show_bug.cgi?id=180731
        <rdar://problem/36298748>

        Reviewed by Devin Rousso.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::WebInspectorUI):
        Enable BigInt in the Web Inspector process. It only makes use of
        `globalThis.BigInt(...)` to hold the value.

2019-08-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] WebKit2.dll can't link because of missing PAL's import symbols for WinCairo port
        https://bugs.webkit.org/show_bug.cgi?id=200910

        Unreviewed build fix for Windows port.

        * CMakeLists.txt: Added -DSTATICALLY_LINKED_WITH_PAL=1 if PAL_LIBRARY_TYPE is STATIC.

2019-08-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for WinCairo port.

        The base class of NetworkDataTask has been changed in r248874.

        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        (ref):
        (deref):
        Call 'ref' and 'deref' of NetworkDataTask instead of RefCounted<NetworkDataTask>.

2019-08-19  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix for security entitlements.

        Bug 200242 (r248164) changed the way that entitlements were generated
        and applied during the build. In that refactoring, the codesign
        parameter "-o library" was dropped. This change adds it back.

        * Configurations/BaseXPCService.xcconfig:

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

        NetworkDataTask is being ref'd / deref'd from several threads and is not ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200897

        Reviewed by Geoffrey Garen.

        NetworkDataTask subclasses RefCounted and is ref'd / deref'd on the main thread. However, there
        is code in NetworkDataTaskCocoa::resume() that was ref'ing / deref'ing it on a background thread,
        which is unsafe. To address the issue, Have NetworkDataTask subclass ThreadSafeRefCounted, and
        make sure it always gets destroyed on the main thread.

        * NetworkProcess/NetworkDataTask.h:

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::resume):
        Avoid some unnecessary refcounting churn.

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

        Move call to initializeMainThread introduced in r248549 to after WebKit.framework has been loaded
        https://bugs.webkit.org/show_bug.cgi?id=200896
        <rdar://problem/54479065>

        Reviewed by Chris Dumez.

        In XPCServiceMain we haven't been told which WebKit.framework to load yet, so when using staged frameworks it
        causes problems if we call a function from a WebKit framework.  We need to wait until after initializerFunctionPtr is called.

        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkServiceEntryPoint.mm:
        (NetworkServiceInitializer):
        * PluginProcess/EntryPoint/Cocoa/XPCService/PluginServiceEntryPoint.mm:
        (PluginServiceInitializer):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for PLATFORM_DRIVEN_TEXT_CHECKING
        https://bugs.webkit.org/show_bug.cgi?id=200620

        It is enabled if PLATFORM(MACCATALYST) is true.

        * UIProcess/Cocoa/TextCheckingController.h:

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

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545
        <rdar://problem/54201783>

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createIDBServer):
        (WebKit::NetworkProcess::addIndexedDatabaseSession):
        (WebKit::NetworkProcess::setIDBPerOriginQuota): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetIDBPerOriginQuota): Deleted.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setIDBPerOriginQuota): Deleted.
        * UIProcess/WebProcessPool.h:

2019-08-19  Youenn Fablet  <youenn@apple.com>

        Remove SessionID::emptySessionID()
        https://bugs.webkit.org/show_bug.cgi?id=200811

        Reviewed by Alex Christensen.

        Update SessionID call sites to use toUInt64.
        Remove debug asserts to isValid since construction of invalid session IDs can only happen in very specific cases
        typically for HashMaps.

        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::logUserInteraction):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::networkSession const):
        (WebKit::NetworkProcess::networkSessionByConnection const):
        (WebKit::NetworkProcess::setSession):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::existingSWOriginStoreForSession const):
        (WebKit::NetworkProcess::webProcessWasDisconnected):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        (WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap):
        (WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID):
        * WebProcess/Cache/WebCacheStorageProvider.cpp:
        (WebKit::WebCacheStorageProvider::createCacheStorageConnection):
        * WebProcess/Cache/WebCacheStorageProvider.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::WebSWClientConnection):
        (WebKit::WebSWClientConnection::initializeConnectionIfNeeded):
        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
        (WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative build fix for GTK and WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=200620

        * UIProcess/socket/RemoteInspectorProtocolHandler.cpp:

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix in WinCairo and GTK ports
        https://bugs.webkit.org/show_bug.cgi?id=200767

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

2019-08-19  Youenn Fablet  <youenn@apple.com>

        enumerateDevices should return the same JS objects if called twice
        https://bugs.webkit.org/show_bug.cgi?id=200767

        Reviewed by Eric Carlson.

        Update code as enumerate device request is now gone.
        Make use of async IPC to simplify code since we are now passing a completion handler directly.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::enumerateMediaDevices):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::enumerateMediaDevices):
        * WebProcess/WebCoreSupport/WebUserMediaClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2019-08-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, makeUnique / makeUniqueWithoutFastMallocCheck part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoffrey Garen.

        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::startMonitoringDisk):
        (WebKit::ResourceLoadStatisticsPersistentStorage::monitorDirectoryForNewStatistics):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertNetworkLoadToDownload):
        (WebKit::DownloadManager::resumeDownload):
        * NetworkProcess/Downloads/DownloadMap.cpp:
        (WebKit::DownloadMap::add):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        * NetworkProcess/NetworkContentRuleListManager.cpp:
        (WebKit::NetworkContentRuleListManager::addContentRuleLists):
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::download):
        * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp:
        (WebKit::NetworkHTTPSUpgradeChecker::NetworkHTTPSUpgradeChecker):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveResponse):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        (WebKit::NetworkLoadChecker::contentSecurityPolicy):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::switchToNewTestingSession):
        (WebKit::NetworkProcess::ensureSession):
        (WebKit::NetworkProcess::swServerForSession):
        (WebKit::NetworkProcess::initializeQuotaUsers):
        (WebKit::NetworkProcess::storageQuotaManager):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::addSupplement):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/NetworkSocketChannel.cpp:
        (WebKit::NetworkSocketChannel::create):
        * NetworkProcess/PreconnectTask.cpp:
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::scheduleDatabaseUpdate):
        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/SessionStorageNamespace.cpp:
        (WebKit::SessionStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::clone const):
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateSessionStorageNamespace):
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::add):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.cpp:
        (WebKit::TransientLocalStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::Cache):
        (WebKit::NetworkCache::Cache::makeEntry):
        (WebKit::NetworkCache::Cache::makeRedirectEntry):
        (WebKit::NetworkCache::Cache::update):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::registerSubresourceLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve):
        (WebKit::NetworkCache::SpeculativeLoadManager::addPreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::satisfyPendingRequests):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateSubresource):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::readRecord):
        (WebKit::NetworkCache::retrieveFromMemory):
        (WebKit::NetworkCache::Storage::retrieve):
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::traverse):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourcesEntry::decodeStorageRecord):
        * NetworkProcess/cache/PrefetchCache.cpp:
        (WebKit::PrefetchCache::store):
        (WebKit::PrefetchCache::storeRedirect):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):
        (WebKit::NetworkProcess::networkHTTPSUpgradeChecker):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        (WebKit::NetworkSessionCocoa::create):
        (WebKit::NetworkSessionCocoa::createWebSocketTask):
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):
        * NetworkProcess/curl/NetworkSessionCurl.h:
        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm:
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinator):
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorAuthorizationPresenter):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::download):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
        (WebKit::NetworkSessionSoup::createWebSocketTask):
        * NetworkProcess/soup/NetworkSessionSoup.h:
        * NetworkProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamReadAsync):
        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
        (WebKit::NetworkRTCMonitor::startUpdating):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        (WebKit::NetworkRTCProvider::createSocket):
        (WebKit::NetworkRTCProvider::wrapNewTCPConnection):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::createSyncMessageEncoder):
        (IPC::Connection::enableIncomingMessagesThrottling):
        (IPC::Connection::dispatchSyncMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::send):
        (IPC::Connection::sendWithAsyncReply):
        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::unwrapForTesting):
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessageAsync):
        * Platform/IPC/MessageSender.h:
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
        (IPC::Connection::open):
        (IPC::createMessageDecoder):
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage):
        (IPC::Connection::sendOutputMessage):
        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::readEventHandler):
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForPort):
        (WebKit::LayerHostingContext::createForExternalHostingProcess):
        (WebKit::LayerHostingContext::createForExternalPluginHostingProcess):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPluginInternal):
        * Shared/API/APIURL.h:
        (API::URL::create):
        (API::URL::parseURLIfNecessary const):
        * Shared/API/Cocoa/RemoteObjectInvocation.mm:
        (WebKit::RemoteObjectInvocation::decode):
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _initWithWebPage:]):
        (-[_WKRemoteObjectRegistry _initWithWebPageProxy:]):
        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        * Shared/API/glib/WebKitContextMenuItem.cpp:
        (webkitContextMenuItemCreate):
        (webkit_context_menu_item_new):
        (webkit_context_menu_item_new_from_gaction):
        (webkit_context_menu_item_new_from_stock_action):
        (webkit_context_menu_item_new_from_stock_action_with_label):
        (webkit_context_menu_item_new_with_submenu):
        (webkit_context_menu_item_new_separator):
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtension::Handle::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::texmapLayer):
        (WebKit::CoordinatedGraphicsScene::ensureRootLayer):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::ThreadedCompositor):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::registerNPObject):
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * Shared/win/ShareableBitmapDirect2D.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::registerObserver):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetInjectedBundleClient):
        (WKContextSetHistoryClient):
        (WKContextSetDownloadClient):
        * UIProcess/API/C/WKGeolocationManager.cpp:
        (WKGeolocationManagerSetProvider):
        * UIProcess/API/C/WKNotificationManager.cpp:
        (WKNotificationManagerSetProvider):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient):
        (WKPageSetPageDiagnosticLoggingClient):
        (WKPageSetPageFindClient):
        (WKPageSetPageFindMatchesClient):
        (WKPageSetPageFormClient):
        (WKPageSetPageLoaderClient):
        (WKPageSetPagePolicyClient):
        (WKPageSetPageUIClient):
        (WKPageSetPageStateClient):
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (-[WKObservablePageState initWithPage:]):
        * UIProcess/API/C/wpe/WKView.cpp:
        (WKViewSetViewClient):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _initWithPageRef:]):
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
        (-[WKHTTPCookieStore addObserver:]):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setDownloadDelegate:]):
        (-[WKProcessPool _setAutomationDelegate:]):
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController addScriptMessageHandler:name:]):
        (-[WKUserContentController _addScriptMessageHandler:name:userContentWorld:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        (-[WKWebView _setInputDelegate:]):
        * UIProcess/API/Cocoa/_WKAutomationSession.mm:
        (-[_WKAutomationSession setDelegate:]):
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (-[_WKRemoteWebInspectorViewController init]):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::readySQLiteStatement):
        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        (webkitAutomationSessionConstructed):
        * UIProcess/API/glib/WebKitContextMenuClient.cpp:
        (attachContextMenuClientToView):
        * UIProcess/API/glib/WebKitCustomProtocolManagerClient.cpp:
        (attachCustomProtocolManagerClientToContext):
        * UIProcess/API/glib/WebKitDownloadClient.cpp:
        (attachDownloadClientToContext):
        * UIProcess/API/glib/WebKitFaviconDatabase.cpp:
        (webkitFaviconDatabaseOpen):
        * UIProcess/API/glib/WebKitFindController.cpp:
        (webkitFindControllerConstructed):
        * UIProcess/API/glib/WebKitFormClient.cpp:
        (attachFormClientToView):
        * UIProcess/API/glib/WebKitGeolocationManager.cpp:
        (webkitGeolocationManagerCreate):
        * UIProcess/API/glib/WebKitIconLoadingClient.cpp:
        (attachIconLoadingClientToView):
        * UIProcess/API/glib/WebKitInjectedBundleClient.cpp:
        (attachInjectedBundleClientToContext):
        * UIProcess/API/glib/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::WebKitNotificationProvider):
        * UIProcess/API/glib/WebKitUIClient.cpp:
        (attachUIClientToView):
        * UIProcess/API/glib/WebKitUserContentManager.cpp:
        (webkit_user_content_manager_register_script_message_handler):
        (webkit_user_content_manager_register_script_message_handler_in_world):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_set_automation_allowed):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewConstructed):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/gtk/WebKitEmojiChooser.cpp:
        (webkitEmojiChooserSetupEmojiSections):
        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        (WebKit::RemoteInspectorProtocolHandler::handleRequest):
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        (webkitWebInspectorCreate):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):
        (webkitWebViewBaseGestureController):
        (webkitWebViewBaseDragAndDropHandler):
        (webkitWebViewBaseDidRelaunchWebProcess):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView maybeInstallIconLoadingClient]):
        (-[WKView initWithFrame:processPool:configuration:]):
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::View):
        (WKWPE::View::setClient):
        * UIProcess/API/wpe/qt/WPEQtView.cpp:
        (WPEQtView::notifyLoadChangedCallback):
        (WPEQtView::notifyLoadFailedCallback):
        (WPEQtView::runJavaScript):
        * UIProcess/API/wpe/qt/WPEQtViewBackend.cpp:
        (WPEQtViewBackend::create):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::WebAutomationSession):
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::send):
        * UIProcess/Cocoa/IconLoadingDelegate.mm:
        (WebKit::IconLoadingDelegate::createIconLoadingClient):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::createContextMenuClient):
        (WebKit::UIDelegate::createUIClient):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize):
        (WebKit::WebProcessPool::startDisplayLink):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::processWasUnexpectedlyUnsuspended):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::createDrawingAreaProxy):
        (WebKit::WebViewImpl::setTextIndicator):
        (WebKit::WebViewImpl::ensureGestureController):
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaProxyCoordinatedGraphics::incorporateUpdate):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::dispatchAfterEnsuringDrawing):
        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::getDataFromDecoder const):
        (WebKit::DeviceIdHashSaltStorage::completeDeviceIdHashSaltForOriginCall):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):
        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::setInitialConnectedGamepads):
        (WebKit::UIGamepadProvider::platformGamepadConnected):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::createDownloadProxy):
        (WebKit::NetworkProcessProxy::takeUploadAssertion):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        (WebKit::WebNotificationManagerProxy::setProvider):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::pluginRequiresGtk2):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::didConnectToProcess):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::initializeDebugIndicator):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (WebKit::RemoteLayerTreeNode::createWithPlainLayer):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::ScrollingTreeOverflowScrollingNodeIOS):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::ScrollingTreeFrameScrollingNodeRemoteMac):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::ScrollingTreeOverflowScrollingNodeRemoteMac):
        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        (WebKit::HidService::deviceAdded):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        (WebKit::WebGeolocationManagerProxy::setProvider):
        * UIProcess/WebMediaSessionFocusManager.cpp:
        (WebKit::WebMediaSessionFocusManager::setFocusedMediaElement):
        * UIProcess/WebPageInspectorController.cpp:
        (WebKit::WebPageInspectorController::WebPageInspectorController):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::m_resetRecentCrashCountTimer):
        (WebKit::WebPageProxy::setFormClient):
        (WebKit::WebPageProxy::setUIClient):
        (WebKit::WebPageProxy::setIconLoadingClient):
        (WebKit::WebPageProxy::setFindClient):
        (WebKit::WebPageProxy::setFindMatchesClient):
        (WebKit::WebPageProxy::setContextMenuClient):
        (WebKit::WebPageProxy::setInjectedBundleClient):
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::setDrawingArea):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::processNextQueuedWheelEvent):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::setFullscreenClient):
        (WebKit::WebPageProxy::userMediaPermissionRequestManager):
        (WebKit::WebPageProxy::setScrollPerformanceDataCollectionEnabled):
        (WebKit::WebPageProxy::speechSynthesisData):
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::addProcessIfPossible):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::setInjectedBundleClient):
        (WebKit::WebProcessPool::setHistoryClient):
        (WebKit::WebProcessPool::setDownloadClient):
        (WebKit::WebProcessPool::setAutomationClient):
        (WebKit::WebProcessPool::setLegacyCustomProtocolManagerClient):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::didCollectPrewarmInformation):
        (WebKit::WebProcessPool::setWebProcessHasUploads):
        (WebKit::WebProcessPool::setWebProcessIsPlayingAudibleMedia):
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend):
        * UIProcess/glib/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::inspect):
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::checkRequirements):
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::dragDataSelection):
        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::initializeEGL):
        * UIProcess/ios/EditableImageController.mm:
        (WebKit::EditableImageController::ensureEditableImage):
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView didMoveToWindow]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        (-[WKContentView _createDrawingAreaProxy:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView becomeFirstResponderForWebView]):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::elementDidFocus):
        (WebKit::WebPageProxy::paymentCoordinatorAuthorizationPresenter):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:]):
        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient initWithPage:view:usePlatformFindUI:]):
        * UIProcess/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::inspect):
        * UIProcess/socket/RemoteInspectorProtocolHandler.cpp:
        (WebKit::RemoteInspectorProtocolHandler::platformStartTask):
        * UIProcess/win/BackingStoreDirect2D.cpp:
        (WebKit::BackingStore::createBackend):
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        * WebProcess/Gamepad/WebGamepadProvider.cpp:
        (WebKit::WebGamepadProvider::setInitialGamepads):
        (WebKit::WebGamepadProvider::gamepadConnected):
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetContextMenuClient):
        (WKBundlePageSetEditorClient):
        (WKBundlePageSetFormClient):
        (WKBundlePageSetPageLoaderClient):
        (WKBundlePageSetResourceLoadClient):
        (WKBundlePageSetUIClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayCreate):
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
        (WKBundlePageBannerCreateBannerWithCALayer):
        * WebProcess/InjectedBundle/API/glib/DOM/DOMObjectCache.cpp:
        (WebKit::getOrCreateDOMObjectCacheFrameObserver):
        (WebKit::DOMObjectCache::put):
        * WebProcess/InjectedBundle/API/glib/WebKitExtensionManager.cpp:
        (WebKit::WebKitExtensionManager::initialize):
        * WebProcess/InjectedBundle/API/glib/WebKitWebEditor.cpp:
        (webkitWebEditorCreate):
        * WebProcess/InjectedBundle/API/glib/WebKitWebExtension.cpp:
        (webkitWebExtensionCreate):
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (webkitFrameGetOrCreate):
        (webkitWebPageCreate):
        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.mm:
        (-[WKDOMTextIterator initWithRange:]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]):
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::InjectedBundle):
        (WebKit::InjectedBundle::setClient):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::PendingMessage::PendingMessage):
        (WebKit::WebSocketChannel::send):
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createPeerConnection):
        (WebKit::LibWebRTCProvider::createSocketFactory):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createServerTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createUdpSocket):
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createNewConnectionSocket):
        (WebKit::LibWebRTCSocketFactory::createAsyncResolver):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::PluginDestructionProtector::PluginDestructionProtector):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::scheduleTimer):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::deliverData):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePluginX11::create):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::createWebEvent const):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createColorChooser):
        (WebKit::WebChromeClient::createDataListSuggestionPicker):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::showPaintRect):
        * WebProcess/WebCoreSupport/WebPasteboardOverrides.cpp:
        (WebKit::WebPasteboardOverrides::addOverride):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::ensureBackingStore):
        (WebKit::PlatformCALayerRemote::setTransform):
        (WebKit::PlatformCALayerRemote::setSublayerTransform):
        (WebKit::PlatformCALayerRemote::setFilters):
        (WebKit::PlatformCALayerRemote::setShapeRoundedRect):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::PlatformCALayerRemoteTiledBacking):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSubframe):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):
        (WebKit::WebPage::setInjectedBundleContextMenuClient):
        (WebKit::WebPage::setInjectedBundleEditorClient):
        (WebKit::WebPage::setInjectedBundleFormClient):
        (WebKit::WebPage::setInjectedBundlePageLoaderClient):
        (WebKit::WebPage::setInjectedBundleResourceLoadClient):
        (WebKit::WebPage::setInjectedBundleUIClient):
        (WebKit::WebPage::close):
        (WebKit::WebPage::beginPrinting):
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::print):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::markAllLayersVolatile):
        (WebKit::WebProcess::ensureAutomationSessionProxy):
        (WebKit::WebProcess::libWebRTCNetwork):
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::addSupplement):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::Source):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::processTaskStateDidChange):
        (WebKit::WebProcess::updateCPUMonitorState):

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

        [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=200543
        <rdar://problem/49394015>
        
        Reviewed by Brent Fulgham.

        Adopt SPI to issue a process-specific sandbox extension for local file read, passing it the process
        identifier of the WebContent process.
        
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::SandboxExtension::createHandleForReadByPid):
        * Shared/SandboxExtension.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadFile):

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

        Layout tests that call resizeTo() crash when run on iOS with IOSurface support enabled
        https://bugs.webkit.org/show_bug.cgi?id=200866
        <rdar://problem/50254021>

        Reviewed by Simon Fraser.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        Implement convertTo{Device,User}Space in PageClientImplIOS.
        We don't actually do any conversion. For our purposes, the window is
        "device" space, and we never allow iOS WebKit clients to resize the window...
        except for in tests! So just pass the rects straight through, instead of
        returning an empty rect.

2019-08-17  Eric Liang  <ericliang@apple.com>

        Use bundlePath SPI in AccessibilitySupport for WebProcessLoader
        https://bugs.webkit.org/show_bug.cgi?id=200367

        Reviewed by Darin Adler.

        * Platform/spi/ios/AccessibilitySupportSPI.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::accessibilityWebProcessLoaderBundlePath):
        (WebKit::registerWithAccessibility):

2019-08-17  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::flexibleAppend(...) to StringBuilder::append(...)
        https://bugs.webkit.org/show_bug.cgi?id=200756

        Reviewed by Darin Adler.

        Update call sites for rename from StringBuilder::flexibleAppend(...) to 
        StringBuilder::append(...).

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::dumpHistoryItem):
        We have to explicitly access the underlying String of the URL rather than
        relying on the implicit conversion since it is now ambiguous which append(...)
        overload should be used.

2019-08-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: make the initial height bigger when attached
        https://bugs.webkit.org/show_bug.cgi?id=200855

        Reviewed by Joseph Pecoraro.

        * Shared/WebPreferences.yaml:
        Increase the default attached height from `300px` to `500px`, which is close to the same
        amount of area given a 15" MacBook Pro's aspect ratio (default attached width is `750px`).

2019-08-17  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Scroll indicators disappear sometimes
        https://bugs.webkit.org/show_bug.cgi?id=200791

        Reviewed by Tim Horton.
        
        _web_setSubviews: replaces all of the views subviews with the supplied array, but this blows
        away views not managed by WebKit, including UIScrollViews scroll indicators. Fix by having
        WebKit-managed views implement the WKWebKitControlled protocol, and only removing views
        implementing that protocol.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (-[UIView _web_setSubviews:]):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:

2019-08-17  Antti Koivisto  <antti@apple.com>

        Content in <iframe> should override "touch-action" set in embedding document
        https://bugs.webkit.org/show_bug.cgi?id=200204
        <rdar://problem/54355249>

        Reviewed by Antoine Quint.

        Subframes where content doesn't use any touch-action properties won't generate event region for their main layer.
        As a result the touch-action property gets computed in UI process to the parent frames touch-action (instead of 'auto').

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::touchActionsForPoint):

        If the topmost layer hit is a WKChildScrollView we know its content layer didn't have an event region.
        This means we should return the default value 'auto'.

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

        Use strongly typed identifiers for StorageArea / StorageAreaImpl
        https://bugs.webkit.org/show_bug.cgi?id=200835

        Reviewed by Alex Christensen.

        Use strongly typed identifiers for StorageArea / StorageAreaImpl. They currently both use uint64_t
        and are used in the same code, it is therefore very easy to confused the 2 types of identifiers.

        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::StorageArea):
        (WebKit::StorageArea::setItem):
        (WebKit::StorageArea::removeItem):
        (WebKit::StorageArea::clear):
        (WebKit::StorageArea::dispatchEvents const):
        * NetworkProcess/WebStorage/StorageArea.h:
        (WebKit::StorageArea::identifier):
        * NetworkProcess/WebStorage/StorageAreaIdentifier.h: Copied from Source/WebKit/WebProcess/WebStorage/StorageAreaImpl.h.
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::connectToLocalStorageArea):
        (WebKit::StorageManagerSet::connectToTransientLocalStorageArea):
        (WebKit::StorageManagerSet::connectToSessionStorageArea):
        (WebKit::StorageManagerSet::disconnectFromStorageArea):
        (WebKit::StorageManagerSet::getValues):
        (WebKit::StorageManagerSet::setItem):
        (WebKit::StorageManagerSet::removeItem):
        (WebKit::StorageManagerSet::clear):
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        * NetworkProcess/WebStorage/StorageManagerSet.messages.in:
        * Scripts/webkit/messages.py:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::registerStorageAreaMap):
        (WebKit::WebProcess::unregisterStorageAreaMap):
        (WebKit::WebProcess::storageAreaMap const):
        * WebProcess/WebProcess.h:
        * WebProcess/WebStorage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::StorageAreaImpl):
        * WebProcess/WebStorage/StorageAreaImpl.h:
        * WebProcess/WebStorage/StorageAreaImplIdentifier.h: Copied from Source/WebKit/WebProcess/WebStorage/StorageAreaImpl.h.
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        (WebKit::StorageAreaMap::dispatchStorageEvent):
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        (WebKit::StorageAreaMap::disconnect):
        * WebProcess/WebStorage/StorageAreaMap.h:
        (WebKit::StorageAreaMap::identifier const):
        * WebProcess/WebStorage/StorageAreaMap.messages.in:

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

        Drop StorageArea::setWorkQueue() member function
        https://bugs.webkit.org/show_bug.cgi?id=200832

        Reviewed by Alex Christensen.

        Drop StorageArea::setWorkQueue() member function and pass the WorkQueue to the StorageArea constructor instead.
        The WorkQueue can never get updated so an explicit setter is not necessary. It also makes it clearer that the
        m_queue data member can never be null.

        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
        * NetworkProcess/WebStorage/SessionStorageNamespace.cpp:
        (WebKit::SessionStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/SessionStorageNamespace.h:
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::StorageArea):
        (WebKit::StorageArea::clone const):
        (WebKit::StorageArea::openDatabaseAndImportItemsIfNeeded const):
        * NetworkProcess/WebStorage/StorageArea.h:
        (WebKit::StorageArea::setWorkQueue): Deleted.
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::createLocalStorageArea):
        (WebKit::StorageManager::createTransientLocalStorageArea):
        (WebKit::StorageManager::createSessionStorageArea):
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::connectToLocalStorageArea):
        (WebKit::StorageManagerSet::connectToTransientLocalStorageArea):
        (WebKit::StorageManagerSet::connectToSessionStorageArea):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.cpp:
        (WebKit::TransientLocalStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.h:

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

        LocalStorageDatabaseTracker does not need to subclass ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200825

        Reviewed by Alex Christensen.

        LocalStorageDatabaseTracker does not need to subclass ThreadSafeRefCounted. It is currently always
        ref'd / deref'd from the com.apple.WebKit.WebStorage serial WorkQueue, save from inside
        LocalStorageDatabaseTracker::platformMaybeExcludeFromBackup() on iOS. However, it is probably
        not a good idea to set FileSystem metadata from the main thread in platformMaybeExcludeFromBackup()
        anyway.

        Note that I had to get rid of an old linked-on-after check since those are currently only safe
        to do on the main thread. I cleared this with Brady. It has been a while since we've shipped this
        behavior now and apps have had a chance to update.

        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasePath const):
        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h:
        * NetworkProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm:
        (WebKit::LocalStorageDatabaseTracker::platformMaybeExcludeFromBackup const):
        * UIProcess/Cocoa/VersionChecks.h:

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

        LocalStorageDatabase should use inline initialization for its data members
        https://bugs.webkit.org/show_bug.cgi?id=200828

        Reviewed by John Wilander.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:

2019-08-16  Kate Cheney  <katherine_cheney@apple.com>

        Functions with no parameters in WebKit/Shared/API/c and WebKit/UIProcess/API/C are
        missing a "void" specifier in their argument list
        https://bugs.webkit.org/show_bug.cgi?id=200826

        Reviewed by Chris Dumez.

        Added void to indicate functions with no arguments to satisfy compiler errors.
        This error came to light when fixing another patch.

        * Shared/API/c/WKArray.h:
        * Shared/API/c/WKConnectionRef.h:
        * Shared/API/c/WKContextMenuItem.h:
        * Shared/API/c/WKData.h:
        * Shared/API/c/WKDictionary.h:
        * Shared/API/c/WKErrorRef.h:
        * Shared/API/c/WKMutableArray.h:
        * Shared/API/c/WKMutableDictionary.h:
        * Shared/API/c/WKNumber.h:
        * Shared/API/c/WKPluginInformation.h:
        * Shared/API/c/WKRenderLayer.h:
        * Shared/API/c/WKRenderObject.h:
        * Shared/API/c/WKSecurityOriginRef.h:
        * Shared/API/c/WKSerializedScriptValue.h:
        * Shared/API/c/WKString.h:
        * Shared/API/c/WKURL.h:
        * Shared/API/c/WKURLRequest.h:
        * Shared/API/c/WKURLResponse.h:
        * Shared/API/c/WKUserContentURLPattern.h:
        * UIProcess/API/C/WKBackForwardListItemRef.h:
        * UIProcess/API/C/WKBackForwardListRef.h:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKFormSubmissionListener.h:
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/API/C/WKFramePolicyListener.h:
        * UIProcess/API/C/WKGeolocationManager.h:
        * UIProcess/API/C/WKGeolocationPermissionRequest.h:
        * UIProcess/API/C/WKGeolocationPosition.h:
        * UIProcess/API/C/WKHitTestResult.h:
        * UIProcess/API/C/WKNavigationDataRef.h:
        * UIProcess/API/C/WKOpenPanelParametersRef.h:
        * UIProcess/API/C/WKOpenPanelResultListener.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPageConfigurationRef.h:
        * UIProcess/API/C/WKPageGroup.h:
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/C/WKUserContentControllerRef.h:
        * UIProcess/API/C/WKUserMediaPermissionRequest.h:
        * UIProcess/API/C/WKUserScriptRef.h:

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

        LocalStorageDatabase does not need to subclass ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200822

        Reviewed by Geoff Garen.

        LocalStorageDatabase does not need to subclass ThreadSafeRefCounted, it is only ref'd / deref'd by the StorageArea
        on the com.apple.WebKit.WebStorage serial WorkQueue, and in LocalStorageDatabase::scheduleDatabaseUpdate() on the
        same WorkQueue.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        (WebKit::LocalStorageDatabase::~LocalStorageDatabase):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:

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

        Many WebStorage classes do not need to subclass ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200821

        Reviewed by Geoffrey Garen.

        Many WebStorage classes do not need to subclass ThreadSafeRefCounted. They never get ref'd or deref'd.

        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::LocalStorageNamespace::clearAllStorageAreas):
        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
        * NetworkProcess/WebStorage/SessionStorageNamespace.cpp:
        (WebKit::SessionStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/SessionStorageNamespace.h:
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::clone const):
        * NetworkProcess/WebStorage/StorageArea.h:
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::createLocalStorageArea):
        (WebKit::StorageManager::createTransientLocalStorageArea):
        (WebKit::StorageManager::createSessionStorageArea):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateSessionStorageNamespace):
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.cpp:
        (WebKit::TransientLocalStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.h:

2019-08-16  Dean Jackson  <dino@apple.com>

        Long pressing images with transparent backgrounds in dark mode causes a black background to appear around the image content
        https://bugs.webkit.org/show_bug.cgi?id=200827
        <rdar://53933379>

        Reviewed by Tim Horton.

        Set a clear color when there is no provided background.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (createTargetedPreview):

2019-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Split tabIndex computation for DOM and the rest of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=200806

        Reviewed by Chris Dumez.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
        (webkit_dom_html_element_get_tab_index):
        (webkit_dom_html_element_set_tab_index):

2019-08-16  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restabilization of non-unified build.

        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::StorageManagerSet):
        * Shared/FrameInfoData.cpp:
        (WebKit::FrameInfoData::decode):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        * WebProcess/WebStorage/StorageNamespaceImpl.h:

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

        StorageManager does not need to subclass RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200818

        Reviewed by Geoffrey Garen.

        StorageManager does not need to subclass RefCounted. It is owned by the StorageManagerSet
        and is never ref'd / deref'd.

        * NetworkProcess/WebStorage/StorageManager.h:
        (WebKit::StorageManager::create): Deleted.
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::add):
        * NetworkProcess/WebStorage/StorageManagerSet.h:

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

        Clarify StorageManagerSet / StorageManager threading model after r248734
        https://bugs.webkit.org/show_bug.cgi?id=200817

        Reviewed by Geoffrey Garen.

        Clarify StorageManagerSet / StorageManager threading model after r248734. StorageManager is now
        a background thread object but it still calls its completion handlers on the main thread, which
        is very error prone. The pattern in WebKit for thread safety is that methods should always call
        their completion handler of the thread / queue they were called on themselves. Doing differently
        has caused so many thread-safety bugs in the past.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::getSessionStorageOrigins const):
        (WebKit::StorageManager::deleteSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
        (WebKit::StorageManager::getLocalStorageOrigins const):
        (WebKit::StorageManager::getLocalStorageOriginDetails const):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        (WebKit::StorageManager::getSessionStorageOrigins): Deleted.
        (WebKit::StorageManager::getLocalStorageOrigins): Deleted.
        (WebKit::StorageManager::getLocalStorageOriginDetails): Deleted.
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::getSessionStorageOrigins):
        (WebKit::StorageManagerSet::deleteSessionStorage):
        (WebKit::StorageManagerSet::deleteSessionStorageForOrigins):
        (WebKit::StorageManagerSet::getLocalStorageOrigins):
        (WebKit::StorageManagerSet::deleteLocalStorageModifiedSince):
        (WebKit::StorageManagerSet::deleteLocalStorageForOrigins):
        (WebKit::StorageManagerSet::getLocalStorageOriginDetails):

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

        StorageManagerSet constructor should not be public
        https://bugs.webkit.org/show_bug.cgi?id=200816

        Reviewed by Geoffrey Garen.

        StorageManagerSet constructor should not be public since it subclasses ThreadSafeRefCounted and
        has a factory method.

        * NetworkProcess/WebStorage/StorageManagerSet.h:

2019-08-16  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r248436): WKWebView doesn’t respect isOpaque setting in NIB.
        https://bugs.webkit.org/show_bug.cgi?id=200802
        rdar://problem/54357818

        Reviewed by Tim Horton.

        Tests: WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
        WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
        WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Call _setOpaqueInternal:NO instead of self.opaque = NO.
        (-[WKWebView _setOpaqueInternal:]): Added. Moved code from setOpaque:.
        (-[WKWebView setOpaque:]): Call _setOpaqueInternal:.

2019-08-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, WTF_MAKE_FAST_ALLOCATED annotation part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoffrey Garen.

        * NetworkProcess/AdClickAttributionManager.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Cookies/WebCookieManager.h:
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.h:
        * NetworkProcess/NetworkHTTPSUpgradeChecker.h:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSocketChannel.h:
        * NetworkProcess/WebSocketTask.h:
        * NetworkProcess/cache/PrefetchCache.h:
        * NetworkProcess/cocoa/WebSocketTaskCocoa.h:
        * NetworkProcess/soup/WebKitSoupRequestInputStream.cpp:
        * NetworkProcess/soup/WebSocketTaskSoup.h:
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        * Platform/Module.h:
        * PluginProcess/PluginControllerProxy.h:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * UIProcess/API/APIAutomationClient.h:
        * UIProcess/API/APIAutomationSessionClient.h:
        * UIProcess/API/APIContextMenuClient.h:
        * UIProcess/API/APICustomProtocolManagerClient.h:
        * UIProcess/API/APIDiagnosticLoggingClient.h:
        * UIProcess/API/APIDownloadClient.h:
        * UIProcess/API/APIFindClient.h:
        * UIProcess/API/APIFindMatchesClient.h:
        * UIProcess/API/APIFormClient.h:
        * UIProcess/API/APIFullscreenClient.h:
        * UIProcess/API/APIGeolocationProvider.h:
        * UIProcess/API/APIHistoryClient.h:
        * UIProcess/API/APIIconDatabaseClient.h:
        * UIProcess/API/APIIconLoadingClient.h:
        * UIProcess/API/APIInjectedBundleClient.h:
        * UIProcess/API/APILegacyContextHistoryClient.h:
        * UIProcess/API/APILoaderClient.h:
        * UIProcess/API/APINavigationClient.h:
        * UIProcess/API/APIPolicyClient.h:
        * UIProcess/API/APIUIClient.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageStateClient):
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        * UIProcess/API/glib/IconDatabase.h:
        * UIProcess/API/glib/WebKitAutomationSession.cpp:
        * UIProcess/API/glib/WebKitIconLoadingClient.cpp:
        * UIProcess/API/glib/WebKitNotificationProvider.h:
        * UIProcess/API/glib/WebKitUserContentManager.cpp:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        * UIProcess/API/glib/WebKitWebView.cpp:
        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView maybeInstallIconLoadingClient]):
        * UIProcess/API/wpe/APIViewClient.h:
        * UIProcess/API/wpe/ScrollGestureController.h:
        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/IconLoadingDelegate.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/HighPerformanceGraphicsUsageSampler.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/PageClient.h:
        * UIProcess/PerActivityStateCPUUsageSampler.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeScrollingPerformanceData.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/SystemPreviewController.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebNavigationState.h:
        * UIProcess/WebPageInjectedBundleClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStoreClient.h:
        * UIProcess/gtk/DragAndDropHandler.h:
        * UIProcess/ios/EditableImageController.h:
        * UIProcess/ios/InputViewUpdateDeferrer.h:
        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        * UIProcess/mac/WKTextFinderClient.mm:
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.h:
        * WebProcess/Geolocation/WebGeolocationManager.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
        * WebProcess/InjectedBundle/API/glib/DOM/DOMObjectCache.cpp:
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.h:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        * WebProcess/Network/webrtc/LibWebRTCResolver.h:
        * WebProcess/Notifications/WebNotificationManager.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Storage/WebSWOriginTable.h:
        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebGeolocationClient.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:
        * WebProcess/WebCoreSupport/WebNotificationClient.h:
        * WebProcess/WebCoreSupport/WebPlugInClient.h:
        * WebProcess/WebCoreSupport/WebProgressTrackerClient.h:
        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.h:
        * WebProcess/WebCoreSupport/WebUserMediaClient.h:
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.h:
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h:
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2019-08-15  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Enable CoreFoundation use if building for Apple target
        https://bugs.webkit.org/show_bug.cgi?id=200799

        Reviewed by Alex Christensen.

        Fix the build and remove an unused method.

        * PlatformFTW.cmake:
        * Shared/ShareableBitmap.h:
        * Shared/win/ShareableBitmapDirect2D.cpp:
        (WebKit::ShareableBitmap::createDirect2DSurface):
        (WebKit::ShareableBitmap::releaseSurfaceData): Deleted.

2019-08-15  Sihui Liu  <sihui_liu@apple.com>

        Some improvements on web storage
        https://bugs.webkit.org/show_bug.cgi?id=200373

        Reviewed by Geoffrey Garen.

        Fix some issues in web storage architecture. For example, sessionStorageNameSpace for web page is prepared and 
        destroyed in the network process when the page comes and goes, even though the page may not use sessionStorage 
        at all. The messages about page state sent from web process to network process can be waste.

        Here are some general ideas of this patch:
        1. Network process owns the web storage, and web process keeps a small local copy (based on session and 
        origins that are visited). There is a virtual connection from the local copy in the web process to the original
        copy in the network process. The connection is created by web process when some page asks for web storage.
        2. If connection is lost because network process is gone, storage in memory will be lost. The local copy in web
        processs will be discarded.
        3. (SessionID, StorageNamespaceID, SecurityOrigin) is used to identify a storage area. If session is changed in
        web process (like enabling private browsing in layout test now), a re-connection with different sessionID would 
        suffice to load another copy of storage.
        4. localStorage in ephemeral session has the same behavior as localStorage instead of sessionStorage, which
        means different pages in the same ephemeral session share the same localStorage.

        Also, this patch introduces StorageManagerSet to network process. It handles web storage stuff, including
        receiving storage messages from web process, on one background thread. Previously each session has its own
        StorageManager and each StorageManager has its own WorkQueue.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:

        * NetworkProcess/NetworkConnectionToWebProcess.cpp: remove message handlers that are no longer needed. Network
        process no longer needs to know page states from web process.
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::webPageWasAdded): Deleted.
        (WebKit::NetworkConnectionToWebProcess::webPageWasRemoved): Deleted.
        (WebKit::NetworkConnectionToWebProcess::webProcessSessionChanged): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * NetworkProcess/NetworkProcess.cpp: NetworkProcess uses StorageManagerSet instead of StorageManager from 
        different sessions to deal with web storage.
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess): StorageManagerSet starts handling 
        StorageManagerSet messages from the new connection.
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::hasLocalStorage):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::actualPrepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::syncLocalStorage):
        (WebKit::NetworkProcess::clearLegacyPrivateBrowsingLocalStorage): added for clearing in-memory ephemeral
        localStorage.
        (WebKit::NetworkProcess::getLocalStorageOriginDetails):
        (WebKit::NetworkProcess::connectionToWebProcessClosed):
        (WebKit::NetworkProcess::webPageWasAdded): Deleted.
        (WebKit::NetworkProcess::webPageWasRemoved): Deleted.
        (WebKit::NetworkProcess::webProcessWasDisconnected): Deleted.
        (WebKit::NetworkProcess::webProcessSessionChanged): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:

        * NetworkProcess/NetworkSession.cpp: StorageManager is moved out of NetworkSession. It is now managed by 
        StorageManagerSet.
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::storageManager): Deleted.

        * NetworkProcess/NetworkSessionCreationParameters.cpp: creation parameters of StorageManager is moved out of
        NetworkSessionCreationParameters.
        (WebKit::NetworkSessionCreationParameters::privateSessionParameters):
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::updateDatabase): remove an assertion that is no longer true as we can force an
        update with syncLocalStorage now.
        * NetworkProcess/WebStorage/LocalStorageDatabase.h: make updateDatabase public for syncLocalStorage.

        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp: LocalStorageDatabaseTracker is created on the
        background thread now, so it does not hold WorkQueue to do the file operation.
        (WebKit::LocalStorageDatabaseTracker::create):
        (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):
        (WebKit::LocalStorageDatabaseTracker::~LocalStorageDatabaseTracker):
        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h:
        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::LocalStorageNamespace::cloneTo): Deleted.
        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
        * NetworkProcess/WebStorage/SessionStorageNamespace.cpp:
        (WebKit::SessionStorageNamespace::getOrCreateStorageArea):
        (WebKit::SessionStorageNamespace::addAllowedConnection): Deleted.
        (WebKit::SessionStorageNamespace::removeAllowedConnection): Deleted.
        * NetworkProcess/WebStorage/SessionStorageNamespace.h:
        (WebKit::SessionStorageNamespace::allowedConnections const): Deleted.

        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::generateStorageAreaIdentifier): each StorageArea has an identifier. StorageAreaMap in web process uses
        this identifier to indicate which StorageArea it is connecting to.
        (WebKit::StorageArea::StorageArea):
        (WebKit::StorageArea::~StorageArea): StorageArea may still have listeners because StorageArea should be 
        destroyed by requests from UI process, and listeners are connections to web processses.
        (WebKit::StorageArea::addListener): load localStorageDatabase in advance if there is some connection to this 
        LocalStorage area.
        (WebKit::StorageArea::removeListener):
        (WebKit::StorageArea::hasListener const):
        (WebKit::StorageArea::clear):
        (WebKit::StorageArea::openDatabaseAndImportItemsIfNeeded const):
        (WebKit::StorageArea::dispatchEvents const):
        (WebKit::StorageArea::syncToDatabase):
        (WebKit::StorageArea::setItems): Deleted. Stop syncing from web process to network process after network process
        is relaunched.
        * NetworkProcess/WebStorage/StorageArea.h:
        (WebKit::StorageArea::identifier):
        (WebKit::StorageArea::setWorkQueue):

        * NetworkProcess/WebStorage/StorageManager.cpp: StorageManager should be accessed by only background thread now.
        (WebKit::StorageManager::StorageManager):
        (WebKit::StorageManager::~StorageManager):
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::destroySessionStorageNamespace): this is not used now but keep it for future 
        improvement to remove in-memory sessionStorage in network process if we know some web page is gone forever.
        (WebKit::StorageManager::cloneSessionStorageNamespace): previously each page had its own ephemeral 
        localStorageNamespace and now all pages in the same session share one localStorage, so we don't need to clone
        localStorageNamespace.
        (WebKit::StorageManager::getSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::getLocalStorageOriginDetails):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        (WebKit::StorageManager::createLocalStorageArea):
        (WebKit::StorageManager::createTransientLocalStorageArea):
        (WebKit::StorageManager::createSessionStorageArea):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateSessionStorageNamespace):
        (WebKit::StorageManager::clearStorageNamespaces):
        (WebKit::StorageManager::addAllowedSessionStorageNamespaceConnection): Deleted.
        (WebKit::StorageManager::removeAllowedSessionStorageNamespaceConnection): Deleted.
        (WebKit::StorageManager::processDidCloseConnection): Deleted.
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin): Deleted.
        (WebKit::StorageManager::createLocalStorageMap): Deleted.
        (WebKit::StorageManager::createTransientLocalStorageMap): Deleted.
        (WebKit::StorageManager::createSessionStorageMap): Deleted.
        (WebKit::StorageManager::destroyStorageMap): Deleted.
        (WebKit::StorageManager::prewarm): Deleted.
        (WebKit::StorageManager::getValues): Deleted.
        (WebKit::StorageManager::setItem): Deleted.
        (WebKit::StorageManager::setItems): Deleted.
        (WebKit::StorageManager::removeItem): Deleted.
        (WebKit::StorageManager::clear): Deleted.
        (WebKit::StorageManager::waitUntilTasksFinished): Deleted.
        (WebKit::StorageManager::suspend): Deleted.
        (WebKit::StorageManager::resume): Deleted.
        (WebKit::StorageManager::findStorageArea const): Deleted.
        * NetworkProcess/WebStorage/StorageManager.h:
        (WebKit::StorageManager::workQueue const): Deleted.
        (): Deleted.

        * NetworkProcess/WebStorage/StorageManager.messages.in: Removed. Moved to StorageManagerSet.messages.in.

        * NetworkProcess/WebStorage/StorageManagerSet.cpp: Added.
        (WebKit::StorageManagerSet::create):
        (WebKit::StorageManagerSet::StorageManagerSet):
        (WebKit::StorageManagerSet::~StorageManagerSet):
        (WebKit::StorageManagerSet::add):
        (WebKit::StorageManagerSet::remove):
        (WebKit::StorageManagerSet::contains):
        (WebKit::StorageManagerSet::addConnection):
        (WebKit::StorageManagerSet::removeConnection):
        (WebKit::StorageManagerSet::waitUntilTasksFinished):
        (WebKit::StorageManagerSet::waitUntilSyncingLocalStorageFinished):
        (WebKit::StorageManagerSet::suspend):
        (WebKit::StorageManagerSet::resume):
        (WebKit::StorageManagerSet::getSessionStorageOrigins):
        (WebKit::StorageManagerSet::deleteSessionStorage):
        (WebKit::StorageManagerSet::deleteSessionStorageForOrigins):
        (WebKit::StorageManagerSet::getLocalStorageOrigins):
        (WebKit::StorageManagerSet::deleteLocalStorageModifiedSince):
        (WebKit::StorageManagerSet::deleteLocalStorageForOrigins):
        (WebKit::StorageManagerSet::getLocalStorageOriginDetails):
        (WebKit::StorageManagerSet::connectToLocalStorageArea):
        (WebKit::StorageManagerSet::connectToTransientLocalStorageArea):
        (WebKit::StorageManagerSet::connectToSessionStorageArea):
        (WebKit::StorageManagerSet::disconnectFromStorageArea):
        (WebKit::StorageManagerSet::getValues):
        (WebKit::StorageManagerSet::setItem):
        (WebKit::StorageManagerSet::removeItem):
        (WebKit::StorageManagerSet::clear):
        (WebKit::StorageManagerSet::cloneSessionStorageNamespace):
        * NetworkProcess/WebStorage/StorageManagerSet.h: Added.
        * NetworkProcess/WebStorage/StorageManagerSet.messages.in: Added.

        * Shared/WebsiteDataStoreParameters.cpp: creation parameters of StorageManager are moved to 
        WebsiteDataStoreParameters.
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        (WebKit::WebsiteDataStoreParameters::privateSessionParameters):
        * Shared/WebsiteDataStoreParameters.h:
        * Sources.txt:

        * UIProcess/API/C/WKContext.cpp: add SPI for tests.
        (WKContextSyncLocalStorage):
        (WKContextClearLegacyPrivateBrowsingLocalStorage):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveLocalStorage):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::syncLocalStorage):
        (WebKit::WebProcessPool::clearLegacyPrivateBrowsingLocalStorage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/InjectedBundle/InjectedBundle.cpp: session change of web storage is done via 
        WebStorageNamespaceProvider instead of WebProcess now.
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/WebProcess.cpp: web process no longer sends messsages about page state to network process.
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::removeWebPage):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::storageAreaMap const):
        (WebKit::WebProcess::enablePrivateBrowsingForTesting): Deleted. This was used for changing session via 
        WebProcess.
        * WebProcess/WebProcess.h:
        * WebProcess/WebStorage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::StorageAreaImpl):
        (WebKit::StorageAreaImpl::length):
        (WebKit::StorageAreaImpl::key):
        (WebKit::StorageAreaImpl::item):
        (WebKit::StorageAreaImpl::setItem):
        (WebKit::StorageAreaImpl::removeItem):
        (WebKit::StorageAreaImpl::clear):
        (WebKit::StorageAreaImpl::contains):
        (WebKit::StorageAreaImpl::storageType const):
        (WebKit::StorageAreaImpl::incrementAccessCount):
        (WebKit::StorageAreaImpl::decrementAccessCount):
        (WebKit::StorageAreaImpl::prewarm): Deleted.
        (WebKit::StorageAreaImpl::securityOrigin const): Deleted.

        * WebProcess/WebStorage/StorageAreaImpl.h: make StorageAreaImpl hold a weak reference to StorageAreaMap and 
        StorageNamespaceImpl hold a strong reference. In this way lifeime of localStorage StorageAreraMap stays align 
        with StorageNameSpaceProvider and Page.

        * WebProcess/WebStorage/StorageAreaMap.cpp: identifier of StorageAreaMap is the same as identifier of 
        StorageArea it connects to. If the identifier is 0, it means the StorageAreaMap is disconnected.
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::~StorageAreaMap):
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        (WebKit::StorageAreaMap::resetValues):
        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        (WebKit::StorageAreaMap::applyChange):
        (WebKit::StorageAreaMap::dispatchStorageEvent):
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        (WebKit::StorageAreaMap::connect):
        (WebKit::StorageAreaMap::disconnect):
        (WebKit::generateStorageMapID): Deleted.
        (WebKit::StorageAreaMap::prewarm): Deleted.
        (WebKit::StorageAreaMap::didGetValues): Deleted. This is useless as GetValues is a synchronous operation.
        * WebProcess/WebStorage/StorageAreaMap.h:
        (): Deleted.

        * WebProcess/WebStorage/StorageAreaMap.messages.in: there are two synchronous messages, one for connection and 
        one for getting values. We may merge them into one in future improvement.
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebKit::StorageNamespaceImpl::storageArea):
        (WebKit::StorageNamespaceImpl::copy):
        (WebKit::StorageNamespaceImpl::setSessionIDForTesting):
        (WebKit::StorageNamespaceImpl::createEphemeralLocalStorageNamespace): Deleted.
        * WebProcess/WebStorage/StorageNamespaceImpl.h:
        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createEphemeralLocalStorageNamespace): Deleted.
        * WebProcess/WebStorage/WebStorageNamespaceProvider.h:

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

        Occasional hang under -[UIKeyboardTaskQueue lockWhenReadyForMainThread] when long-pressing non-editable text
        https://bugs.webkit.org/show_bug.cgi?id=200731
        <rdar://problem/54315371>

        Reviewed by Tim Horton.

        When handling a single tap in non-editable content, keyboards logic in UIKit may attempt to wait for all
        pending tasks in UIKeyboardTaskQueue to finish executing (e.g. by calling -waitUntilAllTasksAreFinished]). If
        the task queue has a pending task at this moment - for example, a text selection update that is waiting for a
        response from the web process - this will result in a permanent deadlock, since the main thread will be blocked,
        and therefore cannot receive any IPC communication from the web process.

        One way to trigger this is to activate both the loupe gesture and non-editable text tap gesture simultaneously,
        by tapping in a non-editable part of the web page, while an ongoing loupe gesture is driving selection updates
        (see the layout test for more details).

        To avoid getting into this scenario, prevent the text tap gesture recognizer from firing in a few edge cases
        that could lead to hangs under keyboard code in UIKit. See comments below.

        Test: editing/selection/ios/tap-during-loupe-gesture.html

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

        Don't allow the text tap gesture recognizer to fire if the user is actively modifying the text selection using
        the loupe gesture, or if there's other pending selection change updates that are pending responses from the web
        content process.

        (-[WKContentView selectTextWithGranularity:atPoint:completionHandler:]):
        (-[WKContentView updateSelectionWithExtentPoint:withBoundary:completionHandler:]):

        Increment and decrement _suppressNonEditableSingleTapTextInteractionCount while handling these selection
        updates.

2019-08-15  Commit Queue  <commit-queue@webkit.org>

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

        Introduced regressions related to loading of local files.
        (Requested by perarne on #webkit).

        Reverted changeset:

        "[Mac] Use the PID of the WebContent process when issuing
        local file read sandbox extensions"
        https://bugs.webkit.org/show_bug.cgi?id=200543
        https://trac.webkit.org/changeset/248440

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

        WKUIDelegate's webView:contextMenuDidEndForElement: should be called when context menus end
        https://bugs.webkit.org/show_bug.cgi?id=200750
        <rdar://problem/54232261> and <rdar://problem/52355829>

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):

2019-08-14  Brian Burg  <bburg@apple.com>

        Web Automation: mouse buttons are not correctly printed in SimulatedInputDispatcher log spew
        https://bugs.webkit.org/show_bug.cgi?id=200729

        Reviewed by Devin Rousso.

        This was printing out gibberish because it was trying to decode a WebMouseEvent button
        as an Automation protocol button. The logging was less useful because of it.

        To fix this, push usage of Automation protocol-based MouseButton type alias all the way
        to the platform-specific methods. The mouse buttons are the same for WebMouseEvent::Button
        and the Automation protocol type, except the automation type has an auto-generated toString.

        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        (WebKit::SimulatedInputDispatcher::run):
        Fix types.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::simulateMouseInteraction):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performInteractionSequence):
        (WebKit::protocolMouseButtonToWebMouseEventButton): Deleted.
        Fix types.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::automationMouseButtonToPlatformMouseButton):
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::mouseButtonToGdkButton):
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        * UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp:
        (WebKit::mouseButtonToWPEButton):
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        Move translation between MouseButton and native button values to platform methods.

2019-08-15  Simon Fraser  <simon.fraser@apple.com>

        Use ObjectIdentifier<FrameIdentifierType> for frameIDs
        https://bugs.webkit.org/show_bug.cgi?id=199986

        Reviewed by Ryosuke Niwa.

        Use the strongly-typed FrameIdentifier instead of uint64_t as frame identifiers everywhere.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccessForFrame):
        (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForFrame):
        (WebKit::NetworkConnectionToWebProcess::hasStorageAccess):
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::convertToDownload):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::escapeIDForJSON):
        (WebKit::logBlockedCookieInformation):
        (WebKit::logCookieInformationInternal):
        (WebKit::NetworkResourceLoader::logCookieInformation):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * Scripts/webkit/messages.py:
        * Shared/API/APIFrameHandle.cpp:
        (API::FrameHandle::create):
        (API::FrameHandle::createAutoconverting):
        (API::FrameHandle::FrameHandle):
        (API::FrameHandle::decode):
        * Shared/API/APIFrameHandle.h:
        (API::FrameHandle::frameID const):
        * Shared/API/Cocoa/_WKFrameHandle.mm:
        (-[_WKFrameHandle hash]):
        (-[_WKFrameHandle _frameID]):
        (-[_WKFrameHandle initWithCoder:]):
        (-[_WKFrameHandle encodeWithCoder:]):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/FrameInfoData.h:
        * UIProcess/API/C/WKFrameHandleRef.cpp:
        (WKFrameHandleGetFrameID):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _printOperationWithPrintInfo:forFrame:]):
        (-[WKWebView _canChangeFrameLayout:]):
        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector showMainResourceForFrame:]):
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::run):
        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::webFrameIDForHandle):
        (WebKit::WebAutomationSession::handleForWebFrameID):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::waitForNavigationToComplete):
        (WebKit::findPageForFrameID):
        (WebKit::WebAutomationSession::respondToPendingFrameNavigationCallbacksWithTimeout):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::computeElementLayout):
        (WebKit::WebAutomationSession::selectOptionElement):
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::viewportInViewCenterPointOfElement):
        (WebKit::WebAutomationSession::takeScreenshot):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin):
        * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm:
        (-[WKReloadFrameErrorRecoveryAttempter attemptRecovery]):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrame):
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrameShared):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        (WebKit::NetworkProcessProxy::requestStorageAccessConfirm):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::validateInput):
        (WebKit::ProvisionalPageProxy::didCreateMainFrame):
        (WebKit::ProvisionalPageProxy::didPerformClientRedirect):
        (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData):
        (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        (WebKit::ProvisionalPageProxy::didPerformServerRedirect):
        (WebKit::ProvisionalPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::ProvisionalPageProxy::contentFilterDidBlockLoadForFrame):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/ServiceWorkerProcessProxy.cpp:
        (WebKit::ServiceWorkerProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/ServiceWorkerProcessProxy.h:
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/UserMediaPermissionCheckProxy.cpp:
        (WebKit::UserMediaPermissionCheckProxy::UserMediaPermissionCheckProxy):
        * UIProcess/UserMediaPermissionCheckProxy.h:
        (WebKit::UserMediaPermissionCheckProxy::create):
        (WebKit::UserMediaPermissionCheckProxy::frameID const):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::resetAccess):
        (WebKit::UserMediaPermissionRequestManagerProxy::searchForGrantedRequest const):
        (WebKit::UserMediaPermissionRequestManagerProxy::wasRequestDenied):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
        (WebKit::UserMediaPermissionRequestManagerProxy::wasGrantedVideoOrAudioAccess):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::mainFrameID const):
        (WebKit::UserMediaPermissionRequestProxy::frameID const):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::create):
        (WebKit::WebFrameProxy::frameID const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::runJavaScriptInFrame):
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::didCreateWindow):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didExplicitOpenForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        (WebKit::WebPageProxy::didCancelClientRedirectForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didChangeMainDocument):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::didDetectXSSForFrame):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didNavigateWithNavigationDataShared):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformClientRedirectShared):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirectShared):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::runOpenPanel):
        (WebKit::WebPageProxy::printFrame):
        (WebKit::WebPageProxy::focusedFrameChanged):
        (WebKit::WebPageProxy::frameSetLargestFrameChanged):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::requestStorageSpace):
        (WebKit::WebPageProxy::makeStorageSpaceRequest):
        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        (WebKit::WebPageProxy::enumerateMediaDevicesForFrame):
        (WebKit::WebPageProxy::shouldAllowDeviceOrientationAndMotionAccess):
        (WebKit::WebPageProxy::requestStorageAccessConfirm):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::webFrame const):
        (WebKit::WebProcessProxy::canCreateFrame const):
        (WebKit::WebProcessProxy::frameCreated):
        (WebKit::WebProcessProxy::didDestroyFrame):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::evaluateJavaScriptCallback):
        (WebKit::WebAutomationSessionProxy::didClearWindowObjectForFrame):
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSessionProxy::didEvaluateJavaScriptFunction):
        (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/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (+[WKWebProcessPlugInFrame lookUpFrameFromHandle:]):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didBlockAuthenticationChallenge):
        (WebKit::WebResourceLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedFrameChanged):
        (WebKit::WebChromeClient::contentsSizeChanged const):
        (WebKit::WebChromeClient::hasStorageAccess):
        (WebKit::WebChromeClient::requestStorageAccess):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::frameID const):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebCookieJar.cpp:
        (WebKit::WebCookieJar::cookies const):
        (WebKit::WebCookieJar::setCookies):
        (WebKit::WebCookieJar::cookieRequestHeaderFieldValue const):
        (WebKit::WebCookieJar::getRawCookies const):
        * WebProcess/WebPage/WebCookieJar.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        (WebKit::generateFrameID): Deleted.
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::frameID const):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::showMainResourceForFrame):
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLInFrame):
        (WebKit::WebPage::loadDataInFrame):
        (WebKit::WebPage::stopLoadingFrame):
        (WebKit::WebPage::didReceivePolicyDecision):
        (WebKit::WebPage::continueWillSubmitForm):
        (WebKit::WebPage::runJavaScriptInFrame):
        (WebKit::WebPage::getSourceForFrame):
        (WebKit::WebPage::getMainResourceDataOfFrame):
        (WebKit::WebPage::getResourceDataFromFrame):
        (WebKit::WebPage::getWebArchiveOfFrame):
        (WebKit::WebPage::addConsoleMessage):
        (WebKit::WebPage::sendCSPViolationReport):
        (WebKit::WebPage::enqueueSecurityPolicyViolationEvent):
        (WebKit::WebPage::beginPrinting):
        (WebKit::WebPage::computePagesForPrinting):
        (WebKit::WebPage::computePagesForPrintingImpl):
        (WebKit::WebPage::drawRectToImage):
        (WebKit::WebPage::drawPagesToPDF):
        (WebKit::WebPage::drawPagesToPDFImpl):
        (WebKit::WebPage::drawPagesForPrinting):
        (WebKit::WebPage::frameBecameRemote):
        (WebKit::WebPage::hasStorageAccess):
        (WebKit::WebPage::requestStorageAccess):
        (WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingPDFDocument):
        (WebKit::WebPage::computePagesForPrintingAndDrawToPDF):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::computePagesForPrintingPDFDocument):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::webFrame const):
        (WebKit::WebProcess::addWebFrame):
        (WebKit::WebProcess::removeWebFrame):
        * WebProcess/WebProcess.h:

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

        Remove m_blockRectForTextSelection (along with related code)
        https://bugs.webkit.org/show_bug.cgi?id=200695

        Reviewed by Megan Gardner.

        This member variable was consulted by block selection codepaths which no longer exist.
        No change in behavior.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::selectionBoxForRange): Deleted.

2019-08-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r248526.

        Caused two IndexedDB perf tests to fail

        Reverted changeset:

        "Remove IDB-specific quota"
        https://bugs.webkit.org/show_bug.cgi?id=196545
        https://trac.webkit.org/changeset/248526

2019-08-14  Andy Estes  <aestes@apple.com>

        Fix the build when ENABLE(APPLE_PAY) is false.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:

2019-08-14  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13
        https://bugs.webkit.org/show_bug.cgi?id=200694
        <rdar://problem/54278851>

        Reviewed by Youenn Fablet.

        Update conditionals that reference __MAC_OS_X_VERSION_MIN_REQUIRED and
        __MAC_OS_X_VERSION_MAX_ALLOWED, assuming that they both have values >=
        101300. This means that expressions like
        "__MAC_OS_X_VERSION_MIN_REQUIRED < 101300" are always False and
        "__MAC_OS_X_VERSION_MIN_REQUIRED >= 101300" are always True.

        * NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm:
        (-[WKDownloadProgress initWithDownloadTask:download:URL:sandboxExtension:]):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCustomPasteboardDataEnabled):
        * Shared/WebPreferencesDefaultValues.h:
        * Shared/mac/AuxiliaryProcessMac.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKTextTouchBarItemController itemForIdentifier:]):
        (WebKit::WebViewImpl::mediaPlaybackControlsView const):
        (WebKit::WebViewImpl::updateMediaTouchBar):
        * UIProcess/mac/WebColorPickerMac.mm:
        * WebProcess/Plugins/PDF/PDFLayerControllerSPI.h:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFPluginAccessibilityObject setPdfLayerController:]):
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:]):
        (-[WKPDFPluginAccessibilityObject ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKPDFPluginAccessibilityObject accessibilityFocusedUIElement]):
        (-[WKPDFPluginAccessibilityObject accessibilityAssociatedControlForAnnotation:]):
        (-[WKPDFPluginAccessibilityObject accessibilityHitTest:]):
        (WebKit::PDFPlugin::pdfDocumentDidLoad):
        (WebKit::PDFPlugin::handleMouseEvent):
        (WebKit::PDFPlugin::handleMouseEnterEvent):
        (WebKit::PDFPlugin::handleContextMenuEvent):
        (WebKit::PDFPlugin::pluginHandlesContentOffsetForAccessibilityHitTest const):
        (WebKit::PDFPlugin::accessibilityAssociatedPluginParentForElement const):
        (WebKit::PDFPlugin::updateCursor): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2019-08-14  Brian Burg  <bburg@apple.com>

        REGRESSION(r245320): Web Automation: Perform Actions hangs when pointerdown happens near top of page
        https://bugs.webkit.org/show_bug.cgi?id=200728
        <rdar://problem/54260518>

        Reviewed by Devin Rousso.

        In the last major refactoring for this code, it seems that the argument to
        platformSimulateMouseInteraction was not unified to use viewport coordinates
        in all code paths. This patch fixes both callers to *not* add in topContentInset,
        and instead this is added back in when doing platform-specific event simulation.

        This has no effect on iOS since it's guarded by ENABLE(WEBDRIVER_MOUSE_INTERACTIONS),
        which is only built on macOS.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::performMouseInteraction):
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):

2019-08-14  Andy Estes  <aestes@apple.com>

        [Cocoa] Add some WKA extension points
        https://bugs.webkit.org/show_bug.cgi?id=200506
        <rdar://problem/51682474>

        Reviewed by Tim Horton.

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::finishCreating):
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::finishDecoding):
        (IPC::finishEncoding):
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::encode):
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::decode):
        * Shared/WebCoreArgumentCoders.h:

2019-08-14  Luming Yin  <luming_yin@apple.com>

        v3: CrashTracer: Regression : MobileSafari at UIKitCore: -[UITargetedPreview initWithView:parameters:]
        https://bugs.webkit.org/show_bug.cgi?id=200634

        Reviewed by Simon Fraser.

        Under rare race conditions, the WKContentView may no longer have an associated window. However, 
        UIContextMenuInteraction may still attempt initialize a UITargetedPreview with the orphaned 
        WKContentView. Speculative fix for crashes under such scenarios, so that we can continue without 
        a context menu configuration to prevent the UIKit exception.

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

2019-08-14  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Stop content change observation explicitly.
        https://bugs.webkit.org/show_bug.cgi?id=200689
        <rdar://problem/54274887>

        Reviewed by Simon Fraser.

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

2019-08-14  Youenn Fablet  <youenn@apple.com>

        Remove use of emptySessionID from NetworkLoadParameters
        https://bugs.webkit.org/show_bug.cgi?id=200712

        Reviewed by Alex Christensen.

        Make NetworkLoadParameters constructor take a session ID.
        Update call sites accordingly.

        * NetworkProcess/AdClickAttributionManager.cpp:
        (WebKit::AdClickAttributionManager::fireConversionRequest):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::startPreflight):
        * NetworkProcess/NetworkLoadParameters.h:
        (WebKit::NetworkLoadParameters::NetworkLoadParameters):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        (WebKit::WebLoaderStrategy::preconnectTo):

2019-08-14  Youenn Fablet  <youenn@apple.com>

        Remove use of emptySessionID from WebPageCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=200708

        Reviewed by Alex Christensen.

        Make WebPageCreationParameters constructor take a SessionID.
        Update constructor call sites.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        (WebKit::WebPageCreationParameters::WebPageCreationParameters):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):

2019-08-14  Youenn Fablet  <youenn@apple.com>

        Remove API::PageConfiguration::m_sessionID
        https://bugs.webkit.org/show_bug.cgi?id=200670

        Reviewed by Alex Christensen.

        We can remove this member since it is only accessed for a debug assertion that can be removed without any harm.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::PageConfiguration):
        (API::PageConfiguration::copy const):
        (API::PageConfiguration::setWebsiteDataStore):
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextCreatePageForWebView):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):

2019-08-14  Youenn Fablet  <youenn@apple.com>

        ThreadableBlobRegistry::blobSize should take a SessionID as parameter
        https://bugs.webkit.org/show_bug.cgi?id=200671

        Reviewed by Alex Christensen.

        Update WebCacheStorageConnection to implement sessionID getter.
        Update NetworkConnectionToWebProcess to get a sessionID as parameter to blobSize computation.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::createCurlRequest):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * WebProcess/Cache/WebCacheStorageConnection.h:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::blobSize):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2019-08-14  Youenn Fablet  <youenn@apple.com>

        Remove SessionID default constructor
        https://bugs.webkit.org/show_bug.cgi?id=200669

        Reviewed by Alex Christensen.

        Update IPC decoder to use an Optional<SessionID>.
        Update PageConfiguration to use emptySessionID instead of default constructor.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::PageConfiguration):
        (API::PageConfiguration::sessionID): Deleted.
        (API::PageConfiguration::setSessionID): Deleted.

2019-08-14  Youenn Fablet  <youenn@apple.com>

        Make WebSWOriginStore::m_webSWServerConnections a WeakHashSet
        https://bugs.webkit.org/show_bug.cgi?id=200661

        Reviewed by Alex Christensen.

        * NetworkProcess/ServiceWorker/WebSWOriginStore.cpp:
        (WebKit::WebSWOriginStore::importComplete):
        (WebKit::WebSWOriginStore::registerSWServerConnection):
        (WebKit::WebSWOriginStore::unregisterSWServerConnection):
        (WebKit::WebSWOriginStore::didInvalidateSharedMemory):
        * NetworkProcess/ServiceWorker/WebSWOriginStore.h:

2019-08-14  Youenn Fablet  <youenn@apple.com>

        NetworkProcess::m_swServerConnections should use WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=200660

        Reviewed by Geoffrey Garen.

        Use WeakPtr for SWServer connections as an extra safety measure.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::postMessageToServiceWorkerClient):
        (WebKit::NetworkProcess::postMessageToServiceWorker):
        (WebKit::NetworkProcess::registerSWServerConnection):
        (WebKit::NetworkProcess::unregisterSWServerConnection):
        * NetworkProcess/NetworkProcess.h:

2019-08-14  Youenn Fablet  <youenn@apple.com>

        Move some WebRTC runtime flags from experimental to internal
        https://bugs.webkit.org/show_bug.cgi?id=200672

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2019-08-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        shouldRespectImageOrientation should be a value in ImageOrientation
        https://bugs.webkit.org/show_bug.cgi?id=200553

        Reviewed by Simon Fraser.

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

2019-08-13  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Switch NSURLSession on top navigation to prevalent resource with user interaction
        https://bugs.webkit.org/show_bug.cgi?id=200642
        <rdar://problem/53962073>

        Reviewed by Alex Christensen.

        Since prevalent resources with user interaction get to keep their cookies and website
        data, we should use a different NSURLSessions for when they are first-party websites
        and have access to that data. This patch achieves that.

        The WebKit::NetworkDataTaskCocoa constructor now checks with the network storage session
        if the first party for this load should be isolated. The category for which this is true
        is checked in the new function
        WebCore:NetworkStorageSession::shouldBlockThirdPartyCookiesButKeepFirstPartyCookiesFor()
        which in turn is backed by a new split of m_registrableDomainsToBlockCookieFor into:
        - m_registrableDomainsToBlockAndDeleteCookiesFor
        - m_registrableDomainsToBlockButKeepCookiesFor
        ... in WebCore:NetworkStorageSession.

        Non-isolated sessions are now picked up through the convenience function
        WebKit::NetworkSessionCocoa::session() whereas isolated sessions are created lazily and
        picked up through WebKit::NetworkSessionCocoa::isolatedSession().

        The number of isolated NSURLSessions in memory is capped to 10. When the cap is hit,
        the session that's been unused the longest is aged out.

        The C API changes are test infrastructure.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::clear):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsToBlockAndDeleteCookiesFor const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsToBlockButKeepCookiesFor const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateCookieBlocking):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsToBlock const): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::clear):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsStore::debugLogDomainsInBatches):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdateForDomains): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearBlockingStateForDomains): Deleted.
            Dead code.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        (WebKit::RegistrableDomainsToBlockCookiesFor::isolatedCopy const):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updatePrevalentDomainsToBlockCookiesFor):
        (WebKit::NetworkProcess::scheduleClearInMemoryAndPersistent):
        (WebKit::NetworkProcess::hasIsolatedSession const):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::shouldIsolateSessionsForPrevalentTopFrames const):
        (WebKit::NetworkSession::hasIsolatedSession const):
        (WebKit::NetworkSession::clearIsolatedSessions):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::NetworkSessionCocoa::session):
        (WebKit::NetworkSessionCocoa::isolatedSession):
        (WebKit::NetworkSessionCocoa::hasIsolatedSession const):
        (WebKit::NetworkSessionCocoa::clearIsolatedSessions):
        (WebKit::NetworkSessionCocoa::invalidateAndCancel):
        (WebKit::NetworkSessionCocoa::clearCredentials):
        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsHasIsolatedSession):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::hasIsolatedSession):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::hasLocalStorageForTesting const):
        (WebKit::WebsiteDataStore::hasIsolatedSessionForTesting const):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        Fix potential thread safety issue under WebResourceLoadStatisticsStore::hasHadUserInteraction()
        https://bugs.webkit.org/show_bug.cgi?id=200688

        Reviewed by Alex Christensen.

        Fix potential thread safety issue under WebResourceLoadStatisticsStore::hasHadUserInteraction().
        It passes a RegistrableDomain to another thread without isolated copying it.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):

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

        Fix potential thread safety issue under StorageManager::getSessionStorageOrigins()
        https://bugs.webkit.org/show_bug.cgi?id=200684

        Reviewed by Geoffrey Garen.

        Fix potential thread safety issue under StorageManager::getSessionStorageOrigins(). The origins are being
        passed from the background queue to the main thread without isolated copy.

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

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

        [WebAuthn] Make CtapHidAuthenticator/U2fHidAuthenticator to CtapAuthenticator/U2fAuthenticator
        https://bugs.webkit.org/show_bug.cgi?id=191527
        <rdar://problem/54237146>

        Reviewed by Chris Dumez.

        This patch makes an ABC CtapDriver, which services as an abstract interface for CtapAuthenticator/U2fAuthenticator to talk to
        the actual object that implement the specific CTAP protocol that mananges communications over different transports, for example,
        CtapHidDriver, such that CtapAuthenticator/U2fAuthenticator can be shared across different transports.

        This patch also renames CtapHidAuthenticator/U2fHidAuthenticator to CtapAuthenticator/U2fAuthenticator correspondingly.

        * Sources.txt:
        * UIProcess/WebAuthentication/Cocoa/HidService.mm:
        (WebKit::HidService::continueAddDeviceAfterGetInfo):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp: Renamed from Source/WebKit/UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp.
        (WebKit::CtapAuthenticator::CtapAuthenticator):
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::continueMakeCredentialAfterResponseReceived const):
        (WebKit::CtapAuthenticator::getAssertion):
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::tryDowngrade):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.h: Copied from Source/WebKit/UIProcess/WebAuthentication/fido/CtapHidAuthenticator.h.
        * UIProcess/WebAuthentication/fido/CtapDriver.h: Renamed from Source/WebKit/UIProcess/WebAuthentication/fido/CtapHidAuthenticator.h.
        * UIProcess/WebAuthentication/fido/CtapHidDriver.h:
        (WebKit::CtapHidDriver::setProtocol):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp: Renamed from Source/WebKit/UIProcess/WebAuthentication/fido/U2fHidAuthenticator.cpp.
        (WebKit::U2fAuthenticator::U2fAuthenticator):
        (WebKit::U2fAuthenticator::makeCredential):
        (WebKit::U2fAuthenticator::checkExcludeList):
        (WebKit::U2fAuthenticator::issueRegisterCommand):
        (WebKit::U2fAuthenticator::getAssertion):
        (WebKit::U2fAuthenticator::issueSignCommand):
        (WebKit::U2fAuthenticator::issueNewCommand):
        (WebKit::U2fAuthenticator::issueCommand):
        (WebKit::U2fAuthenticator::responseReceived):
        (WebKit::U2fAuthenticator::continueRegisterCommandAfterResponseReceived):
        (WebKit::U2fAuthenticator::continueCheckOnlyCommandAfterResponseReceived):
        (WebKit::U2fAuthenticator::continueBogusCommandAfterResponseReceived):
        (WebKit::U2fAuthenticator::continueSignCommandAfterResponseReceived):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.h: Renamed from Source/WebKit/UIProcess/WebAuthentication/fido/U2fHidAuthenticator.h.
        * WebKit.xcodeproj/project.pbxproj:

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

        Crash under IPC::Connection::markCurrentlyDispatchedMessageAsInvalid()
        https://bugs.webkit.org/show_bug.cgi?id=200674
        <rdar://problem/50692748>

        Reviewed by Geoff Garen.

        When the client terminates a provisional process (e.g. via the [WKWebView _killWebContentProcessAndResetState]
        SPI), the WebProcessProxy would notify its associated WebPageProxy objects that it had terminated but would fail
        to notify its associated ProvisionalPageProxy objects. As a result, those objects would not get destroyed and
        would still think that they were in the middle of a provisional load the next time a load started. This inconsistent
        state would lead to crashes such as the one in the radar.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::cancel):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):

2019-08-13  Youenn Fablet  <youenn@apple.com>

        Blob registries should be keyed by session IDs
        https://bugs.webkit.org/show_bug.cgi?id=200567
        <rdar://problem/54120212>

        Reviewed by Alex Christensen.

        Move blob registry to NetworkSession so that it is partitioned by session ID.
        In case session ID is not given through IPC, use the connection as key to get the network session.
        This is used for blobSize.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h: Removed.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL):
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        (WebKit::NetworkConnectionToWebProcess::filesInBlob):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::blobRegistry):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::blobRegistry):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::createWebSocketTask):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked):
        (WebKit::BlobRegistryProxy::unregisterBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles):
        * WebProcess/Network/NetworkProcessConnection.h:

2019-08-13  Youenn Fablet  <youenn@apple.com>

        User Agent and SessionID should be given to NetworkRTCProvider to set up the correct proxy information
        https://bugs.webkit.org/show_bug.cgi?id=200583

        Reviewed by Eric Carlson.

        Pass session id and user agent whenever creating a TCP client socket.
        Use this information to get the proxy information from NetworkSession and pass it to libwebrtc socket creation.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::proxyInfoFromSession):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * NetworkProcess/webrtc/NetworkRTCProvider.mm: Added.
        (WebKit::NetworkRTCProvider::proxyInfoFromSession):
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createPeerConnection):
        (WebKit::LibWebRTCProvider::createSocketFactory):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createServerTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createUdpSocket):
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createAsyncResolver):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:

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

        Fix bad RELEASE_LOG_ERROR under ProvisionalPageProxy::ProvisionalPageProxy()
        https://bugs.webkit.org/show_bug.cgi?id=200646

        Reviewed by Alex Christensen.

        Fix bad RELEASE_LOG_ERROR under ProvisionalPageProxy::ProvisionalPageProxy(). Should be a
        simple RELEASE_LOG() as this is not an error.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):

2019-08-12  Sam Weinig  <weinig@apple.com>

        Replace multiparameter overloads of append() in StringBuilder as a first step toward standardizinging on the flexibleAppend() implementation
        https://bugs.webkit.org/show_bug.cgi?id=200614

        Reviewed by Darin Adler.

        Renames StringBuilder::append(const LChar*, unsigned), StringBuilder::append(const UChar*, unsigned) and 
        StringBuilder::append(const char*, unsigned) to StringBuilder::appendCharacters(...).
        
        Renames StringBuilder::append(const String& string, unsigned offset, unsigned length) to 
        StringBuilder::appendSubstring(...).

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::setAndSerializeSandboxParameters):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::didReceiveInvalidMessage):
        Update for renames.

2019-08-12  Dean Jackson  <dino@apple.com>

        Contextual menu Hide and Show Link Previews should not have a symbol
        https://bugs.webkit.org/show_bug.cgi?id=200645
        <rdar://problem/54129647>

        Reviewed by Wenson Hsieh.

        Don't use an image on the UIMenuItem.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction imageForElementActionType:]): Return nil for Show/Hide Link Previews.

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

        Unreviewed, add missing WTF::initializeMainThread() call to fix some crashes on the bots after r248533.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):

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

        Fix Crash in Mail Search
        https://bugs.webkit.org/show_bug.cgi?id=200589
        <rdar://problem/53666720>

        Reviewed by Tim Horton.

        If we search in Mail backwards first, for AppKit reasons 
        we get a -1 for the index of the found item.
        Do not try and insert data in this case.

        * UIProcess/mac/WKTextFinderClient.mm:

2019-08-12  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Fix building without unified sources
        https://bugs.webkit.org/show_bug.cgi?id=200641

        Reviewed by Žan Doberšek.

        * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.cpp: Add missing inclusions for headers
        WebCore/GtkUtilities.h (for convertWidgetPointToScreenPoint), WebCore/IntPoint.h, and
        WebPageProxy.h (the two latter to avoid usage of undefined types).
        (WebKit::WebDataListSuggestionsDropdownGtk::show): Add namespace prefix to use
        WebCore::IntPoint.

2019-08-12  Sihui Liu  <sihui_liu@apple.com>

        Clear m_sessionStorageNamespaces on the background thread
        https://bugs.webkit.org/show_bug.cgi?id=200631
        <rdar://problem/54149638>

        Reviewed by Chris Dumez.

        Network process receives messages about web page state from web process and destroys sessionStorageNamespace if 
        needed. It also receives messages about session state from UI process and destroys StorageManager, which owns 
        SessionStorageNamespaces, if needed. Because of the race in receiving the messages from different processes, 
        network process may decide to destroy StorageManager before destroying all SessionStorageNamespaces, and 
        SessionStorageNamespaces are destroyed with StorageManager on the main thread.

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

2019-08-12  Sihui Liu  <sihui_liu@apple.com>

        Remove an assertion in ~StorageArea()
        https://bugs.webkit.org/show_bug.cgi?id=200630
        <rdar://problem/54097722>

        Reviewed by Chris Dumez.

        In r247370, we clear the LocalStorageNamespace before the destructor of LocalStorageNamespace is invoked, to 
        make sure StorageArea gets destroyed on the background thread. 
        StorageArea can get destroyed before LocalStorageNamespace, so the assertion in ~StorageArea() is not true any 
        more.

        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::~StorageArea):

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

        [iPadOS] Web pages sometimes load at half width in Safari
        https://bugs.webkit.org/show_bug.cgi?id=200624
        <rdar://problem/52694257>

        Reviewed by Simon Fraser.

        Whenever WKWebView's size changes, it normally notifies the web content process by calling into WebPageProxy::
        setViewportConfigurationViewLayoutSize, which remembers this view layout size using a member variable,
        m_viewportConfigurationViewLayoutSize. Later, m_viewportConfigurationViewLayoutSize is consulted as a part of
        constructing the creation parameters used to set up a new page.

        However, during animated resize, WKWebView avoids these calls to setViewportConfigurationViewLayoutSize via the
        dynamic viewport update mode check in -[WKWebView _frameOrBoundsChanged]. Instead, the new view layout size is
        pushed to the web process by calling WebPageProxy::dynamicViewportSizeUpdate.

        Since dynamicViewportSizeUpdate doesn't update m_viewportConfigurationViewLayoutSize, the next
        WebPageCreationParameters that are created with this WebPageProxy (e.g. after a process swap, or after
        reloading, if the process was terminated) will use the size of the WKWebView prior to the most recent animated
        resize.

        To fix the bug, we simply make sure that m_viewportConfigurationViewLayoutSize is updated in the dynamic
        viewport size update (i.e. animated resize) case as well.

        Test: WebKit.CreateWebPageAfterAnimatedResize

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):

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

        Crash under NetworkResourceLoader::start()
        https://bugs.webkit.org/show_bug.cgi?id=200628

        Reviewed by Youenn Fablet.

        Make sure the NetworkResourceLoader is still alive when the lambda passed to NetworkLoadChecker::check()
        gets executed.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:

2019-08-12  Jonathan Bedard  <jbedard@apple.com>

        Tapping buttons in Data Detectors lookup previews doesn't work (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=200579
        <rdar://problem/54056519>

        Reviewed by Megan Gardner.

        * Platform/spi/ios/UIKitSPI.h: Add _UIContextMenuStyle SPI.

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

        Add threading assertions to RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200507

        Reviewed by Ryosuke Niwa.

        Enable new RefCounted threading assertions for WebKit2
        (UIProcess + auxiliary processes).

        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):

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

        Unreviewed, rolling out r248525.

        Revert new threading assertions while I work on fixing the
        issues they exposed

        Reverted changeset:

        "Add threading assertions to RefCounted"
        https://bugs.webkit.org/show_bug.cgi?id=200507
        https://trac.webkit.org/changeset/248525

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

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createIDBServer):
        (WebKit::NetworkProcess::addIndexedDatabaseSession):
        (WebKit::NetworkProcess::setIDBPerOriginQuota): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetIDBPerOriginQuota): Deleted.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setIDBPerOriginQuota): Deleted.
        * UIProcess/WebProcessPool.h:

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

        Add threading assertions to RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200507

        Reviewed by Ryosuke Niwa.

        Enable new RefCounted threading assertions for WebKit2
        (UIProcess + auxiliary processes).

        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):

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

        WebPage and ViewportConfiguration have differing notions of viewLayoutSize
        https://bugs.webkit.org/show_bug.cgi?id=200619

        Reviewed by Tim Horton.

        The notion of a "view layout size" exists on WebPage and WebPageProxy for the purpose of specifying an intrinsic
        content size for the entire web view on macOS. However, it also exists in ViewportConfiguration (as
        viewLayoutSize) and WebPageProxy (under the name m_viewportConfigurationViewLayoutSize) for the purposes of
        specifying the minimum layout size of the page's viewport.

        This is especially confusing in WebPageProxy, which has both m_viewportConfigurationViewLayoutSize and
        m_viewLayoutSize. To remedy this, rename "*viewLayoutSize" for the purposes of specifying an intrinsic web view
        size to "*minimumSizeForAutoLayout" instead, which is consistent with the corresponding SPI property name on
        WKView.

        No change in behavior.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _minimumLayoutWidth]):
        (-[WKWebView _setMinimumLayoutWidth:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setMinimumSizeForAutoLayout):
        (WebKit::WebViewImpl::minimumSizeForAutoLayout const):
        (WebKit::WebViewImpl::setIntrinsicContentSize):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::minimumSizeForAutoLayoutDidChange):
        (WebKit::DrawingAreaProxy::viewLayoutSizeDidChange): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::minimumSizeForAutoLayout const):
        (WebKit::WebPageProxy::viewLayoutSize const): Deleted.
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::minimumSizeForAutoLayoutDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::willSendUpdateGeometry):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::viewLayoutSizeDidChange): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::setMinimumSizeForAutoLayout):
        (WebKit::WebPage::updateIntrinsicContentSizeIfNeeded):
        (WebKit::WebPage::setViewLayoutSize): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::minimumSizeForAutoLayout const):
        (WebKit::WebPage::viewLayoutSize const): Deleted.
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):

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

        Disable ContentChangeObserver TouchEvent adjustment on youtube.com on iOS in mobile browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=200609
        <rdar://problem/54015403>

        Reviewed by Maciej Stachowiak.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):

2019-08-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] Add a quirk for gmail.com messages on iPhone iOS13
        https://bugs.webkit.org/show_bug.cgi?id=200605

        Reviewed by Maciej Stachowiak.

        Use WebPage::platformUserAgent() to add the gmail.com quirk.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformUserAgent const):

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

        Remove some more unused 32-bit code
        https://bugs.webkit.org/show_bug.cgi?id=200607

        Reviewed by Alexey Proskuryakov.

        * Modules/OSX.modulemap:

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

        [iOS 13] Google Docs/Slides/Sheets: paste often doesn't work and sometimes produces an error
        https://bugs.webkit.org/show_bug.cgi?id=200591
        <rdar://problem/54102238>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Adopts UIKit SPI to avoid incrementing the general pasteboard's change count whenever an editable element is
        focused. This is due to how, in iOS 13, UIKit temporarily writes an image to the pasteboard when showing the
        keyboard, to determine whether or not to show the Memojis in the input view.

        This causes UIPasteboard's changeCount to increment twice due to adding and then removing the image, which means
        that the changeCount sanity checks in the web process will race against the pasteboard gaining and then losing
        this temporary image.

        Instead, the new -supportsImagePaste SPI may be used to short-circuit this step, and avoid updating the
        changeCount when UIKeyboardImpl's delegate changes.

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

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

        Remove unused Connection::sendWithReply
        https://bugs.webkit.org/show_bug.cgi?id=200590

        Reviewed by Chris Dumez.

        This was attempted in r245151, but rolled out in r245164 because my SecItemShim code didn't work well on non-main threads.
        Chris found a better solution for SecItemShim in r248014, making this unused code.  Let's remove it.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::invalidate):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::sendMessageWithReply): Deleted.
        * Platform/IPC/Connection.h:
        (IPC::Connection::send):
        (IPC::Connection::sendWithReply): Deleted.

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

        [iOS WK2] Remove context menu hints on navigation
        https://bugs.webkit.org/show_bug.cgi?id=200588
        rdar://problem/54061796

        Reviewed by Tim Horton.

        Make sure the context menu hint doesn't linger across navigations by hosting it in its
        own container view (shared with drag previews), and hiding that view on navigation (unparenting
        may have bad consequences). We remove the view when the animation ends.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didCommitLoadForMainFrame]):
        (-[WKContentView containerViewForTargetedPreviews]):
        (-[WKContentView _hideContextMenu]):
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):

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

        Disable CSSOM View Scrolling API for IMDb iOS app
        https://bugs.webkit.org/show_bug.cgi?id=200586
        <rdar://problem/53645833>

        Reviewed by Simon Fraser.

        Change the CSSOMViewScrollingAPIEnabled default value to be off for the IMDb app's WKWebViews.
        I manually verified this is effective in those WKWebViews but no other WKWebViews and that it fixes the radar.

        * Shared/WebPreferences.yaml:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCSSOMViewScrollingAPIEnabled):
        * Shared/WebPreferencesDefaultValues.h:

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

        Tapping buttons in Data Detectors lookup previews doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=200579
        <rdar://problem/54056519>

        Reviewed by Megan Gardner.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _contextMenuInteraction:styleForMenuWithConfiguration:]):
        If a Data Detectors context menu wants the action menu style, provide it.

        (-[WKContentView contextMenuInteraction:willPerformPreviewActionForMenuWithConfiguration:animator:]):
        If a Data Detectors context menu provides a view controller to present
        on context menu commit, present it. We present on top of the same view
        controller that is currently presenting the context menu, but modally
        instead of inside the context menu.

        If a Data Detectors context menu instead provides a URL to launch on
        context menu commit, call openURL.

        In both cases, change the commit style to pop, since we're committing
        instead of dismissing.

2019-08-08  Dean Jackson  <dino@apple.com>

        REGRESSION (52279987): Most of the WKUIDelegate contextMenu delegate methods are not being called
        https://bugs.webkit.org/show_bug.cgi?id=200557
        <rdar://problem/53717962>

        Reviewed by Wenson Hsieh.

        UIKit changed the name of delegates recently. We ignored the warning because
        it was still calling the old methods. However, it will only do so for applications
        authored by Apple, breaking 3rd parties.

        The change here is just adopting the new methods in place of the old ones.
        It does not change the API that WebKit vends (they still use the older names).

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView contextMenuInteraction:willDisplayMenuForConfiguration:animator:]):
        (-[WKContentView contextMenuInteraction:willPerformPreviewActionForMenuWithConfiguration:animator:]):
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):
        (-[WKContentView contextMenuInteractionWillPresent:]): Deleted.
        (-[WKContentView contextMenuInteraction:willCommitWithAnimator:]): Deleted.
        (-[WKContentView contextMenuInteractionDidEnd:]): Deleted.

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

        [iOS WK2] Hide previews when an inner overflow or frame scrollview scrolls
        https://bugs.webkit.org/show_bug.cgi?id=200552
        rdar://problem/54086338

        Reviewed by Wenson Hsieh.

        Give UITargetedPreview the UIScrollView that the target element is inside of,
        so it can clean up if the user starts to scroll that view.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createTargetedPreviewIfPossible]):

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

        Add threading assertions to WebStorage code
        https://bugs.webkit.org/show_bug.cgi?id=200550

        Reviewed by Geoffrey Garen.

        Add threading assertions to WebStorage code for extra safety.

        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::LocalStorageNamespace):
        (WebKit::LocalStorageNamespace::~LocalStorageNamespace):
        (WebKit::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::LocalStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::LocalStorageNamespace::clearAllStorageAreas):
        (WebKit::LocalStorageNamespace::ephemeralOrigins const):
        (WebKit::LocalStorageNamespace::cloneTo):
        * NetworkProcess/WebStorage/SessionStorageNamespace.cpp:
        (WebKit::SessionStorageNamespace::SessionStorageNamespace):
        (WebKit::SessionStorageNamespace::~SessionStorageNamespace):
        (WebKit::SessionStorageNamespace::addAllowedConnection):
        (WebKit::SessionStorageNamespace::removeAllowedConnection):
        (WebKit::SessionStorageNamespace::getOrCreateStorageArea):
        (WebKit::SessionStorageNamespace::cloneTo):
        (WebKit::SessionStorageNamespace::origins const):
        (WebKit::SessionStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::SessionStorageNamespace::clearAllStorageAreas):
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::StorageArea):
        (WebKit::StorageArea::~StorageArea):
        (WebKit::StorageArea::addListener):
        (WebKit::StorageArea::removeListener):
        (WebKit::StorageArea::hasListener const):
        (WebKit::StorageArea::clone const):
        (WebKit::StorageArea::setItem):
        (WebKit::StorageArea::setItems):
        (WebKit::StorageArea::removeItem):
        (WebKit::StorageArea::clear):
        (WebKit::StorageArea::items const):
        (WebKit::StorageArea::openDatabaseAndImportItemsIfNeeded const):
        (WebKit::StorageArea::dispatchEvents const):
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::destroySessionStorageNamespace):
        (WebKit::StorageManager::addAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::removeAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::cloneSessionStorageNamespace):
        (WebKit::StorageManager::processDidCloseConnection):
        (WebKit::StorageManager::getSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::getLocalStorageOriginDetails):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        (WebKit::StorageManager::waitUntilTasksFinished):
        (WebKit::StorageManager::suspend):
        (WebKit::StorageManager::resume):
        (WebKit::StorageManager::findStorageArea const):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.cpp:
        (WebKit::TransientLocalStorageNamespace::TransientLocalStorageNamespace):
        (WebKit::TransientLocalStorageNamespace::~TransientLocalStorageNamespace):
        (WebKit::TransientLocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::TransientLocalStorageNamespace::origins const):
        (WebKit::TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::TransientLocalStorageNamespace::clearAllStorageAreas):

2019-08-08  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Get WebKit, WebKit2, and MiniBrowser building and executing
        https://bugs.webkit.org/show_bug.cgi?id=200539
        <rdar://problem/54082550>

        Reviewed by Dean Jackson.

        * PlatformFTW.cmake: Added.
        * Shared/ShareableBitmap.h:
        * Shared/win/ShareableBitmapDirect2D.cpp: Added.
        * UIProcess/BackingStore.cpp:
        * UIProcess/BackingStore.h:
        (WebKit::BackingStore::renderTarget):
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h:
        * UIProcess/win/BackingStoreDirect2D.cpp: Added.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint):
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::display):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h:
        * WebProcess/WebPage/win/WebInspectorUIWin.cpp:
        (WebKit::WebInspectorUI::localizedStringsURL):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL):
        * WebProcess/win/WebProcessMainWin.cpp:
        (WebKit::WebProcessMainWin):

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

        [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=200543

        Reviewed by Brent Fulgham.

        Adopt SPI to issue a process-specific sandbox extension for local file read, passing it the process
        identifier of the WebContent process.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::SandboxExtension::createHandleForReadByPid):
        * Shared/SandboxExtension.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):

2019-08-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] Position image information should respect the image orientation
        https://bugs.webkit.org/show_bug.cgi?id=200487

        Reviewed by Simon Fraser.

        imagePositionInformation() should respect the image orientation when
        drawing an Image to a ShareableBitmap context.

        boundsPositionInformation() already takes care of the image orientation
        because it gets RenderImage::enclosingBoundingBox().

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

2019-08-08  Timothy Hatcher  <timothy@apple.com>

        Set WKWebView opaque based on drawsBackground in PageConfiguration.
        https://bugs.webkit.org/show_bug.cgi?id=200528

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Set self.opaque = NO when !self.opaque || !pageConfiguration->drawsBackground().
        It is almost impossible to have !self.opaque be NO at this point, since we are still inside initWithFrame:. A subclass could
        override opaque and return NO, but checking pageConfiguration's drawsBackground is a good alternative.
        * WebProcess/WebPage/WebPage.h: Remove unused m_drawsBackground member.

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

        [iOS 13] Taps that interrupt momentum scrolling are recognized as clicks
        https://bugs.webkit.org/show_bug.cgi?id=200516
        <rdar://problem/53889373>

        Reviewed by Tim Horton.

        After <https://trac.webkit.org/r247656>, the -tracksImmediatelyWhileDecelerating property of WKScrollView and
        WKChildScrollView is set to NO. This means that if a user interacts with the page while the scroll view is
        decelerating (e.g. after momentum scrolling), the pan gesture recognizer will not be immediately recognized.
        This gives other gesture recognizers, such as the synthetic click (single tap) gesture a chance to instead
        recognize first. In this particular bug, this causes taps on the web view that are intended to only stop
        momentum scrolling to instead activate clickable elements beneath the touch, such as links and buttons.

        To mitigate this, we add some logic to prevent the click gesture recognizer from firing in the case where the
        tap also causes the scroll view to decelerate. This heuristic is similar to the one introduced in r219310, which
        has the same purpose of hiding gestures that stop momentum scrolling from the page, and also consults
        -[UIScrollView _isInterruptingDeceleration].

        Tests:  fast/scrolling/ios/click-events-during-momentum-scroll-in-main-frame.html
                fast/scrolling/ios/click-events-during-momentum-scroll-in-overflow-after-tap-on-body.html
                fast/scrolling/ios/click-events-during-momentum-scroll-in-overflow.html

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

        Return NO in the case of the single tap gesture if the UIScrollView most recently touched by the single tap
        gesture (or one of its enclosing scroll views, up to the main WKScrollView) is being interrupted while
        decelerating.

        * UIProcess/ios/WKSyntheticTapGestureRecognizer.h:
        * UIProcess/ios/WKSyntheticTapGestureRecognizer.mm:
        (-[WKSyntheticTapGestureRecognizer reset]):
        (-[WKSyntheticTapGestureRecognizer touchesBegan:withEvent:]):

        Teach WKSyntheticTapGestureRecognizer to keep track of the last WKScrollView that was touched, for later use in
        -gestureRecognizerShouldBegin:. To do this, we keep a weak reference to the first UIScrollView we find in the
        set of touches.

        (-[WKSyntheticTapGestureRecognizer lastTouchedScrollView]):

2019-08-08  Dean Jackson  <dino@apple.com>

        Use "safari" glyph for "Show Link Previews" contextual menu
        https://bugs.webkit.org/show_bug.cgi?id=200544
        <rdar://problem/54087842>

        Reviewed by Tim Horton.

        Use the system image for the compass.

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

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

        Move classes declared inside StorageManager.cpp into their own headers
        https://bugs.webkit.org/show_bug.cgi?id=200527

        Reviewed by Alex Christensen.

        Move classes declared inside StorageManager.cpp into their own headers
        for clarity. StorageManager.cpp was getting really big.

        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp: Added.
        (WebKit::LocalStorageNamespace::LocalStorageNamespace):
        (WebKit::LocalStorageNamespace::~LocalStorageNamespace):
        (WebKit::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::LocalStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::LocalStorageNamespace::clearAllStorageAreas):
        (WebKit::LocalStorageNamespace::ephemeralOrigins const):
        (WebKit::LocalStorageNamespace::cloneTo):
        * NetworkProcess/WebStorage/LocalStorageNamespace.h: Added.
        (WebKit::LocalStorageNamespace::create):
        (WebKit::LocalStorageNamespace::storageManager const):
        * NetworkProcess/WebStorage/SessionStorageNamespace.cpp: Added.
        (WebKit::SessionStorageNamespace::SessionStorageNamespace):
        (WebKit::SessionStorageNamespace::~SessionStorageNamespace):
        (WebKit::SessionStorageNamespace::addAllowedConnection):
        (WebKit::SessionStorageNamespace::removeAllowedConnection):
        (WebKit::SessionStorageNamespace::getOrCreateStorageArea):
        (WebKit::SessionStorageNamespace::cloneTo):
        (WebKit::SessionStorageNamespace::origins const):
        (WebKit::SessionStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::SessionStorageNamespace::clearAllStorageAreas):
        * NetworkProcess/WebStorage/SessionStorageNamespace.h: Added.
        (WebKit::SessionStorageNamespace::create):
        (WebKit::SessionStorageNamespace::isEmpty const):
        (WebKit::SessionStorageNamespace::allowedConnections const):
        * NetworkProcess/WebStorage/StorageArea.cpp: Added.
        (WebKit::StorageArea::StorageArea):
        (WebKit::StorageArea::~StorageArea):
        (WebKit::StorageArea::addListener):
        (WebKit::StorageArea::removeListener):
        (WebKit::StorageArea::hasListener const):
        (WebKit::StorageArea::clone const):
        (WebKit::StorageArea::setItem):
        (WebKit::StorageArea::setItems):
        (WebKit::StorageArea::removeItem):
        (WebKit::StorageArea::clear):
        (WebKit::StorageArea::items const):
        (WebKit::StorageArea::openDatabaseAndImportItemsIfNeeded const):
        (WebKit::StorageArea::dispatchEvents const):
        * NetworkProcess/WebStorage/StorageArea.h: Added.
        (WebKit::StorageArea::create):
        (WebKit::StorageArea::securityOrigin const):
        (WebKit::StorageArea::isEphemeral const):
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::findStorageArea const):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
        * NetworkProcess/WebStorage/StorageManager.h:
        (WebKit::StorageManager::create):
        (WebKit::StorageManager::localStorageDatabaseTracker const):
        (WebKit::StorageManager::workQueue const):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.cpp: Added.
        (WebKit::TransientLocalStorageNamespace::TransientLocalStorageNamespace):
        (WebKit::TransientLocalStorageNamespace::~TransientLocalStorageNamespace):
        (WebKit::TransientLocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::TransientLocalStorageNamespace::origins const):
        (WebKit::TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::TransientLocalStorageNamespace::clearAllStorageAreas):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.h: Added.
        (WebKit::TransientLocalStorageNamespace::create):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canRequestUseSpeculativeRevalidation):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2019-08-08  Rob Buis  <rbuis@igalia.com>

        Add runtime flag for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=199794

        Reviewed by Darin Adler.

        Add LazyImageLoading preference.

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

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

        Turn some ITP threading ASSERTs into RELEASE_ASSERTs
        https://bugs.webkit.org/show_bug.cgi?id=200521

        Reviewed by Ryosuke Niwa.

        Turn some ITP threading ASSERTs into RELEASE_ASSERTs to help catch more bugs.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
        (WebKit::ResourceLoadStatisticsMemoryStore::isEmpty const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::ResourceLoadStatisticsPersistentStorage):
        (WebKit::ResourceLoadStatisticsPersistentStorage::~ResourceLoadStatisticsPersistentStorage):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):

2019-08-07  Kate Cheney  <katherine_cheney@apple.com>

        Adopt non-deprecated CGColorSpace API
        https://bugs.webkit.org/show_bug.cgi?id=184358

        Reviewed by Darin Adler.

        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::decode):

        We changed the deprecated CGColorSpaceCreateWithICCProfile function to 
        CGColorSpaceCreateWithICCData. 

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

        Remove speculative workaround for upload crash
        https://bugs.webkit.org/show_bug.cgi?id=200514

        Reviewed by Geoffrey Garen.

        This workaround didn't help anyways, and the crash has been resolved.  Let's clean up.

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

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

        Regression(r247784) ResourceLoadStatisticsMemoryStore / ResourceLoadStatisticsPersistentStorage may get destroyed on the wrong thread
        https://bugs.webkit.org/show_bug.cgi?id=200517

        Reviewed by Geoffrey Garen.

        The issue is that WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore() is null checking
        m_persistentStorage and m_statisticsStore on the main thread, even though those members are initialized
        and destroyed on the background thread. As a result, if flushAndDestroyPersistentStore() is called *before*
        the background task to initialize those members has had a chance to run, then we'd return early without
        destroying those members. Later on, the background task would then initialize those data members and we
        would then destroy them on the main thread when the WebResourceLoadStatisticsStore is destroyed on the
        main thread.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):

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

        Context menu on a universal link produces a blank preview
        https://bugs.webkit.org/show_bug.cgi?id=200485
        <rdar://problem/53699620>

        Reviewed by Tim Horton.

        If the context menu is activated on an iTunesStore URL, pass it
        on to DataDetectors, who should know how to handle it.

        Two drive-by fixes:
        - make it clear that early returns do not produce a value. Instead call the
          completion handler first, then return.
        - The new API DataDetectors case doesn't need to worry about hiding link previews
          as DataDetectors itself will handle that.

        * UIProcess/ios/WKContentViewInteraction.mm: If the URL is an iTunesStoreURL
        (as defined by CoreServices), let DataDetectors handle it.
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView continueContextMenuInteractionWithDataDetectors:]): New method to
        use DataDetectors if possible.

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

        Add to InteractionInformationAtPosition information about whether the element is in a subscrollable region
        https://bugs.webkit.org/show_bug.cgi?id=200374
        rdar://problem/54095519

        Reviewed by Tim Horton.
        
        Add InteractionInformationAtPosition.containerScrollingNodeID and initialize it in elementPositionInformation()
        by asking the scrolling coordinator.
        
        Also add a way to get from a ScrollingNodeID to a UIScrollView to RemoteScrollingCoordinatorProxy,
        which gets the scrolling node and asks the delegate for the UIView.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollViewForScrollingNodeID const):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollView const):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::elementPositionInformation):

2019-08-07  Priyanka Agarwal  <pagarwal999@apple.com>

        Allow clients to toggle a text input field between being viewable and having characters hidden while maintaining 
        a yellow auto-filled appearance
        https://bugs.webkit.org/show_bug.cgi?id=200037
        rdar://problem/51900961

        Reviewed by Daniel Bates.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle HTMLInputElementIsAutoFilledAndViewable]):
        Accessor function for boolean which represents if the input element is autofilled and viewable.

        (-[WKWebProcessPlugInNodeHandle setHTMLInputElementIsAutoFilledAndViewable:]):
        Setter function for boolean which represents if the input element is autofilled and viewable.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleSetHTMLInputElementAutoFilledAndViewable):
        Accessor function for boolean which represents if the input element is autofilled and viewable.

       * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        Creating function declaration for boolean setter.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        Accessor function for boolean which represents if the input element is autofilled and viewable.

        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFilledAndViewable const):
        Setter function for boolean which represents if the input element is autofilled and viewable.

        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFilledAndViewable):
        Setter function for boolean which represents if the input element is autofilled and viewable.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        Adding setter and getter functions for the boolean which represents if the input element is autofilled
        and viewable.

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

        Add more threading assertions to ITP code
        https://bugs.webkit.org/show_bug.cgi?id=200505

        Reviewed by Brent Fulgham.

        Add more threading assertions to ITP code to help catch bugs and protect against future bad usage.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::isEmpty const):
        (WebKit::ResourceLoadStatisticsMemoryStore::setPersistentStorage):
        (WebKit::ResourceLoadStatisticsMemoryStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::classifyPrevalentResources):
        (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageIfNeeded):
        (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageImmediately):
        (WebKit::ResourceLoadStatisticsMemoryStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsMemoryStore::ensurePrevalentResourcesForDebugMode):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::statisticsEpirationTime const):
        (WebKit::ResourceLoadStatisticsStore::mergeOperatingDates):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccessForFrame):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::applicationWillTerminate):
        (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation):
        (WebKit::WebResourceLoadStatisticsStore::logWebSocketLoading):
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceLoading):
        (WebKit::WebResourceLoadStatisticsStore::logSubresourceRedirect):
        (WebKit::WebResourceLoadStatisticsStore::hasHadUserInteraction):
        (WebKit::WebResourceLoadStatisticsStore::removePrevalentDomains):
        (WebKit::WebResourceLoadStatisticsStore::networkSession):
        (WebKit::WebResourceLoadStatisticsStore::invalidateAndCancel):
        (WebKit::WebResourceLoadStatisticsStore::sendDiagnosticMessageWithValue const):
        (WebKit::WebResourceLoadStatisticsStore::notifyPageStatisticsTelemetryFinished const):

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

        Unreviewed, rolling out r248330.

        Breaks internal builds.

        Reverted changeset:

        "Context menu on a universal link produces a blank preview"
        https://bugs.webkit.org/show_bug.cgi?id=200485
        https://trac.webkit.org/changeset/248330

2019-08-06  Ryosuke Niwa  <rniwa@webkit.org>

        [iPadOS] slides.google.com: tapping near cursor in a slide title focuses the speaker notes
        https://bugs.webkit.org/show_bug.cgi?id=200216

        Reviewed by Wenson Hsieh.

        The bug was caused by a race condition between Google slides removing inputmode="none" from the hidden
        content editable and updating the focused region upon receiving a pointerup event, which happens after
        the Google slides had already updated its page layout & coordinates based on new visual viewport with
        the software keyboard's boudning rect taken into account.

        Delay bringing up the software keyboard for a inputmode change until all touches are released.

        In the future, we could consider also delaying the software keyboard to be brought in general until
        touchend / pointerup events are dispatched but this is rather risky since that could affact random
        other websites while Google suites is the only major site to make use of inputmode="none".

        This patch also reverts r243044, which was added for Google slides, since it's no longer needed and
        interferes with this patch by adding another way to bring up the software keyboard.

        Note: Adjusting touchend / pointerup coordinates while the keyboard is being brought up doesn't work
        because the page had already updated the layout by then based on new visual viewport size.

        Test: fast/forms/ios/inputmode-change-update-keyboard-after-pointerup.html

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleTouchEventSynchronously): Call didReleaseAllTouchPoints when all
        touches are released.
        (WebKit::WebPageProxy::handleTouchEventAsynchronously): Ditto.
        (WebKit::WebPageProxy::handleTouchEvent): Ditto.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::didReleaseAllTouchPoints): Added for non-iOS platforms.
        (WebKit::WebPageProxy::m_pendingInputModeChange): Added. Used when inputmode is changed while
        there is an on-going touch interaction.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::elementDidFocus): Clear m_pendingInputModeChange when a new element is focused.
        (WebKit::WebPageProxy::elementDidBlur): Ditto for bluring.
        (WebKit::WebPageProxy::focusedElementDidChangeInputMode): Don't bring up the software keyboard now if
        there are on-going touches by exiting early after setting m_pendingInputModeChange.
        (WebKit::WebPageProxy::didReleaseAllTouchPoints): Bring up the software keyboard if inputmode
        had changed from "none" to something else.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dispatchTouchEvent): Removed the code added by r243044.

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

        ASSERTION FAILED: m_observers.isEmpty() if WKPageSetPageStateClient is used
        https://bugs.webkit.org/show_bug.cgi?id=200465

        Reviewed by Alex Christensen.

        PageLoadState::Observer should be removed before destructing
        WebPageProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::~WebPageProxy): Call
        setPageLoadStateObserver with nullptr to remove
        PageLoadState::Observer.

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

        Add release assertions to help catch a bug in our WebProcessCache implementation
        https://bugs.webkit.org/show_bug.cgi?id=200483

        Reviewed by Geoffrey Garen.

        Add release assertions to help catch a bug in our WebProcessCache implementation. We
        have evidence (rdar://problem/53962494) that we have processes with a page which
        starts a provisional load while the process is in the WebProcessCache. This should
        not be possible.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setIsInProcessCache):
        (WebKit::WebProcessProxy::addExistingWebPage):

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

        Context menu on a universal link produces a blank preview
        https://bugs.webkit.org/show_bug.cgi?id=200485
        <rdar://problem/53699620>

        Reviewed by Dean Jackson.

        If the context menu is activated on an iTunesStore URL, pass it
        on to DataDetectors, who should know how to handle it.

        Two drive-by fixes:
        - make it clear that early returns do not produce a value. Instead call the
          completion handler first, then return.
        - The new API DataDetectors case doesn't need to worry about hiding link previews
          as DataDetectors itself will handle that.

        * UIProcess/ios/WKContentViewInteraction.mm: If the URL is an iTunesStoreURL
        (as defined by CoreServices), let DataDetectors handle it.
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView continueContextMenuInteractionWithDataDetectors:]): New method to
        use DataDetectors if possible.

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

        Avoid unnecessary ResourceRequest copy under NetworkResourceLoader::isCrossOriginPrefetch()
        https://bugs.webkit.org/show_bug.cgi?id=200478

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::isCrossOriginPrefetch const):

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

        Unreviewed, a build fix after r248319

        Use HAVE(DATA_PROTECTION_KEYCHAIN) instead of HAVE_DATA_PROTECTION_KEYCHAIN.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserConsented):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserConsented):

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

        Unreviewed, a build fix after r248308

        Use kSecUseDataProtectionKeychain for iOS 13 and macOS Catalina or newer.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserConsented):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserConsented):

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

        Unreviewed, fix internal iOS build after r248308.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):

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

        [WebAuthN] Enable LocalAuthenticator for macOS
        https://bugs.webkit.org/show_bug.cgi?id=182772
        <rdar://problem/43347920>

        Reviewed by Brent Fulgham.

        This patch enables LocalAuthenticator for macOS. The majority
        of this patch is to tweak macOS keychain to use the modern one.

        * Configurations/WebKit.xcconfig:
        * Platform/spi/Cocoa/DeviceIdentitySPI.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticatorInternal::toVector):
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserConsented):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserConsented):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::getUserConsent const):
        (WebKit::LocalConnection::getAttestation const):
        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
        (WebKit::LocalService::isAvailable):
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        (WebKit::MockLocalConnection::getAttestation const):
        * config.h:

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

        Add test for behavior introduced in r248174
        https://bugs.webkit.org/show_bug.cgi?id=200446

        Reviewed by Eric Carlson.

        Add a new helper struct, FullscreenTouchSecheuristicParameters, and static getter,
        iosParameters(), to allow the settings used by WKFullScreenViewController to be tested
        in TestWebKitAPI. Make both of the Secheuristic classes privately exported as well.

        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:
        (WebKit::FullscreenTouchSecheuristic::scoreOfNextTouch):
        (WebKit::FullscreenTouchSecheuristic::reset):
        (WebKit::FullscreenTouchSecheuristic::distanceScore):
        (WebKit::FullscreenTouchSecheuristic::attenuationFactor):
        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.h:
        (WebKit::FullscreenTouchSecheuristic::setParameters):
        (WebKit::FullscreenTouchSecheuristic::requiredScore const):
        (WebKit::FullscreenTouchSecheuristic::setRampUpSpeed):
        (WebKit::FullscreenTouchSecheuristic::setRampDownSpeed):
        (WebKit::FullscreenTouchSecheuristic::setXWeight):
        (WebKit::FullscreenTouchSecheuristic::setYWeight):
        (WebKit::FullscreenTouchSecheuristic::setGamma):
        (WebKit::FullscreenTouchSecheuristic::setGammaCutoff):
        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristicParameters.cpp: Copied from Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.h.
        (WebKit::FullscreenTouchSecheuristicParameters::iosParameters):
        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristicParameters.h: Copied from Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.h.
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController initWithWebView:]):
        (-[WKFullScreenViewController _touchDetected:]):
        * WebKit.xcodeproj/project.pbxproj:

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

        [GLIB] Fix documentation typo

        Unreviewed.

        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:

2019-08-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser][WK2] Unhandled key events should be bubbled up to the parent window
        https://bugs.webkit.org/show_bug.cgi?id=200464

        Reviewed by Ross Kirsling.

        * UIProcess/API/C/WKNativeEvent.h: Define WKNativeEventPtr for WIN32.

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

        Support RTCRtpSender.dtmf
        https://bugs.webkit.org/show_bug.cgi?id=200431

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:

2019-08-05  Simon Fraser  <simon.fraser@apple.com>

        iOS 13: Overflow:hidden on body prevents PDF scroll
        https://bugs.webkit.org/show_bug.cgi?id=200435
        rdar://problem/53942888

        Reviewed by Tim Horton.

        When we navigate from an overflow:hidden HTML page to a custom view (like PDF), we need
        to make sure that the scroll view is scrollable.

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

2019-08-05  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Re-introduce latch mode for subresource cookie blocking
        https://bugs.webkit.org/show_bug.cgi?id=200395
        <rdar://problem/53869611>

        Reviewed by Darin Adler.

        Back when we had a relaxation of cookie blocking 24 hours after first-party user
        interaction, we made sure cookie blocking could be turned on and off in subresource
        redirect chains. The 24 hour window is now long gone. This patch simplifies the
        cookie blocking so that once a subresource request is denied cookies, any
        subsequent redirect of that request will also be denied cookies, regardless of the
        classification status of the domains involved. I call it latch mode.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::blockCookies):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCocoa::applyCookieBlockingPolicy): Deleted.

2019-08-05  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 Alex Christensen.

        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-08-04  Konstantin Tokarev  <annulen@yandex.ru>

        Remove unused lambda capture in MemoryPressureMonitor
        https://bugs.webkit.org/show_bug.cgi?id=200420

        Reviewed by Darin Adler.

        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::MemoryPressureMonitor::start):

2019-08-03  Konstantin Tokarev  <annulen@yandex.ru>

        Fix compilation with disabled WebGL
        https://bugs.webkit.org/show_bug.cgi?id=200421

        Reviewed by Wenson Hsieh.

        After r247452 webGLStateTracker is guarded with #if ENABLE(WEBGL)

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

2019-08-02  Keith Rollin  <krollin@apple.com>

        Consistently use Obj-C boolean literals
        https://bugs.webkit.org/show_bug.cgi?id=200405
        <rdar://problem/53880043>

        Reviewed by Simon Fraser, Joseph Pecoraro.

        There are places where we use equivalent but different expressions for
        Obj-C boolean objects. For example, we use both [NSNumber
        numberWithBool:YES] and @YES. There are places where both are used in
        the same function, such as -[WebPreferences initialize]. The boolean
        literal is in greater use and is more succinct, so standardize on
        that. Also, change @(YES/NO) to @YES/NO.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::getAttestation const):

2019-08-02  Sihui Liu  <sihui_liu@apple.com>

        API tests using permanent credentials should clear credentials left by previous tests
        https://bugs.webkit.org/show_bug.cgi?id=199729

        Reviewed by Alex Christensen.

        Permanent password credentials currently are shared across processes, so we don't need to clear them from 
        network process.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearPermanentCredentialsForProtectionSpace): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _clearPermanentCredentialsForProtectionSpace:]):
        (-[WKProcessPool _clearPermanentCredentialsForProtectionSpace:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::clearPermanentCredentialsForProtectionSpace):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::clearPermanentCredentialsForProtectionSpace): Deleted.
        * UIProcess/WebProcessPool.h:

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

        Web Inspector: Timelines: Develop > Start Timeline Recording doesn't work when focused on a detached inspector window
        https://bugs.webkit.org/show_bug.cgi?id=200125
        <rdar://problem/53543008>

        Reviewed by Brian Burg.

        Always show the Timelines tab in Web Inspector whenever timeline recording starts/stops.
        Notify the UIProcess whenever the timeline recording state changes.

        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::startPageProfiling):
        (WebKit::WebInspector::stopPageProfiling):
        (WebKit::WebInspector::timelineRecordingChanged): Added.
        (WebKit::WebInspector::showTimelines): Deleted.

        * WebProcess/WebPage/WebInspectorUI.messages.in:
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::showTimelines): Deleted.

        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::timelineRecordingChanged): Added.

        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::togglePageProfiling):
        (WebKit::WebInspectorProxy::timelineRecordingChanged): Added.
        (WebKit::WebInspectorProxy::showTimelines): Deleted.

        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorTogglePageProfiling):

        * UIProcess/API/Cocoa/_WKInspector.h:
        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector showTimelines]): Deleted.

        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        (WKBundleInspectorSetPageProfilingEnabled):

2019-08-02  Jer Noble  <jer.noble@apple.com>

        [iPadOS] slides.google.com: Full Screen API warning is presented when swiping through slides
        https://bugs.webkit.org/show_bug.cgi?id=200313
        <rdar://problem/53777001>

        Reviewed by Eric Carlson.

        Only run the secheuristic scoring during UIGestureRecognizerStateEnded, rather than both
        UIGestureRecognizerStateEnded and UIGestureRecognizerStateBegan. The goal of the heuristic is
        to detect fake on-screen keyboards by detecting gestures that look like "typing". Using only
        UIGestureRecognizerStateEnded still allows us to do this (as typing will usually have identical
        geometries for both Ended and Began) without generating false-positives during swipe gestures.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _touchDetected:]):

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

        [macOS 10.15] Image dragged from Safari does not appear in Notes
        https://bugs.webkit.org/show_bug.cgi?id=188490
        <rdar://problem/39462717>

        Reviewed by Andy Estes.

        Removes some logic that clears out the cached promised drag image in the UI process when WebKit is asked to
        provide TIFF image data. This prevents the drop destination from asking for promised image data, if anything
        else (e.g. the system) also asks the web view to provide the same data. Additionally, this logic didn't
        previously guarantee that the promised image would be cleared anyways, since it is dependent on the drop target
        actually requesting the promised image in order to perform the cleanup.

        In lieu of clearing the promised drag image when it's requested, we instead clear it out upon mainframe
        navigation, in PageClientImpl::didCommitLoadForMainFrame.

        Test: DragAndDropTests.MultiplePromisedImageDataRequests

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::clearPromisedDragImage):
        (WebKit::WebViewImpl::pasteboardChangedOwner):
        (WebKit::WebViewImpl::provideDataForPasteboard):

        Fix the bug by not immediately clearing out the promised drag image.

        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):

2019-08-02  Keith Rollin  <krollin@apple.com>

        macCatalyst build fails the first attempt, requires a second build
        https://bugs.webkit.org/show_bug.cgi?id=200242
        <rdar://problem/53678481>

        macCatalyst builds fail the first time with an error like:

            Code Signing Error: The file
            "/Users/tim_cook/Build/Debug-maccatalyst/DerivedSources/WebKit2/WebContent-macCatalyst-no-sandbox.entitlements"
            could not be opened. Verify the value of the
            CODE_SIGN_ENTITLEMENTS build setting for target "WebContent" is
            correct and that the file exists on disk.

        This problem is caused by the file referenced by
        CODE_SIGN_ENTITLEMENTS changing during the build process. For
        macCatalyst builds, we start with the iOS entitlements files and then
        tweak them for macCatalyst. When this occurs during a clean build,
        Xcode sees the entitlements file being generated and complains about
        it. Restarting the build does so with the file already existing, and
        so Xcode does not complain about it.

        The approach of generating or tweaking entitlement files may have
        worked in the past, but the fact is that Xcode doesn't support it.

        We had a similar problem with macOS builds. The entitlements files
        used to be generated on the fly with scripts like
        WebKit/Scripts/process-network-sandbox-entitlements.sh. That process
        was reworked to avoid the issue with Xcode not allowing the files to
        be generated (see r241135). In short:

        o The various process-*-entitlements.sh scripts were consolidated into
          a single process-entitlements file
        o CODE_SIGN_ENTITLEMENTS, which contains the name of the entitlements
          file to use, was de-initialized so that Xcode would not try to
          access our generated entitlements file
        o CODE_SIGN_INJECT_BASE_ENTITLEMENTS (which injects some base
          entitlements) was set to NO. If it were left set to YES, Xcode would
          create its own entitlements file and use it as if it were specified
          in CODE_SIGN_ENTITLEMENTS
        o WK_LIBRARY_VALIDATION_CODE_SIGN_FLAGS was updated with an
          "--entitlements <generated_file>" option.
          WK_LIBRARY_VALIDATION_CODE_SIGN_FLAGS was then used to initialize
          OTHER_CODE_SIGN_FLAGS. By specifying the entitlements file this way,
          we avoid Xcode complaining about it.

        This approach works well for macOS, and so we now also use it to
        address the issue with macCatalyst. While we're at it, convert the
        rest of the platforms to use the same approach and also generate their
        entitlements from the process-entitlements script.

        The new process was validated by performing a build with the old
        process and the new process, and then comparing the entitlements of
        the resulting XPC services to make sure they were the same. Builds
        were performed for all platforms, and for Engineering and Production
        builds.

        Reviewed by Brent Fulgham.

        * Configurations/BaseXPCService.xcconfig:
        * Configurations/Network-iOS.entitlements: Removed.
        * Configurations/Network-macCatalyst.entitlements: Removed.
        * Configurations/NetworkService.xcconfig:
        * Configurations/PluginService.64.xcconfig:
        * Configurations/PluginService.entitlements: Removed.
        * Configurations/WebContent-iOS.entitlements: Removed.
        * Configurations/WebContent-macCatalyst.entitlements: Removed.
        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:
        * Scripts/copy-webcontent-resources-to-private-headers.sh:
        * Scripts/process-entitlements.sh:
        * WebKit.xcodeproj/project.pbxproj:

2019-08-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.25.4 release

        * gtk/NEWS: Add release notes for 2.25.4.

2019-08-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] WebSockets: use SOUP_WEBSOCKET_CLOSE_NO_STATUS when closing with no status
        https://bugs.webkit.org/show_bug.cgi?id=200338

        Reviewed by Alex Christensen.

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

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

        Do not send NetworkProcessProxy::LogTestingEvent message if we are not testing
        https://bugs.webkit.org/show_bug.cgi?id=200360

        Reviewed by Tim Horton.

        Sending this message causes instantiation of the default WebsiteDataStore in the UIProcess,
        which causes more memory to be used than is needed if we are browsing without the default WebsiteDataStore.

        Covered by an API test.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::logTestingEvent):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::enableResourceLoadStatisticsLogTestingEvent const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::hasStatisticsTestingCallback const):

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

        Move FormData zip file generation to NetworkProcess and enable it for all WebKit clients for uploading directories
        https://bugs.webkit.org/show_bug.cgi?id=200102
        <rdar://problem/53275114>

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * Platform/IPC/FormDataReference.h:
        (IPC::FormDataReference::encode const):
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::shouldGenerateFileForUpload): Deleted.
        (API::InjectedBundle::PageUIClient::generateFileForUpload): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::shouldGenerateFileForUpload): Deleted.
        (WebKit::InjectedBundlePageUIClient::generateFileForUpload): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldReplaceWithGeneratedFileForUpload): Deleted.
        (WebKit::WebChromeClient::generateReplacementFile): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/com.apple.WebProcess.sb.in:

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

        REGRESSION: HSBC Personal Banking download/print dialog is usually positioned off screen on iPad
        https://bugs.webkit.org/show_bug.cgi?id=200356
        <rdar://problem/51885199>

        Reviewed by Beth Dakin.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingRecommendedForRequest):
        Add HSBC domains to the list of sites that recommend mobile mode by default.

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

        Crash under WebProcessProxy::didBecomeUnresponsive()
        https://bugs.webkit.org/show_bug.cgi?id=200346
        <rdar://problem/53795984>

        Reviewed by Geoffrey Garen.

        Make sure the BackgroundProcessResponsivenessTimer / ResponsivenessTimer ref their client
        while they call mayBecomeUnresponsive() / willChangeIsResponsive() / didChangeIsResponsive()
        / didBecomeUnresponsive() on their client, in case calling one of these ends up destroying
        the client.

        * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
        (WebKit::BackgroundProcessResponsivenessTimer::setResponsive):
        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::timerFired):
        * UIProcess/ResponsivenessTimer.h:
        * UIProcess/WebProcessProxy.h:

2019-08-01  Youenn Fablet  <youenn@apple.com>

        UserMediaPermissionRequestManagerProxy should not use audio+video denied requests to deny audio-only or video-only requests
        https://bugs.webkit.org/show_bug.cgi?id=200317

        Reviewed by Eric Carlson.

        Only match audio+video denied requests with new audio+video requests.
        That will ensure that audio can still be captured if user denied access to the camera through preferences
        and website started with a getUserMedia({audio: true, video: true}) call.
        Covered by added API test.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::wasRequestDenied):

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

        [SOUP] WebSockets: add support for extensions when using web sockets libsoup API
        https://bugs.webkit.org/show_bug.cgi?id=199943

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkSocketChannel.cpp:
        (WebKit::NetworkSocketChannel::didConnect): Add extensions parameter and pass it to the IPC message.
        * NetworkProcess/NetworkSocketChannel.h:
        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:
        (WebKit::WebSocketTask::didConnect): Pass empty extensions string.
        * NetworkProcess/soup/WebSocketTaskSoup.cpp:
        (WebKit::WebSocketTask::acceptedExtensions const): Build the accepted extensions string.
        (WebKit::WebSocketTask::didConnect): Pass accepted extensions to NetworkSocketChannel::didConnect().
        * NetworkProcess/soup/WebSocketTaskSoup.h:
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::extensions): Return the extensions string received from the network process.
        (WebKit::WebSocketChannel::didConnect): Save the extensions string.
        * WebProcess/Network/WebSocketChannel.h:
        * WebProcess/Network/WebSocketChannel.messages.in:

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

        [SOUP] Switch to use libsoup WebSockets API
        https://bugs.webkit.org/show_bug.cgi?id=200162

        Reviewed by Michael Catanzaro.

        Remove temporary method added for old WebSockets implementation.

        * NetworkProcess/NetworkStorageSessionProvider.h:

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

        WKImagePreviewViewController not being autoreleased
        https://bugs.webkit.org/show_bug.cgi?id=200325
        <rdar://problem/53788214>

        Reviewed by Wenson Hsieh.

        Wenson noticed I wasn't autoreleasing the WKImagePreviewViewController.

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

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

        REGRESSION (r247486?): Flaky API Test TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
        https://bugs.webkit.org/show_bug.cgi?id=200086
        <rdar://problem/53501721>

        Reviewed by Alex Christensen.

        The test would first send a ProcessWillSuspendImminently IPC to the NetworkProcess and then
        run JS in the WebContent process, which would in turn send IPC to the NetworkProcess. The
        test was flaky because it expected the network process to receive the IPC from the UIProcess
        *before* the one from the WebContent process. However, there is no guarantee about ordering
        from IPC messages coming from different connections.

        To address the flakiness, this patch introduces a new ProcessWillSuspendImminentlyForTesting
        synchronous IPC and uses this instead. As a result, it is now guaranteed that the network
        process processes this IPC *before* receiving any IPC from the WebContent process that is
        the result of IPC from the UIProcess.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::processWillSuspendImminentlyForTestingSync):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _sendNetworkProcessWillSuspendImminently]):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendProcessWillSuspendImminentlyForTesting):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendNetworkProcessWillSuspendImminentlyForTesting):
        (WebKit::WebProcessPool::sendNetworkProcessWillSuspendImminently): Deleted.
        * UIProcess/WebProcessPool.h:

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

        [iOS 13] Safari crashes when closing a tab with a focused element if the unified field has focus
        https://bugs.webkit.org/show_bug.cgi?id=200291
        <rdar://problem/53717946>

        Reviewed by Megan Gardner.

        Makes -requestAutocorrectionContextWithCompletionHandler: robust in the case where the web page has been closed,
        and there is no Connection object to use when waiting for a sync IPC response.

        Test: AutocorrectionTests.RequestAutocorrectionContextAfterClosingPage

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

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

        AX: com.apple.WebKit.WebContent at com.apple.WebKit: -[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]
        https://bugs.webkit.org/show_bug.cgi?id=200277
        <rdar://problem/49475009>

        Reviewed by Per Arne Vollan.

        Verify Page is available before calling into it.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):

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

        [GTK] Datalist element support for TextFieldInputType
        https://bugs.webkit.org/show_bug.cgi?id=98934

        Reviewed by Michael Catanzaro.

        Add a WebDataListSuggestionsDropdown implementation for the GTK port using a popup window with a tree view list.

        * Sources.txt:
        * SourcesGTK.txt:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDataListSuggestionsDropdown):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.cpp: Added.
        (WebKit::firstTimeItemSelectedCallback):
        (WebKit::WebDataListSuggestionsDropdownGtk::WebDataListSuggestionsDropdownGtk):
        (WebKit::WebDataListSuggestionsDropdownGtk::~WebDataListSuggestionsDropdownGtk):
        (WebKit::WebDataListSuggestionsDropdownGtk::treeViewRowActivatedCallback):
        (WebKit::WebDataListSuggestionsDropdownGtk::didSelectOption):
        (WebKit::WebDataListSuggestionsDropdownGtk::show):
        (WebKit::WebDataListSuggestionsDropdownGtk::handleKeydownWithIdentifier):
        (WebKit::WebDataListSuggestionsDropdownGtk::close):
        * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.h: Copied from Tools/WebKitTestRunner/gtk/UIScriptControllerGtk.h.

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

        Remove WebKit2 Makefile guards for pre-Snow Leopard macOS
        https://bugs.webkit.org/show_bug.cgi?id=200294

        Reviewed by Dan Bernstein.

        * Makefile:
        It seems ... unlikely ... that anyone is trying to build
        trunk WebKit for Leopard or prior.

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

        [WebKit] Add PageLoadState::Observer C API
        https://bugs.webkit.org/show_bug.cgi?id=199848

        Reviewed by Alex Christensen.

        There is no WebKit C API to get the timing of title changed since
        WKPageLoaderClientV0::didReceiveTitleForFrame has been removed in
        r235398. Cocoa and glib WebKit API exist.

        * PlatformWin.cmake:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageStateClient):
        * UIProcess/API/C/WKPage.h: Added WKPageSetPageStateClient.
        * UIProcess/API/C/WKPageStateClient.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setPageLoadStateObserver):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

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

        Fix non-thread safe use of WeakPtr under sendSecItemRequest()
        https://bugs.webkit.org/show_bug.cgi?id=200249

        Reviewed by Alex Christensen.

        The function was calling globalNetworkProcess() from a background thread. This is not safe because
        globalNetworkProcess() deferences a WeakPtr<NetworkProcess> internally and the NetworkProcess object
        gets destroyed on the main thread.

        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):

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

        [SOUP] Move SoupNetworkSession ownership from NetworkStorageSession to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=200076

        Reviewed by Michael Catanzaro.

        NetworkStorageSession should only own the cookie jar, since it's the only thing it handles from the session.

        * NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage): Use the network session instead of the storage session
        to set the peristent cookie storage.
        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp:
        (WebKit::LegacyCustomProtocolManager::registerScheme): Iterate network sessions instead of storage sessions to
        access the SoupNetworkSession.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::resourceLoadStatisticsUpdated): Use
        NetworkProcess::forEachNetworkSession() to iterate network sessions.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler): Ditto.
        (WebKit::NetworkProcess::forEachNetworkSession): Added to iterate network sessions intead of exposing the map
        that is always used to iterate the sessions.
        (WebKit::NetworkProcess::switchToNewTestingSession): Use the new NetworkStorageSession constructor API.
        (WebKit::NetworkProcess::ensureSession): Ditto.
        (WebKit::NetworkProcess::destroySession): Allow to destroy the default session for soup based ports. This is
        only called right before process exit to ensure we don't leak network resources like the cookies database.
        (WebKit::NetworkProcess::setResourceLoadStatisticsEnabled): Use NetworkProcess::forEachNetworkSession() to
        iterate network sessions.
        (WebKit::NetworkProcess::fetchWebsiteData): Ditto.
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins): Ditto.
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains): Ditto.
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData): Ditto.
        (WebKit::NetworkProcess::setCacheModel): Ditto.
        (WebKit::NetworkProcess::actualPrepareToSuspend): Ditto.
        (WebKit::NetworkProcess::resume): Ditto.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkStorageSessionProvider.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache): Ditto.
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::clearCacheForAllOrigins): Ditto.
        * NetworkProcess/soup/NetworkProcessMainSoup.cpp: Destroy the default session before process exists.
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::userPreferredLanguagesChanged): Iterate network sessions instead of storage sessions to
        access the SoupNetworkSession.
        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Use the new NetworkStorageSession constructor API.
        (WebKit::NetworkProcess::clearDiskCache): Use NetworkProcess::forEachNetworkSession() to iterate network sessions.
        (WebKit::NetworkProcess::setNetworkProxySettings): Iterate network sessions instead of storage sessions to
        access the SoupNetworkSession.
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup): Create the SoupNetworkSession and setup cookies.
        (WebKit::NetworkSessionSoup::soupSession const): Return the SoupSession of SoupNetworkSession.
        (WebKit::NetworkSessionSoup::setCookiePersistentStorage): Setup a new cookie jar.
        * NetworkProcess/soup/NetworkSessionSoup.h:

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

        Unreviewed, rolling out r247932.

        Broke 8 API tests across all platforms.

        Reverted changeset:

        "Fix non-thread safe use of WeakPtr under
        sendSecItemRequest()"
        https://bugs.webkit.org/show_bug.cgi?id=200249
        https://trac.webkit.org/changeset/247932

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

        YouTube search field shows RTL text outside its border on iPadOS
        https://bugs.webkit.org/show_bug.cgi?id=200253
        <rdar://problem/53680603>

        Reviewed by Beth Dakin.

        Limits code added in r238939 to respect the current keyboard's writing mode to only editable web views. This
        behavior was only intended for Mail, and isn't generally compatible with web content.

        While the call to -setInitialDirection is correctly gated on an web view editability check, it appears that
        other changes in iOS 13 now cause -setBaseWritingDirection:forRange: to be invoked directly from keyboards code.
        This means that -setBaseWritingDirection:forRange: should additionally be guarded with the same check.

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

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

        Try fixing crash at com.apple.WebKit.Networking: NetworkProcess::setSharedHTTPCookieStorage
        https://bugs.webkit.org/show_bug.cgi?id=200189
        <rdar://problem/41325767>

        Reviewed by Chris Dumez.

        The crash indicates that sharedCookieStorage is accessed before being set in network process. 
        sharedCookieStorage is set during the processing of InitializeNetworkProcess message, and access to 
        sharedCookieStorage is supposed to happen after that. Therefore, it is likely some message is received and 
        handled before InitializeNetworkProcess. 
 
        One possible explanation is WebKit APIs get called on different threads. Because of the race in checking and 
        setting m_networkProcess, some message is sent between network process gets launched (m_networkProcess is set) 
        and InitializeNetworkProcess message is sent. To mitigate this issue, we make sure m_networkProcess is set only
        in the main runloop and only after InitializeNetworkProcess is sent. 

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

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

        Fix non-thread safe use of WeakPtr under sendSecItemRequest()
        https://bugs.webkit.org/show_bug.cgi?id=200249

        Reviewed by Alex Christensen.

        The function was calling globalNetworkProcess() from a background thread. This is not safe because
        globalNetworkProcess() deferences a WeakPtr<NetworkProcess> internally and the NetworkProcess object
        gets destroyed on the main thread.

        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):

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

        [ContentChangeObserver] didFinishContentChangeObserving should include the type of content change.
        https://bugs.webkit.org/show_bug.cgi?id=200247
        <rdar://problem/53681149>

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::didFinishContentChangeObserving):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didFinishContentChangeObserving):

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

        REGRESSION: WebSockets no longer work in Service Workers
        https://bugs.webkit.org/show_bug.cgi?id=199906
        <rdar://problem/53516732>

        Reviewed by Geoffrey Garen.

        Use WebSocketProvider so that network calls are done in the network process.

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

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

        [ContentChangeObserver] ChromeClient::observedContentChange() name is misleading
        https://bugs.webkit.org/show_bug.cgi?id=200238
        <rdar://problem/53677038>

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::didFinishContentChangeObserving):
        (WebKit::WebChromeClient::observedContentChange): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didFinishContentChangeObserving):
        (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver): Deleted.

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

        ShareableBitmap::createGraphicsContext() should return nullptr when CGBitmapContextCreateWithData returns nil
        https://bugs.webkit.org/show_bug.cgi?id=200185

        Reviewed by Simon Fraser.

        We should not be creating GraphicsContext with nil CGContextRef in ShareableBitmap::createGraphicsContext()
        as such a GraphicsContext is only used for specific purposes.

        This patch adds an early return to ShareableBitmap::createGraphicsContext() when CGBitmapContextCreateWithData
        returns nil CGContextRef.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateFromCGImage):
        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeImage):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::makeCGImageCopy):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::image const):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::snapshot):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::update):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertCGImageToBitmap):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::display):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotAtSize):
        (WebKit::WebPage::snapshotNode):
        (WebKit::WebPage::drawRectToImage):

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

        Contextual menu does not present when holding an embedded photo but works with link and attachments
        https://bugs.webkit.org/show_bug.cgi?id=200239
        <rdar://problem/53318733>

        Reviewed by Tim Horton.

        If the user long-pressed on an image, and the client implemented the new API but did
        not provide a configuration, we were not falling back to the default behaviour of
        giving a menu allowing the user to copy/share/save the image.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView continueContextMenuInteraction:]): If we get through the delegates,
        and the element is an image, return the default configuration.

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

        Remove unnecessary null check under WebResourceLoadStatisticsStore::hasStorageAccess()
        https://bugs.webkit.org/show_bug.cgi?id=200229

        Reviewed by Alex Christensen.

        Remove unnecessary null check under WebResourceLoadStatisticsStore::hasStorageAccess().
        There is already a null check with an early return a few lines above.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess):

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

        UI process occasionally hangs in -[UIKeyboardTaskQueue lockWhenReadyForMainThread]
        https://bugs.webkit.org/show_bug.cgi?id=200215
        <rdar://problem/52976965>

        Reviewed by Tim Horton.

        To implement autocorrection on iOS, UIKit sometimes needs to request contextual information from WebKit. This is
        handled as a sync IPC message in WebKit, since UIKit would otherwise proceed to block the main thread after
        sending the request, preventing WebKit from handling any IPC responses in the UI process (potentially resulting
        in deadlock if any other sync IPC messages were to arrive in the UI process during this time).

        The synchronous nature of this autocorrection request means that if any sync IPC message were to be
        simultaneously dispatched in the opposite direction (i.e. web to UI process), we need to immediately handle the
        incoming sync message in the UI process (otherwise, we'd end up deadlocking for 1 second until the
        autocorrection context request hits a 1-second IPC timeout).

        One such synchronous message from the web process to the UI process is WebPageProxy::CreateNewPage, triggered as
        a result of synchronously opening a new window. Due to Safari changes in iOS 13 (<rdar://problem/51755088>),
        this message now calls into code which then causes UIKit to call *back into* -[WKContentView
        requestAutocorrectionContextWithCompletionHandler:] for the newly opened web view, under the scope of the call
        to -requestAutocorrectionContextWithCompletionHandler: in the original web view.

        This caused a crash, which was tracked in <rdar://problem/52590170>. There was an attempt to fix this in r247345
        by invoking the existing handler well before storing the new one; while this avoided the crash, it didn't solve
        the root problem, which was that keyboard task queues would get into a bad state after this scenario; this would
        manifest in a UI process hang under -[UIKeyboardTaskQueue lockWhenReadyForMainThread] during the next user
        gesture, which is tracked by this bug (<rdar://problem/52976965>).

        As it turns out, the keyboard task queue gets into a bad state because it is architected in such a way that
        tasks added to the queue under the scope of parent task must be finished executing before their parents;
        otherwise, the call to -[UIKeyboardTaskExecutionContext returnExecutionToParentWithInfo:] never happens when
        handling the child task. This has the effect of causing the keyboard task queue to end up with a
        UIKeyboardTaskExecutionContext that can never return execution to its parent context, such that if the task
        queue is then told to wait until any future task is finished executing, it will hang forever, waiting for these
        stuck tasks to finish executing (which never happens, because they're all waiting to return execution to their
        parents which are already done executing!)

        To fix this hang and avoid ever getting into this bad state, we need to invoke the autocorrection request
        handlers in this order:

        (1) Receive outer autocorrection context request.
        (2) Receive inner autocorrection context request.
        (3) Invoke inner autocorrection context request completion handler.
        (4) Invoke outer autocorrection context request completion handler.

        ...instead of swapping (3) and (4), like we do currently.

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

        Remove the hack added in r247345 to try and avoid reentrant autocorrection context requests; we don't need this
        anymore, since we should now be able to handle these reentrant requests in the way UIKit expects.

        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):

        Add an early return in the case where the request is synchronous and there's already a pending autocorrection
        context to ensure that the completion handler for the nested request is invoked before the outer request is
        finished.

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

        Can't scroll on yummly.co.uk recipe (scale(0) div covers the content and hit-tests)
        https://bugs.webkit.org/show_bug.cgi?id=200263
        rdar://problem/53679408

        Reviewed by Antti Koivisto.

        The content on this page had a scale(0) div overlaying an overflow:scroll element,
        and our UI-side hit-testing code would find this scale(0) element, because apparently
        -[UIView convertPoint:fromView:] will happily work with non-invertible matrices, and 
        -[UIView pointInside:withEvent:] just compares the point with the view bounds.

        Since the view frame takes the transform into account, we can look for an empty frame
        to detect these non-invertible transforms.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::collectDescendantViewsAtPoint):

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

        NetworkProcess clear and fetch of cache entries might move the callback aggregator more than once
        https://bugs.webkit.org/show_bug.cgi?id=200228

        Reviewed by Alex Christensen.

        copyRef the callback aggregator instead of moving it.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):

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

        Possible use-after-move under NetworkConnectionToWebProcess::resourceLoadStatisticsUpdated()
        https://bugs.webkit.org/show_bug.cgi?id=200225

        Reviewed by Brent Fulgham.

        The code was WTFMove()-ing the method parameter inside of a loop, which means that it could
        move it several times. Instead of copying the parameters, I opted into sending the statistics
        only to the network session that matches this WebProcess connection.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::resourceLoadStatisticsUpdated):

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

        Allow more syscalls in the WebContent process' sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=200182
        <rdar://problem/53594973>

        Reviewed by Geoffrey Garen.

        I reviewed all crash traces attached to the radar and found the following
        syscalls that we not yet allowed by the WebContent process's sandbox
        profile.

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

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

        NavigationSOAuthorizationSession should check the active URL of the responding page after waking up from waiting
        https://bugs.webkit.org/show_bug.cgi?id=200150
        <rdar://problem/53280170>

        Reviewed by Brent Fulgham.

        NavigationSOAuthorizationSession should check the active URL of the responding page after waking up from waiting
        as the page might have already changed the location.

        * UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:
        * UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.mm:
        (WebKit::NavigationSOAuthorizationSession::shouldStartInternal):
        (WebKit::NavigationSOAuthorizationSession::webViewDidMoveToWindow):
        (WebKit::NavigationSOAuthorizationSession::pageActiveURLDidChangeDuringWaiting const):
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:
        (WebKit::SubFrameSOAuthorizationSession::abortInternal):

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

        Crashes under XPCServiceMain() / mach_msg_trap() due to sandboxing
        https://bugs.webkit.org/show_bug.cgi?id=200173
        <rdar://problem/53594973>

        Reviewed by Per Arne Vollan.

        Allow a few more syscalls as they appear to be needed by mach_msg_trap().

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

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

        [iOS] REGRESSION: Keyboard dismisses and reappears when typing 2FA pin on appleid.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=200171
        <rdar://problem/50245251>

        Reviewed by Wenson Hsieh.

        Take out an InputViewUpdateDeferrer token (if we don't already have one) to temporarily defer
        tearing down the input view (keyboard) before bluring the previously focused element as part
        of switching between focused elements. This avoid a noticeable flash caused by UIKit animating
        out and animating in the keyboard should the newly focused element require the keyboard. We
        only take out the InputViewUpdateDeferrer until we fall off the end of _elementDidFocus: (or
        bail early). Once we fall of the end UIKit will update input view UI.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):

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

        Avoid WebContent process SIGKILL when using kevent()
        https://bugs.webkit.org/show_bug.cgi?id=200170
        <rdar://problem/51559921>

        Reviewed by Per Arne Vollan.

        Avoid WebContent process SIGKILL when using kevent() by updated its sandboxing profile.

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

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

        [iOS] WebPage::TouchEventSync() & WebPage::GetPositionInformation() sync IPC causes UIProcess hangs
        https://bugs.webkit.org/show_bug.cgi?id=200138
        <rdar://problem/52698157>

        Reviewed by Geoffrey Garen.

        Revert most of r247822 and use an alternative approach to address hangs. In this patch, the proposal
        is to add a SendSyncOption::ForceDispatchWhenDestinationIsWaitingForUnboundedSyncReply flag on the
        WebPage::TouchEventSync() & WebPage::GetPositionInformation() sendSync() calls in the UIProcess.
        Those will cause this IPCs to get dispatched right away in the WebContent process, even if the
        WebContent process is itself currently stuck on unbounded (i.e. potentially slow) synchronous IPC
        (JS alerts / prompts & sync XHR). Because re-entering WebCore on sync IPC is generally unsafe, this
        patch also updates the WebPage::getPositionInformation() & WebPage::touchEventSync() to return early
        (i.e. cancelled) if they get called while the WebContent process is stuck on a slow sendSync.

        This approach should address the UIProcess hangs caused by the WebPage::TouchEventSync() and
        WebPage::GetPositionInformation() sync IPC messages when the WebContent process is busy on a slow XHR
        or a JS prompt / alert. It should be safe because we do not re-enter WebCore. The only drawback is that
        those IPCs will be cancelled (early return with default value) when the WebContent process is busy.
        However, I am being told that this is likely acceptable in practice.        

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::sendMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::dispatchMessage):
        * Platform/IPC/Connection.h:
        (IPC::UnboundedSynchronousIPCScope::UnboundedSynchronousIPCScope):
        (IPC::UnboundedSynchronousIPCScope::~UnboundedSynchronousIPCScope):
        (IPC::UnboundedSynchronousIPCScope::hasOngoingUnboundedSyncIPC):
        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::shouldDispatchMessageWhenWaitingForSyncReply const):
        * Platform/IPC/Decoder.h:
        * Platform/IPC/Encoder.cpp:
        (IPC::Encoder::shouldDispatchMessageWhenWaitingForSyncReply const):
        (IPC::Encoder::setShouldDispatchMessageWhenWaitingForSyncReply):
        (IPC::Encoder::wrapForTesting):
        * Platform/IPC/Encoder.h:
        * Platform/IPC/MessageFlags.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::layerVolatilityTimerFired):
        (WebKit::WebPage::markLayersVolatile):
        (WebKit::WebPage::cancelMarkLayersVolatile):
        (WebKit::WebPage::touchEventSync):
        (WebKit::WebPage::didCompletePageTransition):
        (WebKit::WebPage::updatePreferences):
        (WebKit::WebPage::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sendSyncWithDelayedReply):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

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

        Unable to tap/double tap to open files/folders in Google Drive in Safari
        https://bugs.webkit.org/show_bug.cgi?id=200096
        <rdar://problem/52748552>

        Reviewed by Wenson Hsieh.

        This patch reverts to the original double-tap-for-double-click implementation (see r244775 and r246347 for more information).

        * 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): Deleted.
        (WebKit::PageClientImpl::doubleTapForDoubleClickRadius): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): Do not recognize the single and double gestures the same time.
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _doubleTapRecognizedForDoubleClick:]):
        (-[WKContentView _didStartProvisionalLoadForMainFrame]):
        (-[WKContentView _ensureNonBlockingDoubleTapGestureRecognizer]): Deleted.
        (-[WKContentView _doubleTapForDoubleClickDelay]): Deleted.
        (-[WKContentView _doubleTapForDoubleClickRadius]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint):
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::handlePotentialDoubleTapForDoubleClickAtPoint): Deleted.

2019-07-26  Eric Liang  <ericliang@apple.com>

        AX: web process should load correct bundle path for MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=200122

        Reviewed by Brent Fulgham.

        Added the path to accessibility bundle for Mac Catalyst.
        Added sandbox profile to read accessibility settings.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::registerWithAccessibility):
        * WebProcess/com.apple.WebProcess.sb.in:

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

        REGRESSION(r246496): [GTK] Tapping the web view scrolls up a bit
        https://bugs.webkit.org/show_bug.cgi?id=200084

        Reviewed by Carlos Garcia Campos.

        gdk_event_get_scroll_direction() returns false, but also sets direction to GDK_SCROLL_UP if
        the direction was GDK_SCROLL_SMOOTH. Relying on zero deltas in this case is not correct, because
        they can also be zero with GDK_SCROLL_SMOOTH. In this case, set the direction manually to avoid
        that.

        See https://gitlab.gnome.org/GNOME/gtk/issues/2048

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebWheelEvent):

2019-07-26  Loïc Yhuel  <loic.yhuel@softathome.com>

        [WPE] Support disk cache dumping like GTK
        https://bugs.webkit.org/show_bug.cgi?id=200157

        Reviewed by Carlos Garcia Campos.

        Creating or touching "dump" would create the dump.json.

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

2019-07-26  Rob Buis  <rbuis@igalia.com>

        Make storing cross-origin top-level prefetches in HTTP cache optional
        https://bugs.webkit.org/show_bug.cgi?id=199499

        Reviewed by Youenn Fablet.

        Currently when we navigate we check if there is a cross-origin top-level
        prefetch we can use for the navigation. The current solution uses the
        HTTP cache as a way to store the prefetch and to immediately use it for
        the navigation load. However this solution fails in case the prefetch is
        not cacheable.

        Instead of this, simulate a HTTP Cache entry to process the load and
        afterwards try to store the navigation load into the HTTP cache, where
        normal store decisions will be applied.

        Test: http/wpt/prefetch/link-prefetch-skip-disk-cache.html

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::retrieveCacheEntryInternal):
        * NetworkProcess/NetworkResourceLoader.h:

2019-07-25  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix in NetworkDataTaskSoup.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::authenticateCallback):
        Fix incorrect use of the dereferencing operator introduced in r247831.

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

        Unreviewed, build fix after r247851

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        Reverts an unnecessary change.

2019-07-25  Fujii Hironori  <fujii.hironori@gmail.com>

        [GTK] Indistinguishable overloaded callback function inspectorViewDestroyed if RemoteWebInspectorProxyGtk.cpp and WebInspectorProxyGtk.cpp are in a unified build bundle
        https://bugs.webkit.org/show_bug.cgi?id=200123

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::remoteInspectorViewDestroyed): Added.
        (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow):
        (WebKit::inspectorViewDestroyed): Deleted.
        Renamed inspectorViewDestroyed to remoteInspectorViewDestroyed.

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

        WebPageProxy::receivedPolicyDecision should check navigation ID before clear pendingAPIRequest
        https://bugs.webkit.org/show_bug.cgi?id=200108
        <rdar://problem/53521238>

        Reviewed by Chris Dumez.

        Assuming there are two loads happening one after another. There is an issue when clients save
        the first decisionHandler and then call WKNavigationActionPolicyCancel for it right after the
        second decisionHandler received, -[WKWebView URL] could return a null string even though it is
        loading the second one.

        To solve that, this patch pairs a navigationID with the pendingAPIRequestURL such that
        WebPageProxy::receivedPolicyDecision could clear the pendingAPIRequestURL only if
        the passed navigation ID matches the current one.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::reset):
        (WebKit::PageLoadState::activeURL):
        (WebKit::PageLoadState::estimatedProgress):
        (WebKit::PageLoadState::pendingAPIRequestURL const):
        (WebKit::PageLoadState::pendingAPIRequest const):
        (WebKit::PageLoadState::setPendingAPIRequest):
        (WebKit::PageLoadState::clearPendingAPIRequest):
        (WebKit::PageLoadState::isLoading):
        (WebKit::PageLoadState::setPendingAPIRequestURL): Deleted.
        (WebKit::PageLoadState::clearPendingAPIRequestURL): Deleted.
        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::setPendingAPIRequest):
        (WebKit::PageLoadState::setPendingAPIRequestURL): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcessForReload):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

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

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

        It is regressing PLT (Requested by youenn 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/247806

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

        WebKit/UIProcess/ios/WKContentViewInteraction.mm: error: implementing deprecated method contextMenuInteractionWillPresent
        https://bugs.webkit.org/show_bug.cgi?id=200136
        <rdar://problem/53547698>

        Reviewed by Wenson Hsieh.

        Ignore deprecation warnings for these UIContextMenuInteraction delegates.

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

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

        Add helper for ignoring deprecated implementation warnings
        https://bugs.webkit.org/show_bug.cgi?id=200135

        Reviewed by Wenson Hsieh.

        Add ALLOW_DEPRECATED_IMPLEMENTATIONS_BEGIN/END macro which
        is IGNORE_WARNINGS_BEGIN("deprecated-implementations")

        * UIProcess/API/Cocoa/LegacyBundleForClass.mm:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (IGNORE_WARNINGS_BEGIN): Deleted.
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
        (IGNORE_WARNINGS_BEGIN): Deleted.
        * UIProcess/API/Cocoa/WKConnection.mm:
        (IGNORE_WARNINGS_BEGIN): Deleted.
        * UIProcess/API/Cocoa/WKPreviewElementInfo.mm:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (IGNORE_WARNINGS_BEGIN): Deleted.
        * UIProcess/API/Cocoa/WKTypeRefWrapper.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKWebView draggedImage:endedAt:operation:]):
        (-[WKWebView accessibilityAttributeValue:]):
        (-[WKWebView accessibilityAttributeValue:forParameter:]):
        (-[WKWebView namesOfPromisedFilesDroppedAtDestination:]):
        (-[WKWebView IGNORE_WARNINGS_END]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKWebViewConfiguration _setWebsiteDataStore:]):
        (-[WKWebViewConfiguration IGNORE_WARNINGS_END]): Deleted.
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKView draggedImage:endedAt:operation:]):
        (-[WKView accessibilityAttributeValue:]):
        (-[WKView accessibilityAttributeValue:forParameter:]):
        (-[WKView namesOfPromisedFilesDroppedAtDestination:]):
        (-[WKView IGNORE_WARNINGS_END]): Deleted.
        * UIProcess/WKImagePreviewViewController.mm:
        (-[WKImagePreviewViewController ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKImagePreviewViewController IGNORE_WARNINGS_END]): Deleted.
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker popoverControllerDidDismissPopover:]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel popoverControllerDidDismissPopover:]):
        * UIProcess/ios/forms/WKFormPopover.mm:
        (-[WKRotatingPopover popoverControllerDidDismissPopover:]):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFPluginAccessibilityObject ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:]):
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:forParameter:]):
        (-[WKPDFPluginAccessibilityObject accessibilityPerformAction:]):
        (-[WKPDFPluginAccessibilityObject accessibilityIsAttributeSettable:]):
        (-[WKPDFPluginAccessibilityObject accessibilitySetValue:forAttribute:]):
        (-[WKPDFPluginAccessibilityObject IGNORE_WARNINGS_END]): Deleted.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKAccessibilityWebPageObject accessibilityIsAttributeSettable:]):
        (-[WKAccessibilityWebPageObject accessibilitySetValue:forAttribute:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        (-[WKAccessibilityWebPageObject IGNORE_WARNINGS_END]): Deleted.

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

        Make NetworkSession no longer RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200020

        This allows to have a simpler memory management model where
        NetworkSession cannot live once removed from the network process session map.
        This requires some additional null checks, especially in NetworkDataTask.

        Reviewed by Carlos Garcia Campos.

        * NetworkProcess/curl/NetworkSessionCurl.h:
        * NetworkProcess/soup/NetworkSessionSoup.h:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::NetworkDataTask):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::~NetworkDataTaskBlob):
        (WebKit::NetworkDataTaskBlob::download):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::setSession):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkSessions):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::create):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSocketChannel.cpp:
        (WebKit::NetworkSocketChannel::NetworkSocketChannel):
        (WebKit::NetworkSocketChannel::~NetworkSocketChannel):
        * NetworkProcess/NetworkSocketChannel.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
        (WebKit::computeIsAlwaysOnLoggingAllowed):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::resume):
        (WebKit::NetworkDataTaskCocoa::isAlwaysOnLoggingAllowed const):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate initWithNetworkSession:withCredentials:]):
        (WebKit::NetworkSessionCocoa::create):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest):
        (WebKit::NetworkDataTaskSoup::clearRequest):
        (WebKit::NetworkDataTaskSoup::cancel):
        (WebKit::NetworkDataTaskSoup::authenticateCallback):
        (WebKit::NetworkDataTaskSoup::authenticate):
        (WebKit::NetworkDataTaskSoup::continueAuthenticate):

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

        Avoid some unnecessary HashMap copies
        https://bugs.webkit.org/show_bug.cgi?id=200129

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::connect):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::ProcessLauncher):
        * UIProcess/Launcher/ProcessLauncher.h:
        (WebKit::ProcessLauncher::create):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::setPluginLoadClientPolicy):

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

        Unreviewed, rolling out r247821.

        Caused two crashing Layout Tests

        Reverted changeset:

        "Make storing cross-origin top-level prefetches in HTTP cache
        optional"
        https://bugs.webkit.org/show_bug.cgi?id=199499
        https://trac.webkit.org/changeset/247821

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

        Unreviewed, fix -Wredundant-move warning spam after r247672
        https://bugs.webkit.org/show_bug.cgi?id=199967
        <rdar://problem/53351435>

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::decodeStringText):
        * Platform/IPC/ArgumentCoders.h:

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

        Avoid UI Process hangs when the WebContent process is showing JS prompts / alerts
        https://bugs.webkit.org/show_bug.cgi?id=200107
        <rdar://problem/53034592>

        Reviewed by Geoffrey Garen.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::incrementProcessIncomingSyncMessagesWhenWaitingForSyncReplyCount):
        (IPC::Connection::SyncMessageState::decrementProcessIncomingSyncMessagesWhenWaitingForSyncReplyCount):
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::sendSyncMessage):
        * Platform/IPC/Connection.h:
        Add support for new SendSyncOption::ProcessIncomingSyncMessagesWhenWaitingForSyncReply flag
        to allow processing incoming sync messages while sending a particular sync IPC. This is the
        default behavior in all processes except in the WebContent process, where we try to avoid
        re-entering to prevent bugs. This flag allows the WebContent process to change its default
        behavior for some specific IPCs, where we know it is safe to re-enter and where it benefits
        performance to re-renter.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveSyncMessage):
        (WebKit::NetworkProcessProxy::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sendSyncWithDelayedReply):
        * WebProcess/WebPage/WebPage.messages.in:
        SendSyncOption::ProcessIncomingSyncMessagesWhenWaitingForSyncReply
        Add testing infrastructure for SendSyncOption::ProcessIncomingSyncMessagesWhenWaitingForSyncReply
        flag.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        Use new SendSyncOption::ProcessIncomingSyncMessagesWhenWaitingForSyncReply flag when sending
        the synchronous IPC for JS alerts / prompt / confirm. This allows the WebProcess to process
        incoming synchronous IPC for other processes (in particular the UIProcess) while it is blocked
        on those synchronous IPCs. It is safe to re-enter the WebContent process on these sync IPCs
        since they are triggered by JS and we return to JS right after. This should avoid UIProcess
        hangs when the UIProcess is sending a sync IPC to the WebContent process, which is itself
        stuck on the sync IPC to show a JS alert.

2019-07-25  Rob Buis  <rbuis@igalia.com>

        Make storing cross-origin top-level prefetches in HTTP cache optional
        https://bugs.webkit.org/show_bug.cgi?id=199499

        Reviewed by Youenn Fablet.

        Currently when we navigate we check if there is a cross-origin top-level
        prefetch we can use for the navigation. The current solution uses the
        HTTP cache as a way to store the prefetch and to immediately use it for
        the navigation load. However this solution fails in case the prefetch is
        not cacheable.

        Instead of this, simulate a HTTP Cache entry to process the load and
        afterwards try to store the navigation load into the HTTP cache, where
        normal store decisions will be applied.

        Test: http/wpt/prefetch/link-prefetch-skip-disk-cache.html

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::retrieveCacheEntryInternal):
        * NetworkProcess/NetworkResourceLoader.h:

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

        Unreviewed, rolling out r247817.

        Broke 14 http/tests/paymentrequest/ tests. on iOS

        Reverted changeset:

        "Unable to tap/double tap to open files/folders in Google
        Drive in Safari"
        https://bugs.webkit.org/show_bug.cgi?id=200096
        https://trac.webkit.org/changeset/247817

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

        Unable to tap/double tap to open files/folders in Google Drive in Safari
        https://bugs.webkit.org/show_bug.cgi?id=200096
        <rdar://problem/52748552>

        Reviewed by Wenson Hsieh.

        This patch reverts to the original double-tap-for-double-click implementation (see r244775 and r246347 for more information).

        * 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): Deleted.
        (WebKit::PageClientImpl::doubleTapForDoubleClickRadius): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): Do not recognize the single and double gestures the same time.
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _doubleTapRecognizedForDoubleClick:]):
        (-[WKContentView _didStartProvisionalLoadForMainFrame]):
        (-[WKContentView _ensureNonBlockingDoubleTapGestureRecognizer]): Deleted.
        (-[WKContentView _doubleTapForDoubleClickDelay]): Deleted.
        (-[WKContentView _doubleTapForDoubleClickRadius]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint):
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::handlePotentialDoubleTapForDoubleClickAtPoint): Deleted.

2019-07-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] Add IsoHeap test to ensure that IsoHeap pages are not allocating too large VA
        https://bugs.webkit.org/show_bug.cgi?id=200103

        Reviewed by Mark Lam.

        Move MachVMSPI.h from PAL to WTF.

        * Platform/cocoa/SharedMemoryCocoa.cpp:

2019-07-24  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 Alex Christensen.

        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-24  Priyanka Agarwal  <pagarwal999@apple.com>

        Allow Clients to Add Fields to the AutoFillContext Dictionary
        https://bugs.webkit.org/show_bug.cgi?id=199326
        rdar://problem/42816957

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        Added function declaration for function which returns additional dictionary for autofillcontext

        * UIProcess/ios/WKContentViewInteraction.h:
        Created dictionary for additional autofillcontext

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
        Populating additional dictionary for autofillcontext

        (-[WKContentView _autofillContext]):
        Adding new dictionary to the returned autofillcontext

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

        Regression(r247400): Unable to log into AIB Mobile Banking App
        https://bugs.webkit.org/show_bug.cgi?id=200094
        <rdar://problem/52519818>

        Reviewed by Brent Fulgham.

        In r247400, a change was made to only set the 'app has universal sandbox access' flag
        only when issueing the sandbox extension for / actually succeeded (it usually fails
        in practice). Previously, AIB Mobile Banking app was relying on this behavior to
        trigger a load for file:///login which is outside their container. However, now that
        the 'app has universal sandbox access' flag is no longer set, it trips our security
        checks and the load gets ignored.

        To address the issue, apply only the 'app has universal sandbox access' flag fix with
        a linked-on-after check.

        * UIProcess/Cocoa/VersionChecks.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):

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

        Module-enabled users of WKWebProcessPlugInFrame.h fail to build; duplicate declaration
        https://bugs.webkit.org/show_bug.cgi?id=200095
        <rdar://problem/53512407>

        Reviewed by Wenson Hsieh.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        Import <JavaScriptCore/JavaScriptCore.h> (the module header) instead of
        <JavaScriptCore/JSContext.h> directly, otherwise we can end up getting
        JSContext.h included twice, to the compiler's chagrin.

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

        Crash in WebContent process with custom schemes.
        <rdar://problem/52968793> and https://bugs.webkit.org/show_bug.cgi?id=200062

        Reviewed by Andy Estes.

        Almost everywhere in WebURLSchemeTaskProxy where we call processNextPendingTask() we first protect the task with a ref.
        But not in didReceiveData.
        So lets do that.

        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::didReceiveData): Protect this.

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

        Null check CompletionHandler in WebPreviewLoaderClient::didReceivePassword
        https://bugs.webkit.org/show_bug.cgi?id=200080
        <rdar://problem/37275772>

        Reviewed by Chris Dumez.

        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp:
        (WebKit::WebPreviewLoaderClient::didReceivePassword):

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

        Crash under WebKit:WTF::Detail::CallableWrapper<WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking(WTF::CompletionHandler<void ()>&&)::$_32::operator()()::'lambda'(), void>::call
        https://bugs.webkit.org/show_bug.cgi?id=200071
        <rdar://problem/53335583>

        Reviewed by Brent Fulgham and Youenn Fablet.

        The WebResourceLoadStatisticsStore is a main thread object. In its destructor, it was dispatching
        to the background queue to destroy the m_statisticsStore / m_persistentStorage data members, which
        live on the background queue. It would then synchronously wait for the background queue to finish
        destroying them. The idea was to guarantee that the ResourceLoadStatisticsMemoryStore and the
        ResourceLoadStatisticsPersistentStorage would never outlive the WebResourceLoadStatisticsStore,
        given that they keep a raw pointer back to the WebResourceLoadStatisticsStore (via m_store data
        member).

        The issue is that *while* the WebResourceLoadStatisticsStore destructor is running on the main
        thread, the background queue may be running code in ResourceLoadStatisticsMemoryStore or
        ResourceLoadStatisticsPersistentStorage which refs the WebResourceLoadStatisticsStore, even
        though its ref count has already reached 0. It is actually a common pattern in
        ResourceLoadStatisticsMemoryStore to call RunLoop::main().dispatch() and ref their m_store in
        the lambda, so that they can interact with the WebResourceLoadStatisticsStore.

        To address the issue, we now destroy m_statisticsStore / m_persistentStorage *before* the
        WebResourceLoadStatisticsStore destructor runs. The NetworkSession destructor now calls
        WebResourceLoadStatisticsStore::didDestroyNetworkSession() which takes care of destroying
        m_statisticsStore / m_persistentStorage on the background queue, synchronously. The
        WebResourceLoadStatisticsStore destructor will only run later, once all remaining references
        to it are gone.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::~NetworkSession):

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

        SYS___pthread_markcancel is sometimes used by libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=200087
        <rdar://problem/53408606>

        Reviewed by Brent Fulgham.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        Whitelist this unix-call within WebProcess as libwebrtc uses it.

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

        ASSERTION FAILED: settings().textAutosizingEnabled() && settings().textAutosizingUsesIdempotentMode() in WebCore::Page::recomputeTextAutoSizingInAllFrames()
        https://bugs.webkit.org/show_bug.cgi?id=200079
        <rdar://problem/53474325>

        Reviewed by Wenson Hsieh.

        Do not reset idempotent values when the text autosizing is off.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetTextAutosizingUsesIdempotentMode):
        (WKPreferencesGetTextAutosizingUsesIdempotentMode):
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetIdempotentTextAutosizingIfNeeded):

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

        Unreviewed, rolling out r247766.

        Caused an API test failure

        Reverted changeset:

        "Crash under
        WebKit:WTF::Detail::CallableWrapper<WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking(WTF::CompletionHandler<void
        ()>&&)::$_32::operator()()::'lambda'(), void>::call"
        https://bugs.webkit.org/show_bug.cgi?id=200071
        https://trac.webkit.org/changeset/247766

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

        Crash under WebKit:WTF::Detail::CallableWrapper<WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking(WTF::CompletionHandler<void ()>&&)::$_32::operator()()::'lambda'(), void>::call
        https://bugs.webkit.org/show_bug.cgi?id=200071
        <rdar://problem/53335583>

        Reviewed by Brent Fulgham and Youenn Fablet.

        The WebResourceLoadStatisticsStore is a main thread object. In its destructor, it was dispatching
        to the background queue to destroy the m_statisticsStore / m_persistentStorage data members, which
        live on the background queue. It would then synchronously wait for the background queue to finish
        destroying them. The idea was to guarantee that the ResourceLoadStatisticsMemoryStore and the
        ResourceLoadStatisticsPersistentStorage would never outlive the WebResourceLoadStatisticsStore,
        given that they keep a raw pointer back to the WebResourceLoadStatisticsStore (via m_store data
        member).

        The issue is that *while* the WebResourceLoadStatisticsStore destructor is running on the main
        thread, the background queue may be running code in ResourceLoadStatisticsMemoryStore or
        ResourceLoadStatisticsPersistentStorage which refs the WebResourceLoadStatisticsStore, even
        though its ref count has already reached 0. It is actually a common pattern in
        ResourceLoadStatisticsMemoryStore to call RunLoop::main().dispatch() and ref their m_store in
        the lambda, so that they can interact with the WebResourceLoadStatisticsStore.

        To address the issue, we now destroy m_statisticsStore / m_persistentStorage *before* the
        WebResourceLoadStatisticsStore destructor runs. The NetworkSession destructor now calls
        WebResourceLoadStatisticsStore::didDestroyNetworkSession() which takes care of destroying
        m_statisticsStore / m_persistentStorage on the background queue, synchronously. The
        WebResourceLoadStatisticsStore destructor will only run later, once all remaining references
        to it are gone.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::~NetworkSession):

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

        Move javaScriptConfigurationDirectory SPI from _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it runtime switchable
        https://bugs.webkit.org/show_bug.cgi?id=200045

        Reviewed by Mark Lam.

        This allows me to maintain the status quo in Safari.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _javaScriptConfigurationDirectory]):
        (-[WKProcessPool _setJavaScriptConfigurationDirectory:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration javaScriptConfigurationDirectory]): Deleted.
        (-[_WKProcessPoolConfiguration setJavaScriptConfigurationDirectory:]): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        (WebKit::WebProcessPool::sendWebProcessDataStoreParameters):
        * UIProcess/WebProcessPool.h:

2019-07-23  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r247745.

        This broke API test
        TestWebKitAPI.WKProcessPool.JavaScriptConfiguration as
        indicated by EWS

        Reverted changeset:

        "Move javaScriptConfigurationDirectory SPI from
        _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it
        runtime switchable"
        https://bugs.webkit.org/show_bug.cgi?id=200045
        https://trac.webkit.org/changeset/247745

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

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

        Reviewed by Per Arne Vollan.

        Improvements to WebSpeechSynthesis to avoid crashing and improve correctness.
        - Reset and cancel speech jobs on page close or reload (otherwise the synthesizer keeps talking after your page is gone)
        - Have a separate speech finish callback mechanism, use the start speaking callback when the synthesizer tells us.
        - Move an assert on utterance state to only apply when we use the in process synthesizer.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::didStartSpeaking):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::resetSpeechSynthesizer):
        (WebKit::WebPageProxy::speechSynthesisSetFinishedCallback):
        (WebKit::WebPageProxy::speechSynthesisSpeak):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp:
        (WebKit::WebSpeechSynthesisClient::speak):

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

        Get rid of unnecessary callback aggregators in WebResourceLoadStatisticsStore
        https://bugs.webkit.org/show_bug.cgi?id=200042

        Reviewed by Brent Fulgham.

        Only 1 asynchronous function is called so there is nothing to "aggregate".

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdate):
        (WebKit::WebResourceLoadStatisticsStore::scheduleCookieBlockingUpdateForDomains):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearBlockingStateForDomains):

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

        [iOS] Tapping the search field on a search results page on zillow.com shows and immediately dismisses the keyboard
        https://bugs.webkit.org/show_bug.cgi?id=200044
        <rdar://problem/53103732>

        Reviewed by Wenson Hsieh.

        * Shared/FocusedElementInformation.cpp:
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        * Shared/FocusedElementInformation.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _elementDidBlur]):
        (-[WKContentView _shouldAvoidScrollingWhenFocusedContentIsVisible]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getFocusedElementInformation):

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

        Move javaScriptConfigurationDirectory SPI from _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it runtime switchable
        https://bugs.webkit.org/show_bug.cgi?id=200045

        Reviewed by Mark Lam.

        This allows me to maintain the status quo in Safari.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _javaScriptConfigurationDirectory]):
        (-[WKProcessPool _setJavaScriptConfigurationDirectory:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration javaScriptConfigurationDirectory]): Deleted.
        (-[_WKProcessPoolConfiguration setJavaScriptConfigurationDirectory:]): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        (WebKit::WebProcessPool::sendWebProcessDataStoreParameters):
        * UIProcess/WebProcessPool.h:

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

        [iOS WK2] A top fixed bar can flicker when scrolling with the keyboard up
        https://bugs.webkit.org/show_bug.cgi?id=200105
        rdar://problem/52871975

        Reviewed by Wenson Hsieh.

        ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition() computes a visual viewport
        from the current scroll position and scrollableAreaSize(). This doesn't know anything about
        the impact of keyboards on the visual viewport, so it computes a too-large visual viewport
        when the keyboard is up, triggering incorrect manipulations of the layout viewport. This
        leads to the top bar flashing to position 0 when it should be hidden off the top.

        Fix by feeding into the scrolling tree the height of the visual viewport which takes
        FrameView::visualViewportOverrideRect() into account. This is stored on ScrollingStateFrameScrollingNode/
        ScrollingTreeFrameScrollingNode.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):

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

        Add SPI for setting media cache and key location on _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=199972

        Reviewed by Jer Noble.

        This is a step towards removing WebsiteDataStore::legacyDefaultDataStoreConfiguration
        I added a unit test for the media cache location,
        but the media key location can't reasonably be unit tested in an open source project.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration mediaCacheDirectory]):
        (-[_WKWebsiteDataStoreConfiguration setMediaCacheDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration mediaKeysStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration setMediaKeysStorageDirectory:]):

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

        [macOS 10.15] Web process crashes when attempting to show the font panel via Font > Show Fonts
        https://bugs.webkit.org/show_bug.cgi?id=200021
        <rdar://problem/53301325>

        Reviewed by Ryosuke Niwa.

        Always return false from canShowFontPanel in WebKit2.

        * WebProcess/WebCoreSupport/WebEditorClient.h:

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

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.25.3 release

        * gtk/NEWS: Add release notes for 2.25.3.

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

        [GTK] Emoji chooser is misplaced after scrolling
        https://bugs.webkit.org/show_bug.cgi?id=199996

        Reviewed by Michael Catanzaro.

        Convert caret rectangle coordinates to root view.

        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::showEmojiPicker):

2019-07-22  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed non-unified build fix.

        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkLoadChecker.h:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKPageConfigurationRef.cpp:
        * UIProcess/Downloads/DownloadProxy.cpp:
        * UIProcess/WebPageInjectedBundleClient.cpp:
        * UIProcess/WebPreferences.cpp:
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::PendingMessage::PendingMessage):

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

        Remove Staging for scrolling bug
        https://bugs.webkit.org/show_bug.cgi?id=199894

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKUIWKTextInteractionAssistant scrollSelectionToVisible]): Deleted.

2019-07-22  Brent Fulgham  <bfulgham@apple.com>

        Correct web audio-related crash in seed reports
        https://bugs.webkit.org/show_bug.cgi?id=200009
        <rdar://problem/51565203>

        Reviewed by Per Arne Vollan.

        Revise the iOS sandbox to allow the WebContent process to communicate with
        the 'com.apple.coremedia.audioprocessingtap.xpc' service, which is needed by
        some types of WebAudio.

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

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

        WebKit SPI fix for [ClickyOrb] Audio continues playing after dismissing a video preview in Safari
        https://bugs.webkit.org/show_bug.cgi?id=200011
        <rdar://problem/53409457>

        Reviewed by Tim Horton.

        Don't check for the SPI @selector(_webView:contextMenuDidEndForElement:)
        on the WKUIDelegate so that clients that got caught implementing the
        SPI before moving to the real API can still clean-up state. In other words,
        don't force a client that only implements that method to move completely
        to the new API.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (needsDeprecatedPreviewAPI):

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

        REGRESSION(rUnknown): YouTube playback pauses when switching to a new tab
        https://bugs.webkit.org/show_bug.cgi?id=199971
        <rdar://problem/51951218>

        Reviewed by Alex Christensen.

        When we get a message notifying us that the view has been removed from the window, we unconditionally
        ask the fullscreen manager to exit fullscreen, which has the side effect (on iOS) of pausing the video
        unconditionally. Only ask the fullscreen manager to exit fullscreen if there is actually a video in
        fullscreen mode.

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

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

        Make sure to unref captured lambda variables given to _strictTrustEvaluate in the main thread
        https://bugs.webkit.org/show_bug.cgi?id=199948

        Reviewed by Alex Christensen.

        Use a weak pointer instead of a Ref for the NetworkSession.
        Add a null check in processServerTrustEvaluation for extra safety if we decide to remove the data task NetworkSession ref.
        Make sure to move the NetworkDataTask ref in the completion handler so that the unrefing is done in the main thread.

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

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

        Don't always look for a JSC configuration file after r247685
        https://bugs.webkit.org/show_bug.cgi?id=199917

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        ProcessPoolConfiguration's javaScriptConfigurationDirectory wasn't used before r247685,
        which made it always look for a file with 'JavaScriptCoreDebug' in its name.  I had assumed
        m_javaScriptConfigurationDirectory would default to a null string, but it was defaulting to
        defaultJavaScriptConfigurationDirectory.  Make it a null string instead.

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

        Make some constructors explicit
        https://bugs.webkit.org/show_bug.cgi?id=199981

        Reviewed by Daniel Bates.

        Make explicit public constructors of objects that take POD or String& arguments,
        to reduce the changes of the compiler doing implicit conversions.

        * Platform/Module.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openInNewTab):

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

        [iOS] REGRESSION (r241734): Autocorrection highlight should hide when field becomes defocused
        https://bugs.webkit.org/show_bug.cgi?id=199807
        <rdar://problem/52760259>

        Fix a bad merge of r247653. svn-apply was way too forgiving. The original patch touched
        the non-existent function, -_didCommitLoadForMainFrame in WKContentViewInteraction.mm. Because
        that didn't exist, svn-apply patched up -clearSelection.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLoadForMainFrame]): Deleted; moved to WKContentViewInteraction.mm
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView clearSelection]): Remove code that should be in -_didCommitLoadForMainFrame.
        (-[WKContentView _didCommitLoadForMainFrame]): Moved from WKContentView.mm

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

        Add SPI to _WKWebsiteDataStoreConfiguration for configuring application cache storage location
        https://bugs.webkit.org/show_bug.cgi?id=199954

        Reviewed by Geoff Garen.

        This is a step towards removing WebsiteDataStore::legacyDefaultDataStoreConfiguration
        Covered by a new API test.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration applicationCacheDirectory]):
        (-[_WKWebsiteDataStoreConfiguration setApplicationCacheDirectory:]):
        (-[_WKWebsiteDataStoreConfiguration applicationCacheFlatFileSubdirectoryName]):
        (-[_WKWebsiteDataStoreConfiguration setApplicationCacheFlatFileSubdirectoryName:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendWebProcessDataStoreParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::applicationCacheFlatFileSubdirectoryName const):

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

        Add SPI _WKProcessPoolConfiguration.javaScriptConfigurationDirectory
        https://bugs.webkit.org/show_bug.cgi?id=199917

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration javaScriptConfigurationDirectory]):
        (-[_WKProcessPoolConfiguration setJavaScriptConfigurationDirectory:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendWebProcessDataStoreParameters):

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

        [SOUP] WebSockets: use new api to send text messages
        https://bugs.webkit.org/show_bug.cgi?id=199936

        Reviewed by Michael Catanzaro.

        New API allows to include null character in text messages.

        * NetworkProcess/soup/WebSocketTaskSoup.cpp:
        (WebKit::WebSocketTask::didReceiveMessageCallback): Pass data size to String::fromUTF8().
        (WebKit::WebSocketTask::sendString): Use soup_websocket_connection_send_message() instead of
        soup_websocket_connection_send_text() when available. Also use
        StrictConversionReplacingUnpairedSurrogatesWithFFFD options when converting to UTF-8.

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

        [iOS] [WebKit2] Add limited support for -isPosition:atBoundary:inDirection: in WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=199993
        <rdar://problem/49523528>

        Reviewed by Beth Dakin.

        Add support for -isPosition:atBoundary:inDirection:, only in the cases where the given position is the start or
        and position and the given granularity is UITextGranularityParagraph.

        Test: EditorStateTests.ParagraphBoundary

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

        Add a couple of bits to indicate whether the selection start or end positions are at paragraph boundaries.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView isPosition:atBoundary:inDirection:]):

        Implement this to return selectionStartIsAtParagraphBoundary or selectionEndIsAtParagraphBoundary.

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

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

        Speed up HashTable decoding by reserving capacity and avoiding rehashing
        https://bugs.webkit.org/show_bug.cgi?id=199982

        Reviewed by Saam Barati.

        Use HashMap::reserveInitialCapacity() in the HashMap IPC decoder for
        performance. I measured a ~35% improvement when decoding a very large
        HashMap of Strings (~160k entries) in the context of the
        StorageManager::GetValues IPC.

        * Platform/IPC/ArgumentCoders.h:
        * Shared/API/c/WKDictionary.cpp:
        (WKDictionaryCreate):

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

        Micro-optimize HashMap & String IPC decoding
        https://bugs.webkit.org/show_bug.cgi?id=199967

        Reviewed by Geoffrey Garen.

        The legacy HashMap decoder (returning a boolean) was failing to WTFMove()
        the key & value when calling HashMap::add(). The modern decoder (returning
        an Optional) was properly using WTFMove(). Rewrite the legacy HashMap decoder
        to call the modern one to reduce code duplication and to get this optimization.

        Also, encode HashMap::size() as a uint32_t instead of a uint64_t since
        HashMap::size() returns an 'unsigned int' type. Finally, update the modern
        decoder to WTFMove(hashMap) when returning. Because the function returns an
        Optional<HashMap> and not a HashMap, I do not believe we get return value
        optimization (RVO).

        Do similar changes to String IPC coders.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::decodeStringText):
        (IPC::ArgumentCoder<String>::decode):
        * Platform/IPC/ArgumentCoders.h:

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

        REGRESSION(r246033/r246496): [GTK] Kinetic scrolling doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=199322

        Reviewed by Michael Catanzaro.

        Check ENABLE(KINETIC_SCROLLING) instead of ENABLE(ASYNC_SCROLLING) when setting wheel event phase and momentum phase.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):

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

        [Text autosizing] Do not nuke the style on dynamicViewportSizeUpdate
        https://bugs.webkit.org/show_bug.cgi?id=199718
        <rdar://problem/53344961>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_textAutoSizingAdjustmentTimer):
        (WebKit::WebPage::close):
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::textAutoSizingAdjustmentTimerFired):
        (WebKit::m_shrinkToFitContentTimer): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::resetIdempotentTextAutosizingIfNeeded):
        (WebKit::WebPage::resetTextAutosizing):
        (WebKit::WebPage::viewportConfigurationChanged):

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

        Remote WebInspector should enable mock capture devices in UIProcess if doing it in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=199924
        <rdar://problem/50552067>

        Reviewed by Devin Rousso.

        Add IPC plumbery to pass inspector override value for mock capture devices.
        Add an override in UserMediaPermissionRequestManagerProxy so that the value stays in sync with web inspector.
        The override will be removed when web inspector goes away.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::syncWithWebCorePrefs const):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        (WebKit::UserMediaPermissionRequestManagerProxy::setMockCaptureDevicesEnabledOverride):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::setMockCaptureDevicesEnabled):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMockCaptureDevicesEnabledOverride):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::setMockCaptureDevicesEnabled):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::setMockCaptureDevicesEnabled):
        * WebProcess/WebPage/WebInspector.h:

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

        Web Content process gets stuck suspended after navigating away from a system preview
        https://bugs.webkit.org/show_bug.cgi?id=199965
        <rdar://problem/53109004>

        Reviewed by Dean Jackson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isBackground]):
        * UIProcess/ios/WKSystemPreviewView.h:
        * UIProcess/ios/WKSystemPreviewView.mm:
        (-[WKSystemPreviewView web_initWithFrame:webView:mimeType:]):
        (-[WKSystemPreviewView web_isBackground]):
        Apply the fix from r193481 to WKSystemPreviewView as well, having it
        become a WKApplicationStateTrackingView and plumbing that through
        to our is-background machinery.

        We really, really should instead have WKWebView itself be the application
        state tracking view, but that is a bigger change (and has some implications
        for full-screen video and whatnot).

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

        Provide correct names for UIContextMenuInteraction API replacements
        https://bugs.webkit.org/show_bug.cgi?id=199966

        Reviewed by Tim Horton.

        We had some old incorrect names for replacements to SPI. While
        here, I reordered and expanded the documentation for the new API.

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

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

        [iOS] REGRESSION (r241734): Autocorrection highlight should hide when field becomes defocused
        https://bugs.webkit.org/show_bug.cgi?id=199807
        <rdar://problem/52760259>

        Reviewed by Wenson Hsieh.

        Sometimes the correction highlight may not hide when defocusing an editable field.
        This occurs only when a person pressed a key in a non-editable element beforehand.
        We need to reset some state to force a re-computation of whether a keyboard is still
        needed whenever an element is defocused (blurred in web paralance).

        Following r241734 both editable and non-editable key events are handled using the same
        code path. This is accomplished by having WKContentView's -_requiresKeyboardWhenFirstResponder
        return YES to tell UIKit it needs a keyboard even when there is no editable element focused.
        As a result UIKit retains all the keyboard state, including keeping the correction highlight
        visible. Prior to r241734 WKContentView's -_requiresKeyboardWhenFirstResponder would not return
        YES when a non-editable element was focused and hence UIKit would tear down the keyboard
        and its state, including the correction highlight. In r245154, we made keyboard instantiate
        for a focused non-editable element lazy as a performance optimization. Although r245154
        kept the r241734 behavior (just made it lazy) it re-wrote the code in such a way that we
        can utilize it as a hook to fix this bug. In particular, we now clear the bit about a
        seen keydown in a non-editable element whenever we are defocusing an editable element
        before we reload the input views, as part of hiding the keyboard. On the reload, UIKit
        will call -_requiresKeyboardWhenFirstResponder, WebKit will respond with NO now that
        a non-editable element is focused and hence UIKit will do what it did pre r241734: tear
        down the keyboard.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didCommitLoadForMainFrame]): Clear the bit about a seen keydown here
        so that we don't keep the keyboard around on a new page commit. This includes the case
        when the same page is reloaded. There is not much advantage to keeping the keyboard
        around across reloads and not doing so will reduce our memory footprint. 
        (-[WKContentView _elementDidBlur]): Clear the same bit as well when defocusing an
        editable element. This will cause UIKit to tear down the keyboard on reload removing
        the correction highlight.

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

        Add a menu item to toggle between showing and hiding link previews
        https://bugs.webkit.org/show_bug.cgi?id=199940
        <rdar://problem/53032288>

        Reviewed by Beth Dakin.

        Add a new _WKElementAction that toggles the display of link previews
        in context menus, and add it to the default set of actions we provide
        for links.

        When a UIAction is created from this new _WKElementAction type,
        it can be identified by WKElementActionTypeToggleShowLinkPreviewsIdentifier.
        This allows us to check a UIMenu provided by a delegate to make sure
        that they have provided the toggle menu item. If they haven't, we add it
        back.

        The preference for showing links is moved from kCFPreferencesAnyApplication
        to standard user defaults, so that it can be set no matter what the
        hosting application is.

        * UIProcess/API/Cocoa/_WKElementAction.h: New action type.
        * UIProcess/API/Cocoa/_WKElementAction.mm: 
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]):
        (+[_WKElementAction imageForElementActionType:]): Use eye.fill for now.
        I'll need to check with HI to see if there is a more appropriate glyph.
        (elementActionTypeToUIActionIdentifier):
        (uiActionIdentifierToElementActionType):

        * UIProcess/ios/WKActionSheetAssistant.mm: Add the toggle action to
        the default set.
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _registerPreview]): No need to listen for CFPreferences
        notifications any more.
        (-[WKContentView _unregisterPreview]):
        (menuWithShowLinkPreviewAction): New method that adds the UIAction
        for toggling previews to a UIMenu if necessary.
        (-[WKContentView assignLegacyDataForContextMenuInteraction]):
        (-[WKContentView _contextMenuInteraction:configurationForMenuAtLocation:completion:]):
        (-[WKContentView _showLinkPreviewsPreferenceChanged:]): Deleted.
        (titleForMenu): Deleted. URL text previews will be provided separately.

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

        [iOS] Entering 2FA code on idmsa.apple.com causes unexpected scrolling
        https://bugs.webkit.org/show_bug.cgi?id=199949
        <rdar://problem/49944428>

        Reviewed by Tim Horton and Megan Gardner.

        Since at least iOS 11, -[UIScrollView _adjustForAutomaticKeyboardInfo:animated:lastAdjustment:] adjusts the
        scroll view's content offset to account for updated keyboard bottom insets. In WebKit, we call this method
        whenever keyboard geometry changes (based on system notifications, such as UIKeyboardWillHideNotification).

        When switching between focused form fields, we hide the keyboard for the previous focused element prior to
        showing the keyboard for the newly focused element. This means that we will actually dismiss the keyboard in the
        process of changing the focused element, which posts keyboard geometry notifications, which causes us to scroll
        WKScrollView.

        On iOS 12, this would be immediately followed by re-presenting the keyboard for the new focused element, which
        causes us to adjust the scroll view back to its original position right away; this means that the scrolling that
        happens as a result of adjusting for the keyboard insets after dismissal doesn't result in any visible change.

        However, on iOS 13, after r239441 and r244546, we now defer scrolling and zooming to reveal the focused element
        until later; this means the scrolling that happens as a result of initially dismissing the keyboard now causes a
        consistent jump in the scroll view's scroll position (whereas on iOS 12, this only happens rarely, and the jump
        is also less noticeable).

        To mitigate this, we detect the case where we're moving focus from one element to another; if we're about to
        show a keyboard for the newly focused element, then we should avoid scrolling as a result of the impending
        "keyboard will hide" notification.

        Test: fast/forms/ios/no-scrolling-when-moving-focus-between-adjacent-fields.html

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):
        (-[WKWebView _keyboardWillHide:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (shouldShowKeyboardForElement):

        Add a helper to determine whether we're focusing an element which presents a "keyboard" (i.e. a UIKit input
        view, as opposed to modal select pickers, modal date pickers, or fields with inputmode="none", for which we
        don't show an input view).

        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
        (-[WKContentView shouldIgnoreKeyboardWillHideNotification]):

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

        Fix warning when importing WebKit in Swift
        https://bugs.webkit.org/show_bug.cgi?id=199914
        <rdar://problem/52854930>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/NSAttributedString.h:
        Declare NSAttributedString and update a swift name.
        This fix was proposed by Argyrios Kyrtzidis.

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

        Add and test _WKWebsiteDataStoreConfiguration.deviceIdHashSaltsStorageDirectory SPI
        https://bugs.webkit.org/show_bug.cgi?id=199923

        Reviewed by Youenn Fablet.

        This is a step towards us getting rid of WebsiteDataStore::legacyDefaultDataStoreConfiguration

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration deviceIdHashSaltsStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration setDeviceIdHashSaltsStorageDirectory:]):

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

        Move NetworkCache ownership from NetworkProcess to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=199817

        Reviewed by Geoff Garen.

        I also added SPI to set the path of the NetworkCache with an API test.
        If this new SPI is not used, it falls back to getting the cache location from the NetworkProcess to maintain compatibility.
        We still get options, cache size, and cache model from the NetworkProcess.  Those should be migrated with new SPI later.
        Clearing the cache and other operations now iterate the NetworkSessions instead of assuming there is only one cache.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::diskCacheDirectory const):
        (WebKit::NetworkProcess::cacheOptions const):
        (WebKit::NetworkProcess::cache): Deleted.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::cache):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::open):
        (WebKit::NetworkCache::Cache::Cache):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        (WebKit::NetworkProcess::clearDiskCache):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        (WebKit::NetworkSessionCurl::NetworkSessionCurl):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration networkCacheDirectory]):
        (-[_WKWebsiteDataStoreConfiguration setNetworkCacheDirectory:]):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::resolvedNetworkCacheDirectory const):

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

        Regression(r247486) Multiple Layout Tests in http/tests/cache/* are crashing on iOS Debug WK2
        https://bugs.webkit.org/show_bug.cgi?id=199892
        <rdar://problem/53230217>

        Reviewed by Geoffrey Garen.

        The StorageManager was unregistering itself as a WorkQueueMessageReceiver on a given IPC
        connection too early. As a result, we would sometimes receive a 'StorageManager:DestroyStorageMap'
        IPC in NetworkConnectionToWebProcess::didReceiveMessage() with nobody to process it, which would
        trigger an assertion. To address the issue, we stop unregistering the StorageManager as a
        WorkQueueMessageReceiver inside removeAllowedSessionStorageNamespaceConnection(). Instead, we
        let the logic inside processDidCloseConnection() take care of it once the connection closes.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::removeAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::processDidCloseConnection):
        * NetworkProcess/WebStorage/StorageManager.h:

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

        [GTK] Crash in webkitWebViewBaseRenderHostFileDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=199402

        Reviewed by Michael Catanzaro.

        There are two problems here:

         - We need to ensure that the checks we do in HardwareAccelerationManager to disable AC mode are the same
           as the ones done in AcceleratedBackingStore create() methods. This is not the case for WPE renderer.
         - Some of the places where accelerateBackingStore is used, can be called even if AC mode is disabled, so we
           need to null-check there before using the backing store.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDraw): Add an assert to ensure accelerateBackingStore is not nullptr here.
        (webkitWebViewBaseEnterAcceleratedCompositingMode): Ditto.
        (webkitWebViewBaseUpdateAcceleratedCompositingMode): Ditto.
        (webkitWebViewBaseExitAcceleratedCompositingMode): Ditto.
        (webkitWebViewBaseMakeGLContextCurrent): Ditto.
        (webkitWebViewBaseDidRelaunchWebProcess): Null-check accelerateBackingStore before using it.
        (webkitWebViewBasePageClosed): Ditto.
        (webkitWebViewBaseRenderHostFileDescriptor): Ditto.
        * UIProcess/gtk/AcceleratedBackingStore.cpp:
        (WebKit::AcceleratedBackingStore::checkRequirements): Call AcceleratedBackingStoreWayland::checkRequirements()
        or AcceleratedBackingStoreX11::checkRequirements() depending on the current display.
        (WebKit::AcceleratedBackingStore::create): Return early if AC mode is disabled in HardwareAccelerationManager.
        * UIProcess/gtk/AcceleratedBackingStore.h:
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::checkRequirements): Check requirements for hardware acceleration in Wayland.
        (WebKit::AcceleratedBackingStoreWayland::create): Assert that requirements are present.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.h:
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::checkRequirements): Check requirements for hardware acceleration in X11.
        (WebKit::AcceleratedBackingStoreX11::create): Assert that requirements are present.
        * UIProcess/gtk/AcceleratedBackingStoreX11.h:
        * UIProcess/gtk/HardwareAccelerationManager.cpp:
        (WebKit::HardwareAccelerationManager::HardwareAccelerationManager): Use
        AcceleratedBackingStore::checkRequirements() to decide whether to disable AC mode.

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

        Early Out of positionInfomation check if possible
        https://bugs.webkit.org/show_bug.cgi?id=199885
        <rdar://problem/53229413>

        This is an early-out check that happens after most of the work is done.
        Move it to happen before we make all these calls, if in the end, we will not use the information.

        Reviewed by Tim Horton.

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

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

        Unreviewed, add debug logging to help diagnose flaky crashes on the bots.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):

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

        [macCatalyst] Unable to interact with YouTube video while it's playing
        https://bugs.webkit.org/show_bug.cgi?id=199893
        <rdar://problem/51871151>

        Reviewed by Simon Fraser.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (-[WKRemoteView initWithFrame:contextID:]):
        (-[WKUIRemoteView initWithFrame:pid:contextID:]):
        Disable remote context hit-testing for WKUIRemoteView just like we
        already do for WKRemoteView.

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

        Prewarm local storage in the NetworkProcess to reduce WebContent process hangs
        https://bugs.webkit.org/show_bug.cgi?id=199879
        <rdar://problem/53217757>

        Reviewed by Ryosuke Niwa.

        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::prewarm):
        (WebKit::StorageManager::getValues):
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/StorageManager.messages.in:
        * WebProcess/WebStorage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::prewarm):
        * WebProcess/WebStorage/StorageAreaImpl.h:
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        (WebKit::StorageAreaMap::prewarm):
        * WebProcess/WebStorage/StorageAreaMap.h:

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

        [iOS WK2] Allow scrolling interaction on frames and oveflow scroll even when the main frame is rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=199963
        rdar://problem/52897797

        Reviewed by Tim Horton.

        Adopt UIKit SPI to allow for scrolling of inner UIScrollViews when the outer one is still rubber-banding.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):

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

        Set WordIsNearTap flag, was not being set at all before
        https://bugs.webkit.org/show_bug.cgi?id=199880

        Reviewed by Wenson Hsieh.

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

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

        Provide a NSURL cateogry to tell AppSSO Kerberos URLs
        https://bugs.webkit.org/show_bug.cgi?id=199887
        <rdar://problem/52323161>

        Reviewed by Brent Fulgham.

        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationNSURLExtras.h:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationNSURLExtras.mm:
        (+[NSURL _web_willPerformSOKerberosAuthorizationWithURL:]):

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

        Disable Pointer Events prior to watchOS 6
        https://bugs.webkit.org/show_bug.cgi?id=199890
        <rdar://problem/53206113>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2019-07-17  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-17  Darin Adler  <darin@apple.com>

        No need for isURLAllowed function in Frame
        https://bugs.webkit.org/show_bug.cgi?id=120266

        Reviewed by Alex Christensen.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
        Use is<HTMLFrameElementBase> instead of isFrameElementBase.

2019-07-17  Alex Christensen  <achristensen@webkit.org>

        Add a runtime-disabled dialog element skeleton
        https://bugs.webkit.org/show_bug.cgi?id=199839

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetDialogElementEnabled):
        (WKPreferencesGetDialogElementEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        Add SPI to enable the dialog element for tests.

2019-07-17  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Option + Up or Down Arrow key doesn’t move cursor past paragraph boundaries in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=199851

        Reviewed by Wenson Hsieh.

        The bug was caused by the difference in the way AppKit and UIKit responds to Option + Up / Down.

        On macOS, AppKit sends moveForward before sending moveToStartOfParagraph and moveBackward
        before sending moveToEndOfParagraph. As a result, when Option + Down is pressed when we are at
        the end of a line, we would first move to the beginning of the next line (i.e. after the line break)
        before moving or extending selection with the paragraph boundary granurality.

        On iOS, UIKit only calls _moveToStartOfParagraph without moving forward by a character. As a result,
        moving forward by the paragraph boundary granurality immediately stops when we're starting at the
        end of a line when Option + Down is pressed. Option + Up case is similar.

        Fix the bug on iOS by emulating what happens on macOS. Namely, move the selection forward or backward
        by the character granurality before moving by the paragraph boundary granurality.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _moveToStartOfParagraph:withHistory:]):
        (-[WKContentView _moveToEndOfParagraph:withHistory:]):

2019-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK and WPE debug build after r247508

        * UIProcess/API/glib/WebKitWebResource.cpp:
        (webkitWebResourceCreate): Remove invalid assert.

2019-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] UI process crash due to NULL dereference in webkitWebViewResourceLoadStarted()
        https://bugs.webkit.org/show_bug.cgi?id=199621

        Reviewed by Michael Catanzaro.

        Null-check frame received in injected bundle message to ensure the frame hasn't been destroyed.

        * UIProcess/API/glib/WebKitInjectedBundleClient.cpp:
        * UIProcess/API/glib/WebKitWebResource.cpp:
        (webkitWebResourceCreate): Receive a reference to the frame instead of a pointer.
        * UIProcess/API/glib/WebKitWebResourcePrivate.h:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewResourceLoadStarted): Ditto.
        * UIProcess/API/glib/WebKitWebViewPrivate.h:

2019-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Do not assert when receiving invalid data in injected bundle messages
        https://bugs.webkit.org/show_bug.cgi?id=199830

        Reviewed by Michael Catanzaro.

        Just silently ignore them to avoid UI process crashes.

        * UIProcess/API/glib/WebKitInjectedBundleClient.cpp:

2019-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] No web view updates after swapping web process if AC mode is forced
        https://bugs.webkit.org/show_bug.cgi?id=199826

        Reviewed by Michael Catanzaro.

        This is because when AC mode is forced the provisional page creates a drawing area that is always in AC
        mode. When swapping processes, the current drawing area is destroyed (which exists AC mode) and the provisional
        one is set. From that point the web process is in AC mode but the UI process isn't. We need to update the
        compositing mode when swapping processes.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDidExitWebProcess):
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h:

2019-07-16  Antoine Quint  <graouts@apple.com>

        REGRESSION: fast/events/watchos/double-tap-to-zoom* tests crashing in com.apple.WebKit: -[WKContentView(WKInteraction) _singleTapDidReset:]
        https://bugs.webkit.org/show_bug.cgi?id=199840
        <rdar://problem/52856531>

        Reviewed by Wenson Hsieh.

        We need to ensure the NSNumber used for -[WKSyntheticTapGestureRecognizer lastActiveTouchIdentifier] is retained. This innocent change required
        the use of RetainPtr<>, which required the move to an Objective-C++ file, which lead to a change in the order files are unified, which lead to
        build errors, which leads to a much bigger patch than just the source change necessary to fix the crash.

        * SourcesCocoa.txt:
        * UIProcess/ios/WKSyntheticTapGestureRecognizer.mm: Renamed from Source/WebKit/UIProcess/ios/WKSyntheticTapGestureRecognizer.m.
        * UIProcess/ios/forms/WKFormPeripheralBase.h:
        * UIProcess/ios/forms/WKFormPeripheralBase.mm:
        * WebKit.xcodeproj/project.pbxproj:

2019-07-16  Brent Fulgham  <bfulgham@apple.com>

        Update WebContent Process sandbox based on user seed data
        https://bugs.webkit.org/show_bug.cgi?id=199799
        <rdar://problem/52903477>

        Reviewed by Alexey Proskuryakov.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2019-07-16  Andy Estes  <aestes@apple.com>

        [macCatalyst] Do not include WebKitLegacy.h in WebKit.h
        https://bugs.webkit.org/show_bug.cgi?id=199833
        <rdar://problem/53036744>

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/WebKit.h:

2019-07-16  Frederic Wang  <fwang@igalia.com>

        Fix build warning because of missing super_class initializer
        https://bugs.webkit.org/show_bug.cgi?id=199825

        Reviewed by Jonathan Bedard.

        * UIProcess/ios/WKContentView.mm:
        (keyCommandsPlaceholderHackForEvernote):

2019-07-16  Tim Horton  <timothy_horton@apple.com>

        NSTextFinder holes don't scroll with the page
        https://bugs.webkit.org/show_bug.cgi?id=199815
        <rdar://problem/52280514>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _usePlatformFindUI]):
        (-[WKWebView _setUsePlatformFindUI:]):
        (-[WKWebView _ensureTextFinderClient]):
        Add a bit so that clients can choose whether they want our find UI,
        which respects scrolling, or the system find UI, which works when
        doing multi-document searches. Right now you can't have both.

        (-[WKWebView scrollFindMatchToVisible:]):
        Implement and plumb scrollFindMatchToVisible.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::indicateFindMatch):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::indicateFindMatch):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Plumb indicateFindMatch to FindController.

        * UIProcess/mac/WKTextFinderClient.h:
        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient initWithPage:view:usePlatformFindUI:]):
        Store whether or not we are using the platform find UI.

        (-[WKTextFinderClient findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:]):
        If using WebKit find UI, turn on our UI in the options passed to findString[Matches].

        (-[WKTextFinderClient scrollFindMatchToVisible:]):
        If using WebKit find UI, when the platform tells us to reveal a find match, indicate it.

        (-[WKTextFinderClient didFindStringMatchesWithRects:didWrapAround:]):
        If using WebKit find UI, lie to the platform and return no rects so that it doesn't paint a yellow rectangle.

        (-[WKTextFinderClient getImageForMatchResult:completionHandler:]):
        If using WebKit find UI, lie to the platform and return no image so that it doesn't paint a yellow rectangle.

        (-[WKTextFinderClient initWithPage:view:]): Deleted.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        Make it possible to use our find UI with 'findStringMatches'; since the platform
        find infrastrucutre depends on knowing about all matches up front, we need
        to use 'findStringMatches' instead of 'findString', but we had never combined
        that with our UI. Don't throw away the other matches when we indicate one, and
        don't send DidFindString in the case we are coming from 'findStringMatches'.
        This all needs a bit of cleanup in the future.

        (WebKit::FindController::findString):
        Tell updateFindUIAfterPageScroll that we are 'findString' so that it uses its normal behavior.

        (WebKit::FindController::findStringMatches):
        Tell updateFindUIAfterPageScroll that we are 'findStringMatches' so that it uses the adjusted behavior.

        (WebKit::FindController::indicateFindMatch):
        Add 'indicateFindMatch', which both selects the match and moves the indicator there.

        * WebProcess/WebPage/FindController.h:

2019-07-16  Chris Dumez  <cdumez@apple.com>

        Speed up StorageManager::getValues()
        https://bugs.webkit.org/show_bug.cgi?id=199812

        Reviewed by Alex Christensen.

        Made the following performance improvements:
        - Made StorageManager a WorkQueueMessageReceiver again (like it was before it
          got moved from the UIProcess to the Network process). This avoids a lot of
          thread hopping (IPC thread -> Main thread -> StorageManagerThread -> Main Thread)
          and a lot of isolatedCopying of the strings.
        - Move values around when possible to avoid copying.
        - Add fast path to StorageMap::importItems() for when the StorageMap is
          empty when importing (15ms -> 2.5ms).

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::importItems):
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::addAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::removeAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::processDidCloseConnection):
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createTransientLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        (WebKit::StorageManager::getValues):
        (WebKit::StorageManager::setItem):
        (WebKit::StorageManager::setItems):
        (WebKit::StorageManager::removeItem):
        (WebKit::StorageManager::clear):
        * NetworkProcess/WebStorage/StorageManager.h:

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::dispatchMessage):
        (IPC::Connection::dispatchMessageToWorkQueueReceiver):
        * Platform/IPC/Connection.h:
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        Messages to WorkQueueMessageReceivers are normally dispatched from the IPC WorkQueue. However, there is a race if
        a client (here StorageManager) adds itself as a WorkQueueMessageReceiver as a result of receiving an IPC message
        on the main thread (here NetworkConnectionToWebProcess::WebPageWasAdded).
        The message might have already been dispatched from the IPC WorkQueue to the main thread by the time the
        client registers itself as a WorkQueueMessageReceiver. To address this, we check again for messages receivers
        once the message arrives on the main thread.

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 ==
